local M = {} function M.new_style() ---@diagnostic disable-next-line: undefined-field return vim.treesitter.highlighter.hl_map == nil end function M.get(group) if group:sub(1, 1) ~= "@" or M.new_style() then return group end group = group:sub(2) local lang while group do if M.fallbacks[group] then return (lang or "") .. M.fallbacks[group] end group, lang = group:match("(.*)%.(.*)") end end -- taken from https://github.com/nvim-treesitter/nvim-treesitter/blob/master/lua/nvim-treesitter/highlight.lua M.fallbacks = { ["annotation"] = "TSAnnotation", ["attribute"] = "TSAttribute", ["boolean"] = "TSBoolean", ["character"] = "TSCharacter", ["character.special"] = "TSCharacterSpecial", ["comment"] = "TSComment", ["conditional"] = "TSConditional", ["constant"] = "TSConstant", ["constant.builtin"] = "TSConstBuiltin", ["constant.macro"] = "TSConstMacro", ["constructor"] = "TSConstructor", ["debug"] = "TSDebug", ["define"] = "TSDefine", ["error"] = "TSError", ["exception"] = "TSException", ["field"] = "TSField", ["float"] = "TSFloat", ["function"] = "TSFunction", ["function.call"] = "TSFunctionCall", ["function.builtin"] = "TSFuncBuiltin", ["function.macro"] = "TSFuncMacro", ["include"] = "TSInclude", ["keyword"] = "TSKeyword", ["keyword.function"] = "TSKeywordFunction", ["keyword.operator"] = "TSKeywordOperator", ["keyword.return"] = "TSKeywordReturn", ["label"] = "TSLabel", ["method"] = "TSMethod", ["method.call"] = "TSMethodCall", ["namespace"] = "TSNamespace", ["none"] = "TSNone", ["number"] = "TSNumber", ["operator"] = "TSOperator", ["parameter"] = "TSParameter", ["parameter.reference"] = "TSParameterReference", ["preproc"] = "TSPreProc", ["property"] = "TSProperty", ["punctuation.delimiter"] = "TSPunctDelimiter", ["punctuation.bracket"] = "TSPunctBracket", ["punctuation.special"] = "TSPunctSpecial", ["repeat"] = "TSRepeat", ["storageclass"] = "TSStorageClass", ["string"] = "TSString", ["string.regex"] = "TSStringRegex", ["string.escape"] = "TSStringEscape", ["string.special"] = "TSStringSpecial", ["symbol"] = "TSSymbol", ["tag"] = "TSTag", ["tag.attribute"] = "TSTagAttribute", ["tag.delimiter"] = "TSTagDelimiter", ["text"] = "TSText", ["text.strong"] = "TSStrong", ["text.emphasis"] = "TSEmphasis", ["text.underline"] = "TSUnderline", ["text.strike"] = "TSStrike", ["text.title"] = "TSTitle", ["text.literal"] = "TSLiteral", ["text.uri"] = "TSURI", ["text.math"] = "TSMath", ["text.reference"] = "TSTextReference", ["text.environment"] = "TSEnvironment", ["text.environment.name"] = "TSEnvironmentName", ["text.note"] = "TSNote", ["text.warning"] = "TSWarning", ["text.danger"] = "TSDanger", ["text.todo"] = "TSTodo", ["type"] = "TSType", ["type.builtin"] = "TSTypeBuiltin", ["type.qualifier"] = "TSTypeQualifier", ["type.definition"] = "TSTypeDefinition", ["variable"] = "TSVariable", ["variable.builtin"] = "TSVariableBuiltin", } M.defaults = { ["@annotation"] = { default = true, link = "PreProc", }, ["@attribute"] = { default = true, link = "PreProc", }, ["@boolean"] = { default = true, link = "Boolean", }, ["@character"] = { default = true, link = "Character", }, ["@character.special"] = { default = true, link = "SpecialChar", }, ["@comment"] = { default = true, link = "Comment", }, ["@conditional"] = { default = true, link = "Conditional", }, ["@constant"] = { default = true, link = "Constant", }, ["@constant.builtin"] = { default = true, link = "Special", }, ["@constant.macro"] = { default = true, link = "Define", }, ["@constructor"] = { default = true, link = "Special", }, ["@debug"] = { default = true, link = "Debug", }, ["@define"] = { default = true, link = "Define", }, ["@exception"] = { default = true, link = "Exception", }, ["@field"] = { default = true, link = "Identifier", }, ["@float"] = { default = true, link = "Float", }, ["@function"] = { default = true, link = "Function", }, ["@function.builtin"] = { default = true, link = "Special", }, ["@function.call"] = { default = true, link = "@function", }, ["@function.macro"] = { default = true, link = "Macro", }, ["@include"] = { default = true, link = "Include", }, ["@keyword"] = { default = true, link = "Keyword", }, ["@keyword.function"] = { default = true, link = "Keyword", }, ["@keyword.operator"] = { default = true, link = "@operator", }, ["@keyword.return"] = { default = true, link = "@keyword", }, ["@label"] = { default = true, link = "Label", }, ["@method"] = { default = true, link = "Function", }, ["@method.call"] = { default = true, link = "@method", }, ["@namespace"] = { default = true, link = "Include", }, ["@none"] = { default = true, }, ["@number"] = { default = true, link = "Number", }, ["@operator"] = { default = true, link = "Operator", }, ["@parameter"] = { default = true, link = "Identifier", }, ["@parameter.reference"] = { default = true, link = "@parameter", }, ["@preproc"] = { default = true, link = "PreProc", }, ["@property"] = { default = true, link = "Identifier", }, ["@punctuation.bracket"] = { default = true, link = "Delimiter", }, ["@punctuation.delimiter"] = { default = true, link = "Delimiter", }, ["@punctuation.special"] = { default = true, link = "Delimiter", }, ["@repeat"] = { default = true, link = "Repeat", }, ["@storageclass"] = { default = true, link = "StorageClass", }, ["@string"] = { default = true, link = "String", }, ["@string.escape"] = { default = true, link = "SpecialChar", }, ["@string.regex"] = { default = true, link = "String", }, ["@string.special"] = { default = true, link = "SpecialChar", }, ["@symbol"] = { default = true, link = "Identifier", }, ["@tag"] = { default = true, link = "Label", }, ["@tag.attribute"] = { default = true, link = "@property", }, ["@tag.delimiter"] = { default = true, link = "Delimiter", }, ["@text"] = { default = true, link = "@none", }, ["@text.danger"] = { default = true, link = "WarningMsg", }, ["@text.emphasis"] = { default = true, italic = true, }, ["@text.environment"] = { default = true, link = "Macro", }, ["@text.environment.name"] = { default = true, link = "Type", }, ["@text.literal"] = { default = true, link = "String", }, ["@text.math"] = { default = true, link = "Special", }, ["@text.note"] = { default = true, link = "SpecialComment", }, ["@text.reference"] = { default = true, link = "Constant", }, ["@text.strike"] = { strikethrough = true, }, ["@text.strong"] = { bold = true, default = true, }, ["@text.title"] = { default = true, link = "Title", }, ["@text.underline"] = { underline = true, }, ["@text.uri"] = { default = true, link = "Underlined", }, ["@text.warning"] = { default = true, link = "Todo", }, ["@text.todo"] = { default = true, link = "Todo", }, ["@type"] = { default = true, link = "Type", }, ["@type.builtin"] = { default = true, link = "Type", }, ["@type.definition"] = { default = true, link = "Typedef", }, ["@type.qualifier"] = { default = true, link = "Type", }, ["@variable.builtin"] = { default = true, link = "Special", }, } return M