diff --git a/plugins/lsp/language-servers/default.nix b/plugins/lsp/language-servers/default.nix index 68a6abb1..193ff718 100644 --- a/plugins/lsp/language-servers/default.nix +++ b/plugins/lsp/language-servers/default.nix @@ -465,6 +465,11 @@ with lib; let description = "Enable the sourcekit language server, for Swift and C/C++/Objective-C"; package = pkgs.sourcekit-lsp; } + { + name = "svelte"; + description = "Enable the svelte language server, for Svelte"; + package = pkgs.nodePackages.svelte-language-server; + } { name = "tailwindcss"; description = "Enable tailwindcss language server, for tailwindcss"; @@ -511,5 +516,6 @@ in { ++ [ ./ccls.nix ./pylsp.nix + ./svelte.nix ]; } diff --git a/plugins/lsp/language-servers/svelte.nix b/plugins/lsp/language-servers/svelte.nix new file mode 100644 index 00000000..1f8d2ca3 --- /dev/null +++ b/plugins/lsp/language-servers/svelte.nix @@ -0,0 +1,293 @@ +{ + lib, + config, + ... +}: +with lib; let + helpers = import ../../helpers.nix {inherit lib;}; + cfg = config.plugins.lsp.servers.svelte; +in { + # Options: https://github.com/sveltejs/language-tools/tree/master/packages/language-server#settings + options.plugins.lsp.servers.svelte.initOptions = { + svelte = { + plugin = { + typescript = { + enable = helpers.defaultNullOpts.mkBool true "Enable the TypeScript plugin."; + + diagnostics = { + enable = helpers.defaultNullOpts.mkBool true '' + Enable diagnostic messages for TypeScript. + ''; + }; + + hover = { + enable = helpers.defaultNullOpts.mkBool true '' + Enable hover info for TypeScript. + ''; + }; + + documentSymbols = { + enable = helpers.defaultNullOpts.mkBool true '' + Enable document symbols for TypeScript. + ''; + }; + + completions = { + enable = helpers.defaultNullOpts.mkBool true '' + Enable completions for TypeScript. + ''; + }; + + codeActions = { + enable = helpers.defaultNullOpts.mkBool true '' + Enable code actions for TypeScript. + ''; + }; + + selectionRange = { + enable = helpers.defaultNullOpts.mkBool true '' + Enable selection range for TypeScript. + ''; + }; + + signatureHelp = { + enable = helpers.defaultNullOpts.mkBool true '' + Enable signature help (parameter hints) for JS/TS. + ''; + }; + + semanticTokens = { + enable = helpers.defaultNullOpts.mkBool true '' + Enable semantic tokens (semantic highlight) for TypeScript. + ''; + }; + }; + + css = { + enable = helpers.defaultNullOpts.mkBool true "Enable the CSS plugin."; + + globals = helpers.mkNullOrOption types.str '' + Which css files should be checked for global variables (`--global-var: value;`). + These variables are added to the css completions. + String of comma-separated file paths or globs relative to workspace root. + ''; + + diagnostics = { + enable = helpers.defaultNullOpts.mkBool true '' + Enable diagnostic messages for CSS. + ''; + }; + + hover = { + enable = helpers.defaultNullOpts.mkBool true '' + Enable hover info for CSS. + ''; + }; + + completions = { + enable = helpers.defaultNullOpts.mkBool true '' + Enable completions for CSS. + ''; + + emmet = helpers.defaultNullOpts.mkBool true '' + Enable emmet auto completions for CSS. + ''; + }; + + documentColors = { + enable = helpers.defaultNullOpts.mkBool true '' + Enable document colors for CSS. + ''; + }; + + colorPresentations = { + enable = helpers.defaultNullOpts.mkBool true '' + Enable color picker for CSS. + ''; + }; + + documentSymbols = { + enable = helpers.defaultNullOpts.mkBool true '' + Enable document symbols for CSS. + ''; + }; + + selectionRange = { + enable = helpers.defaultNullOpts.mkBool true '' + Enable selection range for CSS. + ''; + }; + }; + + html = { + enable = helpers.defaultNullOpts.mkBool true "Enable the HTML plugin."; + + hover = { + enable = helpers.defaultNullOpts.mkBool true '' + Enable hover info for HTML. + ''; + }; + + completions = { + enable = helpers.defaultNullOpts.mkBool true '' + Enable completions for HTML. + ''; + + emmet = helpers.defaultNullOpts.mkBool true '' + Enable emmet auto completions for HTML. + ''; + }; + + tagComplete = { + enable = helpers.defaultNullOpts.mkBool true '' + Enable tag auto closing. + ''; + }; + + documentSymbols = { + enable = helpers.defaultNullOpts.mkBool true '' + Enable document symbols for HTML. + ''; + }; + + linkedEditing = { + enable = helpers.defaultNullOpts.mkBool true '' + Enable Linked Editing for HTML. + ''; + }; + }; + + svelte = { + enable = helpers.defaultNullOpts.mkBool true "Enable the Svelte plugin."; + + diagnostics = { + enable = helpers.defaultNullOpts.mkBool true '' + Enable diagnostic messages for Svelte. + ''; + }; + + compilerWarnings = helpers.mkNullOrOption (with types; attrsOf str) '' + Svelte compiler warning codes to ignore or to treat as errors. + Example: + ``` + { + css-unused-selector = "ignore"; + unused-export-let = "error"; + } + ''; + + format = { + enable = helpers.defaultNullOpts.mkBool true '' + Enable formatting for Svelte (includes css & js) using `prettier-plugin-svelte`. + + You can set some formatting options through this extension. + They will be ignored if there's any kind of configuration file, for example a + `.prettierrc` file. + ''; + + config = { + svelteSortOrder = helpers.defaultNullOpts.mkStr "options-scripts-markup-styles" '' + Format: join the keys `options`, `scripts`, `markup`, `styles` with a `-` in the + order you want. + + This option is ignored if there's any kind of configuration file, for example a + `.prettierrc` file. + ''; + svelteStrictMode = helpers.defaultNullOpts.mkBool false '' + More strict HTML syntax. + + This option is ignored if there's any kind of configuration file, for example a + `.prettierrc` file. + ''; + + svelteAllowShorthand = helpers.defaultNullOpts.mkBool true '' + Option to enable/disable component attribute shorthand if attribute name and + expression are the same. + + This option is ignored if there's any kind of configuration file, for example a + `.prettierrc` file. + ''; + + svelteBracketNewLine = helpers.defaultNullOpts.mkBool true '' + Put the `>` of a multiline element on a new line. + + This option is ignored if there's any kind of configuration file, for example a + `.prettierrc` file. + ''; + + svelteIndentScriptAndStyle = helpers.defaultNullOpts.mkBool true '' + Whether or not to indent code inside `