aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/nvim
diff options
context:
space:
mode:
Diffstat (limited to 'nvim')
-rw-r--r--nvim/.config/nvim/after/ftplugin/lua.lua1
-rw-r--r--nvim/.config/nvim/lua/null-ls/builtins/code_actions/typos.lua46
-rw-r--r--nvim/.config/nvim/lua/null-ls/builtins/diagnostics/typos.lua54
-rw-r--r--nvim/.config/nvim/lua/plugins/null-ls.lua2
-rw-r--r--nvim/.config/nvim/lua/tobyvin/options.lua1
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