diff options
| author | Ryo Kitagawa <kitadrum50@gmail.com> | 2021-02-19 18:15:35 +0900 |
|---|---|---|
| committer | Ryo Kitagawa <kitadrum50@gmail.com> | 2021-02-20 14:06:13 +0900 |
| commit | e3dfc8f9716435078d9559b0a7e3347aa4a90fd7 (patch) | |
| tree | 083875cebee80b15e60cbbf81fb95075b820028d /lua | |
| parent | Merge pull request #743 from rudotriton/patch-1 (diff) | |
| download | nvim-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.lua | 55 |
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 |
