Skip to content
This repository was archived by the owner on Jul 6, 2021. It is now read-only.
This repository was archived by the owner on Jul 6, 2021. It is now read-only.

[IMPORTANT] Deprecation & Transition Strategy #73

Open
@tjdevries

Description

@tjdevries

Now that neovim/neovim#12655 is merged, we are deprecating diagnostic-nvim. For full information and commit message, see: neovim/neovim@f75be5e

Any features that were in diagnostic-nvim have now been implemented in Neovim core! This was always the plan for diagnostic-nvim, as it was a playground and testing area for features and interfaces for the builtin LSP

You should remove any on_attach calls from diagnostic-nvim in your configuration. They are no longer required.

Common Actions

  • PrevDiagnosticCycle and NextDiagnosticCycle:
    • New methods:
      • vim.lsp.diagnostic.goto_prev()
      • vim.lsp.diagnostic.goto_next()
    • Example Mappings:
      • nnoremap <leader>dn <cmd>lua vim.lsp.diagnostic.goto_next()<CR>
  • PrevDiagnostic and NextDiagnostic
    • New methods:
      • vim.lsp.diagnostic.goto_prev { wrap = false }
      • vim.lsp.diagnostic.goto_next { wrap = false }
    • Example Mappings:
      • nnoremap <leader>dn <cmd>lua vim.lsp.diagnostic.goto_next { wrap = false }<CR>
  • OpenDiagnostic
    • New method:
      • vim.lsp.diagnostic.set_loclist()

Configuring LSP Diagnostic Display

  • Configuration of the LSP diagnostic display is now done with lsp-handlers.
    • You can read more about them by doing :help lsp-handler
    • For example, to disable virtual text, you would do this in your init.vim
lua << EOF
vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(
  vim.lsp.diagnostic.on_publish_diagnostics, {
    -- This will disable virtual text, like doing:
    -- let g:diagnostic_enable_virtual_text = 0
    virtual_text = false,

    -- This is similar to:
    -- let g:diagnostic_show_sign = 1
    -- To configure sign display,
    --  see: ":help vim.lsp.diagnostic.set_signs()"
    signs = true,

    -- This is similar to:
    -- "let g:diagnostic_insert_delay = 1"
    update_in_insert = false,
  }
)
EOF

Also note, the highlight group names have changed to now be consistent with each other. From the commit message in neovim core:

- Changed the highlight groups for LspDiagnostic highlight as they were
  inconsistently named.
    - For more information, see |lsp-highlight-diagnostics|

For example, the highlight that was formerly LspDiagnosticsError is now LspDiagnosticsVirtualTextError. It can also be configured by changing the default highlight group, LspDiagnosticsDefaultError. For more information, read :help lsp-highlight-diagnostics.

Advanced configuration

  • To configure more advanced usage, first, you should read the new help for ":help vim.lsp.diagnostic.on_publish_diagnostics"
  • After reading, you can override diagnostic-nvim configuration values, like sign configuration and virtual text spacing using something similar to the following:
vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(
  vim.lsp.diagnostic.on_publish_diagnostics, {
    -- Enable underline, use default values
    underline = true,
    -- Enable virtual text, override spacing to 4
    virtual_text = {
      spacing = 4,
      prefix = '~',
    },
    -- Use a function to dynamically turn signs off
    -- and on, using buffer local variables
    signs = function(bufnr, client_id)
      local ok, result = pcall(vim.api.nvim_buf_get_var, bufnr, 'show_signs')
      -- No buffer local variable set, so just enable by default
      if not ok then
        return true
      end

      return result
    end,
    -- Disable a feature
    update_in_insert = false,
  }
)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions