我正在尝试为我的 React (TypeScript) 项目配置 ESLint。
这是我位于项目根目录中的初始
eslint.config.js
文件。
// @ts-check
import eslint from "@eslint/js"
import tseslint from "typescript-eslint"
import reactPlugin from "eslint-plugin-react"
import eslintPluginPrettierRecommended from "eslint-plugin-prettier/recommended"
import hooksPlugin from "eslint-plugin-react-hooks"
import { fixupPluginRules } from "@eslint/compat"
export default tseslint.config(
eslint.configs.recommended,
...tseslint.configs.recommended,
reactPlugin.configs.flat.recommended,
eslintPluginPrettierRecommended,
{
plugins: {
"react-hooks": fixupPluginRules(hooksPlugin),
},
},
{
rules: {
// "react/react-in-jsx-scope": "off",
// "@typescript-eslint/no-unused-vars": "warn",
...hooksPlugin.configs.recommended.rules,
},
},
)
我发现一个有趣的案例,诊断显示相同的错误两次。很可能一个错误来自 TSServer,另一个错误来自 ESLint。
如何避免这种情况?
如果它们都指向同一问题,我只想看到一个错误(可能来自 ESLint)。
这是我的
pacakge.json
文件
{
"name": "Example",
"devDependencies": {
"@eslint/compat": "^1.1.1",
"@eslint/js": "^9.9.0",
"@types/d3": "^7.4.3",
"@types/eslint__js": "^8.42.3",
"@types/react": "^18.3.3",
"@types/react-dom": "^18.3.0",
"@typescript-eslint/eslint-plugin": "^7.16.0",
"@typescript-eslint/parser": "^7.15.0",
"@vitejs/plugin-react": "^4.3.1",
"autoprefixer": "^10.4.19",
"eslint": "^8.57.0",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-prettier": "^5.2.1",
"eslint-plugin-react": "^7.35.0",
"eslint-plugin-react-hooks": "^4.6.2",
"eslint-plugin-react-refresh": "^0.4.7",
"prettier": "3.3.3",
"ts-node": "^10.9.2",
"typescript": "^5.5.4",
"typescript-eslint": "^8.2.0",
"vite": "^5.3.3",
"vite-plugin-svgr": "^4.2.0"
},
}
还值得一提的是,我将 neovim 与 lsp-config 一起使用。
这是
nvim-lspconfig.lua
LazyVim 插件管理器使用的文件
return {
"neovim/nvim-lspconfig",
config = function()
local lspconfig = require("lspconfig")
vim.api.nvim_create_autocmd('LspAttach', {
group = vim.api.nvim_create_augroup('UserLspConfig', {}),
callback = function(ev)
vim.bo[ev.buf].omnifunc = 'v:lua.vim.lsp.omnifunc'
local opts = { buffer = ev.buf }
vim.keymap.set('n', 'gd', "<cmd>Telescope lsp_definitions<cr>", opts)
vim.keymap.set('n', 'gr', "<cmd>Telescope lsp_references<cr>", opts)
vim.keymap.set('n', 'K', vim.lsp.buf.hover, opts)
vim.keymap.set('n', '<space>cr', vim.lsp.buf.rename, opts)
vim.keymap.set({ 'n', 'v' }, '<space>ca', vim.lsp.buf.code_action, opts)
-- vim.keymap.set('n', '<space>f', "<cmd>PrettierAsync<cr>", opts)
vim.keymap.set('n', '<space>f', function()
vim.lsp.buf.format { async = true }
end, opts)
end,
})
-- configure lua lsp
lspconfig["lua_ls"].setup({
settings = {
Lua = {
diagnostics = {
globals = { "vim" }
}
}
}
})
local function organize_imports()
local params = {
command = "_typescript.organizeImports",
arguments = { vim.api.nvim_buf_get_name(0) },
title = ""
}
vim.lsp.buf.execute_command(params)
end
-- configure TypeScript lsp
lspconfig["tsserver"].setup({
on_attach = on_attach,
capabilities = capabilities,
commands = {
OrganizeImports = {
organize_imports,
description = "Organize Imports"
}
}
})
-- configure HTML lsp
lspconfig["html"].setup({})
-- configure JSON lsp
lspconfig["jsonls"].setup({})
-- configure TailwindCSS lsp
lspconfig["tailwindcss"].setup({})
lspconfig["eslint"].setup({})
end
}
-- end
谢谢!
有很多方法可以解决这个问题。
您可以在
ts_ls
中禁用 eslint.config.js
已经涵盖的规则(并让 ts_ls
处理这些规则),或者禁用 tsconfig.json
中的警告(从而将责任转移到 eslint
)。
在 lsp 服务器级别过滤诊断。
ts_ls = {
settings = {
format = { enable = false },
-- disable unused vars hint
diagnostics = { ignoredCodes = { 6133 } },
}
}
通过禁用
6133
代码,我摆脱了 unused vars
的 ts_ls
错误。