Commit Graph
20 Commits
Author SHA1 Message Date
Austin Horstman 56839cde1c modules/lsp: add native LSP feature toggles
Expose `completion`, `semanticTokens`, `documentColor`,
`linkedEditingRange`, `onTypeFormatting`, and `inlineCompletion`.

Each feature uses `enable` to opt into Nixvim management and `activate`
as the value passed to `vim.lsp.<feature>.enable()`. `activate` defaults
to true, preserving the existing `inlayHints` and `codelens` output.
Set `enable = true` and `activate = false` to disable semantic tokens
or document color, which Neovim enables by default.

A shared table generates the global feature options and Lua.
`documentColor` also accepts `settings` for its `opts` argument.
`enabledByDefault` limits disable guidance to Neovim defaults, while
`settingsExample` carries the document color example.

Because `vim.lsp.completion.enable()` takes a client id and buffer,
completion runs from `LspAttach` after `onAttach`. Neovim snapshots
`completionProvider.triggerCharacters` when completion is enabled, so
users must extend that list first. See `:h lsp-autocompletion`.
`supports_method` receives `bufnr` so dynamic registration checks the
attached buffer. User `onAttach` code runs in a function so `return`
cannot skip Nixvim setup.

`client/unregisterCapability` is not handled, so withdrawn support
leaves completion state until the client detaches. If `onAttach` calls
`completion.enable()` first, its buffer options remain because Neovim
keeps the options from the first call.
2026-09-18 14:13:14 +00:00
Max Koon 94fa51d8b7 modules/lsp: updated inlayHints option description 2026-08-17 11:45:24 +00:00
Max Koon 73a1c2ef73 modules/lsp: added codelens option 2026-08-17 11:45:24 +00:00
Matt Sturgeon a45b5f372f modules/lsp: add onAttach option
Similar to `plugins.lsp.onAttach`, implement a "global" equivalent to
the per-server `on_attach` callback.

This is implemented using a `LspAttach` autoCmd.
2025-05-06 14:08:03 +01:00
Matt Sturgeon 5308425718 modules/lsp/servers: move to dedicated file/dir
Move the code related to the `lsp.servers` option into a dedicated module,
cleaning up `modules/lsp/default.nix`.
2025-05-05 23:43:30 +01:00
Matt Sturgeon 552dec0e55 modules/lsp/keymaps: init
Initial LSP keymaps option, inspired by `keymapsOnEvent` and
`plugins.lsp.keymaps`.

Users can define `lspBufAction` instead of `action` if they wish to use
a `vim.lsp.buf.<action>` callback.
2025-05-03 22:50:28 +01:00
Matt Sturgeon 90eb4e681c modules/lsp/servers: move the * server to its own module
Introduce a bespoke `global-server.nix` module. This is less DRY, but
much simpler.

The `lsp.servers."*"` options are different enough from the other
`lsp.servers.<name>` options that it is simpler to just declare them
separately.

Now that we have a dedicated `global-server.nix` module, we no longer
need to split the normal server module into `server.nix`+`server-base.nix`

This partially reverts f2e96b67a3
2025-05-03 20:20:19 +01:00
Matt Sturgeon a072e3c3a7 modules/lsp: enable servers."*" by default 2025-05-01 00:36:41 +01:00
Matt Sturgeon b6e2016b7f modules/lsp: check if server settings is empty
Avoid unnecessary lua lines by checking if `server.settings` is empty
before writing `vim.lsp.config()` to `init.lua`.
2025-05-01 00:36:16 +01:00
Matt Sturgeon f2e96b67a3 modules/lsp: declare a stripped down servers."*" option
`"*"` is effectively a meta server, where shared config/defaults can be
set.

It shouldn't have options like `activate` or `package` which relate to
"real" servers. Therefore, we'll use `server-base.nix` directly, instead
of the full `server.nix` module.
2025-05-01 00:12:39 +01:00
Johan Larsson eeae362038 modules/lsp: add enable = true to wildcard config section 2025-04-30 20:55:26 +01:00
Matt Sturgeon 21688b1d2a modules/lsp/server: rename config -> settings
`config` is a loaded term within modules and options.

`settings` is the name usually used for freeform config in nixvim and
most other module configurations.
2025-04-30 17:35:46 +01:00
Matt Sturgeon e34eaf8395 modules/lsp/server: declare package defaults
Convert the `attrsOf (servers.nix)` option to a freeform submodule.

Declare a `servers.nix` option for each lsp server listed in
`lsp-packages.nix` that has a known nixpkgs package.
2025-04-30 16:53:55 +01:00
Matt Sturgeon 29aa22c41a modules/lsp: use relative link to plugins.lspconfig 2025-04-28 18:54:05 +01:00
Matt Sturgeon 5c67a96a86 modules/lsp: get nvim-lspconfig link from plugins.lspconfig.package 2025-04-28 18:54:04 +01:00
Matt Sturgeon 812b2b0903 modules/lsp: update wording for plugins.lspconfig recommendation 2025-04-28 18:54:04 +01:00
Matt Sturgeon 556eb29548 plugins/lspconfig: init
A simplified replacement for `plugins.lsp`.

Eventually, once the `lsp` and `plugins.lspconfig` modules are mature,
`plugins.lsp` will be deprecated and/or aliased.
2025-04-28 18:54:04 +01:00
Matt Sturgeon 29aa60b43a modules/lsp: add per-server name option
This allows users to override the name used for a given `lsp.servers.*`
entry. The default is still the attr-name.

This may be useful to inject raw lua, or to configure the same server in
different ways via different attrs.
2025-04-28 18:23:49 +01:00
Matt Sturgeon 3722f88c5d modules/lsp: move server module to dedicated file 2025-04-28 18:04:11 +01:00
Matt Sturgeon 74368bcfc1 modules/lsp: move to dedicated directory 2025-04-28 17:59:05 +01:00