From 6d4f48182131c36d57589eefd4cefe3c70256d04 Mon Sep 17 00:00:00 2001 From: Lewis Russell Date: Fri, 3 Mar 2023 09:44:02 +0000 Subject: fix(treesitter): disallow empty filetypes Fixes #22473 --- runtime/lua/vim/treesitter.lua | 3 ++- runtime/lua/vim/treesitter/language.lua | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) (limited to 'runtime/lua') diff --git a/runtime/lua/vim/treesitter.lua b/runtime/lua/vim/treesitter.lua index 09e3814a17..f80da433b1 100644 --- a/runtime/lua/vim/treesitter.lua +++ b/runtime/lua/vim/treesitter.lua @@ -47,7 +47,8 @@ function M._create_parser(bufnr, lang, opts) vim.fn.bufload(bufnr) - language.add(lang, { filetype = vim.bo[bufnr].filetype }) + local ft = vim.bo[bufnr].filetype + language.add(lang, { filetype = ft ~= '' and ft or nil }) local self = LanguageTree.new(bufnr, lang, opts) diff --git a/runtime/lua/vim/treesitter/language.lua b/runtime/lua/vim/treesitter/language.lua index 5bcc786e88..5f34d9cd56 100644 --- a/runtime/lua/vim/treesitter/language.lua +++ b/runtime/lua/vim/treesitter/language.lua @@ -60,6 +60,16 @@ function M.add(lang, opts) filetype = { filetype, { 'string', 'table' }, true }, }) + if filetype == '' then + error(string.format("'%s' is not a valid filetype", filetype)) + elseif type(filetype) == 'table' then + for _, f in ipairs(filetype) do + if f == '' then + error(string.format("'%s' is not a valid filetype", filetype)) + end + end + end + M.register(lang, filetype or lang) if vim._ts_has_language(lang) then -- cgit