诊断中报告了两次 ESLint 和 TSServer 错误

问题描述 投票:0回答:1

我正在尝试为我的 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)。

enter image description here

这是我的

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"
  },
}

还值得一提的是,我将 neovimlsp-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

谢谢!

eslint typescript-eslint nvim-lspconfig
1个回答
0
投票

有很多方法可以解决这个问题。

项目级别

您可以在

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
错误。

© www.soinside.com 2019 - 2024. All rights reserved.