67 lines
1.9 KiB
Lua
Executable File
67 lines
1.9 KiB
Lua
Executable File
local ns = vim.api.nvim_create_namespace("weird-chars")
|
||
|
||
local weird_chars = {
|
||
["–"] = "en dash found, consider using regular hyphen (-)",
|
||
["—"] = "em dash found, consider using regular hyphen (-)",
|
||
["“"] = 'left double quote found, consider using straight quote (")',
|
||
["”"] = 'right double quote found, consider using straight quote (")',
|
||
["‘"] = "left single quote found, consider using straight quote (')",
|
||
["’"] = "right single quote found, consider using straight quote (')",
|
||
["•"] = "bullet found, consider using regular asterisk (*)",
|
||
["·"] = "middle dot found",
|
||
[" "] = "full-width space found, consider using regular space",
|
||
}
|
||
|
||
local function check_weird_chars()
|
||
local bufnr = vim.api.nvim_get_current_buf()
|
||
local lines = vim.api.nvim_buf_get_lines(bufnr, 0, -1, false)
|
||
local diagnostics = {}
|
||
|
||
for linenr, line in ipairs(lines) do
|
||
local i = 1
|
||
while i <= #line do
|
||
local b = line:byte(i)
|
||
local char
|
||
|
||
-- Check for UTF-8 multi-byte sequences
|
||
if b >= 0xE2 and b <= 0xEF then
|
||
-- Likely a 3-byte UTF-8 sequence
|
||
char = line:sub(i, i + 2)
|
||
i = i + 3
|
||
elseif b >= 0xC2 and b <= 0xDF then
|
||
-- Likely a 2-byte UTF-8 sequence
|
||
char = line:sub(i, i + 1)
|
||
i = i + 2
|
||
else
|
||
-- Single byte character
|
||
char = line:sub(i, i)
|
||
i = i + 1
|
||
end
|
||
|
||
if weird_chars[char] then
|
||
table.insert(diagnostics, {
|
||
bufnr = bufnr,
|
||
lnum = linenr - 1,
|
||
col = i - #char - 1,
|
||
message = weird_chars[char],
|
||
severity = vim.diagnostic.severity.WARN,
|
||
})
|
||
end
|
||
end
|
||
end
|
||
|
||
vim.diagnostic.set(ns, bufnr, diagnostics)
|
||
end
|
||
|
||
-- Create autocommand group
|
||
local group = vim.api.nvim_create_augroup("WeirdChars", { clear = true })
|
||
|
||
-- Set up autocommands
|
||
vim.api.nvim_create_autocmd({ "BufEnter", "BufWritePost", "TextChanged", "InsertLeave" }, {
|
||
group = group,
|
||
callback = check_weird_chars,
|
||
})
|
||
|
||
-- Create commands for manual checking
|
||
vim.api.nvim_create_user_command("CheckWeirdChars", check_weird_chars, {})
|