mirror of
https://github.com/nvim-treesitter/nvim-treesitter.git
synced 2026-07-01 11:06:54 -04:00
fix: remove upstreamed directives
`#inject-lang!` and `#trim!`; fix `set-lang-from-mimetype`
This commit is contained in:
parent
dd6ec13268
commit
f13420ccff
7 changed files with 11 additions and 135 deletions
|
|
@ -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)
|
|
||||||
|
|
|
||||||
|
|
@ -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))
|
|
||||||
|
|
|
||||||
|
|
@ -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))
|
|
||||||
|
|
|
||||||
|
|
@ -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))
|
||||||
|
|
|
||||||
|
|
@ -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")
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue