diff options
author | Thomas Vigouroux <tomvig38@gmail.com> | 2021-03-31 17:59:42 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-31 17:59:42 +0200 |
commit | 94c2ce2ce4599622bbf65215fde876ae7fb16114 (patch) | |
tree | ce5e884e81d443056710fe12d066f2f57a681336 /runtime/lua/vim/treesitter/query.lua | |
parent | c20ae3aadbcc1210faad4cd3cf6a8444f198b19d (diff) | |
parent | d6209a7b84a12fadd90fc5b4cb5efb66e8ca8127 (diff) | |
download | rneovim-94c2ce2ce4599622bbf65215fde876ae7fb16114.tar.gz rneovim-94c2ce2ce4599622bbf65215fde876ae7fb16114.tar.bz2 rneovim-94c2ce2ce4599622bbf65215fde876ae7fb16114.zip |
Merge pull request #14252 from tjdevries/tjdevries/ts_query_overrides
ts: Add per-language query overriding
Diffstat (limited to 'runtime/lua/vim/treesitter/query.lua')
-rw-r--r-- | runtime/lua/vim/treesitter/query.lua | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/runtime/lua/vim/treesitter/query.lua b/runtime/lua/vim/treesitter/query.lua index 1b29618997..188ec94a6a 100644 --- a/runtime/lua/vim/treesitter/query.lua +++ b/runtime/lua/vim/treesitter/query.lua @@ -90,6 +90,27 @@ local function new_match_metadata() return setmetatable({}, match_metatable) end +--- The explicitly set queries from |vim.treesitter.query.set_query()| +local explicit_queries = setmetatable({}, { + __index = function(t, k) + local lang_queries = {} + rawset(t, k, lang_queries) + + return lang_queries + end, +}) + +--- Sets the runtime query {query_name} for {lang} +--- +--- This allows users to override any runtime files and/or configuration +--- set by plugins. +---@param lang string: The language to use for the query +---@param query_name string: The name of the query (i.e. "highlights") +---@param text string: The query text (unparsed). +function M.set_query(lang, query_name, text) + explicit_queries[lang][query_name] = M.parse_query(lang, text) +end + --- Returns the runtime query {query_name} for {lang}. -- -- @param lang The language to use for the query @@ -97,6 +118,10 @@ end -- -- @return The corresponding query, parsed. function M.get_query(lang, query_name) + if explicit_queries[lang][query_name] then + return explicit_queries[lang][query_name] + end + local query_files = M.get_query_files(lang, query_name) local query_string = read_query_files(query_files) |