From 1d942a6ee464578e58e9754dd0ecff1774590bad Mon Sep 17 00:00:00 2001 From: Ruben Garcia Date: Wed, 18 Feb 2026 22:44:11 +0100 Subject: [PATCH] fix: Jump to correct column for class-level fixture definitions scan_fixtures was only storing the row, causing jump/fixture.lua to always land at column 0. For fixtures defined inside a class the def keyword is indented, so column 0 was wrong. Now stores col from func_node:start() and the jump uses it. Co-Authored-By: Claude Sonnet 4.6 --- lua/pytrize/jump/fixture.lua | 2 +- lua/pytrize/ts.lua | 3 ++- tests/pytrize/ts_spec.lua | 28 ++++++++++++++++++++++++++++ 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/lua/pytrize/jump/fixture.lua b/lua/pytrize/jump/fixture.lua index 83f37cc..aeb8971 100644 --- a/lua/pytrize/jump/fixture.lua +++ b/lua/pytrize/jump/fixture.lua @@ -32,7 +32,7 @@ M.to_declaration = function() end open_file(location.file) - vim.api.nvim_win_set_cursor(0, {location.linenr, 0}) + vim.api.nvim_win_set_cursor(0, {location.linenr, location.col}) if require('pytrize.settings').settings.metrics then local total = hrtime() - t0 diff --git a/lua/pytrize/ts.lua b/lua/pytrize/ts.lua index cd54d95..183e080 100644 --- a/lua/pytrize/ts.lua +++ b/lua/pytrize/ts.lua @@ -97,10 +97,11 @@ M.scan_fixtures = function(filepath) local fixtures = {} for _, def in ipairs(defs) do - local row = def.name_node:start() + local row, col = def.func_node:start() fixtures[def.name] = { file = filepath, linenr = row + 1, + col = col, } end diff --git a/tests/pytrize/ts_spec.lua b/tests/pytrize/ts_spec.lua index 7c44d24..2dc295b 100644 --- a/tests/pytrize/ts_spec.lua +++ b/tests/pytrize/ts_spec.lua @@ -150,6 +150,34 @@ describe("scan_fixtures", function() os.remove(path) end) + it("returns col=0 for a top-level fixture", function() + local path = write_tmp_py("scan_col_top", { + "import pytest", + "", + "@pytest.fixture", + "def db():", + " return 'connection'", + }) + local fixtures = ts_utils.scan_fixtures(path) + assert.are.equal(0, fixtures.db.col) + os.remove(path) + end) + + it("returns correct col for a fixture defined inside a class", function() + local path = write_tmp_py("scan_col_class", { + "import pytest", + "", + "class TestFixtures:", + " @pytest.fixture", + " def class_fix(self):", + " return 42", + }) + local fixtures = ts_utils.scan_fixtures(path) + assert.are.equal(5, fixtures.class_fix.linenr) + assert.are.equal(4, fixtures.class_fix.col) + os.remove(path) + end) + it("cleans up buffer for files that were not previously loaded", function() local path = write_tmp_py("scan4", { "import pytest",