Chore: Remove @eslint/compat and don't run all eslint rules in betterer (#97463)

* Remove eslint compat

* Remove fixup for testing library rules

* Make sure we don't ignore betterer eslint config from itself

* Update betterer to not run rules that are run in linting anyway
pull/97473/head^2
Tom Ratcliffe 6 months ago committed by GitHub
parent 9a262c867c
commit b105b32c8a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 69
      .betterer.eslint.config.js
  2. 10
      .betterer.ts
  3. 4
      eslint.config.js
  4. 1
      package.json
  5. 13
      yarn.lock

@ -1,8 +1,77 @@
// @ts-check // @ts-check
const emotionPlugin = require('@emotion/eslint-plugin');
const importPlugin = require('eslint-plugin-import');
const jestPlugin = require('eslint-plugin-jest');
const jsxA11yPlugin = require('eslint-plugin-jsx-a11y');
const lodashPlugin = require('eslint-plugin-lodash');
const barrelPlugin = require('eslint-plugin-no-barrel-files');
const reactPlugin = require('eslint-plugin-react');
const testingLibraryPlugin = require('eslint-plugin-testing-library');
const grafanaConfig = require('@grafana/eslint-config/flat');
const grafanaPlugin = require('@grafana/eslint-plugin');
// Include the Grafana config and remove the rules,
// as we just want to pull in all of the necessary configuration but not run the rules
// (this should only be concerned with checking rules that we want to improve,
// so there's no need to try and run the rules that will be linted properly anyway)
const { rules, ...baseConfig } = grafanaConfig;
/** /**
* @type {Array<import('eslint').Linter.Config>} * @type {Array<import('eslint').Linter.Config>}
*/ */
module.exports = [ module.exports = [
{
name: 'grafana/betterer-ignores',
ignores: [
'.github',
'.yarn',
'**/.*',
'**/*.gen.ts',
'**/build/',
'**/compiled/',
'**/dist/',
'data/',
'deployment_tools_config.json',
'devenv',
'e2e/test-plugins',
'e2e/tmp',
'packages/grafana-ui/src/components/Icon/iconBundle.ts',
'pkg',
'playwright-report',
'public/lib/monaco/',
'public/locales/_build',
'public/locales/**/*.js',
'public/vendor/',
'scripts/grafana-server/tmp',
'!.betterer.eslint.config.js',
],
},
{
name: 'react/jsx-runtime',
// @ts-ignore - not sure why but flat config is typed as a maybe?
...reactPlugin.configs.flat['jsx-runtime'],
},
{
files: ['**/*.{ts,tsx,js}'],
...baseConfig,
plugins: {
...baseConfig.plugins,
'@emotion': emotionPlugin,
lodash: lodashPlugin,
jest: jestPlugin,
import: importPlugin,
'jsx-a11y': jsxA11yPlugin,
'no-barrel-files': barrelPlugin,
'@grafana': grafanaPlugin,
'testing-library': testingLibraryPlugin,
},
linterOptions: {
// This reports unused disable directives that we can clean up but
// it also conflicts with the betterer eslint rules so disabled
reportUnusedDisableDirectives: false,
},
},
{ {
files: ['**/*.{js,jsx,ts,tsx}'], files: ['**/*.{js,jsx,ts,tsx}'],
rules: { rules: {

@ -2,8 +2,6 @@ import { BettererFileTest } from '@betterer/betterer';
import { ESLint } from 'eslint'; import { ESLint } from 'eslint';
import { promises as fs } from 'fs'; import { promises as fs } from 'fs';
import config from './.betterer.eslint.config';
// Why are we ignoring these? // Why are we ignoring these?
// They're all deprecated/being removed so doesn't make sense to fix types // They're all deprecated/being removed so doesn't make sense to fix types
const eslintPathsToIgnore = [ const eslintPathsToIgnore = [
@ -11,7 +9,6 @@ const eslintPathsToIgnore = [
'public/app/angular', // will be removed in Grafana 12 'public/app/angular', // will be removed in Grafana 12
'public/app/plugins/panel/graph', // will be removed alongside angular in Grafana 12 'public/app/plugins/panel/graph', // will be removed alongside angular in Grafana 12
'public/app/plugins/panel/table-old', // will be removed alongside angular in Grafana 12 'public/app/plugins/panel/table-old', // will be removed alongside angular in Grafana 12
'e2e/test-plugins',
]; ];
// Avoid using functions that report the position of the issues, as this causes a lot of merge conflicts // Avoid using functions that report the position of the issues, as this causes a lot of merge conflicts
@ -75,17 +72,14 @@ function regexp(pattern: RegExp, issueMessage: string) {
} }
function countEslintErrors() { function countEslintErrors() {
return new BettererFileTest(async (filePaths, fileTestResult, resolver) => { return new BettererFileTest(async (filePaths, fileTestResult) => {
// Just bail early if there's no files to test. Prevents trying to get the base config from failing // Just bail early if there's no files to test. Prevents trying to get the base config from failing
if (filePaths.length === 0) { if (filePaths.length === 0) {
return; return;
} }
const { baseDirectory } = resolver;
const runner = new ESLint({ const runner = new ESLint({
overrideConfig: config, overrideConfigFile: './.betterer.eslint.config.js',
cwd: baseDirectory,
warnIgnored: false, warnIgnored: false,
}); });

@ -1,6 +1,5 @@
// @ts-check // @ts-check
const emotionPlugin = require('@emotion/eslint-plugin'); const emotionPlugin = require('@emotion/eslint-plugin');
const { fixupPluginRules } = require('@eslint/compat');
const importPlugin = require('eslint-plugin-import'); const importPlugin = require('eslint-plugin-import');
const jestPlugin = require('eslint-plugin-jest'); const jestPlugin = require('eslint-plugin-jest');
const jestDomPlugin = require('eslint-plugin-jest-dom'); const jestDomPlugin = require('eslint-plugin-jest-dom');
@ -47,6 +46,7 @@ module.exports = [
'public/locales/**/*.js', 'public/locales/**/*.js',
'public/vendor/', 'public/vendor/',
'scripts/grafana-server/tmp', 'scripts/grafana-server/tmp',
'!.betterer.eslint.config.js',
], ],
}, },
// Conditionally run the betterer rules if enabled in dev's config // Conditionally run the betterer rules if enabled in dev's config
@ -260,7 +260,7 @@ module.exports = [
{ {
name: 'grafana/alerting-test-overrides', name: 'grafana/alerting-test-overrides',
plugins: { plugins: {
'testing-library': fixupPluginRules({ rules: testingLibraryPlugin.rules }), 'testing-library': testingLibraryPlugin,
'jest-dom': jestDomPlugin, 'jest-dom': jestDomPlugin,
}, },
files: [ files: [

@ -78,7 +78,6 @@
"@betterer/eslint": "5.4.0", "@betterer/eslint": "5.4.0",
"@cypress/webpack-preprocessor": "6.0.2", "@cypress/webpack-preprocessor": "6.0.2",
"@emotion/eslint-plugin": "11.12.0", "@emotion/eslint-plugin": "11.12.0",
"@eslint/compat": "^1.2.0",
"@grafana/eslint-config": "8.0.0", "@grafana/eslint-config": "8.0.0",
"@grafana/eslint-plugin": "link:./packages/grafana-eslint-rules", "@grafana/eslint-plugin": "link:./packages/grafana-eslint-rules",
"@grafana/plugin-e2e": "^1.11.0", "@grafana/plugin-e2e": "^1.11.0",

@ -2513,18 +2513,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@eslint/compat@npm:^1.2.0":
version: 1.2.3
resolution: "@eslint/compat@npm:1.2.3"
peerDependencies:
eslint: ^9.10.0
peerDependenciesMeta:
eslint:
optional: true
checksum: 10/5a8fc6ecb127a1ce757c2b94e4a71fd72939c3e9007eb80c0a819618e1c7cc98ffe3e5229a504c52e6f5b5dc0f6be3b899fa6a3dedb220cb4a02c8d5d0c333df
languageName: node
linkType: hard
"@eslint/config-array@npm:^0.18.0": "@eslint/config-array@npm:^0.18.0":
version: 0.18.0 version: 0.18.0
resolution: "@eslint/config-array@npm:0.18.0" resolution: "@eslint/config-array@npm:0.18.0"
@ -17195,7 +17183,6 @@ __metadata:
"@emotion/css": "npm:11.13.5" "@emotion/css": "npm:11.13.5"
"@emotion/eslint-plugin": "npm:11.12.0" "@emotion/eslint-plugin": "npm:11.12.0"
"@emotion/react": "npm:11.13.5" "@emotion/react": "npm:11.13.5"
"@eslint/compat": "npm:^1.2.0"
"@fingerprintjs/fingerprintjs": "npm:^3.4.2" "@fingerprintjs/fingerprintjs": "npm:^3.4.2"
"@floating-ui/react": "npm:0.26.28" "@floating-ui/react": "npm:0.26.28"
"@formatjs/intl-durationformat": "npm:^0.6.0" "@formatjs/intl-durationformat": "npm:^0.6.0"

Loading…
Cancel
Save