mirror of
https://github.com/neovim/nvim-lspconfig.git
synced 2026-05-07 01:26:10 +02:00
Problem: 78596b61 removed javascript.jsx and typescript.tsx from the lsp/ configs, but the same invalid filetypes remain in the legacy lua/lspconfig/configs/ files. These still surface in checkhealth warnings since the legacy configs get merged at runtime. Solution: remove javascript.jsx and typescript.tsx from all legacy config filetypes lists. The correct filetypes (javascriptreact, typescriptreact) are already present in each list.
200 lines
5.9 KiB
Lua
200 lines
5.9 KiB
Lua
-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
-- This config is DEPRECATED.
|
|
-- Use the configs in `lsp/` instead (requires Nvim 0.11).
|
|
--
|
|
-- ALL configs in `lua/lspconfig/configs/` will be DELETED.
|
|
-- They exist only to support Nvim 0.10 or older.
|
|
-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
local util = require 'lspconfig.util'
|
|
local lsp = vim.lsp
|
|
|
|
local function fix_all(opts)
|
|
opts = opts or {}
|
|
|
|
local eslint_lsp_client = vim.lsp.get_clients({ bufnr = opts.bufnr, name = 'eslint' })[1]
|
|
if eslint_lsp_client == nil then
|
|
return
|
|
end
|
|
|
|
local request
|
|
if opts.sync then
|
|
request = function(bufnr, method, params)
|
|
eslint_lsp_client.request_sync(method, params, nil, bufnr)
|
|
end
|
|
else
|
|
request = function(bufnr, method, params)
|
|
eslint_lsp_client.request(method, params, nil, bufnr)
|
|
end
|
|
end
|
|
|
|
local bufnr = util.validate_bufnr(opts.bufnr or 0)
|
|
request(0, 'workspace/executeCommand', {
|
|
command = 'eslint.applyAllFixes',
|
|
arguments = {
|
|
{
|
|
uri = vim.uri_from_bufnr(bufnr),
|
|
version = lsp.util.buf_versions[bufnr],
|
|
},
|
|
},
|
|
})
|
|
end
|
|
|
|
local root_file = {
|
|
'.eslintrc',
|
|
'.eslintrc.js',
|
|
'.eslintrc.cjs',
|
|
'.eslintrc.yaml',
|
|
'.eslintrc.yml',
|
|
'.eslintrc.json',
|
|
'eslint.config.js',
|
|
'eslint.config.mjs',
|
|
'eslint.config.cjs',
|
|
'eslint.config.ts',
|
|
'eslint.config.mts',
|
|
'eslint.config.cts',
|
|
}
|
|
|
|
return {
|
|
default_config = {
|
|
cmd = { 'vscode-eslint-language-server', '--stdio' },
|
|
filetypes = {
|
|
'javascript',
|
|
'javascriptreact',
|
|
'typescript',
|
|
'typescriptreact',
|
|
'vue',
|
|
'svelte',
|
|
'astro',
|
|
},
|
|
-- https://eslint.org/docs/user-guide/configuring/configuration-files#configuration-file-formats
|
|
root_dir = function(fname)
|
|
root_file = util.insert_package_json(root_file, 'eslintConfig', fname)
|
|
return util.root_pattern(unpack(root_file))(fname)
|
|
end,
|
|
-- Refer to https://github.com/Microsoft/vscode-eslint#settings-options for documentation.
|
|
settings = {
|
|
validate = 'on',
|
|
packageManager = nil,
|
|
useESLintClass = false,
|
|
experimental = {
|
|
useFlatConfig = false,
|
|
},
|
|
codeActionOnSave = {
|
|
enable = false,
|
|
mode = 'all',
|
|
},
|
|
format = true,
|
|
quiet = false,
|
|
onIgnoredFiles = 'off',
|
|
rulesCustomizations = {},
|
|
run = 'onType',
|
|
problems = {
|
|
shortenToSingleLine = false,
|
|
},
|
|
-- nodePath configures the directory in which the eslint server should start its node_modules resolution.
|
|
-- This path is relative to the workspace folder (root dir) of the server instance.
|
|
nodePath = '',
|
|
-- use the workspace folder location or the file location (if no workspace folder is open) as the working directory
|
|
workingDirectory = { mode = 'location' },
|
|
codeAction = {
|
|
disableRuleComment = {
|
|
enable = true,
|
|
location = 'separateLine',
|
|
},
|
|
showDocumentation = {
|
|
enable = true,
|
|
},
|
|
},
|
|
},
|
|
on_new_config = function(config, new_root_dir)
|
|
-- The "workspaceFolder" is a VSCode concept. It limits how far the
|
|
-- server will traverse the file system when locating the ESLint config
|
|
-- file (e.g., .eslintrc).
|
|
config.settings.workspaceFolder = {
|
|
uri = new_root_dir,
|
|
name = vim.fn.fnamemodify(new_root_dir, ':t'),
|
|
}
|
|
|
|
-- Support flat config
|
|
if
|
|
vim.fn.filereadable(new_root_dir .. '/eslint.config.js') == 1
|
|
or vim.fn.filereadable(new_root_dir .. '/eslint.config.mjs') == 1
|
|
or vim.fn.filereadable(new_root_dir .. '/eslint.config.cjs') == 1
|
|
or vim.fn.filereadable(new_root_dir .. '/eslint.config.ts') == 1
|
|
or vim.fn.filereadable(new_root_dir .. '/eslint.config.mts') == 1
|
|
or vim.fn.filereadable(new_root_dir .. '/eslint.config.cts') == 1
|
|
then
|
|
config.settings.experimental.useFlatConfig = true
|
|
end
|
|
|
|
-- Support Yarn2 (PnP) projects
|
|
local pnp_cjs = new_root_dir .. '/.pnp.cjs'
|
|
local pnp_js = new_root_dir .. '/.pnp.js'
|
|
if vim.uv.fs_stat(pnp_cjs) or vim.uv.fs_stat(pnp_js) then
|
|
config.cmd = vim.list_extend({ 'yarn', 'exec' }, config.cmd)
|
|
end
|
|
end,
|
|
handlers = {
|
|
['eslint/openDoc'] = function(_, result)
|
|
if result then
|
|
vim.ui.open(result.url)
|
|
end
|
|
return {}
|
|
end,
|
|
['eslint/confirmESLintExecution'] = function(_, result)
|
|
if not result then
|
|
return
|
|
end
|
|
return 4 -- approved
|
|
end,
|
|
['eslint/probeFailed'] = function()
|
|
vim.notify('[lspconfig] ESLint probe failed.', vim.log.levels.WARN)
|
|
return {}
|
|
end,
|
|
['eslint/noLibrary'] = function()
|
|
vim.notify('[lspconfig] Unable to find ESLint library.', vim.log.levels.WARN)
|
|
return {}
|
|
end,
|
|
},
|
|
},
|
|
commands = {
|
|
EslintFixAll = {
|
|
function()
|
|
fix_all { sync = true, bufnr = 0 }
|
|
end,
|
|
description = 'Fix all eslint problems for this buffer',
|
|
},
|
|
},
|
|
docs = {
|
|
description = [[
|
|
https://github.com/hrsh7th/vscode-langservers-extracted
|
|
|
|
`vscode-eslint-language-server` is a linting engine for JavaScript / Typescript.
|
|
It can be installed via `npm`:
|
|
|
|
```sh
|
|
npm i -g vscode-langservers-extracted
|
|
```
|
|
|
|
`vscode-eslint-language-server` provides an `EslintFixAll` command that can be used to format a document on save:
|
|
```lua
|
|
lspconfig.eslint.setup({
|
|
--- ...
|
|
on_attach = function(client, bufnr)
|
|
vim.api.nvim_create_autocmd("BufWritePre", {
|
|
buffer = bufnr,
|
|
command = "EslintFixAll",
|
|
})
|
|
end,
|
|
})
|
|
```
|
|
|
|
See [vscode-eslint](https://github.com/microsoft/vscode-eslint/blob/55871979d7af184bf09af491b6ea35ebd56822cf/server/src/eslintServer.ts#L216-L229) for configuration options.
|
|
|
|
Messages handled in lspconfig: `eslint/openDoc`, `eslint/confirmESLintExecution`, `eslint/probeFailed`, `eslint/noLibrary`
|
|
|
|
Additional messages you can handle: `eslint/noConfig`
|
|
]],
|
|
},
|
|
}
|