diff options
Diffstat (limited to 'nvim/.config')
-rw-r--r-- | nvim/.config/nvim/after/ftplugin/lua.lua | 1 | ||||
-rw-r--r-- | nvim/.config/nvim/lua/null-ls/builtins/code_actions/typos.lua | 46 | ||||
-rw-r--r-- | nvim/.config/nvim/lua/null-ls/builtins/diagnostics/typos.lua | 54 | ||||
-rw-r--r-- | nvim/.config/nvim/lua/plugins/null-ls.lua | 2 | ||||
-rw-r--r-- | nvim/.config/nvim/lua/tobyvin/options.lua | 1 |
5 files changed, 102 insertions, 2 deletions
diff --git a/nvim/.config/nvim/after/ftplugin/lua.lua b/nvim/.config/nvim/after/ftplugin/lua.lua index abd7572..9b09cd6 100644 --- a/nvim/.config/nvim/after/ftplugin/lua.lua +++ b/nvim/.config/nvim/after/ftplugin/lua.lua @@ -1,4 +1,3 @@ ---@diagnostic disable-next-line: param-type-mismatch vim.opt_local.formatoptions:remove("o") vim.opt_local.tabstop = 2 -vim.opt_local.spell = false diff --git a/nvim/.config/nvim/lua/null-ls/builtins/code_actions/typos.lua b/nvim/.config/nvim/lua/null-ls/builtins/code_actions/typos.lua new file mode 100644 index 0000000..f933b28 --- /dev/null +++ b/nvim/.config/nvim/lua/null-ls/builtins/code_actions/typos.lua @@ -0,0 +1,46 @@ +local typos_diagnostics = function(bufnr, lnum, cursor_col) + local diagnostics = {} + for _, diagnostic in ipairs(vim.diagnostic.get(bufnr, { lnum = lnum })) do + if diagnostic.source == "typos" and cursor_col >= diagnostic.col and cursor_col < diagnostic.end_col then + table.insert(diagnostics, diagnostic) + end + end + return diagnostics +end + +return require("null-ls.helpers").make_builtin({ + name = "typos", + meta = { + url = "https://github.com/crate-ci/typos", + description = "Source code spell checker written in Rust.", + }, + method = require("null-ls.methods").internal.CODE_ACTION, + filetypes = {}, + generator = { + fn = function(params) + local actions = {} + local diagnostics = typos_diagnostics(params.bufnr, params.row - 1, params.col) + if vim.tbl_isempty(diagnostics) then + return nil + end + for _, diagnostic in ipairs(diagnostics) do + for _, correction in ipairs(diagnostic.user_data.corrections) do + table.insert(actions, { + title = string.format("Use `%s`", correction), + action = function() + vim.api.nvim_buf_set_text( + diagnostic.bufnr, + diagnostic.lnum, + diagnostic.col, + diagnostic.end_lnum, + diagnostic.end_col, + { correction } + ) + end, + }) + end + end + return actions + end, + }, +}) diff --git a/nvim/.config/nvim/lua/null-ls/builtins/diagnostics/typos.lua b/nvim/.config/nvim/lua/null-ls/builtins/diagnostics/typos.lua new file mode 100644 index 0000000..927b5e6 --- /dev/null +++ b/nvim/.config/nvim/lua/null-ls/builtins/diagnostics/typos.lua @@ -0,0 +1,54 @@ +local in_spell_node = function(bufnr, row, col) + local captures = vim.treesitter.get_captures_at_pos(bufnr, row, col) + local spell_node = false + + for _, capture in pairs(captures) do + if capture.capture == "nospell" then + return false + end + + spell_node = spell_node or capture.capture == "spell" + end + return spell_node +end + +return require("null-ls.helpers").make_builtin({ + name = "typos", + meta = { + url = "https://github.com/crate-ci/typos", + description = "Source code spell checker written in Rust.", + }, + method = require("null-ls.methods").internal.DIAGNOSTICS, + filetypes = {}, + generator_opts = { + command = "typos", + args = { + "--format", + "json", + "-", + }, + to_stdin = true, + format = "line", + check_exit_code = function(code) + return code == 2 + end, + on_output = function(line, params) + local ok, data = pcall(vim.json.decode, line) + if not ok or data == nil then + return + end + + if in_spell_node(params.bufnr, data.line_num - 1, data.byte_offset) then + return { + row = data.line_num, + col = data.byte_offset + 1, + end_col = data.byte_offset + 1 + data.typo:len(), + message = ("`%s` should be `%s`"):format(data.typo, table.concat(data.corrections, "`, `")), + severity = require("null-ls.helpers").diagnostics.severities.error, + user_data = { corrections = data.corrections }, + } + end + end, + }, + factory = require("null-ls.helpers").generator_factory, +}) diff --git a/nvim/.config/nvim/lua/plugins/null-ls.lua b/nvim/.config/nvim/lua/plugins/null-ls.lua index 9abcb33..cb1941a 100644 --- a/nvim/.config/nvim/lua/plugins/null-ls.lua +++ b/nvim/.config/nvim/lua/plugins/null-ls.lua @@ -21,12 +21,14 @@ function M.config() -- null_ls.builtins.code_actions.gitsigns, null_ls.builtins.code_actions.gitrebase, null_ls.builtins.code_actions.shellcheck, + null_ls.builtins.code_actions.typos, null_ls.builtins.diagnostics.markdownlint.with({ extra_args = { ("--config=%s/markdownlint/markdownlint.yaml"):format(vim.env.XDG_CONFIG_HOME), }, }), null_ls.builtins.diagnostics.djlint, + null_ls.builtins.diagnostics.typos, null_ls.builtins.formatting.prettier.with({ disabled_filetypes = { "json", "jsonc" }, extra_args = { "--prose-wrap=always" }, diff --git a/nvim/.config/nvim/lua/tobyvin/options.lua b/nvim/.config/nvim/lua/tobyvin/options.lua index b498a87..78ca8d2 100644 --- a/nvim/.config/nvim/lua/tobyvin/options.lua +++ b/nvim/.config/nvim/lua/tobyvin/options.lua @@ -39,7 +39,6 @@ vim.opt.smartcase = true vim.opt.smartindent = true vim.opt.smarttab = true vim.opt.softtabstop = 0 -vim.opt.spell = true vim.opt.spelllang = "en_us" vim.opt.spelloptions = { "camel" } vim.opt.splitbelow = true |