diff --git a/plugin/filetypes.lua b/plugin/filetypes.lua index 8617964c5..2ec1c945d 100644 --- a/plugin/filetypes.lua +++ b/plugin/filetypes.lua @@ -26,6 +26,7 @@ local filetypes = { t32 = { 'trace32' }, tlaplus = { 'tla' }, tsx = { 'typescriptreact', 'typescript.tsx' }, + typescript = { 'ts' }, uxntal = { 'tal' }, v = { 'vlang' }, verilog = { 'sysverilog' }, diff --git a/plugin/query_predicates.lua b/plugin/query_predicates.lua index d01970acf..fed9a271b 100644 --- a/plugin/query_predicates.lua +++ b/plugin/query_predicates.lua @@ -30,12 +30,13 @@ local mimetype_aliases = { ---@param pred string[] ---@return boolean|nil query.add_directive('set-lang-from-mimetype!', function(match, _, bufnr, pred, metadata) - local capture_id = pred[2] - local node = match[capture_id] + local id = pred[2] + local node = match[id] if not node then return 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] if configured then metadata['injection.language'] = configured @@ -45,41 +46,17 @@ query.add_directive('set-lang-from-mimetype!', function(match, _, bufnr, pred, m end 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 + local id = pred[2] if #pred == 3 then -- (#downcase! @capture "key") key = pred[3] - value = metadata[pred[2]][key] + value = metadata[id][key] else -- (#downcase! "key") - key = pred[2] + key = id value = metadata[key] end @@ -87,55 +64,12 @@ query.add_directive('downcase!', function(match, _, bufnr, pred, metadata) text = value else local node = match[value] - text = vim.treesitter.get_node_text(node, bufnr) or '' + text = vim.treesitter.get_node_text(node, bufnr, { metadata = metadata[id] }) or '' end if #pred == 3 then - metadata[pred[2]][key] = string.lower(text) + metadata[id][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) diff --git a/runtime/queries/markdown/injections.scm b/runtime/queries/markdown/injections.scm index 735189db1..0bead6f4a 100644 --- a/runtime/queries/markdown/injections.scm +++ b/runtime/queries/markdown/injections.scm @@ -2,7 +2,7 @@ (info_string (language) @_lang) (code_fence_content) @injection.content - (#set-lang-from-info-string! @_lang)) + (#inject-language! @_lang)) ((html_block) @injection.content (#set! injection.language "html")