diff options
author | Lewis Russell <lewis6991@gmail.com> | 2025-03-31 11:25:37 +0100 |
---|---|---|
committer | Lewis Russell <me@lewisr.dev> | 2025-03-31 16:42:25 +0100 |
commit | 2ee896201c463f57395cffd12a83c18a9a7bfd9b (patch) | |
tree | 8ad8926eac5d02159fdcba20e3593eafa04653bd /test | |
parent | 04901f4ee784af4124390bf596b951d80b7bd35d (diff) | |
download | rneovim-2ee896201c463f57395cffd12a83c18a9a7bfd9b.tar.gz rneovim-2ee896201c463f57395cffd12a83c18a9a7bfd9b.tar.bz2 rneovim-2ee896201c463f57395cffd12a83c18a9a7bfd9b.zip |
fix(lsp): better handling of "*" configs
Problem:
If a config name contains "*" it causes rtp discovery of `lsp/` to
consider the `*` as a wildcard and could lead to strange and unintended
behaviour. For example, accessing the `'*'` config from a `lsp/` file
would cause an infinite loop.
Solution:
- Explicitly disallow a config name from containing wildcards, with the
exception of `'*'`.
- When Resolving `'*'` config, skip the rtp step.
Diffstat (limited to 'test')
-rw-r--r-- | test/functional/plugin/lsp_spec.lua | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/test/functional/plugin/lsp_spec.lua b/test/functional/plugin/lsp_spec.lua index 856c086add..ebb8f20aaa 100644 --- a/test/functional/plugin/lsp_spec.lua +++ b/test/functional/plugin/lsp_spec.lua @@ -6449,5 +6449,36 @@ describe('LSP', function() end) ) end) + + it('does not allow wildcards in config name', function() + local err = + '.../lsp.lua:0: name: expected non%-wildcard string, got foo%*%. Info: LSP config name cannot contain wildcard %("%*"%)' + + matches( + err, + pcall_err(exec_lua, function() + local _ = vim.lsp.config['foo*'] + end) + ) + + matches( + err, + pcall_err(exec_lua, function() + vim.lsp.config['foo*'] = {} + end) + ) + + matches( + err, + pcall_err(exec_lua, function() + vim.lsp.config('foo*', {}) + end) + ) + + -- Exception for '*' + pcall(exec_lua, function() + vim.lsp.config('*', {}) + end) + end) end) end) |