diff options
Diffstat (limited to 'lua/lsp')
| -rw-r--r-- | lua/lsp/angular-ls.lua | 2 | ||||
| -rw-r--r-- | lua/lsp/emmet-ls.lua | 2 | ||||
| -rw-r--r-- | lua/lsp/init.lua | 72 | ||||
| -rw-r--r-- | lua/lsp/svelte-ls.lua | 2 | ||||
| -rw-r--r-- | lua/lsp/tailwindcss-ls.lua | 2 | ||||
| -rw-r--r-- | lua/lsp/ts-fmt-lint.lua | 38 | ||||
| -rw-r--r-- | lua/lsp/tsserver-ls.lua | 26 | 
7 files changed, 124 insertions, 20 deletions
diff --git a/lua/lsp/angular-ls.lua b/lua/lsp/angular-ls.lua index e1363731..818faf38 100644 --- a/lua/lsp/angular-ls.lua +++ b/lua/lsp/angular-ls.lua @@ -1,4 +1,4 @@ --- TODO find correct root filetype +-- TODO: find correct root filetype  -- :LspInstall angular  require("lspconfig").angularls.setup {    cmd = { DATA_PATH .. "/lspinstall/angular/node_modules/@angular/language-server/bin/ngserver", "--stdio" }, diff --git a/lua/lsp/emmet-ls.lua b/lua/lsp/emmet-ls.lua index a671ff88..e38747ac 100644 --- a/lua/lsp/emmet-ls.lua +++ b/lua/lsp/emmet-ls.lua @@ -10,7 +10,7 @@ capabilities.textDocument.completion.completionItem.snippetSupport = true  configs.emmet_ls = {    default_config = {      cmd = { "emmet-ls", "--stdio" }, -    filetypes = { "html", "css", "javascript", "typescript" }, +    filetypes = { "html", "css", "javascript", "typescript", "vue" },      root_dir = function()        return vim.loop.cwd()      end, diff --git a/lua/lsp/init.lua b/lua/lsp/init.lua index 096ceabf..01f82737 100644 --- a/lua/lsp/init.lua +++ b/lua/lsp/init.lua @@ -1,4 +1,4 @@ --- TODO figure out why this don't work +-- TODO: figure out why this don't work  vim.fn.sign_define(    "LspDiagnosticsSignError",    { texthl = "LspDiagnosticsSignError", text = "ï™™", numhl = "LspDiagnosticsSignError" } @@ -20,6 +20,7 @@ vim.cmd "nnoremap <silent> gd <cmd>lua vim.lsp.buf.definition()<CR>"  vim.cmd "nnoremap <silent> gD <cmd>lua vim.lsp.buf.declaration()<CR>"  vim.cmd "nnoremap <silent> gr <cmd>lua vim.lsp.buf.references()<CR>"  vim.cmd "nnoremap <silent> gi <cmd>lua vim.lsp.buf.implementation()<CR>" +vim.cmd "nnoremap <silent> gp <cmd>lua require'lsp'.PeekDefinition()<CR>"  vim.cmd "nnoremap <silent> K :lua vim.lsp.buf.hover()<CR>"  -- vim.cmd('nnoremap <silent> <C-k> <cmd>lua vim.lsp.buf.signature_help()<CR>')  vim.cmd "nnoremap <silent> <C-p> :lua vim.lsp.diagnostic.goto_prev({popup_opts = {border = O.lsp.popup_border}})<CR>" @@ -103,7 +104,72 @@ local function documentHighlight(client, bufnr)  end  local lsp_config = {} -if O.document_highlight then +-- Taken from https://www.reddit.com/r/neovim/comments/gyb077/nvimlsp_peek_defination_javascript_ttserver/ +function lsp_config.preview_location(location, context, before_context) +  -- location may be LocationLink or Location (more useful for the former) +  context = context or 15 +  before_context = before_context or 0 +  local uri = location.targetUri or location.uri +  if uri == nil then +    return +  end +  local bufnr = vim.uri_to_bufnr(uri) +  if not vim.api.nvim_buf_is_loaded(bufnr) then +    vim.fn.bufload(bufnr) +  end + +  local range = location.targetRange or location.range +  local contents = vim.api.nvim_buf_get_lines( +    bufnr, +    range.start.line - before_context, +    range["end"].line + 1 + context, +    false +  ) +  local filetype = vim.api.nvim_buf_get_option(bufnr, "filetype") +  return vim.lsp.util.open_floating_preview(contents, filetype, { border = O.lsp.popup_border }) +end + +function lsp_config.preview_location_callback(_, method, result) +  local context = 15 +  if result == nil or vim.tbl_isempty(result) then +    print("No location found: " .. method) +    return nil +  end +  if vim.tbl_islist(result) then +    lsp_config.floating_buf, lsp_config.floating_win = lsp_config.preview_location(result[1], context) +  else +    lsp_config.floating_buf, lsp_config.floating_win = lsp_config.preview_location(result, context) +  end +end + +function lsp_config.PeekDefinition() +  if vim.tbl_contains(vim.api.nvim_list_wins(), lsp_config.floating_win) then +    vim.api.nvim_set_current_win(lsp_config.floating_win) +  else +    local params = vim.lsp.util.make_position_params() +    return vim.lsp.buf_request(0, "textDocument/definition", params, lsp_config.preview_location_callback) +  end +end + +function lsp_config.PeekTypeDefinition() +  if vim.tbl_contains(vim.api.nvim_list_wins(), lsp_config.floating_win) then +    vim.api.nvim_set_current_win(lsp_config.floating_win) +  else +    local params = vim.lsp.util.make_position_params() +    return vim.lsp.buf_request(0, "textDocument/typeDefinition", params, lsp_config.preview_location_callback) +  end +end + +function lsp_config.PeekImplementation() +  if vim.tbl_contains(vim.api.nvim_list_wins(), lsp_config.floating_win) then +    vim.api.nvim_set_current_win(lsp_config.floating_win) +  else +    local params = vim.lsp.util.make_position_params() +    return vim.lsp.buf_request(0, "textDocument/implementation", params, lsp_config.preview_location_callback) +  end +end + +if O.lsp.document_highlight then    function lsp_config.common_on_attach(client, bufnr)      documentHighlight(client, bufnr)    end @@ -131,7 +197,7 @@ function lsp_config.tsserver_on_attach(client, bufnr)      -- formatting      enable_formatting = O.lang.tsserver.autoformat, -    formatter = O.lang.tsserver.formatter, +    formatter = O.lang.tsserver.formatter.exe,      formatter_config_fallback = nil,      -- parentheses completion diff --git a/lua/lsp/svelte-ls.lua b/lua/lsp/svelte-ls.lua index 9d7b8973..e5ddb3b3 100644 --- a/lua/lsp/svelte-ls.lua +++ b/lua/lsp/svelte-ls.lua @@ -1,4 +1,4 @@ --- TODO what is a svelte filetype +-- TODO: what is a svelte filetype  require("lspconfig").svelte.setup {    cmd = { DATA_PATH .. "/lspinstall/svelte/node_modules/.bin/svelteserver", "--stdio" },    on_attach = require("lsp").common_on_attach, diff --git a/lua/lsp/tailwindcss-ls.lua b/lua/lsp/tailwindcss-ls.lua index 4c90ebd0..38c1e7cc 100644 --- a/lua/lsp/tailwindcss-ls.lua +++ b/lua/lsp/tailwindcss-ls.lua @@ -1,4 +1,4 @@ --- TODO what is a tailwindcss filetype +-- TODO: what is a tailwindcss filetype  local lspconfig = require "lspconfig"  lspconfig.tailwindcss.setup { diff --git a/lua/lsp/ts-fmt-lint.lua b/lua/lsp/ts-fmt-lint.lua index 8a6c366c..a73b817e 100644 --- a/lua/lsp/ts-fmt-lint.lua +++ b/lua/lsp/ts-fmt-lint.lua @@ -5,30 +5,42 @@ local M = {}  M.setup = function()    local tsserver_args = {} -  local prettier = { -    formatCommand = "prettier --stdin-filepath ${INPUT}", -    formatStdin = true, -  } - -  if vim.fn.glob "node_modules/.bin/prettier" ~= "" then -    prettier = { -      formatCommand = "./node_modules/.bin/prettier --stdin-filepath ${INPUT}", +  if O.lang.tsserver.linter == "eslint" or O.lang.tsserver.linter == "eslint_d" then +    local eslint = { +      lintCommand = O.lang.tsserver.linter .. " -f unix --stdin --stdin-filename   {INPUT}", +      lintStdin = true, +      lintFormats = { "%f:%l:%c: %m" }, +      lintIgnoreExitCode = true, +      formatCommand = O.lang.tsserver.linter .. " --fix-to-stdout --stdin  --stdin-filename=${INPUT}",        formatStdin = true,      } +    table.insert(tsserver_args, eslint)    end    require("lspconfig").efm.setup {      -- init_options = {initializationOptions},      cmd = { DATA_PATH .. "/lspinstall/efm/efm-langserver" },      init_options = { documentFormatting = true, codeAction = false }, -    filetypes = { "html", "css", "yaml", "vue", "javascript", "javascriptreact", "typescript", "typescriptreact" }, +    root_dir = require("lspconfig").util.root_pattern(".git/", "package.json"), +    filetypes = { +      "vue", +      "javascript", +      "javascriptreact", +      "typescript", +      "typescriptreact", +      "javascript.jsx", +      "typescript.tsx", +    },      settings = {        rootMarkers = { ".git/", "package.json" },        languages = { -        html = { prettier }, -        css = { prettier }, -        json = { prettier }, -        yaml = { prettier }, +        vue = tsserver_args, +        javascript = tsserver_args, +        javascriptreact = tsserver_args, +        ["javascript.jsx"] = tsserver_args, +        typescript = tsserver_args, +        ["typescript.tsx"] = tsserver_args, +        typescriptreact = tsserver_args,        },      },    } diff --git a/lua/lsp/tsserver-ls.lua b/lua/lsp/tsserver-ls.lua index d7c4ec3c..8ed801e8 100644 --- a/lua/lsp/tsserver-ls.lua +++ b/lua/lsp/tsserver-ls.lua @@ -1,3 +1,29 @@ +vim.cmd "let proj = FindRootDirectory()" +local root_dir = vim.api.nvim_get_var "proj" + +-- use the global prettier if you didn't find the local one +local prettier_instance = root_dir .. "/node_modules/.bin/prettier" +if vim.fn.executable(prettier_instance) ~= 1 then +  prettier_instance = O.lang.tsserver.formatter.exe +end + +O.formatters.filetype["javascriptreact"] = { +  function() +    return { +      exe = prettier_instance, +      -- TODO: allow user to override this +      args = { "--stdin-filepath", vim.api.nvim_buf_get_name(0), "--single-quote" }, +      stdin = true, +    } +  end, +} +O.formatters.filetype["javascript"] = O.formatters.filetype["javascriptreact"] + +require("formatter.config").set_defaults { +  logging = false, +  filetype = O.formatters.filetype, +} +  if require("lv-utils").check_lsp_client_active "tsserver" then    return  end  | 
