diff options
Diffstat (limited to 'nvim/lsp/eslint.lua')
| -rwxr-xr-x | nvim/lsp/eslint.lua | 183 |
1 files changed, 0 insertions, 183 deletions
diff --git a/nvim/lsp/eslint.lua b/nvim/lsp/eslint.lua deleted file mode 100755 index 183343b..0000000 --- a/nvim/lsp/eslint.lua +++ /dev/null @@ -1,183 +0,0 @@ ---- @brief ---- ---- 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 ---- ``` ---- ---- The default `on_attach` config provides the `LspEslintFixAll` command that can be used to format a document on save: ---- ```lua ---- local base_on_attach = vim.lsp.config.eslint.on_attach ---- vim.lsp.config("eslint", { ---- on_attach = function(client, bufnr) ---- if not base_on_attach then return end ---- ---- base_on_attach(client, bufnr) ---- vim.api.nvim_create_autocmd("BufWritePre", { ---- buffer = bufnr, ---- command = "LspEslintFixAll", ---- }) ---- 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` - -local util = require 'lspconfig.util' -local lsp = vim.lsp - -return { - cmd = { 'vscode-eslint-language-server', '--stdio' }, - filetypes = { - 'javascript', - 'javascriptreact', - 'javascript.jsx', - 'typescript', - 'typescriptreact', - 'typescript.tsx', - 'vue', - 'svelte', - 'astro', - 'htmlangular', - }, - workspace_required = true, - on_attach = function(client, bufnr) - vim.api.nvim_buf_create_user_command(0, 'LspEslintFixAll', function() - client:request_sync('workspace/executeCommand', { - command = 'eslint.applyAllFixes', - arguments = { - { - uri = vim.uri_from_bufnr(bufnr), - version = lsp.util.buf_versions[bufnr], - }, - }, - }, nil, bufnr) - end, {}) - end, - -- https://eslint.org/docs/user-guide/configuring/configuration-files#configuration-file-formats - root_dir = function(bufnr, on_dir) - local root_file_patterns = { - '.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', - } - - local fname = vim.api.nvim_buf_get_name(bufnr) - root_file_patterns = util.insert_package_json(root_file_patterns, 'eslintConfig', fname) - on_dir(vim.fs.dirname(vim.fs.find(root_file_patterns, { path = fname, upward = true })[1])) - 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, - }, - }, - }, - before_init = function(_, config) - -- 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). - local root_dir = config.root_dir - - if root_dir then - config.settings = config.settings or {} - config.settings.workspaceFolder = { - uri = root_dir, - name = vim.fn.fnamemodify(root_dir, ':t'), - } - - -- Support flat config - local flat_config_files = { - 'eslint.config.js', - 'eslint.config.mjs', - 'eslint.config.cjs', - 'eslint.config.ts', - 'eslint.config.mts', - 'eslint.config.cts', - } - - for _, file in ipairs(flat_config_files) do - if vim.fn.filereadable(root_dir .. '/' .. file) == 1 then - config.settings.experimental = config.settings.experimental or {} - config.settings.experimental.useFlatConfig = true - break - end - end - - -- Support Yarn2 (PnP) projects - local pnp_cjs = root_dir .. '/.pnp.cjs' - local pnp_js = root_dir .. '/.pnp.js' - if vim.uv.fs_stat(pnp_cjs) or vim.uv.fs_stat(pnp_js) then - local cmd = config.cmd - config.cmd = vim.list_extend({ 'yarn', 'exec' }, cmd) - end - 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, - }, -} |
