Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

vim.validation fails for nvim version 0.11 when custom signs are provided. #1216

Closed
ampatzid opened this issue Feb 10, 2025 · 4 comments
Closed
Labels
bug Something isn't working

Comments

@ampatzid
Copy link

Description

after upgrading gitsign to latest my configuration is broken. I have the following config using lazy plugin manager
config = function()
require('gitsigns').setup{
signs = {
add = { text = '+' },
change = { text = '' },
delete = { text = '-' },
topdelete = { text = '‾' },
changedelete = { text = '
' },
untracked = { text = '┆' },
},

        on_attach = function(bufnr)
            local gs = package.loaded.gitsigns

            local function map(mode, l, r, opts)
              opts = opts or {}
              opts.buffer = bufnr
              vim.keymap.set(mode, l, r, opts)
            end

            -- Navigation
            map('n', ']c', function()
              if vim.wo.diff then return ']c' end
              vim.schedule(function() gs.next_hunk() end)
              return '<Ignore>'
            end, {expr=true})

            map('n', '[c', function()
              if vim.wo.diff then return '[c' end
              vim.schedule(function() gs.prev_hunk() end)
              return '<Ignore>'
            end, {expr=true})

            -- Actions
            map('n', '<leader>hs', gs.stage_hunk)
            map('n', '<leader>hr', gs.reset_hunk)
            map('v', '<leader>hs', function() gs.stage_hunk {vim.fn.line('.'), vim.fn.line('v')} end)
            map('v', '<leader>hr', function() gs.reset_hunk {vim.fn.line('.'), vim.fn.line('v')} end)
            map('n', '<leader>hS', gs.stage_buffer)
            map('n', '<leader>hu', gs.undo_stage_hunk)
            map('n', '<leader>hR', gs.reset_buffer)
            map('n', '<leader>hp', gs.preview_hunk)
            map('n', '<leader>hb', function() gs.blame_line{full=true} end)
            map('n', '<leader>tb', gs.toggle_current_line_blame)
            map('n', '<leader>hd', gs.diffthis)
            map('n', '<leader>hD', function() gs.diffthis('~') end)
            map('n', '<leader>td', gs.toggle_deleted)

            -- Text object
            map({'o', 'x'}, 'ih', ':<C-U>Gitsigns select_hunk<CR>')
        end
    }
end

when gitsigns is loaded I get the following error
 Error 08:09:09 PM notify.error lazy.nvim Failed to run config for gitsigns.nvim

...al/share/nvim/lazy/gitsigns.nvim/lua/gitsigns/config.lua:899: signs: expected function: 0x7f08a9de7268, got table (table: 0x7f08aa2e04d8)

stacktrace:

  • vim/shared.lua:0 in validate
  • /gitsigns.nvim/lua/gitsigns/config.lua:899 in validate
  • /gitsigns.nvim/lua/gitsigns/config.lua:916 in validate_config
  • /gitsigns.nvim/lua/gitsigns/config.lua:962 in build
  • /gitsigns.nvim/lua/gitsigns.lua:205 in setup
  • lua/ampatzid/plugins/gitsigns.lua:5 in config
  • vim/_editor.lua:0
  • /telescope.nvim/lua/telescope/actions/set.lua:162 in run_replace_or_original
  • /telescope.nvim/lua/telescope/actions/mt.lua:65 in run_replace_or_original
  • /telescope.nvim/lua/telescope/actions/mt.lua:65 in run_replace_or_original
  • /telescope.nvim/lua/telescope/actions/mt.lua:65 in key_func
  • /telescope.nvim/lua/telescope/mappings.lua:253

after some debugging I found out that commit that broke my config is
tree 8b471841831b9932f14b1b47507512a0c3b13ab5
parent cf1ffe6
author dundargoc gocdundar@gmail.com Tue Jan 28 14:16:15 2025
committer Lewis Russell me@lewisr.dev Wed Feb 5 15:34:26 2025

fix: use non-deprecated versions of vim.validate

This will remove stack traces from :checkhealth vim.deprecated.

if I revert this change my config works again

  •    vim.validate({ [k] = { v, ty } })
    
  •    validate(k, v, ty)
    

Neovim version

NVIM v0.11.0-dev-323+g8f5e90811

Operating system and version

Linux mint "21.3 (Virginia)"

Expected behavior

gitsigns use the provided custom sighs

Actual behavior

Error during validation
 Error 08:09:09 PM notify.error lazy.nvim Failed to run config for gitsigns.nvim

...al/share/nvim/lazy/gitsigns.nvim/lua/gitsigns/config.lua:899: signs: expected function: 0x7f08a9de7268, got table (table: 0x7f08aa2e04d8)

stacktrace:

  • vim/shared.lua:0 in validate
  • /gitsigns.nvim/lua/gitsigns/config.lua:899 in validate
  • /gitsigns.nvim/lua/gitsigns/config.lua:916 in validate_config
  • /gitsigns.nvim/lua/gitsigns/config.lua:962 in build
  • /gitsigns.nvim/lua/gitsigns.lua:205 in setup
  • lua/ampatzid/plugins/gitsigns.lua:5 in config
  • vim/_editor.lua:0
  • /telescope.nvim/lua/telescope/actions/set.lua:162 in run_replace_or_original
  • /telescope.nvim/lua/telescope/actions/mt.lua:65 in run_replace_or_original
  • /telescope.nvim/lua/telescope/actions/mt.lua:65 in run_replace_or_original
  • /telescope.nvim/lua/telescope/actions/mt.lua:65 in key_func
  • /telescope.nvim/lua/telescope/mappings.lua:253

Minimal config

for name, url in pairs{
  gitsigns = 'https://github.com/lewis6991/gitsigns.nvim'
} do
local install_path = vim.fn.fnamemodify('gitsigns_issue/'..name, ':p')
if vim.fn.isdirectory(install_path) == 0 then
vim.fn.system { 'git', 'clone', '--depth=1', url, install_path }
end
vim.opt.runtimepath:append(install_path)
end

require('gitsigns').setup{
    debug_mode = true,
    signs = {
        add          = { text = '+' },
        change       = { text = '~' },
        delete       = { text = '-' },
        topdelete    = { text = '' },
        changedelete = { text = '~' },
        untracked    = { text = '' },
    },
  }


Error detected while processing /home/ampatzid/.config/nvim/init.lua:
E5113: Error while calling lua chunk: ...fig/nvim/gitsigns_issue/gitsigns/lua/gitsigns/config.lua:899: signs: expected function: 0x7fb06e7b30a0, got table (table: 0x7fb06ea4ba60)
stack traceback:
        [C]: in function 'error'
        vim/shared.lua: in function 'validate'
        ...fig/nvim/gitsigns_issue/gitsigns/lua/gitsigns/config.lua:899: in function 'validate'
        ...fig/nvim/gitsigns_issue/gitsigns/lua/gitsigns/config.lua:916: in function 'validate_config'
        ...fig/nvim/gitsigns_issue/gitsigns/lua/gitsigns/config.lua:962: in function 'build'
        ...id/.config/nvim/gitsigns_issue/gitsigns/lua/gitsigns.lua:205: in function 'setup'
        /home/ampatzid/.config/nvim/init.lua:12: in main chunk

Steps to reproduce

  1. open nvim

Gitsigns debug messages

I can't get that output since the plugin is not loaded.

Gitsigns cache

@ampatzid ampatzid added the bug Something isn't working label Feb 10, 2025
@lewis6991
Copy link
Owner

@dundargoc this might explain why we were getting those weird failures.

@ampatzid
Copy link
Author

if I can help a bit more
M.schema has signs type as
type_help = 'table',
type = validate_signs,
but
--- @Class (exact) Gitsigns.Config
--- @field signs table<Gitsigns.SignType,Gitsigns.SignConfig>

that's also a mismatch. if I update the type in schema to table then it works.

@dundargoc
Copy link
Collaborator

I think your neovim version is too low, try updating to latest neovim nightly.

@ampatzid
Copy link
Author

That also worked! Thanks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants