aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim/treesitter.lua
diff options
context:
space:
mode:
authorLewis Russell <lewis6991@gmail.com>2023-03-30 10:26:28 +0100
committerGitHub <noreply@github.com>2023-03-30 10:26:28 +0100
commit61e54f26361b2e7d08eabde9a4cbf42aaa41683b (patch)
treedeb9d00e4a01a771fde08f777af2fa6054479d17 /runtime/lua/vim/treesitter.lua
parent8b7fb668e440f7793564b764bc9a691e3f45382a (diff)
downloadrneovim-61e54f26361b2e7d08eabde9a4cbf42aaa41683b.tar.gz
rneovim-61e54f26361b2e7d08eabde9a4cbf42aaa41683b.tar.bz2
rneovim-61e54f26361b2e7d08eabde9a4cbf42aaa41683b.zip
feat: add `vim.treesitter.language.get_filetypes()` (#22643)
Diffstat (limited to 'runtime/lua/vim/treesitter.lua')
-rw-r--r--runtime/lua/vim/treesitter.lua33
1 files changed, 13 insertions, 20 deletions
diff --git a/runtime/lua/vim/treesitter.lua b/runtime/lua/vim/treesitter.lua
index 4c3b17daa4..2594c1672d 100644
--- a/runtime/lua/vim/treesitter.lua
+++ b/runtime/lua/vim/treesitter.lua
@@ -58,9 +58,6 @@ function M._create_parser(bufnr, lang, opts)
vim.fn.bufload(bufnr)
- local ft = vim.bo[bufnr].filetype
- M.language.add(lang, { filetype = ft ~= '' and ft or nil })
-
local self = LanguageTree.new(bufnr, lang, opts)
---@private
@@ -94,7 +91,12 @@ function M._create_parser(bufnr, lang, opts)
return self
end
---- Returns the parser for a specific buffer and filetype and attaches it to the buffer
+--- @private
+local function valid_lang(lang)
+ return lang and lang ~= ''
+end
+
+--- Returns the parser for a specific buffer and attaches it to the buffer
---
--- If needed, this will create the parser.
---
@@ -110,18 +112,12 @@ function M.get_parser(bufnr, lang, opts)
bufnr = a.nvim_get_current_buf()
end
- if lang == nil then
- local ft = vim.bo[bufnr].filetype
- if ft ~= '' then
- lang = M.language.get_lang(ft) or ft
- -- TODO(lewis6991): we should error here and not default to ft
- -- if not lang then
- -- error(string.format('filetype %s of buffer %d is not associated with any lang', ft, bufnr))
- -- end
- else
- if parsers[bufnr] then
- return parsers[bufnr]
- end
+ if not valid_lang(lang) then
+ lang = M.language.get_lang(vim.bo[bufnr].filetype) or vim.bo[bufnr].filetype
+ end
+
+ if not valid_lang(lang) then
+ if not parsers[bufnr] then
error(
string.format(
'There is no parser available for buffer %d and one could not be'
@@ -131,9 +127,7 @@ function M.get_parser(bufnr, lang, opts)
)
)
end
- end
-
- if parsers[bufnr] == nil or parsers[bufnr]:lang() ~= lang then
+ elseif parsers[bufnr] == nil or parsers[bufnr]:lang() ~= lang then
parsers[bufnr] = M._create_parser(bufnr, lang, opts)
end
@@ -164,7 +158,6 @@ function M.get_string_parser(str, lang, opts)
str = { str, 'string' },
lang = { lang, 'string' },
})
- M.language.add(lang)
return LanguageTree.new(str, lang, opts)
end