diff options
| author | Justin M. Keyes <justinkz@gmail.com> | 2026-04-08 13:31:37 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-04-08 13:31:37 -0400 |
| commit | 7e4d484c9dd24924f8d16012aa88aa7145f4d2a5 (patch) | |
| tree | 127f325e0d877e4b731f6be2f0e32363a85548e0 /runtime/lua/vim | |
| parent | 20a3254ad42dfb08faad275c1c79764de8e24c69 (diff) | |
| download | rneovim-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.lua | 35 | ||||
| -rw-r--r-- | runtime/lua/vim/lsp/health.lua | 32 |
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) ) |