diff --git a/docs/manual/release-notes/rl-0.9.md b/docs/manual/release-notes/rl-0.9.md index ce0e34a4..99219111 100644 --- a/docs/manual/release-notes/rl-0.9.md +++ b/docs/manual/release-notes/rl-0.9.md @@ -381,6 +381,9 @@ - Added [Selenen](https://github.com/kampfkarren/selene) for more diagnostics in `languages.lua`. +- Added the [Stimulus LSP](https://github.com/marcoroth/stimulus-lsp) as LSP + preset. + - Added `languages.docker` for Docker and Docker-Compose support. Thanks to [poseidon-rises](https://github.com/poseidon-rises) for creating most of it in [!1104](https://github.com/NotAShelf/nvf/pull/1104). diff --git a/flake/pkgs/by-name/stimulus-language-server/0001-use-local-hotwired.patch b/flake/pkgs/by-name/stimulus-language-server/0001-use-local-hotwired.patch new file mode 100644 index 00000000..f2fcee53 --- /dev/null +++ b/flake/pkgs/by-name/stimulus-language-server/0001-use-local-hotwired.patch @@ -0,0 +1,15 @@ +--- a/package.json ++++ b/package.json +@@ -13,3 +13,3 @@ + "dependencies": { +- "@hotwired/stimulus": "https://github.com/hotwired/dev-builds/archive/refs/tags/@hotwired/stimulus/8cbca6d.tar.gz", ++ "@hotwired/stimulus": "file:./hotwired-stimulus.tar.gz", + "dedent": "^1.5.1", +--- a/yarn.lock ++++ b/yarn.lock +@@ -27,3 +27,3 @@ +-"@hotwired/stimulus@https://github.com/hotwired/dev-builds/archive/refs/tags/@hotwired/stimulus/8cbca6d.tar.gz": ++"@hotwired/stimulus@file:./hotwired-stimulus.tar.gz": + version "3.2.2" +- resolved "https://github.com/hotwired/dev-builds/archive/refs/tags/@hotwired/stimulus/8cbca6d.tar.gz#bcca3015d4e1a7e6defad94db626e11dc97e69e5" ++ resolved "file:./hotwired-stimulus.tar.gz" diff --git a/flake/pkgs/by-name/stimulus-language-server/0002-add-types-node.patch b/flake/pkgs/by-name/stimulus-language-server/0002-add-types-node.patch new file mode 100644 index 00000000..5b15b8ff --- /dev/null +++ b/flake/pkgs/by-name/stimulus-language-server/0002-add-types-node.patch @@ -0,0 +1,22 @@ +--- a/package.json ++++ b/package.json +@@ -38,2 +38,3 @@ + "devDependencies": { ++ "@types/node": "^20.0.0", + "@types/estree": "^1.0.5", +--- a/yarn.lock ++++ b/yarn.lock +@@ -307,4 +307,13 @@ + vscode-uri@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.1.0.tgz#dd09ec5a66a38b5c3fffc774015713496d14e09c" + integrity sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ== ++ ++"@types/node@^20.0.0": ++ version "20.19.0" ++ resolved "https://registry.yarnpkg.com/@types/node/-/node-20.19.0.tgz#7006b097b15dfea06695c3bbdba98b268797f65b" ++ ++undici-types@~6.19.2: ++ version "6.19.8" ++ resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" ++ integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== diff --git a/flake/pkgs/by-name/stimulus-language-server/package.nix b/flake/pkgs/by-name/stimulus-language-server/package.nix new file mode 100644 index 00000000..c85a5fcf --- /dev/null +++ b/flake/pkgs/by-name/stimulus-language-server/package.nix @@ -0,0 +1,65 @@ +{ + lib, + stdenvNoCC, + fetchFromGitHub, + fetchYarnDeps, + fetchurl, + yarnConfigHook, + yarnBuildHook, + yarnInstallHook, + nodejs, + runCommand, + patch, + nix-update-script, +}: let + version = "1.1.0"; + + upstream = fetchFromGitHub { + owner = "marcoroth"; + repo = "stimulus-lsp"; + tag = "v${version}"; + hash = "sha256-QAXQKZoFvqhnbAIi9fnJ7pV8fXah0NjwxdrqKB5e5Vw="; + }; + + # `fetchYarnDeps` doesn't support tarballs so we need to patch this manually + stimulusTarball = fetchurl { + url = "https://github.com/hotwired/dev-builds/archive/refs/tags/@hotwired/stimulus/8cbca6d.tar.gz"; + hash = "sha256-2iRIiwXmdcSw7y3CQNIPt6duwZuVvDvdU/FEdqcnzW4="; + }; + + src = runCommand "stimulus-lsp-server-patched" {nativeBuildInputs = [patch];} '' + cp -r ${upstream}/server $out + chmod -R +w $out + cp '${stimulusTarball}' $out/hotwired-stimulus.tar.gz + patch -d $out -p1 < '${./0001-use-local-hotwired.patch}' + patch -d $out -p1 < '${./0002-add-types-node.patch}' + ''; +in + stdenvNoCC.mkDerivation { + pname = "stimulus-language-server"; + inherit version; + + src = src; + + offlineCache = fetchYarnDeps { + yarnLock = "${src}/yarn.lock"; + hash = "sha256-UvojI/Ow602Q+iiwRpSgxm4DV0IJ0sURicdgghmpBsU="; + }; + + nativeBuildInputs = [ + yarnConfigHook + yarnBuildHook + yarnInstallHook + nodejs + ]; + + passthru.updateScript = nix-update-script {}; + + meta = { + description = "Intelligent Stimulus tooling"; + homepage = "https://hotwire.io/ecosystem/tooling/stimulus-lsp"; + changelog = "https://github.com/marcoroth/stimulus-lsp/releases/tag/v${version}"; + license = lib.licenses.mit; + mainProgram = "stimulus-language-server"; + }; + } diff --git a/modules/plugins/languages/html.nix b/modules/plugins/languages/html.nix index 9596d74e..b398b982 100644 --- a/modules/plugins/languages/html.nix +++ b/modules/plugins/languages/html.nix @@ -18,7 +18,7 @@ cfg = config.vim.languages.html; defaultServers = ["superhtml"]; - servers = ["superhtml" "emmet-ls" "angular-language-server"]; + servers = ["superhtml" "emmet-ls" "angular-language-server" "stimulus-language-server"]; defaultFormat = ["superhtml"]; formats = { diff --git a/modules/plugins/languages/jinja.nix b/modules/plugins/languages/jinja.nix index e8de65f9..97b2761a 100644 --- a/modules/plugins/languages/jinja.nix +++ b/modules/plugins/languages/jinja.nix @@ -13,7 +13,7 @@ cfg = config.vim.languages.jinja; defaultServers = ["jinja-lsp"]; - servers = ["jinja-lsp" "emmet-ls"]; + servers = ["jinja-lsp" "emmet-ls" "stimulus-language-server"]; in { options.vim.languages.jinja = { enable = mkEnableOption "Jinja template language support"; diff --git a/modules/plugins/languages/ruby.nix b/modules/plugins/languages/ruby.nix index dc6ff702..4c8415d8 100644 --- a/modules/plugins/languages/ruby.nix +++ b/modules/plugins/languages/ruby.nix @@ -16,7 +16,7 @@ cfg = config.vim.languages.ruby; defaultServers = ["solargraph"]; - servers = ["ruby-lsp" "solargraph"]; + servers = ["ruby-lsp" "solargraph" "stimulus-language-server"]; # testing diff --git a/modules/plugins/languages/tera.nix b/modules/plugins/languages/tera.nix index e9388f5f..230a7d9a 100644 --- a/modules/plugins/languages/tera.nix +++ b/modules/plugins/languages/tera.nix @@ -13,7 +13,7 @@ cfg = config.vim.languages.tera; defaultServers = []; - servers = ["emmet-ls"]; + servers = ["emmet-ls" "stimulus-language-server"]; in { options.vim.languages.tera = { enable = mkEnableOption "Tera templating language support"; diff --git a/modules/plugins/languages/twig.nix b/modules/plugins/languages/twig.nix index dd5744a1..59b5d56a 100644 --- a/modules/plugins/languages/twig.nix +++ b/modules/plugins/languages/twig.nix @@ -16,7 +16,7 @@ cfg = config.vim.languages.twig; defaultServers = ["twig-language-server"]; - servers = ["twig-language-server" "emmet-ls"]; + servers = ["twig-language-server" "emmet-ls" "stimulus-language-server"]; defaultFormat = ["djlint"]; formats = { diff --git a/modules/plugins/lsp/presets/default.nix b/modules/plugins/lsp/presets/default.nix index 1b4bdedf..e2f5ae5a 100644 --- a/modules/plugins/lsp/presets/default.nix +++ b/modules/plugins/lsp/presets/default.nix @@ -61,6 +61,7 @@ ./solargraph.nix ./some-sass-language-server.nix ./sqls.nix + ./stimulus-language-server.nix ./superhtml.nix ./svelte-language-server.nix ./tailwindcss-language-server.nix diff --git a/modules/plugins/lsp/presets/stimulus-language-server.nix b/modules/plugins/lsp/presets/stimulus-language-server.nix new file mode 100644 index 00000000..d647e8c1 --- /dev/null +++ b/modules/plugins/lsp/presets/stimulus-language-server.nix @@ -0,0 +1,26 @@ +{ + config, + lib, + pkgs, + inputs, + ... +}: let + inherit (lib.meta) getExe; + inherit (lib.modules) mkIf; + inherit (lib.nvim.types) mkLspPresetEnableOption; + + cfg = config.vim.lsp.presets.stimulus-language-server; +in { + options.vim.lsp.presets.stimulus-language-server = { + enable = mkLspPresetEnableOption "stimulus-language-server" "Stimulus" []; + }; + + config = mkIf cfg.enable { + vim.lsp.servers.stimulus-language-server = { + enable = true; + cmd = [(getExe inputs.self.packages.${pkgs.stdenv.hostPlatform.system}.stimulus-language-server) "--stdio"]; + root_markers = [".git"]; + workspace_required = true; + }; + }; +}