fix: remove upstreamed directives

`#inject-lang!` and `#trim!`; fix `set-lang-from-mimetype`
This commit is contained in:
Christian Clason 2023-06-24 14:33:45 +02:00
parent dd6ec13268
commit f13420ccff
7 changed files with 11 additions and 135 deletions

View file

@ -30,12 +30,13 @@ local mimetype_aliases = {
---@param pred string[] ---@param pred string[]
---@return boolean|nil ---@return boolean|nil
query.add_directive('set-lang-from-mimetype!', function(match, _, bufnr, pred, metadata) query.add_directive('set-lang-from-mimetype!', function(match, _, bufnr, pred, metadata)
local capture_id = pred[2] local id = pred[2]
local node = match[capture_id] local node = match[id]
if not node then if not node then
return return
end end
local type_attr_value = vim.treesitter.get_node_text(node, bufnr)
local type_attr_value = vim.treesitter.get_node_text(node, bufnr, { metadata = metadata[id] })
local configured = mimetype_aliases[type_attr_value] local configured = mimetype_aliases[type_attr_value]
if configured then if configured then
metadata['injection.language'] = configured metadata['injection.language'] = configured
@ -44,98 +45,3 @@ query.add_directive('set-lang-from-mimetype!', function(match, _, bufnr, pred, m
metadata['injection.language'] = parts[#parts] metadata['injection.language'] = parts[#parts]
end end
end, true) end, true)
local injection_aliases = {
ex = 'elixir',
pl = 'perl',
sh = 'bash',
uxn = 'uxntal',
ts = 'typescript',
}
---@param match (TSNode|nil)[]
---@param _ string
---@param bufnr integer
---@param pred string[]
---@return boolean|nil
query.add_directive('set-lang-from-info-string!', function(match, _, bufnr, pred, metadata)
local capture_id = pred[2]
local node = match[capture_id]
if not node then
return
end
local injection_alias = vim.treesitter.get_node_text(node, bufnr)
local filetype = vim.filetype.match({ filename = 'a.' .. injection_alias })
metadata['injection.language'] = filetype or injection_aliases[injection_alias] or injection_alias
end, true)
query.add_directive('downcase!', function(match, _, bufnr, pred, metadata)
local text, key, value ---@type string|string[], string, string|integer
if #pred == 3 then
-- (#downcase! @capture "key")
key = pred[3]
value = metadata[pred[2]][key]
else
-- (#downcase! "key")
key = pred[2]
value = metadata[key]
end
if type(value) == 'string' then
text = value
else
local node = match[value]
text = vim.treesitter.get_node_text(node, bufnr) or ''
end
if #pred == 3 then
metadata[pred[2]][key] = string.lower(text)
else
metadata[key] = string.lower(text)
end
end, true)
-- Trim blank lines from end of the region
-- Arguments are the captures to trim.
---@param match (TSNode|nil)[]
---@param _ string
---@param bufnr integer
---@param pred string[]
---@param metadata table
---TODO(clason): upstream
query.add_directive('trim!', function(match, _, bufnr, pred, metadata)
for _, id in ipairs({ select(2, unpack(pred)) }) do
local node = match[id]
if not node then
return
end
local start_row, start_col, end_row, end_col = node:range()
-- Don't trim if region ends in middle of a line
if end_col ~= 0 then
return
end
while true do
-- As we only care when end_col == 0, always inspect one line above end_row.
local end_line = vim.api.nvim_buf_get_lines(bufnr, end_row - 1, end_row, true)[1]
if end_line ~= '' then
break
end
end_row = end_row - 1
end
-- If this produces an invalid range, we just skip it.
if start_row < end_row or (start_row == end_row and start_col <= end_col) then
if not metadata[id] then
metadata[id] = {}
end
metadata[id].range = { start_row, start_col, end_row, end_col }
end
end
end, true)

View file

@ -1,26 +1,2 @@
((comment) @injection.content ((comment) @injection.content
(#set! injection.language "comment")) (#set! injection.language "comment"))
((function_call
name: (ident) @_name
.
(simplexpr)
.
(simplexpr
(string
(string_fragment) @injection.content)+))
(#any-of? @_name "replace" "search" "matches" "captures")
(#set! injection.language "regex")
(#set! injection.combined))
((function_call
name: (ident) @_name
.
(simplexpr)
.
(simplexpr
(string
(string_fragment) @injection.content)+))
(#eq? @_name "jq")
(#set! injection.language "jq")
(#set! injection.combined))

View file

@ -3,5 +3,4 @@
(heredoc_template (heredoc_template
(template_literal) @injection.content (template_literal) @injection.content
(heredoc_identifier) @injection.language (heredoc_identifier) @injection.language)
(#downcase! @injection.language))

View file

@ -9,7 +9,6 @@
(#set! injection.language "xml")) (#set! injection.language "xml"))
(multiline_string (multiline_string
(multiline_string_type) @_lang (multiline_string_type) @injection.language
(multiline_string_content) @injection.content (multiline_string_content) @injection.content
(#set-lang-from-info-string! @_lang)
(#set! injection.combined)) (#set! injection.combined))

View file

@ -1,8 +1,7 @@
(fenced_code_block (fenced_code_block
(info_string (info_string
(language) @_lang) (language) @injection.language)
(code_fence_content) @injection.content (code_fence_content) @injection.content)
(#set-lang-from-info-string! @_lang))
((html_block) @injection.content ((html_block) @injection.content
(#set! injection.language "html") (#set! injection.language "html")

View file

@ -4,14 +4,12 @@
(heredoc (heredoc
(heredoc_body) @injection.content (heredoc_body) @injection.content
(heredoc_end) @injection.language (heredoc_end) @injection.language
(#set! injection.include-children) (#set! injection.include-children))
(#downcase! @injection.language))
(nowdoc (nowdoc
(nowdoc_body) @injection.content (nowdoc_body) @injection.content
(heredoc_end) @injection.language (heredoc_end) @injection.language
(#set! injection.include-children) (#set! injection.include-children))
(#downcase! @injection.language))
; regex ; regex
((function_call_expression ((function_call_expression

View file

@ -3,8 +3,7 @@
(heredoc_body (heredoc_body
(heredoc_content) @injection.content (heredoc_content) @injection.content
(heredoc_end) @injection.language (heredoc_end) @injection.language)
(#downcase! @injection.language))
(regex (regex
(string_content) @injection.content (string_content) @injection.content