|
4 | 4 | lib, |
5 | 5 | ... |
6 | 6 | }: let |
| 7 | + inherit (builtins) attrNames; |
7 | 8 | inherit (lib.options) mkEnableOption mkOption; |
8 | 9 | inherit (lib.modules) mkIf mkMerge; |
9 | | - inherit (lib.types) package; |
| 10 | + inherit (lib.types) enum either listOf package str; |
| 11 | + inherit (lib.lists) isList; |
| 12 | + inherit (lib.meta) getExe; |
| 13 | + inherit (lib.generators) mkLuaInline; |
| 14 | + inherit (lib.nvim.lua) expToLua toLuaObject; |
| 15 | + inherit (lib.nvim.languages) lspOptions; |
10 | 16 | inherit (lib.nvim.types) mkGrammarOption; |
11 | 17 |
|
12 | 18 | cfg = config.vim.languages.assembly; |
| 19 | + |
| 20 | + defaultServer = "asm-lsp"; |
| 21 | + servers = { |
| 22 | + asm-lsp = { |
| 23 | + package = pkgs.asm-lsp; |
| 24 | + options = { |
| 25 | + capabilities = mkLuaInline "capabilities"; |
| 26 | + on_attach = mkLuaInline "attach_keymaps"; |
| 27 | + filetypes = ["asm" "vasm"]; |
| 28 | + cmd = |
| 29 | + if isList cfg.lsp.package |
| 30 | + then expToLua cfg.lsp.package |
| 31 | + else ["${getExe cfg.lsp.package}"]; |
| 32 | + }; |
| 33 | + }; |
| 34 | + }; |
13 | 35 | in { |
14 | 36 | options.vim.languages.assembly = { |
15 | 37 | enable = mkEnableOption "Assembly support"; |
|
22 | 44 | lsp = { |
23 | 45 | enable = mkEnableOption "Assembly LSP support (asm-lsp)" // {default = config.vim.languages.enableLSP;}; |
24 | 46 |
|
| 47 | + server = mkOption { |
| 48 | + description = "Assembly LSP server to use"; |
| 49 | + type = enum (attrNames servers); |
| 50 | + default = defaultServer; |
| 51 | + }; |
| 52 | + |
25 | 53 | package = mkOption { |
26 | | - type = package; |
27 | | - default = pkgs.asm-lsp; |
28 | | - description = "asm-lsp package"; |
| 54 | + description = "asm-lsp LSP server package, or the command to run as a list of strings"; |
| 55 | + example = ''[lib.getExe pkgs.asm-lsp "--quiet"]''; |
| 56 | + type = either package (listOf str); |
| 57 | + default = servers.${cfg.lsp.server}.package; |
| 58 | + }; |
| 59 | + |
| 60 | + options = mkOption { |
| 61 | + type = lspOptions; |
| 62 | + default = servers.${cfg.lsp.server}.options; |
| 63 | + description = '' |
| 64 | + LSP options for Assembly language support. |
| 65 | +
|
| 66 | + This option is freeform, you may add options that are not set by default |
| 67 | + and they will be merged into the final table passed to lspconfig. |
| 68 | + ''; |
29 | 69 | }; |
30 | 70 | }; |
31 | 71 | }; |
32 | 72 | config = mkIf cfg.enable (mkMerge [ |
33 | 73 | (mkIf cfg.treesitter.enable { |
34 | | - vim.treesitter.enable = true; |
35 | | - vim.treesitter.grammars = [cfg.treesitter.package]; |
| 74 | + vim.treesitter = { |
| 75 | + enable = true; |
| 76 | + grammars = [cfg.treesitter.package]; |
| 77 | + }; |
36 | 78 | }) |
37 | 79 |
|
38 | 80 | (mkIf cfg.lsp.enable { |
39 | | - vim.lsp.lspconfig.enable = true; |
40 | | - vim.lsp.lspconfig.sources.asm-lsp = '' |
41 | | - lspconfig.asm_lsp.setup { |
42 | | - capabilities = capabilities, |
43 | | - on_attach = default_on_attach, |
44 | | - cmd = {"${cfg.lsp.package}/bin/asm-lsp"}, |
45 | | - } |
46 | | - ''; |
| 81 | + vim.lsp.lspconfig = { |
| 82 | + enable = true; |
| 83 | + sources.asm-lsp = '' |
| 84 | + lspconfig.("asm_lsp").setup (${toLuaObject cfg.lsp.options}) |
| 85 | + ''; |
| 86 | + }; |
47 | 87 | }) |
48 | 88 | ]); |
49 | 89 | } |
0 commit comments