diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 4a49f7a..6910389 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -19,4 +19,4 @@ jobs: - uses: nvim-neorocks/nvim-busted-action@v1 with: - nvim-version: ${{ matrix.nvim }} + nvim_version: ${{ matrix.nvim }} diff --git a/lua/fugitive-ts/init.lua b/lua/fugitive-ts/init.lua index 6e9f39c..31084a2 100644 --- a/lua/fugitive-ts/init.lua +++ b/lua/fugitive-ts/init.lua @@ -75,12 +75,11 @@ end ---@param bufnr integer ---@return fun() local function create_debounced_highlight(bufnr) - ---@type uv_timer_t? - local timer = nil + local timer = nil ---@type table? return function() if timer then - timer:stop() - timer:close() + timer:stop() ---@diagnostic disable-line: undefined-field + timer:close() ---@diagnostic disable-line: undefined-field timer = nil end local t = vim.uv.new_timer() diff --git a/spec/helpers.lua b/spec/helpers.lua index 78c780a..db9016a 100644 --- a/spec/helpers.lua +++ b/spec/helpers.lua @@ -1,7 +1,16 @@ -vim.cmd([[set runtimepath=$VIMRUNTIME]]) -vim.opt.runtimepath:append(vim.fn.getcwd()) +local plugin_dir = vim.fn.getcwd() +vim.opt.runtimepath:prepend(plugin_dir) vim.opt.packpath = {} +local function ensure_parser(lang) + local ok = pcall(vim.treesitter.language.inspect, lang) + if not ok then + error('Treesitter parser for ' .. lang .. ' not available. Neovim 0.10+ bundles lua parser.') + end +end + +ensure_parser('lua') + local M = {} function M.create_buffer(lines) diff --git a/spec/parser_spec.lua b/spec/parser_spec.lua index 486bd79..567b26c 100644 --- a/spec/parser_spec.lua +++ b/spec/parser_spec.lua @@ -15,9 +15,19 @@ describe('parser', function() end end + local test_langs = { + ['lua/test.lua'] = 'lua', + ['lua/foo.lua'] = 'lua', + ['src/bar.py'] = 'python', + ['test.lua'] = 'lua', + ['test.py'] = 'python', + ['other.lua'] = 'lua', + ['.envrc'] = 'bash', + } + it('returns empty table for empty buffer', function() local bufnr = create_buffer({}) - local hunks = parser.parse_buffer(bufnr, {}, {}, false) + local hunks = parser.parse_buffer(bufnr, test_langs, {}, false) assert.are.same({}, hunks) delete_buffer(bufnr) end) @@ -30,7 +40,7 @@ describe('parser', function() 'Unstaged (1)', 'M lua/test.lua', }) - local hunks = parser.parse_buffer(bufnr, {}, {}, false) + local hunks = parser.parse_buffer(bufnr, test_langs, {}, false) assert.are.same({}, hunks) delete_buffer(bufnr) end) @@ -44,7 +54,7 @@ describe('parser', function() '+local new = true', ' return M', }) - local hunks = parser.parse_buffer(bufnr, {}, {}, false) + local hunks = parser.parse_buffer(bufnr, test_langs, {}, false) assert.are.equal(1, #hunks) assert.are.equal('lua/test.lua', hunks[1].filename) @@ -66,7 +76,7 @@ describe('parser', function() '+ print("hello")', ' end', }) - local hunks = parser.parse_buffer(bufnr, {}, {}, false) + local hunks = parser.parse_buffer(bufnr, test_langs, {}, false) assert.are.equal(2, #hunks) assert.are.equal(2, hunks[1].start_line) @@ -85,7 +95,7 @@ describe('parser', function() ' def hello():', '+ pass', }) - local hunks = parser.parse_buffer(bufnr, {}, {}, false) + local hunks = parser.parse_buffer(bufnr, test_langs, {}, false) assert.are.equal(2, #hunks) assert.are.equal('lua/foo.lua', hunks[1].filename) @@ -103,7 +113,7 @@ describe('parser', function() '+print(msg)', ' end', }) - local hunks = parser.parse_buffer(bufnr, {}, {}, false) + local hunks = parser.parse_buffer(bufnr, test_langs, {}, false) assert.are.equal(1, #hunks) assert.are.equal('function M.hello()', hunks[1].header_context) @@ -118,7 +128,7 @@ describe('parser', function() ' local M = {}', '+local x = 1', }) - local hunks = parser.parse_buffer(bufnr, {}, {}, false) + local hunks = parser.parse_buffer(bufnr, test_langs, {}, false) assert.are.equal(1, #hunks) assert.is_nil(hunks[1].header_context) @@ -132,8 +142,7 @@ describe('parser', function() ' export FOO=bar', '+export BAZ=qux', }) - local custom_langs = { ['.envrc'] = 'bash' } - local hunks = parser.parse_buffer(bufnr, custom_langs, {}, false) + local hunks = parser.parse_buffer(bufnr, test_langs, {}, false) assert.are.equal(1, #hunks) assert.are.equal('bash', hunks[1].lang) @@ -151,7 +160,7 @@ describe('parser', function() ' def foo():', '+ pass', }) - local hunks = parser.parse_buffer(bufnr, {}, { 'lua' }, false) + local hunks = parser.parse_buffer(bufnr, test_langs, { 'lua' }, false) assert.are.equal(1, #hunks) assert.are.equal('test.py', hunks[1].filename) @@ -168,7 +177,7 @@ describe('parser', function() ' local x = 1', '+local y = 2', }) - local hunks = parser.parse_buffer(bufnr, {}, {}, false) + local hunks = parser.parse_buffer(bufnr, test_langs, {}, false) assert.are.equal(1, #hunks, 'Failed for prefix: ' .. prefix) delete_buffer(bufnr) end @@ -183,7 +192,7 @@ describe('parser', function() '', 'Some other content', }) - local hunks = parser.parse_buffer(bufnr, {}, {}, false) + local hunks = parser.parse_buffer(bufnr, test_langs, {}, false) assert.are.equal(1, #hunks) assert.are.equal(2, #hunks[1].lines) @@ -200,7 +209,7 @@ describe('parser', function() '@@ -1,1 +1,1 @@', ' local z = 3', }) - local hunks = parser.parse_buffer(bufnr, {}, {}, false) + local hunks = parser.parse_buffer(bufnr, test_langs, {}, false) assert.are.equal(2, #hunks) assert.are.equal(2, #hunks[1].lines)