mirror of
https://github.com/NotAShelf/nvf.git
synced 2026-04-27 03:47:37 +00:00
lsp/presets/vue-language-server: init
This commit is contained in:
parent
d80d85a4e1
commit
4b2c7381a0
4 changed files with 88 additions and 1 deletions
|
|
@ -69,6 +69,7 @@
|
|||
./vscode-css-language-server.nix
|
||||
./vscode-json-language-server.nix
|
||||
./vtsls.nix
|
||||
./vue-language-server.nix
|
||||
./wgsl-analyzer.nix
|
||||
./yaml-language-server.nix
|
||||
./zls.nix
|
||||
|
|
|
|||
82
modules/plugins/lsp/presets/vue-language-server.nix
Normal file
82
modules/plugins/lsp/presets/vue-language-server.nix
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
inherit (lib.meta) getExe;
|
||||
inherit (lib.modules) mkIf;
|
||||
inherit (lib.options) mkEnableOption;
|
||||
inherit (lib.generators) mkLuaInline;
|
||||
|
||||
cfg = config.vim.lsp.presets.vue-language-server;
|
||||
in {
|
||||
options.vim.lsp.presets.vue-language-server = {
|
||||
enable = mkEnableOption ''
|
||||
the Vue.js Language Server.
|
||||
|
||||
This LSP doesn't work standalone and requires either
|
||||
{option}`vim.lsp.presets.vtsls.enable`
|
||||
or
|
||||
{option}`vim.lsp.presets.typescript-language-server.enable`
|
||||
to work as expected.
|
||||
|
||||
Default `filetypes = ${lib.generators.toPretty {} []}`. \
|
||||
Use {option}`vim.lsp.servers.vue-language-server` for customization
|
||||
'';
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
vim.lsp.servers.vue-language-server = {
|
||||
enable = true;
|
||||
cmd = [(getExe pkgs.vue-language-server) "--stdio"];
|
||||
root_markers = [".git" "tsconfig.json" "package.json"];
|
||||
on_init =
|
||||
mkLuaInline
|
||||
# This LSP doesn't work standalone and requires a TypeScripts LSP to work.
|
||||
# It can work with `typescript-language-server`, but it is not great, thus we prefer `vtsls`
|
||||
''
|
||||
function(client)
|
||||
retries = 0
|
||||
local function typescriptHandler(_, result, context)
|
||||
local function getLSP(name)
|
||||
return vim.lsp.get_clients({ bufnr = context.bufnr, name = name})[1]
|
||||
end
|
||||
|
||||
local typescipt_lsp = getLSP('vtsls') or getLSP('typescript-language-server')
|
||||
if not typescipt_lsp then
|
||||
if retries <= 10 then
|
||||
retries = retries + 1
|
||||
vim.defer_fn(function()
|
||||
typescriptHandler(_, result, context)
|
||||
end, 100)
|
||||
else
|
||||
vim.notify(
|
||||
'Could not find `vtsls`, `typescript-language-server`, or `typescript-go` lsp, required by `vue-language-server`.',
|
||||
vim.log.levels.ERROR
|
||||
)
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
local param = unpack(result)
|
||||
local id, command, payload = unpack(param)
|
||||
typescipt_lsp:exec_cmd({
|
||||
title = 'vue-language-server-forwarded',
|
||||
command = 'typescript.tsserverRequest',
|
||||
arguments = {
|
||||
command,
|
||||
payload,
|
||||
},
|
||||
}, { bufnr = context.bufnr }, function(_, r)
|
||||
local response_data = { { id, r and r.body } }
|
||||
client:notify('tsserver/response', response_data)
|
||||
end)
|
||||
end
|
||||
|
||||
client.handlers['tsserver/request'] = typescriptHandler
|
||||
end
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue