diff --git a/.eslintrc.yml b/.eslintrc.yml deleted file mode 100644 index 4fd2633..0000000 --- a/.eslintrc.yml +++ /dev/null @@ -1,196 +0,0 @@ -extends: "eslint:recommended" - -# https://eslint.org/docs/rules/ -rules: - # Possible Errors - no-cond-assign: 2 - no-console: [2, {allow: [warn, error]}] - 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: [2, functions] - 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 - array-callback-return: 0 - block-scoped-var: 0 - complexity: [2, 10] - consistent-return: 0 - curly: [2, all] - default-case: 2 - dot-location: 0 - dot-notation: 2 - eqeqeq: 2 - guard-for-in: 2 - no-alert: 2 - no-caller: 2 - no-case-declarations: 2 - no-div-regex: 2 - no-else-return: 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: 2 - no-implicit-coercion: 0 - no-implied-eval: 2 - no-invalid-this: 0 - no-iterator: 2 - no-labels: 2 - no-lone-blocks: 2 - no-loop-func: 2 - no-magic-number: 0 - no-multi-spaces: [2, {ignoreEOLComments: true}] - no-multi-str: 2 - 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: 2 - 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: [1, never] - - # 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: 2 - no-undef-init: 2 - no-undef: 2 - no-undefined: 0 - no-unused-vars: 2 - no-use-before-define: 2 - - # 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: [2, never] - block-spacing: 0 - brace-style: [2, 1tbs] - camelcase: 2 - comma-dangle: [2, only-multiline] - comma-spacing: 2 - comma-style: [2, last] - computed-property-spacing: [2, never] - consistent-this: [2, me] - eol-last: 2 - func-call-spacing: 0 - func-names: [2, never] - func-style: 0 - id-length: 0 - id-match: 0 - indent: [2, 2, {flatTernaryExpressions: true}] - jsx-quotes: 0 - key-spacing: 2 - keyword-spacing: 2 - linebreak-style: 0 - lines-around-comment: 0 - max-depth: 0 - max-len: 0 - max-lines: 0 - max-nested-callbacks: 0 - max-params: 0 - max-statements-per-line: 0 - max-statements: [2, 30] - multiline-ternary: 0 - new-cap: 0 - new-parens: 2 - newline-after-var: 0 - newline-before-return: 0 - newline-per-chained-call: 0 - no-array-constructor: 0 - no-bitwise: 0 - no-continue: 0 - no-inline-comments: 0 - no-lonely-if: 2 - no-mixed-operators: 0 - no-mixed-spaces-and-tabs: 2 - no-multiple-empty-lines: [2, {max: 2}] - 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: 2 - no-underscore-dangle: 0 - no-unneeded-ternary: 0 - no-whitespace-before-property: 2 - object-curly-newline: 0 - object-curly-spacing: [2, never] - object-property-newline: 0 - one-var-declaration-per-line: 2 - one-var: [2, {initialized: never}] - operator-assignment: 0 - operator-linebreak: 0 - padded-blocks: 0 - quote-props: [2, as-needed] - quotes: [2, single, {avoidEscape: true}] - require-jsdoc: 0 - semi-spacing: 2 - semi: [2, always] - sort-keys: 0 - sort-vars: 0 - space-before-blocks: [2, always] - space-before-function-paren: [2, never] - space-in-parens: [2, never] - space-infix-ops: 2 - space-unary-ops: [2, {words: true, nonwords: false}] - spaced-comment: [2, always] - switch-colon-spacing: 2 - unicode-bom: 0 - wrap-regex: 2 diff --git a/README.md b/README.md index 87dd315..50d04c5 100644 --- a/README.md +++ b/README.md @@ -10,11 +10,16 @@ npm install --save-dev eslint-config-chartjs ## Usage -Once the `eslint-config-chartjs` package is installed, you can use it by specifying `chartjs` in the [`extends`](http://eslint.org/docs/user-guide/configuring#extending-configuration-files) section of your [ESLint configuration](http://eslint.org/docs/user-guide/configuring). +You can use this config like below. For more information, please read [Using a Shareable Configuration Package](https://eslint.org/docs/latest/use/configure/configuration-files#using-a-shareable-configuration-package). -```yml -extends: chartjs +```js +// eslint.config.js +import { defineConfig } from "eslint/config"; +import chartjs from "eslint-config-chartjs"; -rules: - # Additional, per-project rules... +export default defineConfig([ + { + extends: [chartjs], + }, +]); ``` diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..b3634bd --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,260 @@ +import {defineConfig} from 'eslint/config'; +import path from 'node:path'; +import {fileURLToPath} from 'node:url'; +import js from '@eslint/js'; +import {FlatCompat} from '@eslint/eslintrc'; +import stylisticJs from '@stylistic/eslint-plugin'; +import nodePlugin from 'eslint-plugin-n'; + +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 defineConfig([ + { + extends: compat.extends('eslint:recommended'), + + plugins: { + '@stylistic': stylisticJs, + n: nodePlugin, + }, + + // https://eslint.org/docs/latest/rules/ + rules: { + // Possible Errors + 'no-cond-assign': 2, + 'no-console': [ + 2, + { + allow: ['warn', 'error'], + }, + ], + '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, + '@stylistic/no-extra-parens': [2, 'functions'], + '@stylistic/no-extra-semi': 2, + 'no-func-assign': 2, + 'no-inner-declarations': [2, 'functions'], + 'no-invalid-regexp': 2, + 'no-irregular-whitespace': 2, + 'no-unsafe-negation': 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, + 'array-callback-return': 0, + 'block-scoped-var': 0, + complexity: [2, 10], + 'consistent-return': 0, + curly: [2, 'all'], + 'default-case': 2, + '@stylistic/dot-location': 0, + 'dot-notation': 2, + eqeqeq: 2, + 'guard-for-in': 2, + 'no-alert': 2, + 'no-caller': 2, + 'no-case-declarations': 2, + 'no-div-regex': 2, + 'no-else-return': 2, + 'no-empty-pattern': 2, + 'no-eq-null': 2, + 'no-eval': 2, + 'no-extend-native': 2, + 'no-extra-bind': 2, + 'no-fallthrough': 2, + '@stylistic/no-floating-decimal': 2, + 'no-implicit-coercion': 0, + 'no-implied-eval': 2, + 'no-invalid-this': 0, + 'no-iterator': 2, + 'no-labels': 2, + 'no-lone-blocks': 2, + 'no-loop-func': 2, + 'no-magic-number': 0, + '@stylistic/no-multi-spaces': [ + 2, + { + ignoreEOLComments: true, + }, + ], + 'no-multi-str': 2, + 'no-global-assign': 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': 2, + '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, + '@stylistic/wrap-iife': 2, + yoda: [1, 'never'], + + // Strict + strict: 0, + + // Variables + 'init-declarations': 0, + 'no-shadow': 2, + 'no-delete-var': 2, + 'no-label-var': 2, + 'no-shadow-restricted-names': 2, + 'no-shadow': 2, + 'no-undef-init': 2, + 'no-undef': 2, + 'no-undefined': 0, + 'no-unused-vars': 2, + 'no-use-before-define': 2, + + // Node.js and CommonJS + 'n/callback-return': 2, + 'n/global-require': 2, + 'n/handle-callback-err': 2, + '@stylistic/no-mixed-requires': 0, + 'n/no-new-require': 0, + 'n/no-path-concat': 2, + 'n/no-process-exit': 2, + 'n/no-restricted-modules': 0, + 'n/no-sync': 0, + + // Stylistic Issues + '@stylistic/array-bracket-spacing': [2, 'never'], + '@stylistic/block-spacing': 0, + '@stylistic/brace-style': [2, '1tbs'], + camelcase: 2, + '@stylistic/comma-dangle': [2, 'only-multiline'], + '@stylistic/comma-spacing': 2, + '@stylistic/comma-style': [2, 'last'], + '@stylistic/computed-property-spacing': [2, 'never'], + 'consistent-this': [2, 'me'], + '@stylistic/eol-last': 2, + '@stylistic/func-call-spacing': 0, + 'func-names': [2, 'never'], + 'func-style': 0, + 'id-length': 0, + 'id-match': 0, + '@stylistic/indent': [ + 2, + 2, + { + flatTernaryExpressions: true, + }, + ], + '@stylistic/jsx-quotes': 0, + '@stylistic/key-spacing': 2, + '@stylistic/keyword-spacing': 2, + '@stylistic/linebreak-style': 0, + '@stylistic/lines-around-comment': 0, + 'max-depth': 0, + '@stylistic/max-len': 0, + 'max-lines': 0, + 'max-nested-callbacks': 0, + 'max-params': 0, + '@stylistic/max-statements-per-line': 0, + 'max-statements': [2, 30], + '@stylistic/multiline-ternary': 0, + 'new-cap': 0, + '@stylistic/new-parens': 2, + '@stylistic/newline-after-var': 0, + '@stylistic/newline-before-return': 0, + '@stylistic/newline-per-chained-call': 0, + 'no-array-constructor': 0, + 'no-bitwise': 0, + 'no-continue': 0, + 'no-inline-comments': 0, + 'no-lonely-if': 2, + '@stylistic/no-mixed-operators': 0, + '@stylistic/no-mixed-spaces-and-tabs': 2, + '@stylistic/no-multiple-empty-lines': [ + 2, + { + max: 2, + }, + ], + 'no-negated-condition': 0, + 'no-nested-ternary': 0, + 'no-object-constructor': 0, + 'no-plusplus': 0, + 'no-restricted-syntax': 0, + '@stylistic/no-spaced-func': 0, + 'no-ternary': 0, + '@stylistic/no-trailing-spaces': 2, + 'no-underscore-dangle': 0, + 'no-unneeded-ternary': 0, + '@stylistic/no-whitespace-before-property': 2, + '@stylistic/object-curly-newline': 0, + '@stylistic/object-curly-spacing': [2, 'never'], + '@stylistic/object-property-newline': 0, + '@stylistic/one-var-declaration-per-line': 2, + 'one-var': [ + 2, + { + initialized: 'never', + }, + ], + 'operator-assignment': 0, + '@stylistic/operator-linebreak': 0, + '@stylistic/padded-blocks': 0, + '@stylistic/quote-props': [2, 'as-needed'], + "@stylistic/quotes": [ + 2, + 'single', + { + avoidEscape: true, + }, + ], + 'require-jsdoc': 0, + '@stylistic/semi-spacing': 2, + "@stylistic/semi": [2, 'always'], + 'sort-keys': 0, + 'sort-vars': 0, + '@stylistic/space-before-blocks': [2, 'always'], + '@stylistic/space-before-function-paren': [2, 'never'], + '@stylistic/space-in-parens': [2, 'never'], + '@stylistic/space-infix-ops': 2, + '@stylistic/space-unary-ops': [ + 2, + { + words: true, + nonwords: false, + }, + ], + '@stylistic/spaced-comment': [2, 'always'], + '@stylistic/switch-colon-spacing': 2, + 'unicode-bom': 0, + '@stylistic/wrap-regex': 2, + }, + }, +]); diff --git a/package.json b/package.json index c4388db..293f95e 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,21 @@ "description": "Chart.js shareable ESLint config", "repository": "chartjs/eslint-config-chartjs", "homepage": "https://www.chartjs.org", - "version": "0.3.0", + "version": "0.4.0", "license": "MIT", - "main": ".eslintrc.yml" -} + "main": "eslint.config.mjs", + "devDependencies": { + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "^9.23.0", + "@stylistic/eslint-plugin": "^4.2.0", + "eslint": "^9.23.0", + "eslint-plugin-n": "^17.17.0" + }, + "peerDependencies": { + "eslint": ">=9.0.0", + "typescript": ">=4.8.4 <5.9.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.0.0" + } +} \ No newline at end of file