diff --git a/plugins/lsp/language-servers/default.nix b/plugins/lsp/language-servers/default.nix index b475c0c7..8f9b8d49 100644 --- a/plugins/lsp/language-servers/default.nix +++ b/plugins/lsp/language-servers/default.nix @@ -248,6 +248,13 @@ let ]; settings = cfg: { json = cfg; }; } + { + name = "jsonnet-ls"; + description = "jsonnet language server"; + package = pkgs.jsonnet-language-server; + serverName = "jsonnet_ls"; + settingsOptions = import ./jsonnet-ls-settings.nix { inherit lib helpers; }; + } { name = "julials"; description = "julials for Julia"; diff --git a/plugins/lsp/language-servers/jsonnet-ls-settings.nix b/plugins/lsp/language-servers/jsonnet-ls-settings.nix new file mode 100644 index 00000000..4a29e668 --- /dev/null +++ b/plugins/lsp/language-servers/jsonnet-ls-settings.nix @@ -0,0 +1,77 @@ +{ lib, helpers }: +# Options: +# - https://github.com/grafana/jsonnet-language-server/tree/main/editor/vim +# - https://github.com/grafana/jsonnet-language-server/blob/main/pkg/server/configuration.go +# - https://github.com/google/go-jsonnet/blob/master/internal/formatter/jsonnetfmt.go#L55 +with lib; +{ + ext_vars = helpers.defaultNullOpts.mkAttrsOf types.str { } '' + External variables. + ''; + + formatting = { + Indent = helpers.defaultNullOpts.mkUnsignedInt 2 '' + The number of spaces for each level of indenation. + ''; + + MaxBlankLines = helpers.defaultNullOpts.mkUnsignedInt 2 '' + Max allowed number of consecutive blank lines. + ''; + + StringStyle = + helpers.defaultNullOpts.mkEnum + [ + "double" + "single" + "leave" + ] + "single" + '' + Whether strings should use double quotes `"`, single quotes `'`, or be left as-is. + ''; + + CommentStyle = + helpers.defaultNullOpts.mkEnum + [ + "hash" + "slash" + "leave" + ] + "slash" + '' + Whether comments should use hash `#`, slash `//`, or be left as-is. + ''; + + PrettyFieldNames = helpers.defaultNullOpts.mkBool true '' + Causes fields to only be wrapped in `'''` when needed. + ''; + + PadArrays = helpers.defaultNullOpts.mkBool false '' + Causes arrays to be written like `[ this ]` instead of `[this]`. + ''; + + PadObjects = helpers.defaultNullOpts.mkBool true '' + Causes objects to be written like `{ this }` instead of `{this}`. + ''; + + SortImports = helpers.defaultNullOpts.mkBool true '' + Causes imports at the top of the file to be sorted in groups by filename. + ''; + + UseImplicitPlus = helpers.defaultNullOpts.mkBool true '' + Removes plus sign where it is not required. + ''; + + StripEverything = helpers.defaultNullOpts.mkBool false '' + Removes all comments and newlines. + ''; + + StripComments = helpers.defaultNullOpts.mkBool false '' + Removes all comments. + ''; + + StripAllButComments = helpers.defaultNullOpts.mkBool false '' + Removes everything, other than comments. + ''; + }; +} diff --git a/tests/test-sources/plugins/lsp/_lsp.nix b/tests/test-sources/plugins/lsp/_lsp.nix index 6ba6b690..5f1a6f6d 100644 --- a/tests/test-sources/plugins/lsp/_lsp.nix +++ b/tests/test-sources/plugins/lsp/_lsp.nix @@ -143,6 +143,7 @@ htmx.enable = true; java-language-server.enable = true; jsonls.enable = true; + jsonnet-ls.enable = true; julials.enable = true; kotlin-language-server.enable = true; leanls.enable = true; diff --git a/tests/test-sources/plugins/lsp/language-servers/jsonnet.nix b/tests/test-sources/plugins/lsp/language-servers/jsonnet.nix new file mode 100644 index 00000000..7a17b57e --- /dev/null +++ b/tests/test-sources/plugins/lsp/language-servers/jsonnet.nix @@ -0,0 +1,25 @@ +{ + example = { + plugins.lsp = { + enable = true; + + servers.jsonnet-ls = { + enable = true; + + settings = { + Indent = 4; + MaxBlankLines = 10; + StringStyle = "single"; + CommentStyle = "leave"; + PrettyFieldNames = true; + PadArrays = false; + PadObjects = true; + SortImports = false; + UseImplicitPlus = true; + StripEverything = false; + StripComments = false; + }; + }; + }; + }; +}