Skip to content

LSP diagnostics in virtual text at the top right of your screen

Notifications You must be signed in to change notification settings

beanaroo/diagflow.nvim

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 

Repository files navigation

diagflow.nvim

diagflow.nvim is a Neovim plugin that provides a neat and distraction-free way to display LSP diagnostics. It shows diagnostics in virtual text at the top-right corner of your screen, only when the cursor is positioned over the problematic code or across an entire line, according to your preference. This provides a clean and focused coding environment. This approach to diagnostics management is inspired by the Helix editor.

Example

  1. Opening a file with multiple diagnostics but no issues under the cursor:

nothing

  1. An error under the cursor:

error

  1. A hint under the cursor:

hint

Installation

To install diagflow.nvim, use your preferred Neovim package manager. If you're using packer.nvim, add the following line to your plugin list:

-- Packer
use {'dgagn/diagflow.nvim'}

If you're using lazy.nvim, add the following line to your plugin list:

-- Lazy
{
    'dgagn/diagflow.nvim',
    -- event = 'LspAttach', This is what I use personnally and it works great
    opts = {}
}

Configuration

Note if you are using the opts with lazy.nvim, you don't need to run the setup, it does it for you.

The scope option determines the context of diagnostics display: 'cursor' (default) shows diagnostics only under the cursor, while 'line' shows diagnostics for the entire line where the cursor is positioned.

require('diagflow').setup({
    enable = true,
    max_width = 60,  -- The maximum width of the diagnostic messages
    max_height = 10, -- the maximum height per diagnostics
    severity_colors = {  -- The highlight groups to use for each diagnostic severity level
        error = "DiagnosticFloatingError",
        warning = "DiagnosticFloatingWarn",
        info = "DiagnosticFloatingInfo",
        hint = "DiagnosticFloatingHint",
    },
    format = function(diagnostic)
      return diagnostic.message
    end,
    gap_size = 1,
    scope = 'cursor', -- 'cursor', 'line' this changes the scope, so instead of showing errors under the cursor, it shows errors on the entire line.
    padding_top = 0,
    padding_right = 0,
    text_align = 'right', -- 'left', 'right'
    placement = 'top', -- 'top', 'inline'
    inline_padding_left = 0, -- the padding left when the placement is inline
    update_event = { 'DiagnosticChanged', 'BufReadPost' }, -- the event that updates the diagnostics cache
    toggle_event = { }, -- if InsertEnter, can toggle the diagnostics on inserts
    show_sign = false, -- set to true if you want to render the diagnostic sign before the diagnostic message
    render_event = { 'DiagnosticChanged', 'CursorMoved' },
    border_chars = {
      top_left = "",
      top_right = "",
      bottom_left = "",
      bottom_right = "",
      horizontal = "",
      vertical = ""
    },
    show_borders = false,
})

Or simply use the default configuration:

require('diagflow').setup()

FAQ

  1. How do I change the colors of the virtual text?

You can set up custom colors by changing the highlight group in the configuration. For instance, in the default configuration, :hi Hint determines the color of the hints. You can change the hint color to blue with :hi Hint guifg=blue.

  1. Can I still have the diagnostics inline?

Yes, with the new option placement, you can set the diagnostics inline instead of at the top right.

Here is a example :

inline

Here is the example config used in this screenshot :

{
  'dgagn/diagflow.nvim',
  opts = {
    placement = 'inline',
    inline_padding_left = 3,
  },
}
  1. How can I disable the cursor when I enter insert mode and reenable it when I go in normal mode?
{
  'dgagn/diagflow.nvim',
  opts = {
    toggle_event = { 'InsertEnter' },
  },
}
  1. Something doesn't update when X or Y happens.

You can setup when the diagnostic is cached with this option :

{
  'dgagn/diagflow.nvim',
  opts = {
    update_event = { 'DiagnosticChanged', ... },
  },
}
  1. I want to customize my diagnostic messages

You can set a diagnostic message by supplying the format option.

{
  'dgagn/diagflow.nvim',
  opts = {
    format = function(diagnostic)
      return '[LSP] ' .. diagnostic.message
    end
  },
}
  1. How do I disable this for certain filetypes?
{
  'dgagn/diagflow.nvim',
  opts = {
    enable = function()
      return vim.bo.filetype ~= "lazy"
    end,
  },
}
  1. How do I show borders?
{
  'dgagn/diagflow.nvim',
  opts = {
    show_borders = true,
  },
}

About

LSP diagnostics in virtual text at the top right of your screen

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Lua 99.5%
  • Vim Script 0.5%