summaryrefslogtreecommitdiff
path: root/start/lspconfig-0.1.8/lua/lspconfig/server_configurations/eslint.lua
diff options
context:
space:
mode:
authorMichael Smith <mikesmiffy128@gmail.com>2024-07-15 20:05:47 +0100
committerMichael Smith <mikesmiffy128@gmail.com>2024-07-15 20:05:47 +0100
commit522d56557b00246286d803425751a4334f3a94a5 (patch)
tree23ca335a3526197c2a6327ce10bfd58411b0a609 /start/lspconfig-0.1.8/lua/lspconfig/server_configurations/eslint.lua
parenta7b72fc27edac2305dbf0af807981bd703835b25 (diff)
Update lspconfig, add indent-blanklineHEADmaster
indent-blankline is probably old because I've actually been using it for ages, but I have a strict if-it-ain't-broke policy, so I'm not going to update it. lspconfig *was* broke though with nvim 0.10, so now it's fixed.
Diffstat (limited to 'start/lspconfig-0.1.8/lua/lspconfig/server_configurations/eslint.lua')
-rw-r--r--start/lspconfig-0.1.8/lua/lspconfig/server_configurations/eslint.lua202
1 files changed, 202 insertions, 0 deletions
diff --git a/start/lspconfig-0.1.8/lua/lspconfig/server_configurations/eslint.lua b/start/lspconfig-0.1.8/lua/lspconfig/server_configurations/eslint.lua
new file mode 100644
index 0000000..c52f827
--- /dev/null
+++ b/start/lspconfig-0.1.8/lua/lspconfig/server_configurations/eslint.lua
@@ -0,0 +1,202 @@
+local util = require 'lspconfig.util'
+local lsp = vim.lsp
+
+local function fix_all(opts)
+ opts = opts or {}
+
+ local eslint_lsp_client = util.get_active_client_by_name(opts.bufnr, 'eslint')
+ 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',
+ 'javascript.jsx',
+ 'typescript',
+ 'typescriptreact',
+ 'typescript.tsx',
+ '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 = util.path.join(new_root_dir, '.pnp.cjs')
+ local pnp_js = util.path.join(new_root_dir, '.pnp.js')
+ if util.path.exists(pnp_cjs) or util.path.exists(pnp_js) then
+ config.cmd = vim.list_extend({ 'yarn', 'exec' }, config.cmd)
+ end
+ end,
+ handlers = {
+ ['eslint/openDoc'] = function(_, result)
+ if not result then
+ return
+ end
+ local sysname = vim.loop.os_uname().sysname
+ if sysname:match 'Windows' then
+ os.execute(string.format('start %q', result.url))
+ elseif sysname:match 'Linux' then
+ os.execute(string.format('xdg-open %q', result.url))
+ else
+ os.execute(string.format('open %q', 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`
+]],
+ },
+}