-1

I am trying to configure nvim-cmp (https://github.com/hrsh7th/nvim-cmp), by adding the following lines to ~/.config/nvim/lua/lsp-config.lua.

After this, when I start nvim, I get an error as shown in the image.

enter image description here

My lsp-config.lua looks like the following:

 1  local nvim_lsp = require("lspconfig")
     2  local format_async = function(err, _, result, _, bufnr)
     3      if err ~= nil or result == nil then return end
     4      if not vim.api.nvim_buf_get_option(bufnr, "modified") then
     5          local view = vim.fn.winsaveview()
     6          vim.lsp.util.apply_text_edits(result, bufnr)
     7          vim.fn.winrestview(view)
     8          if bufnr == vim.api.nvim_get_current_buf() then
     9              vim.api.nvim_command("noautocmd :update")
    10          end
    11      end
    12  end
    13  vim.lsp.handlers["textDocument/formatting"] = format_async
    14  _G.lsp_organize_imports = function()
    15      local params = {
    16          command = "_typescript.organizeImports",
    17          arguments = {vim.api.nvim_buf_get_name(0)},
    18          title = ""
    19      }
    20      vim.lsp.buf.execute_command(params)
    21  end
    22  local on_attach = function(client, bufnr)
    23      local buf_map = vim.api.nvim_buf_set_keymap
    24      vim.cmd("command! LspDef lua vim.lsp.buf.definition()")
    25      vim.cmd("command! LspFormatting lua vim.lsp.buf.formatting()")
    26      vim.cmd("command! LspCodeAction lua vim.lsp.buf.code_action()")
    27      vim.cmd("command! LspHover lua vim.lsp.buf.hover()")
    28      vim.cmd("command! LspRename lua vim.lsp.buf.rename()")
    29      vim.cmd("command! LspOrganize lua lsp_organize_imports()")
    30      vim.cmd("command! LspRefs lua vim.lsp.buf.references()")
    31      vim.cmd("command! LspTypeDef lua vim.lsp.buf.type_definition()")
    32      vim.cmd("command! LspImplementation lua vim.lsp.buf.implementation()")
    33      vim.cmd("command! LspDiagPrev lua vim.lsp.diagnostic.goto_prev()")
    34      vim.cmd("command! LspDiagNext lua vim.lsp.diagnostic.goto_next()")
    35      vim.cmd(
    36          "command! LspDiagLine lua vim.lsp.diagnostic.show_line_diagnostics()")
    37      vim.cmd("command! LspSignatureHelp lua vim.lsp.buf.signature_help()")
    38  buf_map(bufnr, "n", "gd", ":LspDef<CR>", {silent = true})
    39      buf_map(bufnr, "n", "gr", ":LspRename<CR>", {silent = true})
    40      buf_map(bufnr, "n", "gR", ":LspRefs<CR>", {silent = true})
    41      buf_map(bufnr, "n", "gy", ":LspTypeDef<CR>", {silent = true})
    42      buf_map(bufnr, "n", "K", ":LspHover<CR>", {silent = true})
    43      buf_map(bufnr, "n", "gs", ":LspOrganize<CR>", {silent = true})
    44      buf_map(bufnr, "n", "[a", ":LspDiagPrev<CR>", {silent = true})
    45      buf_map(bufnr, "n", "]a", ":LspDiagNext<CR>", {silent = true})
    46      buf_map(bufnr, "n", "ga", ":LspCodeAction<CR>", {silent = true})
    47      buf_map(bufnr, "n", "<Leader>a", ":LspDiagLine<CR>", {silent = true})
    48      buf_map(bufnr, "i", "<C-x><C-x>", "<cmd> LspSignatureHelp<CR>",
    49                {silent = true})
    50  if client.resolved_capabilities.document_formatting then
    51          vim.api.nvim_exec([[
    52           augroup LspAutocommands
    53               autocmd! * <buffer>
    54               autocmd BufWritePost <buffer> LspFormatting
    55           augroup END
    56           ]], true)
    57      end
    58  end
    59  nvim_lsp.tsserver.setup {
    60      on_attach = function(client)
    61          client.resolved_capabilities.document_formatting = false
    62          on_attach(client)
    63      end
    64  }
    65  local filetypes = {
    66      typescript = "eslint",
    67      typescriptreact = "eslint",
    68  }
    69  local linters = {
    70      eslint = {
    71          sourceName = "eslint",
    72          command = "eslint_d",
    73          rootPatterns = {".eslintrc.js", "package.json"},
    74          debounce = 100,
    75          args = {"--stdin", "--stdin-filename", "%filepath", "--format", "json"},
    76          parseJson = {
    77              errorsRoot = "[0].messages",
    78              line = "line",
    79              column = "column",
    80              endLine = "endLine",
    81              endColumn = "endColumn",
    82              message = "${message} [${ruleId}]",
    83              security = "severity"
    84          },
    85          securities = {[2] = "error", [1] = "warning"}
    86      }
    87  }
    88  local formatters = {
    89      prettier = {command = "prettier", args = {"--stdin-filepath", "%filepath"}}
    90  }
    91
    92  local formatFiletypes = {
    93      typescript = "prettier",
    94      typescriptreact = "prettier"
    95  }
    96  nvim_lsp.diagnosticls.setup {
    97      on_attach = on_attach,
    98      filetypes = vim.tbl_keys(filetypes),
    99      init_options = {
   100          filetypes = filetypes,
   101          linters = linters,
   102          formatters = formatters,
   103          formatFiletypes = formatFiletypes
   104      }
   105  }
   106
   107
   108  -- Setup nvim-cmp.
   109    local cmp = require'cmp'
   110
   111    cmp.setup({
   112      snippet = {
   113        expand = function(args)
   114          -- For `vsnip` user.
   115          vim.fn["vsnip#anonymous"](args.body)
   116
   117          -- For `luasnip` user.
   118          -- require('luasnip').lsp_expand(args.body)
   119
   120          -- For `ultisnips` user.
   121          -- vim.fn["UltiSnips#Anon"](args.body)
   122        end,
   123      },
   124      mapping = {
   125        ['<C-d>'] = cmp.mapping.scroll_docs(-4),
   126        ['<C-f>'] = cmp.mapping.scroll_docs(4),
   127        ['<C-Space>'] = cmp.mapping.complete(),
   128        ['<C-e>'] = cmp.mapping.close(),
   129        ['<CR>'] = cmp.mapping.confirm({ select = true }),
   130      },
   131      sources = {
   132        { name = 'nvim_lsp' },
   133
   134        -- For vsnip user.
   135        { name = 'vsnip' },
   136
   137        -- For luasnip user.
   138        -- { name = 'luasnip' },
   139
   140        -- For ultisnips user.
   141        -- { name = 'ultisnips' },
   142
   143        { name = 'buffer' },
   144      }
   145    })
   146
   147    -- Setup lspconfig.
   148    require('lspconfig')[tsserver].setup {
   149      capabilities = require('cmp_nvim_lsp').update_capabilities(vim.lsp.protocol.make_client_capabilities())
   150    }

If I remove the nvim-cmp specific code i.e. from line#108 until end of file, then there are no errors.

Am I missing some configuration here?

  • I am programmer, but on various other things. I can't understand anything of Lua that is right. My focus is to get the configuration right, as my area of focus is not to learn lua right away.

    Yes there is a typo on line 148. I replaced [%YOUR_LSP_SERVER%] with [tsserver]. But still the problem persists.

    – Mopparthy Ravindranath Oct 14 '21 at 10:56
  • As I mentioned clearly, i copied from the official website's documentation of nvim cmp. Not from a random source – Mopparthy Ravindranath Oct 14 '21 at 10:57
  • 1
    I replaced [%YOUR_LSP_SERVER%] with [tsserver] Whatever whoever may think, Lua is a programming language and so using it (even for simple configuration purposes) requires at least basic syntax knowledge. And at the very least, the difference between variable and string literal is common, I believe, to every programming language out there. – Matt Oct 14 '21 at 11:04
  • @Matt I have done some programming with Lua just enough to use/execute Redis commands as my work demands. That part of learning didn't have anything to do with how to configure lsp or auto completion. Remember that one cannot learn everything in the world.

    If we install and configure something, the general expectation is that it mostly works out of the box with little tweaking. You can't expect everyone (or yourself) to learn every programming lang in the world out there.

    – Mopparthy Ravindranath Oct 14 '21 at 11:05
  • Appreciate if you could point out the mistake (so I learn), instead of beating around the bush. – Mopparthy Ravindranath Oct 14 '21 at 11:06
  • OK, you could have told that I had to put the tsserver part in quotes. – Mopparthy Ravindranath Oct 14 '21 at 11:07
  • The knowledge between var and string litteral exists with most. The problem is that it is possible to think that a symbol (like tsserver) could be an exported one. If it is one's own code, your statement applies. Else it is invalid. – Mopparthy Ravindranath Oct 14 '21 at 11:15
  • 2
    I’ve cleaned up some commentary on this question. Calling people stupid or idiots will never be tolerated on this stack. Please remember that this is a community made entirely of volunteers, and we should all be nice to each other. That includes not insulting each other, regardless of how we feel they are behaving. If there is an issue in someone’s behavior, flag for moderator attention and walk away. If you don’t like the question, don’t engage—you’re not required to. – D. Ben Knoble Oct 14 '21 at 11:39
  • 1
    From a question-asking standpoint, Please don’t post images of text and consider trying to trim down your vimrc for the question. – D. Ben Knoble Oct 14 '21 at 11:40
  • @D.BenKnoble I said "stupid question", not "stupid person". AFAIK, these are different things. But okay. – Matt Oct 14 '21 at 11:58
  • 1
    In this case you could (1) edit the question with the suggestions in the comment (post error message as text + update the code+error message after you changed your code and "the error persists" + (possibly) make the code smaller), (2) make a pull request to the repo to clarify how to configure the option, and/or (3) post your own answer if you already figured out the solution. – user202729 Oct 15 '21 at 01:29
  • 1
    @Matt Remember that there are some really weird programming languages. Besides it seems that simple questions are okay? (although that question is for private beta) – user202729 Oct 15 '21 at 01:30
  • @user202729 Simple questions about [Neo]Vi[m], yes (although, if some question wasn't still answered here or in the docs, it is probably not that simple). But Lua questions (except nvim-api related) should be banned, imo. Especially, "debug my Lua code" ones. – Matt Oct 15 '21 at 06:01

1 Answers1

2

My mistake at line # 148

-- Setup lspconfig.
   148    require('lspconfig')[tsserver].setup {
   149      capabilities = require('cmp_nvim_lsp').update_capabilities(vim.lsp.protocol.make_client_capabilities())
   150    }

This should be:

 require('lspconfig')['tsserver'].setup {

I didn't know the string tsserver was supposed to be a string litteral.