diff options
| author | Michael Lingelbach <m.j.lbach@gmail.com> | 2021-02-20 09:46:37 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-02-20 09:46:37 -0800 |
| commit | ea3dc38fca13053d8dd04dc733bfd71564092027 (patch) | |
| tree | 083875cebee80b15e60cbbf81fb95075b820028d /lua | |
| parent | Merge pull request #743 from rudotriton/patch-1 (diff) | |
| parent | Add denols functions (diff) | |
| download | nvim-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.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 |
