| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- local h = require("cspell.helpers")
- ---@class AddToJSONAction
- ---@field diagnostic Diagnostic
- ---@field word string
- ---@field params GeneratorParams
- ---@field cspell CSpellConfigInfo|nil
- ---@param opts AddToJSONAction
- ---@return CodeAction
- return function(opts)
- ---@type CSpellSourceConfig
- local code_action_config = opts.params:get_config()
- local on_success = code_action_config.on_success
- local encode_json = code_action_config.encode_json or vim.json.encode
- return {
- title = 'Add "' .. opts.word .. '" to cspell json file',
- action = function()
- local cspell = opts.cspell or h.create_cspell_json(opts.params)
- if not cspell.config.words then
- cspell.config.words = {}
- end
- table.insert(cspell.config.words, opts.word)
- local encoded = encode_json(cspell.config) or ""
- local lines = {}
- for line in encoded:gmatch("[^\r\n]+") do
- table.insert(lines, line)
- end
- vim.fn.writefile(lines, cspell.path)
- -- replace word in buffer to trigger cspell to update diagnostics
- h.set_word(opts.diagnostic, opts.word)
- if on_success then
- on_success(cspell.path, opts.params, "add_to_json")
- end
- end,
- }
- end
|