aboutsummaryrefslogtreecommitdiffstats
path: root/lua
diff options
context:
space:
mode:
authorMichael Lingelbach <m.j.lbach@gmail.com>2021-02-20 09:46:37 -0800
committerGitHub <noreply@github.com>2021-02-20 09:46:37 -0800
commitea3dc38fca13053d8dd04dc733bfd71564092027 (patch)
tree083875cebee80b15e60cbbf81fb95075b820028d /lua
parentMerge pull request #743 from rudotriton/patch-1 (diff)
parentAdd denols functions (diff)
downloadnvim-lspconfig-ea3dc38fca13053d8dd04dc733bfd71564092027.tar
nvim-lspconfig-ea3dc38fca13053d8dd04dc733bfd71564092027.tar.gz
nvim-lspconfig-ea3dc38fca13053d8dd04dc733bfd71564092027.tar.bz2
nvim-lspconfig-ea3dc38fca13053d8dd04dc733bfd71564092027.tar.lz
nvim-lspconfig-ea3dc38fca13053d8dd04dc733bfd71564092027.tar.xz
nvim-lspconfig-ea3dc38fca13053d8dd04dc733bfd71564092027.tar.zst
nvim-lspconfig-ea3dc38fca13053d8dd04dc733bfd71564092027.zip
Merge pull request #744 from kitagry/add-denols-functions
Implement some denols functions
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