From 3776133815ad8fb6a3e4019f62f1154e1e71c0f6 Mon Sep 17 00:00:00 2001 From: Barrett Ruth Date: Sun, 22 Feb 2026 23:21:06 -0500 Subject: [PATCH] fix: lint warning and test mocks for async file read Problem: selene flagged unused err3 variable, and test mock_enums still mocked io.open instead of the new vim.uv.fs_* calls. Solution: rename err3 to _, replace io.open mock with synchronous vim.uv.fs_open/fs_fstat/fs_read/fs_close mocks using a sentinel fd. --- lua/blink-cmp-ghostty.lua | 2 +- spec/ghostty_spec.lua | 46 +++++++++++++++++++++++++++++---------- 2 files changed, 35 insertions(+), 13 deletions(-) diff --git a/lua/blink-cmp-ghostty.lua b/lua/blink-cmp-ghostty.lua index 8b9d5d7..9eb94ce 100644 --- a/lua/blink-cmp-ghostty.lua +++ b/lua/blink-cmp-ghostty.lua @@ -193,7 +193,7 @@ function M:get_completions(ctx, callback) on_all_done() return end - vim.uv.fs_read(fd, stat.size, 0, function(err3, data) + vim.uv.fs_read(fd, stat.size, 0, function(_, data) vim.uv.fs_close(fd) enums_content = data or '' on_all_done() diff --git a/spec/ghostty_spec.lua b/spec/ghostty_spec.lua index d0ad426..5ef7a2a 100644 --- a/spec/ghostty_spec.lua +++ b/spec/ghostty_spec.lua @@ -55,10 +55,15 @@ local function mock_system() end end +local MOCK_FD = 99 + local function mock_enums() local original_exepath = vim.fn.exepath local original_realpath = vim.uv.fs_realpath - local original_open = io.open + local original_fs_open = vim.uv.fs_open + local original_fs_fstat = vim.uv.fs_fstat + local original_fs_read = vim.uv.fs_read + local original_fs_close = vim.uv.fs_close vim.fn.exepath = function(name) if name == 'ghostty' then @@ -72,24 +77,41 @@ local function mock_enums() end return original_realpath(path) end - -- selene: allow(incorrect_standard_library_use) - io.open = function(path, mode) + vim.uv.fs_open = function(path, flags, mode, callback) if path:match('ghostty%.bash$') then - return { - read = function() - return BASH_COMPLETION - end, - close = function() end, - } + callback(nil, MOCK_FD) + return end - return original_open(path, mode) + return original_fs_open(path, flags, mode, callback) + end + vim.uv.fs_fstat = function(fd, callback) + if fd == MOCK_FD then + callback(nil, { size = #BASH_COMPLETION }) + return + end + return original_fs_fstat(fd, callback) + end + vim.uv.fs_read = function(fd, size, offset, callback) + if fd == MOCK_FD then + callback(nil, BASH_COMPLETION) + return + end + return original_fs_read(fd, size, offset, callback) + end + vim.uv.fs_close = function(fd, ...) + if fd == MOCK_FD then + return true + end + return original_fs_close(fd, ...) end return function() vim.fn.exepath = original_exepath vim.uv.fs_realpath = original_realpath - -- selene: allow(incorrect_standard_library_use) - io.open = original_open + vim.uv.fs_open = original_fs_open + vim.uv.fs_fstat = original_fs_fstat + vim.uv.fs_read = original_fs_read + vim.uv.fs_close = original_fs_close end end