From d689d6102c6b4f18ae69e49b9cb2cabfb364e394 Mon Sep 17 00:00:00 2001 From: Maksim Spirkov <63721828+mspirkov@users.noreply.github.com> Date: Tue, 14 Oct 2025 12:40:35 +0300 Subject: [PATCH] Add ESLint to CI (#20592) --- .eslintignore | 1 - .eslintrc | 213 ------------------------------- .github/workflows/build.yml | 3 +- .github/workflows/ci-mariadb.yml | 3 +- .github/workflows/ci-mssql.yml | 3 +- .github/workflows/ci-mysql.yml | 3 +- .github/workflows/ci-node.yml | 3 +- .github/workflows/ci-oracle.yml | 3 +- .github/workflows/ci-pgsql.yml | 3 +- .github/workflows/ci-sqlite.yml | 3 +- .github/workflows/lint.yaml | 3 +- .github/workflows/static.yml | 3 +- eslint.config.js | 80 ++++++++++++ package.json | 4 +- 14 files changed, 93 insertions(+), 235 deletions(-) delete mode 100644 .eslintignore delete mode 100644 .eslintrc create mode 100644 eslint.config.js diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 96212a3593..0000000000 --- a/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -**/*{.,-}min.js diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index 5d860d64da..0000000000 --- a/.eslintrc +++ /dev/null @@ -1,213 +0,0 @@ -ecmaFeatures: - modules: true - jsx: true - -env: - amd: true - browser: true - es6: true - jquery: true - node: true - -# https://eslint.org/docs/latest/rules/ -rules: - # Possible Errors - comma-dangle: [2, never] - no-cond-assign: 2 - no-console: 0 - no-constant-condition: 2 - no-control-regex: 2 - no-debugger: 2 - no-dupe-args: 2 - no-dupe-keys: 2 - no-duplicate-case: 2 - no-empty: 2 - no-empty-character-class: 2 - no-ex-assign: 2 - no-extra-boolean-cast: 2 - no-extra-parens: 0 - no-extra-semi: 2 - no-func-assign: 2 - no-inner-declarations: [2, functions] - no-invalid-regexp: 2 - no-irregular-whitespace: 2 - no-negated-in-lhs: 2 - no-obj-calls: 2 - no-regex-spaces: 2 - no-sparse-arrays: 2 - no-unexpected-multiline: 2 - no-unreachable: 2 - use-isnan: 2 - valid-jsdoc: 0 - valid-typeof: 2 - - # Best Practices - accessor-pairs: 2 - block-scoped-var: 0 - complexity: [2, 6] - consistent-return: 0 - curly: 0 - default-case: 0 - dot-location: 0 - dot-notation: 0 - eqeqeq: 2 - guard-for-in: 2 - no-alert: 2 - no-caller: 2 - no-case-declarations: 2 - no-div-regex: 2 - no-else-return: 0 - no-empty-label: 2 - no-empty-pattern: 2 - no-eq-null: 2 - no-eval: 2 - no-extend-native: 2 - no-extra-bind: 2 - no-fallthrough: 2 - no-floating-decimal: 0 - no-implicit-coercion: 0 - no-implied-eval: 2 - no-invalid-this: 0 - no-iterator: 2 - no-labels: 0 - no-lone-blocks: 2 - no-loop-func: 2 - no-magic-number: 0 - no-multi-spaces: 0 - no-multi-str: 0 - no-native-reassign: 2 - no-new-func: 2 - no-new-wrappers: 2 - no-new: 2 - no-octal-escape: 2 - no-octal: 2 - no-proto: 2 - no-redeclare: 2 - no-return-assign: 2 - no-script-url: 2 - no-self-compare: 2 - no-sequences: 0 - no-throw-literal: 0 - no-unused-expressions: 2 - no-useless-call: 2 - no-useless-concat: 2 - no-void: 2 - no-warning-comments: 0 - no-with: 2 - radix: 2 - vars-on-top: 0 - wrap-iife: 2 - yoda: 0 - - # Strict - strict: 0 - - # Variables - init-declarations: 0 - no-catch-shadow: 2 - no-delete-var: 2 - no-label-var: 2 - no-shadow-restricted-names: 2 - no-shadow: 0 - no-undef-init: 2 - no-undef: 0 - no-undefined: 0 - no-unused-vars: 0 - no-use-before-define: 0 - - # Node.js and CommonJS - callback-return: 2 - global-require: 2 - handle-callback-err: 2 - no-mixed-requires: 0 - no-new-require: 0 - no-path-concat: 2 - no-process-exit: 2 - no-restricted-modules: 0 - no-sync: 0 - - # Stylistic Issues - array-bracket-spacing: 0 - block-spacing: 0 - brace-style: 0 - camelcase: 0 - comma-spacing: 0 - comma-style: 0 - computed-property-spacing: 0 - consistent-this: 0 - eol-last: 0 - func-names: 0 - func-style: 0 - id-length: 0 - id-match: 0 - indent: 0 - jsx-quotes: 0 - key-spacing: 0 - linebreak-style: 0 - lines-around-comment: 0 - max-depth: 0 - max-len: 0 - max-nested-callbacks: 0 - max-params: 0 - max-statements: [2, 30] - new-cap: 0 - new-parens: 0 - newline-after-var: 0 - no-array-constructor: 0 - no-bitwise: 0 - no-continue: 0 - no-inline-comments: 0 - no-lonely-if: 0 - no-mixed-spaces-and-tabs: 0 - no-multiple-empty-lines: 0 - no-negated-condition: 0 - no-nested-ternary: 0 - no-new-object: 0 - no-plusplus: 0 - no-restricted-syntax: 0 - no-spaced-func: 0 - no-ternary: 0 - no-trailing-spaces: 0 - no-underscore-dangle: 0 - no-unneeded-ternary: 0 - object-curly-spacing: 0 - one-var: 0 - operator-assignment: 0 - operator-linebreak: 0 - padded-blocks: 0 - quote-props: 0 - quotes: 0 - require-jsdoc: 0 - semi-spacing: 0 - semi: 0 - sort-vars: 0 - space-after-keywords: 0 - space-before-blocks: 0 - space-before-function-paren: 0 - space-before-keywords: 0 - space-in-parens: 0 - space-infix-ops: 0 - space-return-throw-case: 0 - space-unary-ops: 0 - spaced-comment: 0 - wrap-regex: 0 - - # ECMAScript 6 - arrow-body-style: 0 - arrow-parens: 0 - arrow-spacing: 0 - constructor-super: 0 - generator-star-spacing: 0 - no-arrow-condition: 0 - no-class-assign: 0 - no-const-assign: 0 - no-dupe-class-members: 0 - no-this-before-super: 0 - no-var: 0 - object-shorthand: 0 - prefer-arrow-callback: 0 - prefer-const: 0 - prefer-reflect: 0 - prefer-spread: 0 - prefer-template: 0 - require-yield: 0 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 77883c9986..a481071b75 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -11,8 +11,6 @@ on: - ".appveyor.yml" - ".dockerignore" - ".editorconfig" - - ".eslintignore" - - ".eslintrc" - ".git-blame-ignore-revs" - ".gitattributes" - ".github/CONTRIBUTING.md" @@ -30,6 +28,7 @@ on: - "framework/LICENSE.md" - "framework/README.md" - "framework/UPGRADE.md" + - "eslint.config.js" - "LICENSE.md" - "README.md" - "ROADMAP.md" diff --git a/.github/workflows/ci-mariadb.yml b/.github/workflows/ci-mariadb.yml index 5d021a173c..52c650f84a 100644 --- a/.github/workflows/ci-mariadb.yml +++ b/.github/workflows/ci-mariadb.yml @@ -11,8 +11,6 @@ on: - ".appveyor.yml" - ".dockerignore" - ".editorconfig" - - ".eslintignore" - - ".eslintrc" - ".git-blame-ignore-revs" - ".gitattributes" - ".github/CONTRIBUTING.md" @@ -30,6 +28,7 @@ on: - "framework/LICENSE.md" - "framework/README.md" - "framework/UPGRADE.md" + - "eslint.config.js" - "LICENSE.md" - "README.md" - "ROADMAP.md" diff --git a/.github/workflows/ci-mssql.yml b/.github/workflows/ci-mssql.yml index c9774cdac3..db1c85657c 100644 --- a/.github/workflows/ci-mssql.yml +++ b/.github/workflows/ci-mssql.yml @@ -11,8 +11,6 @@ on: - ".appveyor.yml" - ".dockerignore" - ".editorconfig" - - ".eslintignore" - - ".eslintrc" - ".git-blame-ignore-revs" - ".gitattributes" - ".github/CONTRIBUTING.md" @@ -30,6 +28,7 @@ on: - "framework/LICENSE.md" - "framework/README.md" - "framework/UPGRADE.md" + - "eslint.config.js" - "LICENSE.md" - "README.md" - "ROADMAP.md" diff --git a/.github/workflows/ci-mysql.yml b/.github/workflows/ci-mysql.yml index 3680fe7dce..03b213b181 100644 --- a/.github/workflows/ci-mysql.yml +++ b/.github/workflows/ci-mysql.yml @@ -11,8 +11,6 @@ on: - ".appveyor.yml" - ".dockerignore" - ".editorconfig" - - ".eslintignore" - - ".eslintrc" - ".git-blame-ignore-revs" - ".gitattributes" - ".github/CONTRIBUTING.md" @@ -30,6 +28,7 @@ on: - "framework/LICENSE.md" - "framework/README.md" - "framework/UPGRADE.md" + - "eslint.config.js" - "LICENSE.md" - "README.md" - "ROADMAP.md" diff --git a/.github/workflows/ci-node.yml b/.github/workflows/ci-node.yml index d69e53143a..911d9ae5a4 100644 --- a/.github/workflows/ci-node.yml +++ b/.github/workflows/ci-node.yml @@ -6,8 +6,6 @@ on: - ".appveyor.yml" - ".dockerignore" - ".editorconfig" - - ".eslintignore" - - ".eslintrc" - ".git-blame-ignore-revs" - ".gitattributes" - ".github/CONTRIBUTING.md" @@ -66,4 +64,5 @@ jobs: - name: Tests. run: | npm install + npm run lint npm test diff --git a/.github/workflows/ci-oracle.yml b/.github/workflows/ci-oracle.yml index 5e0a8b14c0..c321fe4a71 100644 --- a/.github/workflows/ci-oracle.yml +++ b/.github/workflows/ci-oracle.yml @@ -11,8 +11,6 @@ on: - ".appveyor.yml" - ".dockerignore" - ".editorconfig" - - ".eslintignore" - - ".eslintrc" - ".git-blame-ignore-revs" - ".gitattributes" - ".github/CONTRIBUTING.md" @@ -30,6 +28,7 @@ on: - "framework/LICENSE.md" - "framework/README.md" - "framework/UPGRADE.md" + - "eslint.config.js" - "LICENSE.md" - "README.md" - "ROADMAP.md" diff --git a/.github/workflows/ci-pgsql.yml b/.github/workflows/ci-pgsql.yml index 6198774cb0..e65ae7737d 100644 --- a/.github/workflows/ci-pgsql.yml +++ b/.github/workflows/ci-pgsql.yml @@ -11,8 +11,6 @@ on: - ".appveyor.yml" - ".dockerignore" - ".editorconfig" - - ".eslintignore" - - ".eslintrc" - ".git-blame-ignore-revs" - ".gitattributes" - ".github/CONTRIBUTING.md" @@ -30,6 +28,7 @@ on: - "framework/LICENSE.md" - "framework/README.md" - "framework/UPGRADE.md" + - "eslint.config.js" - "LICENSE.md" - "README.md" - "ROADMAP.md" diff --git a/.github/workflows/ci-sqlite.yml b/.github/workflows/ci-sqlite.yml index 90d8c3a705..1378850baa 100644 --- a/.github/workflows/ci-sqlite.yml +++ b/.github/workflows/ci-sqlite.yml @@ -11,8 +11,6 @@ on: - ".appveyor.yml" - ".dockerignore" - ".editorconfig" - - ".eslintignore" - - ".eslintrc" - ".git-blame-ignore-revs" - ".gitattributes" - ".github/CONTRIBUTING.md" @@ -30,6 +28,7 @@ on: - "framework/LICENSE.md" - "framework/README.md" - "framework/UPGRADE.md" + - "eslint.config.js" - "LICENSE.md" - "README.md" - "ROADMAP.md" diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index 94635f23b7..dd1861d3d3 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -11,8 +11,6 @@ on: - ".appveyor.yml" - ".dockerignore" - ".editorconfig" - - ".eslintignore" - - ".eslintrc" - ".git-blame-ignore-revs" - ".gitattributes" - ".github/CONTRIBUTING.md" @@ -30,6 +28,7 @@ on: - "framework/LICENSE.md" - "framework/README.md" - "framework/UPGRADE.md" + - "eslint.config.js" - "LICENSE.md" - "README.md" - "ROADMAP.md" diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml index ec31075555..5f6852eec4 100644 --- a/.github/workflows/static.yml +++ b/.github/workflows/static.yml @@ -11,8 +11,6 @@ on: - ".appveyor.yml" - ".dockerignore" - ".editorconfig" - - ".eslintignore" - - ".eslintrc" - ".git-blame-ignore-revs" - ".gitattributes" - ".github/CONTRIBUTING.md" @@ -30,6 +28,7 @@ on: - "framework/LICENSE.md" - "framework/README.md" - "framework/UPGRADE.md" + - "eslint.config.js" - "LICENSE.md" - "README.md" - "ROADMAP.md" diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000000..60ae8b7bfc --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,80 @@ +module.exports = [ + { + rules: { + "comma-dangle": ["error", "never"], + "no-cond-assign": "error", + "no-constant-condition": "error", + "no-control-regex": "error", + "no-debugger": "error", + "no-dupe-args": "error", + "no-dupe-keys": "error", + "no-duplicate-case": "error", + "no-empty": "error", + "no-empty-character-class": "error", + "no-ex-assign": "error", + "no-extra-boolean-cast": "error", + "no-extra-semi": "error", + "no-func-assign": "error", + "no-inner-declarations": ["error", "functions"], + "no-invalid-regexp": "error", + "no-irregular-whitespace": "error", + "no-negated-in-lhs": "error", + "no-obj-calls": "error", + "no-regex-spaces": "error", + "no-sparse-arrays": "error", + "no-unexpected-multiline": "error", + "no-unreachable": "error", + "use-isnan": "error", + "valid-typeof": "error", + "accessor-pairs": "error", + complexity: ["warn", 6], + eqeqeq: "warn", + "guard-for-in": "error", + "no-alert": "warn", + "no-caller": "error", + "no-case-declarations": "error", + "no-div-regex": "error", + "no-labels": "error", + "no-empty-pattern": "error", + "no-eq-null": "warn", + "no-eval": "error", + "no-extend-native": "error", + "no-extra-bind": "error", + "no-fallthrough": "error", + "no-implied-eval": "error", + "no-iterator": "error", + "no-lone-blocks": "error", + "no-loop-func": "warn", + "no-multi-str": "error", + "no-native-reassign": "error", + "no-new-func": "error", + "no-new-wrappers": "warn", + "no-new": "error", + "no-octal-escape": "error", + "no-octal": "error", + "no-proto": "error", + "no-redeclare": "error", + "no-return-assign": "error", + "no-script-url": "error", + "no-self-compare": "error", + "no-unused-expressions": "warn", + "no-useless-call": "error", + "no-useless-concat": "error", + "no-void": "error", + "no-with": "error", + radix: "error", + "wrap-iife": "warn", + "no-catch-shadow": "error", + "no-delete-var": "error", + "no-label-var": "error", + "no-shadow-restricted-names": "error", + "no-undef-init": "warn", + "callback-return": "error", + "global-require": "warn", + "handle-callback-err": "error", + "no-path-concat": "error", + "no-process-exit": "error", + "max-statements": ["warn", 30], + }, + }, +]; diff --git a/package.json b/package.json index 5d78e345bb..510af62e54 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "dependencies": {}, "devDependencies": { "chai": "^3.5.0", + "eslint": "^9.37.0", "jsdom": "24.1.0", "leche": "^2.3.0", "mocha": "^6.2.3", @@ -16,7 +17,8 @@ "sinon": "^1.17.6" }, "scripts": { - "test": "./node_modules/.bin/mocha tests/js/tests/*.test.js --timeout 0 --colors" + "test": "./node_modules/.bin/mocha tests/js/tests/*.test.js --timeout 0 --colors", + "lint": "eslint --max-warnings=79 ./framework/assets ./tests/js" }, "repository": { "type": "git",