From 259ece07259a889fc9cd08b6ceedd8db84102ce7 Mon Sep 17 00:00:00 2001 From: Daniel Sheeler Date: Mon, 9 Sep 2024 05:27:05 -0500 Subject: [PATCH] Add new eslint config --- .eslintrc.yml | 109 -------------------------------------- eslint.config.mjs | 130 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 130 insertions(+), 109 deletions(-) delete mode 100644 .eslintrc.yml create mode 100644 eslint.config.mjs diff --git a/.eslintrc.yml b/.eslintrc.yml deleted file mode 100644 index 9cfe52a..0000000 --- a/.eslintrc.yml +++ /dev/null @@ -1,109 +0,0 @@ -# SPDX-License-Identifier: CC0-1.0 -# SPDX-FileCopyrightText: No rights reserved - -env: - es2021: true -extends: 'eslint:recommended' -rules: - # See: https://eslint.org/docs/latest/rules/#possible-problems - array-callback-return: error - no-await-in-loop: error - no-constant-binary-expression: error - no-constructor-return: error - #no-duplicate-imports: error - no-new-native-nonconstructor: error - no-promise-executor-return: error - no-self-compare: error - no-template-curly-in-string: error - no-unmodified-loop-condition: error - no-unreachable-loop: error - no-unused-private-class-members: error - no-use-before-define: - - error - - functions: false - classes: true - variables: true - allowNamedExports: true - # See: https://eslint.org/docs/latest/rules/#suggestions - block-scoped-var: error - complexity: warn - consistent-return: error - default-param-last: error - eqeqeq: error - no-array-constructor: error - no-caller: error - no-extend-native: error - no-extra-bind: error - no-extra-label: error - no-iterator: error - no-label-var: error - no-loop-func: error - no-multi-assign: warn - no-new-object: error - no-new-wrappers: error - no-proto: error - no-shadow: warn - no-unused-vars: - - error - - varsIgnorePattern: ^_ - argsIgnorePattern: ^_ - no-var: warn - unicode-bom: error - # GJS Restrictions - no-restricted-globals: - - error - - name: Debugger - message: Internal use only - - name: GIRepositoryGType - message: Internal use only - - name: log - message: Use console.log() - - name: logError - message: Use console.warn() or console.error() - no-restricted-properties: - - error - - object: imports - property: format - message: Use template strings - - object: pkg - property: initFormat - message: Use template strings - - object: Lang - property: copyProperties - message: Use Object.assign() - - object: Lang - property: bind - message: Use arrow notation or Function.prototype.bind() - - object: Lang - property: Class - message: Use ES6 classes - no-restricted-syntax: - - error - - selector: >- - MethodDefinition[key.name="_init"] - CallExpression[arguments.length<=1][callee.object.type="Super"][callee.property.name="_init"] - message: Use constructor() and super() -# GJS Globals -globals: - ARGV: readonly - Debugger: readonly - GIRepositoryGType: readonly - globalThis: readonly - imports: readonly - Intl: readonly - log: readonly - logError: readonly - pkg: readonly - print: readonly - printerr: readonly - window: readonly - TextEncoder: readonly - TextDecoder: readonly - console: readonly - setTimeout: readonly - setInterval: readonly - clearTimeout: readonly - clearInterval: readonly -parserOptions: - ecmaVersion: 2022 - sourceType: module diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..cb3a423 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,130 @@ +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: { + ARGV: "readonly", + Debugger: "readonly", + GIRepositoryGType: "readonly", + globalThis: "readonly", + imports: "readonly", + Intl: "readonly", + log: "readonly", + logError: "readonly", + pkg: "readonly", + print: "readonly", + printerr: "readonly", + window: "readonly", + TextEncoder: "readonly", + TextDecoder: "readonly", + console: "readonly", + setTimeout: "readonly", + setInterval: "readonly", + clearTimeout: "readonly", + clearInterval: "readonly", + }, + + ecmaVersion: 2022, + sourceType: "module", + }, + + rules: { + "array-callback-return": "error", + "no-await-in-loop": "error", + "no-constant-binary-expression": "error", + "no-constructor-return": "error", + "no-new-native-nonconstructor": "error", + "no-promise-executor-return": "error", + "no-self-compare": "error", + "no-template-curly-in-string": "error", + "no-unmodified-loop-condition": "error", + "no-unreachable-loop": "error", + "no-unused-private-class-members": "error", + + "no-use-before-define": ["error", { + functions: false, + classes: true, + variables: true, + allowNamedExports: true, + }], + + "block-scoped-var": "error", + complexity: "warn", + "consistent-return": "error", + "default-param-last": "error", + eqeqeq: "error", + "no-array-constructor": "error", + "no-caller": "error", + "no-extend-native": "error", + "no-extra-bind": "error", + "no-extra-label": "error", + "no-iterator": "error", + "no-label-var": "error", + "no-loop-func": "error", + "no-multi-assign": "warn", + "no-new-object": "error", + "no-new-wrappers": "error", + "no-proto": "error", + "no-shadow": "warn", + + "no-unused-vars": ["error", { + varsIgnorePattern: "^_", + argsIgnorePattern: "^_", + }], + + "no-var": "warn", + "unicode-bom": "error", + + "no-restricted-globals": ["error", { + name: "Debugger", + message: "Internal use only", + }, { + name: "GIRepositoryGType", + message: "Internal use only", + }, { + name: "log", + message: "Use console.log()", + }, { + name: "logError", + message: "Use console.warn() or console.error()", + }], + + "no-restricted-properties": ["error", { + object: "imports", + property: "format", + message: "Use template strings", + }, { + object: "pkg", + property: "initFormat", + message: "Use template strings", + }, { + object: "Lang", + property: "copyProperties", + message: "Use Object.assign()", + }, { + object: "Lang", + property: "bind", + message: "Use arrow notation or Function.prototype.bind()", + }, { + object: "Lang", + property: "Class", + message: "Use ES6 classes", + }], + + "no-restricted-syntax": ["error", { + selector: "MethodDefinition[key.name=\"_init\"] CallExpression[arguments.length<=1][callee.object.type=\"Super\"][callee.property.name=\"_init\"]", + message: "Use constructor() and super()", + }], + }, +}]; \ No newline at end of file