aboutsummaryrefslogtreecommitdiffstats
path: root/lua
diff options
context:
space:
mode:
authorRyo Kitagawa <kitadrum50@gmail.com>2021-02-19 18:15:35 +0900
committerRyo Kitagawa <kitadrum50@gmail.com>2021-02-20 14:06:13 +0900
commite3dfc8f9716435078d9559b0a7e3347aa4a90fd7 (patch)
tree083875cebee80b15e60cbbf81fb95075b820028d /lua
parentMerge pull request #743 from rudotriton/patch-1 (diff)
downloadnvim-lspconfig-e3dfc8f9716435078d9559b0a7e3347aa4a90fd7.tar
nvim-lspconfig-e3dfc8f9716435078d9559b0a7e3347aa4a90fd7.tar.gz
nvim-lspconfig-e3dfc8f9716435078d9559b0a7e3347aa4a90fd7.tar.bz2
nvim-lspconfig-e3dfc8f9716435078d9559b0a7e3347aa4a90fd7.tar.lz
nvim-lspconfig-e3dfc8f9716435078d9559b0a7e3347aa4a90fd7.tar.xz
nvim-lspconfig-e3dfc8f9716435078d9559b0a7e3347aa4a90fd7.tar.zst
nvim-lspconfig-e3dfc8f9716435078d9559b0a7e3347aa4a90fd7.zip
Add denols functions
Fix definition handler Apply suggestions from code review Co-authored-by: Peter Lithammer <peter.lithammer@gmail.com> Fix denition Fix luacheck
Diffstat (limited to 'lua')
-rw-r--r--lua/lspconfig/denols.lua55
1 files changed, 55 insertions, 0 deletions
diff --git a/lua/lspconfig/denols.lua b/lua/lspconfig/denols.lua
index fbc7029e..0989b6f7 100644
--- a/lua/lspconfig/denols.lua
+++ b/lua/lspconfig/denols.lua
@@ -1,8 +1,40 @@
local configs = require 'lspconfig/configs'
local util = require 'lspconfig/util'
+local lsp = vim.lsp
local server_name = "denols"
+local function buf_cache(bufnr)
+ local params = {}
+ params["referrer"] = { textDocument = { uri = vim.uri_from_bufnr(bufnr) } }
+ params["uris"] = {}
+ lsp.buf_request(bufnr, "deno/cache", params)
+end
+
+local function virtual_text_document_handler(uri, result)
+ if not result or #result ~= 1 then return nil end
+
+ local lines = vim.split(result[1].result, "\n")
+ local bufnr = vim.uri_to_bufnr(uri)
+
+ local current_buf = vim.api.nvim_buf_get_lines(bufnr, 0, -1, false)
+ if #current_buf ~= 0 then return nil end
+
+ vim.api.nvim_buf_set_lines(bufnr, 0, -1, nil, lines)
+ vim.api.nvim_buf_set_option(bufnr, "readonly", true)
+ vim.api.nvim_buf_set_option(bufnr, "modified", false)
+end
+
+local function virtual_text_document(uri)
+ local params = {
+ textDocument = {
+ uri = uri,
+ },
+ }
+ local result = lsp.buf_request_sync(0, "deno/virtualTextDocument", params)
+ virtual_text_document_handler(uri, result)
+end
+
configs[server_name] = {
default_config = {
cmd = {"deno", "lsp"};
@@ -13,6 +45,27 @@ configs[server_name] = {
lint = false;
unstable = false;
};
+ handlers = {
+ ["textDocument/definition"] = function(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, 7) == "deno://" then
+ virtual_text_document(res.targetUri)
+ end
+ end
+
+ lsp.handlers["textDocument/definition"](err, method, result)
+ end;
+ };
+ };
+ commands = {
+ DenolsCache = {
+ function()
+ buf_cache(0)
+ end;
+ description = "Cache a module and all of its dependencies."
+ };
};
docs = {
description = [[
@@ -26,4 +79,6 @@ Deno's built-in language server
};
}
+configs.denols.buf_cache = buf_cache
+configs.denols.virtual_text_document = virtual_text_document
-- vim:et ts=2 sw=2