aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2026-04-08 13:31:37 -0400
committerGitHub <noreply@github.com>2026-04-08 13:31:37 -0400
commit7e4d484c9dd24924f8d16012aa88aa7145f4d2a5 (patch)
tree127f325e0d877e4b731f6be2f0e32363a85548e0 /runtime/lua/vim
parent20a3254ad42dfb08faad275c1c79764de8e24c69 (diff)
downloadrneovim-7e4d484c9dd24924f8d16012aa88aa7145f4d2a5.tar.gz
rneovim-7e4d484c9dd24924f8d16012aa88aa7145f4d2a5.tar.bz2
rneovim-7e4d484c9dd24924f8d16012aa88aa7145f4d2a5.zip
refactor(filetype): move _get_known_filetypes, return a Set #38886
- `_get_known_filetypes` may be useful for other internal code, so move it to an internal function. - Use a set instead of a list, for performance.
Diffstat (limited to 'runtime/lua/vim')
-rw-r--r--runtime/lua/vim/filetype.lua35
-rw-r--r--runtime/lua/vim/lsp/health.lua32
2 files changed, 37 insertions, 30 deletions
diff --git a/runtime/lua/vim/filetype.lua b/runtime/lua/vim/filetype.lua
index 8483fef8fc..83f07afb76 100644
--- a/runtime/lua/vim/filetype.lua
+++ b/runtime/lua/vim/filetype.lua
@@ -103,6 +103,41 @@ function M._nextnonblank(bufnr, start_lnum)
return nil, nil
end
+--- Gets a best-effort set of all "known" filetypes, discovered by:
+--- - `getcompletion()`
+--- - `vim.filetype` internal registry
+--- @return table<string,true>
+function M._get_known_filetypes()
+ local known = {} --- @type table<string,true>
+ for _, ft in ipairs(vim.fn.getcompletion('', 'filetype')) do
+ known[ft] = true
+ end
+ local registry = vim.filetype.inspect()
+
+ local function add_filetype(value)
+ local filetype = type(value) == 'table' and value[1] or value
+ if type(filetype) == 'string' then
+ known[filetype] = true
+ end
+ end
+
+ for _, value in pairs(registry.extension) do
+ add_filetype(value)
+ end
+
+ for _, value in pairs(registry.filename) do
+ add_filetype(value)
+ end
+
+ for _, mappings in pairs(registry.pattern) do
+ for _, value in pairs(mappings) do
+ add_filetype(value)
+ end
+ end
+
+ return known
+end
+
do
--- @type table<string,vim.regex>
local regex_cache = {}
diff --git a/runtime/lua/vim/lsp/health.lua b/runtime/lua/vim/lsp/health.lua
index 68acf75ef2..84e5924222 100644
--- a/runtime/lua/vim/lsp/health.lua
+++ b/runtime/lua/vim/lsp/health.lua
@@ -212,38 +212,10 @@ local function check_position_encodings()
end
end
-local function get_known_filetypes()
- local known = vim.fn.getcompletion('', 'filetype')
- local registry = vim.filetype.inspect()
-
- local function add_filetype(value)
- local filetype = type(value) == 'table' and value[1] or value
- if type(filetype) == 'string' and not vim.list_contains(known, filetype) then
- known[#known + 1] = filetype
- end
- end
-
- for _, value in pairs(registry.extension) do
- add_filetype(value)
- end
-
- for _, value in pairs(registry.filename) do
- add_filetype(value)
- end
-
- for _, mappings in pairs(registry.pattern) do
- for _, value in pairs(mappings) do
- add_filetype(value)
- end
- end
-
- return known
-end
-
local function check_enabled_configs()
vim.health.start('vim.lsp: Enabled Configurations')
- local known_filetypes = get_known_filetypes()
+ local known_filetypes = vim.filetype._get_known_filetypes()
for name in vim.spairs(vim.lsp._enabled_configs) do
local config = vim.lsp.config[name]
@@ -276,7 +248,7 @@ local function check_enabled_configs()
for _, filetype in
ipairs(v --[[@as string[] ]])
do
- if not vim.list_contains(known_filetypes, filetype) then
+ if not known_filetypes[filetype] then
report_warn(
("Unknown filetype '%s' (Hint: filename extension != filetype)."):format(filetype)
)