aboutsummaryrefslogtreecommitdiffstats
path: root/lua
diff options
context:
space:
mode:
authorRyo Kitagawa <kitadrum50@gmail.com>2021-03-07 09:45:56 +0900
committerRyo Kitagawa <kitadrum50@gmail.com>2021-03-07 09:45:56 +0900
commit8caa5fe3122cabaf2f1b32833e601b64f28d6784 (patch)
tree2f6b648dc35c203f759212a3d5945f410a8f1fa4 /lua
parentFix denols definition in deno v1.7.5 (diff)
downloadnvim-lspconfig-8caa5fe3122cabaf2f1b32833e601b64f28d6784.tar
nvim-lspconfig-8caa5fe3122cabaf2f1b32833e601b64f28d6784.tar.gz
nvim-lspconfig-8caa5fe3122cabaf2f1b32833e601b64f28d6784.tar.bz2
nvim-lspconfig-8caa5fe3122cabaf2f1b32833e601b64f28d6784.tar.lz
nvim-lspconfig-8caa5fe3122cabaf2f1b32833e601b64f28d6784.tar.xz
nvim-lspconfig-8caa5fe3122cabaf2f1b32833e601b64f28d6784.tar.zst
nvim-lspconfig-8caa5fe3122cabaf2f1b32833e601b64f28d6784.zip
Fix denols references
Diffstat (limited to 'lua')
-rw-r--r--lua/lspconfig/denols.lua39
1 files changed, 29 insertions, 10 deletions
diff --git a/lua/lspconfig/denols.lua b/lua/lspconfig/denols.lua
index 2798ff1e..df8214b6 100644
--- a/lua/lspconfig/denols.lua
+++ b/lua/lspconfig/denols.lua
@@ -5,8 +5,7 @@ local lsp = vim.lsp
local server_name = "denols"
local function deno_uri_to_uri(uri)
- -- 1.7.4 LS returns deno:///https/deno.land/std@0.85.0/http/server.ts
- -- 1.7.5 LS returns deno:/https/deno.land/std%400.85.0/http/server.ts
+ -- denols returns deno:/https/deno.land/std%400.85.0/http/server.ts
-- nvim-lsp only handles deno://
if string.sub(uri, 1, 6) == "deno:/" and string.sub(uri, 7, 7) ~= "/" then
return string.gsub(uri, "^deno:/", "deno://", 1)
@@ -15,8 +14,7 @@ local function deno_uri_to_uri(uri)
end
local function uri_to_deno_uri(uri)
- -- 1.7.4 LS use deno:/// and nvim-lsp use deno:/// as buffer_uri, too.
- -- 1.7.5 LS use deno:/ and nvim-lsp use deno:// as buffer_uri.
+ -- denols use deno:/ and nvim-lsp use deno:// as buffer_uri.
-- When buffer_uri is deno://, change uri to deno:/.
if string.sub(uri, 1, 7) == "deno://" and string.sub(uri, 8, 8) ~= "/" then
return string.gsub(uri, "^deno://", "deno:/", 1)
@@ -61,17 +59,19 @@ local function virtual_text_document(uri)
virtual_text_document_handler(uri, result)
end
-local function definition_handler(err, method, result)
+local function denols_handler(err, method, result)
if not result or vim.tbl_isempty(result) then return nil end
for _, res in pairs(result) do
- if string.sub(res.targetUri, 1, 6) == "deno:/" then
- virtual_text_document(res.targetUri)
- res.targetUri = deno_uri_to_uri(res.targetUri)
+ local uri = res.uri or res.targetUri
+ if string.sub(uri, 1, 6) == "deno:/" then
+ virtual_text_document(uri)
+ res['uri'] = deno_uri_to_uri(uri)
+ res['targetUri'] = deno_uri_to_uri(uri)
end
end
- lsp.handlers["textDocument/definition"](err, method, result)
+ lsp.handlers[method](err, method, result)
end
local function denols_definition()
@@ -80,6 +80,17 @@ local function denols_definition()
lsp.buf_request(0, "textDocument/definition", params)
end
+local function denols_references(context)
+ vim.validate { context = { context, 't', true } }
+ local params = lsp.util.make_position_params()
+ params.context = context or {
+ includeDeclaration = true;
+ }
+ params[vim.type_idx] = vim.types.dictionary
+ params.textDocument.uri = uri_to_deno_uri(params.textDocument.uri)
+ lsp.buf_request(0, 'textDocument/references', params)
+end
+
configs[server_name] = {
default_config = {
cmd = {"deno", "lsp"};
@@ -91,7 +102,8 @@ configs[server_name] = {
unstable = false;
};
handlers = {
- ["textDocument/definition"] = definition_handler;
+ ["textDocument/definition"] = denols_handler;
+ ["textDocument/references"] = denols_handler;
};
};
commands = {
@@ -99,6 +111,12 @@ configs[server_name] = {
denols_definition;
description = "Jump to definition. This handle deno:/ schema in deno:// buffer."
};
+ DenolsReferences = {
+ function()
+ denols_references({ includeDeclaration = true })
+ end;
+ description = "List references. This handle deno:/ schema in deno:// buffer."
+ };
DenolsCache = {
function()
buf_cache(0)
@@ -119,6 +137,7 @@ Deno's built-in language server
}
configs.denols.definition = denols_definition
+configs.denols.references = denols_references
configs.denols.buf_cache = buf_cache
configs.denols.virtual_text_document = virtual_text_document
-- vim:et ts=2 sw=2