From a108f10df8446a0e73e40eab9e93d41aa8c44de3 Mon Sep 17 00:00:00 2001 From: "FeRD (Frank Dana)" Date: Tue, 28 Jan 2025 18:28:24 -0500 Subject: [PATCH] Convert eslint config to .mjs format --- .eslintrc.json | 290 ----------------------------------------- .eslintrc.json.license | 3 - eslint.config.mjs | 242 ++++++++++++++++++++++++++++++++++ 3 files changed, 242 insertions(+), 293 deletions(-) delete mode 100644 .eslintrc.json delete mode 100644 .eslintrc.json.license create mode 100644 eslint.config.mjs diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 53df6f82e..000000000 --- a/.eslintrc.json +++ /dev/null @@ -1,290 +0,0 @@ -{ - "env": { - "es2021": true, - "shared-node-browser": true - }, - "extends": "eslint:recommended", - "rules": { - "array-bracket-newline": [ - "error", - "consistent" - ], - "array-bracket-spacing": [ - "error", - "never" - ], - "array-callback-return": "error", - "arrow-spacing": "error", - "block-scoped-var": "error", - "block-spacing": "error", - "brace-style": "error", - "comma-dangle": [ - "error", - { - "arrays": "always-multiline", - "objects": "always-multiline", - "functions": "never" - } - ], - "comma-spacing": [ - "error", - { - "before": false, - "after": true - } - ], - "comma-style": [ - "error", - "last" - ], - "computed-property-spacing": "error", - "curly": [ - "error", - "multi-or-nest", - "consistent" - ], - "dot-location": [ - "error", - "property" - ], - "eol-last": "error", - "eqeqeq": "error", - "func-call-spacing": "error", - "func-name-matching": "error", - "func-style": [ - "error", - "declaration", - { - "allowArrowFunctions": true - } - ], - "grouped-accessor-pairs": [ - "error", - "getBeforeSet" - ], - "indent": [ - "error", - 4, - { - "ignoredNodes": [ - "CallExpression[callee.object.name=GObject][callee.property.name=registerClass] > ClassExpression:first-child" - ], - "MemberExpression": "off", - "SwitchCase": 1 - } - ], - "key-spacing": [ - "error", - { - "beforeColon": false, - "afterColon": true - } - ], - "keyword-spacing": [ - "error", - { - "before": true, - "after": true - } - ], - "linebreak-style": [ - "error", - "unix" - ], - "lines-between-class-members": "error", - "max-nested-callbacks": [ - "error", - { - "max": 5 - } - ], - "max-statements-per-line": "error", - "new-parens": "error", - "no-array-constructor": "error", - "no-caller": "error", - "no-constant-condition": [ - "error", - { - "checkLoops": false - } - ], - "no-empty": [ - "error", - { - "allowEmptyCatch": true - } - ], - "no-extra-bind": "error", - "no-implicit-coercion": [ - "error", - { - "allow": [ - "!!" - ] - } - ], - "no-iterator": "error", - "no-label-var": "error", - "no-lonely-if": "error", - "no-loop-func": "error", - "no-nested-ternary": "error", - "no-new-object": "error", - "no-new-wrappers": "error", - "no-octal-escape": "error", - "no-proto": "error", - "no-prototype-builtins": "off", - "no-restricted-properties": [ - "error", - { - "object": "Lang", - "property": "bind", - "message": "Use arrow notation or Function.prototype.bind()" - }, - { - "object": "Lang", - "property": "Class", - "message": "Use ES6 classes" - }, - { - "object": "imports", - "property": "mainloop", - "message": "Use GLib main loops and timeouts" - } - ], - "no-restricted-syntax": [ - "error", - { - "selector": "MethodDefinition[key.name=\"_init\"] > FunctionExpression[params.length=1] > BlockStatement[body.length=1] CallExpression[arguments.length=1][callee.object.type=\"Super\"][callee.property.name=\"_init\"] > Identifier:first-child", - "message": "_init() that only calls super._init() is unnecessary" - }, - { - "selector": "MethodDefinition[key.name=\"_init\"] > FunctionExpression[params.length=0] > BlockStatement[body.length=1] CallExpression[arguments.length=0][callee.object.type=\"Super\"][callee.property.name=\"_init\"]", - "message": "_init() that only calls super._init() is unnecessary" - } - ], - "no-return-assign": "error", - "no-return-await": "error", - "no-self-compare": "error", - "no-shadow-restricted-names": "error", - "no-spaced-func": "error", - "no-tabs": "error", - "no-template-curly-in-string": "error", - "no-throw-literal": "error", - "no-trailing-spaces": "error", - "no-undef-init": "error", - "no-unneeded-ternary": "error", - "no-unused-expressions": "error", - "no-unused-vars": [ - "error", - { - "args": "none", - "vars": "local" - } - ], - "no-useless-call": "error", - "no-useless-computed-key": "error", - "no-useless-concat": "error", - "no-useless-constructor": "error", - "no-useless-rename": "error", - "no-useless-return": "error", - "no-whitespace-before-property": "error", - "no-with": "error", - "nonblock-statement-body-position": [ - "error", - "below" - ], - "object-curly-newline": [ - "error", - { - "consistent": true - } - ], - "object-curly-spacing": "error", - "operator-assignment": "error", - "operator-linebreak": "error", - "prefer-const": "error", - "prefer-numeric-literals": "error", - "prefer-promise-reject-errors": "error", - "prefer-rest-params": "error", - "prefer-spread": "error", - "quotes": [ - "error", - "single", - { - "avoidEscape": true - } - ], - "require-await": "error", - "rest-spread-spacing": "error", - "semi": [ - "error", - "always" - ], - "semi-spacing": [ - "error", - { - "before": false, - "after": true - } - ], - "semi-style": "error", - "space-before-blocks": "error", - "space-before-function-paren": [ - "error", - { - "named": "never", - "anonymous": "always", - "asyncArrow": "always" - } - ], - "space-in-parens": "error", - "space-infix-ops": [ - "error", - { - "int32Hint": false - } - ], - "space-unary-ops": "error", - "spaced-comment": "error", - "switch-colon-spacing": "error", - "symbol-description": "error", - "template-curly-spacing": "error", - "template-tag-spacing": "error", - "unicode-bom": "error", - "valid-jsdoc": [ - "error", - { - "requireReturn": false - } - ], - "wrap-iife": [ - "error", - "inside" - ], - "yield-star-spacing": "error", - "yoda": "error" - }, - "globals": { - "ARGV": "readonly", - "Debugger": "readonly", - "GIRepositoryGType": "readonly", - "globalThis": "readonly", - "imports": "readonly", - "Intl": "readonly", - "log": "readonly", - "logError": "readonly", - "print": "readonly", - "printerr": "readonly", - - "global": false, - "debug": false, - "_": false, - "_C": false, - "_N": false, - "ngettext": false - }, - "parserOptions": { - "ecmaVersion": "latest", - "sourceType": "module" - } -} diff --git a/.eslintrc.json.license b/.eslintrc.json.license deleted file mode 100644 index 808dbbf56..000000000 --- a/.eslintrc.json.license +++ /dev/null @@ -1,3 +0,0 @@ -SPDX-FileCopyrightText: GSConnect Developers https://github.com/GSConnect - -SPDX-License-Identifier: GPL-2.0-or-later diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 000000000..b9a7436e4 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,242 @@ +// SPDX-FileCopyrightText: GSConnect Developers https://github.com/GSConnect +// +// SPDX-License-Identifier: GPL-2.0-or-later +import globals from "globals"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import js from "@eslint/js"; +import { FlatCompat } from "@eslint/eslintrc"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, + allConfig: js.configs.all +}); + +export default [...compat.extends("eslint:recommended"), { + languageOptions: { + globals: { + ...globals["shared-node-browser"], + ARGV: "readonly", + Debugger: "readonly", + GIRepositoryGType: "readonly", + globalThis: "readonly", + imports: "readonly", + Intl: "readonly", + log: "readonly", + logError: "readonly", + print: "readonly", + printerr: "readonly", + global: false, + debug: false, + _: false, + _C: false, + _N: false, + ngettext: false, + }, + + ecmaVersion: "latest", + sourceType: "module", + }, + + rules: { + "array-bracket-newline": ["error", "consistent"], + "array-bracket-spacing": ["error", "never"], + "array-callback-return": "error", + "arrow-spacing": "error", + "block-scoped-var": "error", + "block-spacing": "error", + "brace-style": "error", + + "comma-dangle": ["error", { + arrays: "always-multiline", + objects: "always-multiline", + functions: "never", + }], + + "comma-spacing": ["error", { + before: false, + after: true, + }], + + "comma-style": ["error", "last"], + "computed-property-spacing": "error", + curly: ["error", "multi-or-nest", "consistent"], + "dot-location": ["error", "property"], + "eol-last": "error", + eqeqeq: "error", + "func-call-spacing": "error", + "func-name-matching": "error", + + "func-style": ["error", "declaration", { + allowArrowFunctions: true, + }], + + "grouped-accessor-pairs": ["error", "getBeforeSet"], + + indent: ["error", 4, { + ignoredNodes: [ + "CallExpression[callee.object.name=GObject][callee.property.name=registerClass] > ClassExpression:first-child", + ], + + MemberExpression: "off", + SwitchCase: 1, + }], + + "key-spacing": ["error", { + beforeColon: false, + afterColon: true, + }], + + "keyword-spacing": ["error", { + before: true, + after: true, + }], + + "linebreak-style": ["error", "unix"], + "lines-between-class-members": "error", + + "max-nested-callbacks": ["error", { + max: 5, + }], + + "max-statements-per-line": "error", + "new-parens": "error", + "no-array-constructor": "error", + "no-caller": "error", + + "no-constant-condition": ["error", { + checkLoops: false, + }], + + "no-empty": ["error", { + allowEmptyCatch: true, + }], + + "no-extra-bind": "error", + + "no-implicit-coercion": ["error", { + allow: ["!!"], + }], + + "no-iterator": "error", + "no-label-var": "error", + "no-lonely-if": "error", + "no-loop-func": "error", + "no-nested-ternary": "error", + "no-new-object": "error", + "no-new-wrappers": "error", + "no-octal-escape": "error", + "no-proto": "error", + "no-prototype-builtins": "off", + + "no-restricted-properties": ["error", { + object: "Lang", + property: "bind", + message: "Use arrow notation or Function.prototype.bind()", + }, { + object: "Lang", + property: "Class", + message: "Use ES6 classes", + }, { + object: "imports", + property: "mainloop", + message: "Use GLib main loops and timeouts", + }], + + "no-restricted-syntax": ["error", { + selector: "MethodDefinition[key.name=\"_init\"] > FunctionExpression[params.length=1] > BlockStatement[body.length=1] CallExpression[arguments.length=1][callee.object.type=\"Super\"][callee.property.name=\"_init\"] > Identifier:first-child", + message: "_init() that only calls super._init() is unnecessary", + }, { + selector: "MethodDefinition[key.name=\"_init\"] > FunctionExpression[params.length=0] > BlockStatement[body.length=1] CallExpression[arguments.length=0][callee.object.type=\"Super\"][callee.property.name=\"_init\"]", + message: "_init() that only calls super._init() is unnecessary", + }], + + "no-return-assign": "error", + "no-return-await": "error", + "no-self-compare": "error", + "no-shadow-restricted-names": "error", + "no-spaced-func": "error", + "no-tabs": "error", + "no-template-curly-in-string": "error", + "no-throw-literal": "error", + "no-trailing-spaces": "error", + "no-undef-init": "error", + "no-unneeded-ternary": "error", + "no-unused-expressions": "error", + + "no-unused-vars": ["error", { + args: "none", + vars: "local", + }], + + "no-useless-call": "error", + "no-useless-computed-key": "error", + "no-useless-concat": "error", + "no-useless-constructor": "error", + "no-useless-rename": "error", + "no-useless-return": "error", + "no-whitespace-before-property": "error", + "no-with": "error", + "nonblock-statement-body-position": ["error", "below"], + + "object-curly-newline": ["error", { + consistent: true, + }], + + "object-curly-spacing": "error", + "operator-assignment": "error", + "operator-linebreak": "error", + "prefer-const": "error", + "prefer-numeric-literals": "error", + "prefer-promise-reject-errors": "error", + "prefer-rest-params": "error", + "prefer-spread": "error", + + quotes: ["error", "single", { + avoidEscape: true, + }], + + "require-await": "error", + "rest-spread-spacing": "error", + semi: ["error", "always"], + + "semi-spacing": ["error", { + before: false, + after: true, + }], + + "semi-style": "error", + "space-before-blocks": "error", + + "space-before-function-paren": ["error", { + named: "never", + anonymous: "always", + asyncArrow: "always", + }], + + "space-in-parens": "error", + + "space-infix-ops": ["error", { + int32Hint: false, + }], + + "space-unary-ops": "error", + "spaced-comment": "error", + "switch-colon-spacing": "error", + "symbol-description": "error", + "template-curly-spacing": "error", + "template-tag-spacing": "error", + "unicode-bom": "error", + + "valid-jsdoc": ["error", { + requireReturn: false, + }], + + "wrap-iife": ["error", "inside"], + "yield-star-spacing": "error", + yoda: "error", + }, +}];