|
1 | 1 | local M = {} |
2 | 2 |
|
| 3 | +M._scratch_buf = nil ---@type number? |
| 4 | + |
| 5 | +---@param source string |
| 6 | +function M.scratch_buf(source) |
| 7 | + if not (M._scratch_buf and vim.api.nvim_buf_is_valid(M._scratch_buf)) then |
| 8 | + M._scratch_buf = vim.api.nvim_create_buf(false, true) |
| 9 | + vim.api.nvim_buf_set_name(M._scratch_buf, "sidekick://highlight") |
| 10 | + end |
| 11 | + vim.bo[M._scratch_buf].fixeol = false |
| 12 | + vim.bo[M._scratch_buf].eol = false |
| 13 | + vim.api.nvim_buf_set_lines(M._scratch_buf, 0, -1, false, vim.split(source, "\n", { plain = true })) |
| 14 | + return M._scratch_buf |
| 15 | +end |
| 16 | + |
3 | 17 | ---@param source string|number |
4 | 18 | ---@param opts? {ft:string, start_row?: integer, end_row?: integer, bg?: string} |
5 | 19 | ---@return sidekick.Text[] |
@@ -121,20 +135,17 @@ end |
121 | 135 | ---@param opts? {ft:string, start_row?: integer, end_row?: integer} |
122 | 136 | function M.get_extmarks(source, opts) |
123 | 137 | opts = opts or {} |
124 | | - local buf = type(source) == "number" and source or nil |
125 | | - assert(buf or opts.ft, "Either buf or ft should be specified") |
| 138 | + assert(type(source) == "number" or opts.ft, "Either buf or ft should be specified") |
| 139 | + |
| 140 | + local buf = type(source) == "number" and source or M.scratch_buf(source --[[@as string]]) |
126 | 141 |
|
127 | | - local lang = vim.treesitter.language.get_lang(buf and vim.bo[buf].filetype or opts.ft) |
| 142 | + local lang = vim.treesitter.language.get_lang(opts.ft or vim.bo[buf].filetype) |
128 | 143 |
|
129 | 144 | local parser ---@type vim.treesitter.LanguageTree? |
130 | 145 | if lang then |
131 | 146 | lang = lang:lower() |
132 | 147 | local ok = false |
133 | | - if buf then |
134 | | - ok, parser = pcall(vim.treesitter.get_parser, buf, lang) |
135 | | - else |
136 | | - ok, parser = pcall(vim.treesitter.get_string_parser, source, lang) |
137 | | - end |
| 148 | + ok, parser = pcall(vim.treesitter.get_parser, buf, lang) |
138 | 149 | parser = ok and parser or nil |
139 | 150 | end |
140 | 151 |
|
|
0 commit comments