mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 12:27:24 +00:00 
			
		
		
		
	feat(lsp): return table from lsp/ files on runtimepath (#31663)
Problem: LSP configs on the runtimepath must have the same name as the LSP server and must also explicitly set the name in vim.lsp.config. This is redundant and creates a footgun where a user may accidentally use the wrong name when assigning to the vim.lsp.config table. Solution: Return a table from lsp/ runtimepath files instead
This commit is contained in:
		@@ -450,16 +450,20 @@ function lsp._resolve_config(name)
 | 
			
		||||
  if not econfig.resolved_config then
 | 
			
		||||
    -- Resolve configs from lsp/*.lua
 | 
			
		||||
    -- Calls to vim.lsp.config in lsp/* have a lower precedence than calls from other sites.
 | 
			
		||||
    local orig_configs = lsp.config._configs
 | 
			
		||||
    lsp.config._configs = {}
 | 
			
		||||
    pcall(vim.cmd.runtime, { ('lsp/%s.lua'):format(name), bang = true })
 | 
			
		||||
    local rtp_configs = lsp.config._configs
 | 
			
		||||
    lsp.config._configs = orig_configs
 | 
			
		||||
    local rtp_config = {} ---@type vim.lsp.Config
 | 
			
		||||
    for _, v in ipairs(api.nvim_get_runtime_file(('lsp/%s.lua'):format(name), true)) do
 | 
			
		||||
      local config = assert(loadfile(v))() ---@type any?
 | 
			
		||||
      if type(config) == 'table' then
 | 
			
		||||
        rtp_config = vim.tbl_deep_extend('force', rtp_config, config)
 | 
			
		||||
      else
 | 
			
		||||
        log.warn(string.format('%s does not return a table, ignoring', v))
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    local config = vim.tbl_deep_extend(
 | 
			
		||||
      'force',
 | 
			
		||||
      lsp.config._configs['*'] or {},
 | 
			
		||||
      rtp_configs[name] or {},
 | 
			
		||||
      rtp_config,
 | 
			
		||||
      lsp.config._configs[name] or {}
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user