1
1
mirror of https://github.com/theoludwig/eslint-config-conventions.git synced 2025-05-18 12:02:33 +02:00

Compare commits

..

65 Commits

Author SHA1 Message Date
d91b2a2538 feat: replace no-new-object (deprecated) rule with no-object-constructor
All checks were successful
Lint / lint (push) Successful in 1m9s
Test / test (push) Successful in 48s
2023-10-18 13:04:31 +02:00
d8b3ef6646 build(deps): update latest
BREAKING CHANGE: peerDependencies: `eslint@^8.51.0`
`eslint-plugin-import@^2.28.1`
`eslint-plugin-promise@^6.1.1`
`eslint-plugin-unicorn@^48.0.1`

BREAKING CHANGE: Bump minimum supported Node.js >= 18.0.0
2023-10-18 12:59:19 +02:00
d149fdd6ab fix: relax unicorn/consistent-function-scoping
Some checks failed
Lint / lint (push) Successful in 49s
Test / test (push) Successful in 37s
Release / release (push) Failing after 1m2s
Rule not working well with typeof generic in TypeScript.
React.js component should have all the related functions in its scope.
2023-07-18 23:12:21 +02:00
6345bddd38 fix: relax @typescript-eslint/prefer-nullish-coalescing
Should ignore ternary tests.
2023-07-18 23:06:31 +02:00
4e99d69598 fix: relax no-duplicate-imports
Conflict with `@typescript-eslint/consistent-type-imports`
2023-07-18 22:31:59 +02:00
adf01e1e8c feat: add unicorn/template-indent
BREAKING CHANGE: New rule introduced
2023-07-18 22:08:49 +02:00
8bfeaadf32 feat: add unicorn/prefer-modern-math-apis
BREAKING CHANGE: New rule introduced
2023-07-18 22:04:34 +02:00
807c201955 feat: add unicorn/prefer-number-properties
BREAKING CHANGE: New rule introduced
2023-07-18 22:02:15 +02:00
381f5cb9cf feat: add unicorn/require-array-join-separator
BREAKING CHANGE: New rule introduced
2023-07-18 22:00:19 +02:00
c431a208e9 feat: add unicorn/number-literal-case
BREAKING CHANGE: New rule introduced
2023-07-18 21:58:04 +02:00
f622982fdb feat: add unicorn/no-new-buffer
BREAKING CHANGE: New rule introduced
2023-07-18 21:54:53 +02:00
d59b088bff feat: add unicorn/no-new-array
BREAKING CHANGE: New rule introduced
2023-07-18 21:53:56 +02:00
2fd4edbf5b feat: add unicorn/no-empty-file
BREAKING CHANGE: New rule introduced
2023-07-18 21:51:51 +02:00
8837b8737b feat: add unicorn/no-document-cookie
BREAKING CHANGE: New rule introduced
2023-07-18 21:50:47 +02:00
cbbb8dfe28 feat: add unicorn/no-array-push-push
BREAKING CHANGE: New rule introduced
2023-07-18 21:48:53 +02:00
2fcede3f0a feat: add unicorn/no-array-method-this-argument
BREAKING CHANGE: New rule introduced
2023-07-18 21:48:07 +02:00
80c00f5fa8 feat: add unicorn/no-array-for-each
BREAKING CHANGE: New rule introduced
2023-07-18 21:46:32 +02:00
7f7ab46896 feat: add unicorn/no-array-callback-reference
BREAKING CHANGE: New rule introduced
2023-07-18 21:45:37 +02:00
eab075e291 feat: add unicorn/explicit-length-check
BREAKING CHANGE: New rule introduced
2023-07-18 21:43:06 +02:00
244b74679a feat: add unicorn/consistent-function-scoping
BREAKING CHANGE: New rule introduced
2023-07-18 21:39:46 +02:00
07595ccb56 feat: add unicorn/consistent-destructuring
BREAKING CHANGE: New rule introduced
2023-07-18 21:37:00 +02:00
d0e9004ce3 docs: improve recommended usage/setup 2023-07-18 20:25:19 +02:00
1e29cef968 build(deps): update latest
BREAKING CHANGE: peerDependencies: `eslint-plugin-unicorn@^48.0.0`
2023-07-18 20:17:06 +02:00
f89c4415cf feat: add support for typescript-eslint v6.0.0 2023-07-14 23:19:09 +02:00
34ec74cff7 docs: simplify README 2023-07-02 16:02:28 +02:00
f5a69d69f5 fix: update author - Théo LUDWIG 2023-07-02 15:57:44 +02:00
e071e917f6 build(deps): update latest
BREAKING CHANGE: peerDependencies: `eslint@^8.44.0`
2023-07-02 15:54:50 +02:00
528a31316d refactor: usage of node:test instead of tap 2023-07-02 15:46:14 +02:00
b1bd574d42 feat: add npm package provenance
Ref: https://github.blog/2023-04-19-introducing-npm-package-provenance/
2023-05-13 15:41:12 +02:00
ca9b1db4bd build(deps): update latest
BREAKING CHANGE: peerDependencies: `eslint-plugin-unicorn@^47.0.0`
2023-05-13 15:22:49 +02:00
3222d42e67 build(deps): update latest 2023-04-02 21:16:48 +02:00
08602b1c53 build(deps): update latest
BREAKING CHANGE: peerDependencies: `eslint-plugin-unicorn@^46.0.0`
2023-04-02 20:53:26 +02:00
1779517f5c feat: add @typescript-eslint/ban-types
BREAKING CHANGE: New rule introduced
2023-02-06 23:52:11 +01:00
81b37b523c feat: add import/no-empty-named-blocks
BREAKING CHANGE: New rule introduced
2023-02-06 23:48:24 +01:00
a95ac7ec8b fix: relax @typescript-eslint/consistent-type-assertions 2023-02-06 23:43:23 +01:00
32481c316f fix: relax no-unused-vars ignore variable starting with _ 2023-02-06 23:42:09 +01:00
c3ddbc73b7 feat: add no-empty-static-block
Ref: https://eslint.org/docs/latest/rules/no-empty-static-block

BREAKING CHANGE: New rule introduced
2023-02-06 23:37:55 +01:00
1934d3525a feat: add no-new-native-nonconstructor
Ref: https://eslint.org/docs/latest/rules/no-new-native-nonconstructor

BREAKING CHANGE: New rule introduced
2023-02-06 23:36:21 +01:00
4f625c3b88 build(deps): update latest
BREAKING CHANGE: peerDependencies:
`eslint@^8.33.0`, `eslint-plugin-import@^2.27.5`,
`eslint-plugin-promise@^6.1.1`, `eslint-plugin-unicorn@^45.0.2`
2023-02-06 23:33:28 +01:00
e24964a60a build(deps): update latest 2023-01-10 13:27:35 +01:00
fcc107bdec fix: relax @typescript-eslint/prefer-optional-chain 2022-11-21 09:09:06 +01:00
666a3dee2d feat: add unicorn/no-typeof-undefined
BREAKING CHANGE: New rule introduced

BREAKING CHANGE: peerDependencies: `eslint-plugin-unicorn@^45.0.0`
2022-11-21 09:08:19 +01:00
0ce46310ed build(deps): update latest
BREAKING CHANGE: peerDependencies: `eslint-plugin-unicorn@^44.0.0`
2022-10-03 20:40:47 +02:00
e2b2c1c77f docs: fix typo 2022-09-20 23:08:10 +02:00
846a25943d perf: reduce package size by publishing only needed files 2022-09-01 01:17:47 +02:00
e0f93343fe test: fix with new rules introduced 2022-08-31 14:00:08 +02:00
c3b46debe6 feat: add @typescript-eslint/consistent-type-imports
Ref: https://typescript-eslint.io/rules/consistent-type-imports

BREAKING CHANGE: New rule introduced
2022-08-31 13:56:16 +02:00
c0ec89ed0c feat: add prefer-arrow-callback
Ref: https://eslint.org/docs/latest/rules/prefer-arrow-callback

BREAKING CHANGE: New rule introduced
2022-08-31 13:49:03 +02:00
099a3388a1 feat: add func-style: "expression"
Ref: https://eslint.org/docs/latest/rules/func-style

BREAKING CHANGE: New rule introduced
2022-08-31 13:44:54 +02:00
1f20fe89e8 fix: relax @typescript-eslint/no-empty-interface 2022-08-31 13:32:05 +02:00
3f1d1921ba feat: add arrow-body-style: "always"
Ref: https://eslint.org/docs/latest/rules/arrow-body-style

BREAKING CHANGE: New rule introduced
2022-08-31 13:27:37 +02:00
b743c94430 feat: add arrow-parens: "always"
Ref: https://eslint.org/docs/latest/rules/arrow-parens

BREAKING CHANGE: New rule introduced
2022-08-31 13:25:38 +02:00
f138acaf53 feat: add curly: "all"
Ref: https://eslint.org/docs/latest/rules/curly

BREAKING CHANGE: New rule introduced
2022-08-31 13:22:20 +02:00
435d3e9e5f build(deps): update latest 2022-08-31 13:17:00 +02:00
637a79a8e7 build(deps): update latest
BREAKING CHANGE: peerDependencies: `eslint-plugin-unicorn@^43.0.0`
2022-07-12 13:52:53 +02:00
61679195ee build(deps): update latest
BREAKING CHANGE: peerDependencies: `eslint-plugin-import@^2.26.0`, `eslint-plugin-unicorn@^42.0.0`
2022-04-06 19:14:13 +02:00
387509a30f chore: replace tape with tap 2022-03-19 14:28:00 +01:00
4271efe20b fix: relax require-await 2022-03-19 14:07:42 +01:00
14145df9c7 fix: relax @typescript-eslint/no-misused-promises 2022-03-16 11:40:14 +01:00
914e373058 fix: relax @typescript-eslint/await-thenable 2022-03-16 11:39:21 +01:00
4240e21ce2 build(deps): update latest 2022-03-16 11:38:20 +01:00
48061dd577 feat: support both JavaScript and TypeScript linting 2022-02-20 12:36:37 +01:00
c026007f42 fix: disable no-undef using TypeScript 2022-02-19 22:08:50 +01:00
f3feed70cb fix: relax unicorn/no-array-callback-reference because of false positive 2022-02-19 19:00:26 +01:00
8cadf4a235 fix: eqeqeq ignore usage of null 2022-02-19 16:42:47 +01:00
21 changed files with 5647 additions and 10242 deletions

View File

@ -1,19 +1,17 @@
{ {
"root": true, "root": true,
"plugins": ["@typescript-eslint", "import", "promise", "unicorn"], "plugins": ["import", "promise", "unicorn"],
"env": { "env": {
"browser": true, "browser": true,
"node": true, "node": true,
"es2022": true "es2024": true
}, },
"parser": "@typescript-eslint/parser",
"parserOptions": { "parserOptions": {
"ecmaVersion": 2022, "ecmaVersion": "latest",
"sourceType": "module", "sourceType": "module",
"ecmaFeatures": { "ecmaFeatures": {
"jsx": true "jsx": true
}, }
"project": "./tsconfig.json"
}, },
"rules": { "rules": {
"constructor-super": "error", "constructor-super": "error",
@ -29,24 +27,23 @@
"no-control-regex": "error", "no-control-regex": "error",
"no-debugger": "error", "no-debugger": "error",
"no-dupe-args": "error", "no-dupe-args": "error",
"no-dupe-class-members": "off", "no-dupe-class-members": "error",
"@typescript-eslint/no-dupe-class-members": "error",
"no-dupe-else-if": "error", "no-dupe-else-if": "error",
"no-dupe-keys": "error", "no-dupe-keys": "error",
"no-duplicate-case": "error", "no-duplicate-case": "error",
"no-duplicate-imports": "off", "no-duplicate-imports": "error",
"@typescript-eslint/no-duplicate-imports": "error",
"no-empty-character-class": "error", "no-empty-character-class": "error",
"no-empty-pattern": "error", "no-empty-pattern": "error",
"no-empty-static-block": "error",
"no-ex-assign": "error", "no-ex-assign": "error",
"no-fallthrough": "error", "no-fallthrough": "error",
"no-func-assign": "error", "no-func-assign": "error",
"no-import-assign": "error", "no-import-assign": "error",
"no-invalid-regexp": "error", "no-invalid-regexp": "error",
"no-irregular-whitespace": "error", "no-irregular-whitespace": "error",
"no-loss-of-precision": "off", "no-loss-of-precision": "error",
"@typescript-eslint/no-loss-of-precision": "error",
"no-misleading-character-class": "error", "no-misleading-character-class": "error",
"no-new-native-nonconstructor": "error",
"no-new-symbol": "error", "no-new-symbol": "error",
"no-obj-calls": "error", "no-obj-calls": "error",
"no-promise-executor-return": "error", "no-promise-executor-return": "error",
@ -64,21 +61,16 @@
"no-unsafe-negation": "error", "no-unsafe-negation": "error",
"no-unsafe-optional-chaining": "error", "no-unsafe-optional-chaining": "error",
"no-unused-private-class-members": "error", "no-unused-private-class-members": "error",
"no-unused-vars": "off", "no-unused-vars": ["error", { "varsIgnorePattern": "^_" }],
"@typescript-eslint/no-unused-vars": "error", "no-use-before-define": [
"no-use-before-define": "off",
"@typescript-eslint/no-use-before-define": [
"error", "error",
{ {
"functions": false, "functions": false,
"classes": false, "classes": false,
"enums": false, "variables": false
"variables": false,
"typedefs": false
} }
], ],
"no-useless-backreference": "error", "no-useless-backreference": "error",
"require-atomic-updates": "error",
"use-isnan": [ "use-isnan": [
"error", "error",
{ {
@ -88,21 +80,17 @@
], ],
"valid-typeof": ["error", { "requireStringLiterals": true }], "valid-typeof": ["error", { "requireStringLiterals": true }],
"class-methods-use-this": "error",
"consistent-this": "error", "consistent-this": "error",
"default-param-last": "off", "default-param-last": "error",
"@typescript-eslint/default-param-last": "error",
"default-case-last": "error", "default-case-last": "error",
"dot-notation": "off", "dot-notation": ["error", { "allowKeywords": true }],
"@typescript-eslint/dot-notation": ["error", { "allowKeywords": true }], "eqeqeq": ["error", "always", { "null": "ignore" }],
"eqeqeq": "error",
"grouped-accessor-pairs": "error", "grouped-accessor-pairs": "error",
"new-cap": [ "new-cap": [
"error", "error",
{ "newIsCap": true, "capIsNew": false, "properties": true } { "newIsCap": true, "capIsNew": false, "properties": true }
], ],
"no-array-constructor": "off", "no-array-constructor": "error",
"@typescript-eslint/no-array-constructor": "error",
"no-caller": "error", "no-caller": "error",
"no-confusing-arrow": "error", "no-confusing-arrow": "error",
"no-delete-var": "error", "no-delete-var": "error",
@ -110,8 +98,7 @@
"no-eval": "error", "no-eval": "error",
"no-floating-decimal": "error", "no-floating-decimal": "error",
"no-global-assign": "error", "no-global-assign": "error",
"no-implied-eval": "off", "no-implied-eval": "error",
"@typescript-eslint/no-implied-eval": "error",
"no-mixed-operators": [ "no-mixed-operators": [
"error", "error",
{ {
@ -125,19 +112,16 @@
], ],
"no-multi-str": "error", "no-multi-str": "error",
"no-new-func": "error", "no-new-func": "error",
"no-new-object": "error", "no-object-constructor": "error",
"no-octal": "error", "no-octal": "error",
"no-octal-escape": "error", "no-octal-escape": "error",
"no-proto": "error", "no-proto": "error",
"no-redeclare": "off", "no-redeclare": ["error", { "builtinGlobals": false }],
"@typescript-eslint/no-redeclare": ["error", { "builtinGlobals": false }],
"no-regex-spaces": "error", "no-regex-spaces": "error",
"no-shadow-restricted-names": "error", "no-shadow-restricted-names": "error",
"no-throw-literal": "off", "no-throw-literal": "error",
"@typescript-eslint/no-throw-literal": "error",
"no-undef-init": "error", "no-undef-init": "error",
"no-unused-expressions": "off", "no-unused-expressions": [
"@typescript-eslint/no-unused-expressions": [
"error", "error",
{ {
"allowShortCircuit": true, "allowShortCircuit": true,
@ -147,8 +131,7 @@
], ],
"no-useless-call": "error", "no-useless-call": "error",
"no-useless-computed-key": "error", "no-useless-computed-key": "error",
"no-useless-constructor": "off", "no-useless-constructor": "error",
"@typescript-eslint/no-useless-constructor": "error",
"no-useless-escape": "error", "no-useless-escape": "error",
"no-useless-rename": "error", "no-useless-rename": "error",
"no-useless-return": "error", "no-useless-return": "error",
@ -163,10 +146,12 @@
"prefer-regex-literals": ["error", { "disallowRedundantWrapping": true }], "prefer-regex-literals": ["error", { "disallowRedundantWrapping": true }],
"quote-props": ["error", "as-needed"], "quote-props": ["error", "as-needed"],
"radix": "error", "radix": "error",
"require-await": "off",
"@typescript-eslint/require-await": "error",
"spaced-comment": ["error", "always"],
"yoda": ["error", "never"], "yoda": ["error", "never"],
"curly": ["error", "all"],
"func-style": ["error", "expression"],
"prefer-arrow-callback": "error",
"arrow-parens": ["error", "always"],
"arrow-body-style": ["error", "always"],
"import/no-absolute-path": "error", "import/no-absolute-path": "error",
"import/no-webpack-loader-syntax": "error", "import/no-webpack-loader-syntax": "error",
@ -183,44 +168,106 @@
} }
], ],
"import/no-named-default": "error", "import/no-named-default": "error",
"import/no-empty-named-blocks": "error",
"promise/param-names": "error", "promise/param-names": "error",
"promise/no-new-statics": "error", "promise/no-new-statics": "error",
"unicorn/better-regex": "error", "unicorn/better-regex": "error",
"unicorn/catch-error-name": "error", "unicorn/catch-error-name": "error",
"unicorn/consistent-destructuring": "error",
"unicorn/custom-error-definition": "error", "unicorn/custom-error-definition": "error",
"unicorn/error-message": "error", "unicorn/error-message": "error",
"unicorn/escape-case": "error", "unicorn/escape-case": "error",
"unicorn/explicit-length-check": "error",
"unicorn/new-for-builtins": "error", "unicorn/new-for-builtins": "error",
"unicorn/no-array-callback-reference": "error", "unicorn/no-array-callback-reference": "error",
"unicorn/no-array-for-each": "error",
"unicorn/no-array-method-this-argument": "error",
"unicorn/no-array-push-push": "error",
"unicorn/no-document-cookie": "error",
"unicorn/no-empty-file": "error",
"unicorn/no-hex-escape": "error", "unicorn/no-hex-escape": "error",
"unicorn/no-instanceof-array": "error", "unicorn/no-instanceof-array": "error",
"unicorn/no-new-array": "error",
"unicorn/no-new-buffer": "error",
"unicorn/no-this-assignment": "error", "unicorn/no-this-assignment": "error",
"unicorn/no-zero-fractions": "error", "unicorn/no-zero-fractions": "error",
"unicorn/number-literal-case": "error",
"unicorn/prefer-node-protocol": "error", "unicorn/prefer-node-protocol": "error",
"unicorn/throw-new-error": "error" "unicorn/throw-new-error": "error",
"unicorn/no-typeof-undefined": "error",
"unicorn/require-array-join-separator": "error",
"unicorn/prefer-number-properties": "error",
"unicorn/prefer-modern-math-apis": "error",
"unicorn/template-indent": "error"
}, },
"overrides": [ "overrides": [
{ {
"files": ["*.ts", "*.tsx"], "files": ["*.ts", "*.tsx"],
"parser": "@typescript-eslint/parser",
"plugins": ["@typescript-eslint"],
"rules": { "rules": {
"no-undef": "off",
"no-dupe-class-members": "off",
"@typescript-eslint/no-dupe-class-members": "error",
"no-loss-of-precision": "off",
"@typescript-eslint/no-loss-of-precision": "error",
"no-unused-vars": "off",
"@typescript-eslint/no-unused-vars": [
"error",
{ "varsIgnorePattern": "^_" }
],
"no-use-before-define": "off",
"@typescript-eslint/no-use-before-define": [
"error",
{
"functions": false,
"classes": false,
"enums": false,
"variables": false,
"typedefs": false
}
],
"default-param-last": "off",
"@typescript-eslint/default-param-last": "error",
"dot-notation": "off",
"@typescript-eslint/dot-notation": ["error", { "allowKeywords": true }],
"no-array-constructor": "off",
"@typescript-eslint/no-array-constructor": "error",
"no-implied-eval": "off",
"@typescript-eslint/no-implied-eval": "error",
"no-redeclare": "off",
"@typescript-eslint/no-redeclare": [
"error",
{ "builtinGlobals": false }
],
"no-throw-literal": "off",
"@typescript-eslint/no-throw-literal": "error",
"no-unused-expressions": "off",
"@typescript-eslint/no-unused-expressions": [
"error",
{
"allowShortCircuit": true,
"allowTernary": true,
"allowTaggedTemplates": true
}
],
"no-useless-constructor": "off",
"@typescript-eslint/no-useless-constructor": "error",
"@typescript-eslint/adjacent-overload-signatures": "error", "@typescript-eslint/adjacent-overload-signatures": "error",
"@typescript-eslint/array-type": [ "@typescript-eslint/array-type": [
"error", "error",
{ "default": "array-simple" } { "default": "array-simple" }
], ],
"@typescript-eslint/consistent-type-assertions": [ "@typescript-eslint/ban-types": "error",
"error",
{
"assertionStyle": "as",
"objectLiteralTypeAssertions": "never"
}
],
"@typescript-eslint/consistent-type-definitions": [ "@typescript-eslint/consistent-type-definitions": [
"error", "error",
"interface" "interface"
], ],
"no-duplicate-imports": "off",
"@typescript-eslint/consistent-type-imports": "error",
"@typescript-eslint/explicit-function-return-type": [ "@typescript-eslint/explicit-function-return-type": [
"error", "error",
{ {
@ -249,10 +296,6 @@
], ],
"@typescript-eslint/no-base-to-string": "error", "@typescript-eslint/no-base-to-string": "error",
"@typescript-eslint/no-dynamic-delete": "error", "@typescript-eslint/no-dynamic-delete": "error",
"@typescript-eslint/no-empty-interface": [
"error",
{ "allowSingleExtends": true }
],
"@typescript-eslint/no-extra-non-null-assertion": "error", "@typescript-eslint/no-extra-non-null-assertion": "error",
"@typescript-eslint/no-extraneous-class": [ "@typescript-eslint/no-extraneous-class": [
"error", "error",
@ -262,7 +305,6 @@
"@typescript-eslint/no-for-in-array": "error", "@typescript-eslint/no-for-in-array": "error",
"@typescript-eslint/no-invalid-void-type": "error", "@typescript-eslint/no-invalid-void-type": "error",
"@typescript-eslint/no-misused-new": "error", "@typescript-eslint/no-misused-new": "error",
"@typescript-eslint/no-misused-promises": "error",
"@typescript-eslint/no-non-null-asserted-optional-chain": "error", "@typescript-eslint/no-non-null-asserted-optional-chain": "error",
"@typescript-eslint/no-non-null-assertion": "error", "@typescript-eslint/no-non-null-assertion": "error",
"@typescript-eslint/no-this-alias": [ "@typescript-eslint/no-this-alias": [
@ -277,11 +319,11 @@
"@typescript-eslint/prefer-nullish-coalescing": [ "@typescript-eslint/prefer-nullish-coalescing": [
"error", "error",
{ {
"ignoreTernaryTests": true,
"ignoreConditionalTests": false, "ignoreConditionalTests": false,
"ignoreMixedLogicalExpressions": false "ignoreMixedLogicalExpressions": false
} }
], ],
"@typescript-eslint/prefer-optional-chain": "error",
"@typescript-eslint/prefer-readonly": "error", "@typescript-eslint/prefer-readonly": "error",
"@typescript-eslint/prefer-reduce-type-parameter": "error", "@typescript-eslint/prefer-reduce-type-parameter": "error",
"@typescript-eslint/prefer-ts-expect-error": "error", "@typescript-eslint/prefer-ts-expect-error": "error",
@ -292,7 +334,7 @@
], ],
"@typescript-eslint/restrict-plus-operands": [ "@typescript-eslint/restrict-plus-operands": [
"error", "error",
{ "checkCompoundAssignments": true } { "skipCompoundAssignments": true }
], ],
"@typescript-eslint/restrict-template-expressions": [ "@typescript-eslint/restrict-template-expressions": [
"error", "error",

View File

@ -1,6 +1,6 @@
<!-- Please first discuss the change you wish to make via issue before making a change. It might avoid a waste of your time. --> <!-- Please first discuss the change you wish to make via issue before making a change. It might avoid a waste of your time. -->
## What changes this PR introduce? # What changes this PR introduce?
## List any relevant issue numbers ## List any relevant issue numbers

View File

@ -2,7 +2,7 @@ name: 'Lint'
on: on:
push: push:
branches: [master, develop] branches: [develop]
pull_request: pull_request:
branches: [master, develop] branches: [master, develop]
@ -10,19 +10,19 @@ jobs:
lint: lint:
runs-on: 'ubuntu-latest' runs-on: 'ubuntu-latest'
steps: steps:
- uses: 'actions/checkout@v2.4.0' - uses: 'actions/checkout@v3.6.0'
- name: 'Use Node.js' - name: 'Setup Node.js'
uses: 'actions/setup-node@v2.5.1' uses: 'actions/setup-node@v3.8.1'
with: with:
node-version: 'lts/*' node-version: 'lts/*'
cache: 'npm' cache: 'npm'
- name: 'Install' - name: 'Install dependencies'
run: 'npm install' run: 'npm clean-install'
- run: 'npm run lint:commit -- --to "${{ github.sha }}"' - run: 'npm run lint:commit -- --to "${{ github.sha }}"'
- run: 'npm run lint:editorconfig' - run: 'npm run lint:editorconfig'
- run: 'npm run lint:markdown' - run: 'npm run lint:markdown'
- run: 'npm run lint:javascript' - run: 'npm run lint:eslint'
- run: 'npm run lint:prettier' - run: 'npm run lint:prettier'

View File

@ -7,20 +7,28 @@ on:
jobs: jobs:
release: release:
runs-on: 'ubuntu-latest' runs-on: 'ubuntu-latest'
permissions:
contents: 'write'
issues: 'write'
pull-requests: 'write'
id-token: 'write'
steps: steps:
- uses: 'actions/checkout@v2.4.0' - uses: 'actions/checkout@v3.6.0'
with: with:
fetch-depth: 0 fetch-depth: 0
persist-credentials: false persist-credentials: false
- name: 'Use Node.js' - name: 'Setup Node.js'
uses: 'actions/setup-node@v2.5.1' uses: 'actions/setup-node@v3.8.1'
with: with:
node-version: 'lts/*' node-version: 'lts/*'
cache: 'npm' cache: 'npm'
- name: 'Install' - name: 'Install dependencies'
run: 'npm install' run: 'npm clean-install'
- name: 'Verify the integrity of provenance attestations and registry signatures for installed dependencies'
run: 'npm audit signatures'
- name: 'Release' - name: 'Release'
run: 'npm run release' run: 'npm run release'

View File

@ -2,7 +2,7 @@ name: 'Test'
on: on:
push: push:
branches: [master, develop] branches: [develop]
pull_request: pull_request:
branches: [master, develop] branches: [master, develop]
@ -10,16 +10,16 @@ jobs:
test: test:
runs-on: 'ubuntu-latest' runs-on: 'ubuntu-latest'
steps: steps:
- uses: 'actions/checkout@v2.4.0' - uses: 'actions/checkout@v3.6.0'
- name: 'Use Node.js' - name: 'Setup Node.js'
uses: 'actions/setup-node@v2.5.1' uses: 'actions/setup-node@v3.8.1'
with: with:
node-version: 'lts/*' node-version: 'lts/*'
cache: 'npm' cache: 'npm'
- name: 'Install' - name: 'Install dependencies'
run: 'npm install' run: 'npm clean-install'
- name: 'Test' - name: 'Test'
run: 'npm run test' run: 'npm run test'

1
.gitignore vendored
View File

@ -4,6 +4,7 @@ node_modules
# testing # testing
coverage coverage
.nyc_output
# debug # debug
npm-debug.log* npm-debug.log*

View File

@ -2,5 +2,5 @@
"*": ["editorconfig-checker"], "*": ["editorconfig-checker"],
"*.{js,jsx,ts,tsx}": ["prettier --write", "eslint --fix"], "*.{js,jsx,ts,tsx}": ["prettier --write", "eslint --fix"],
"*.{json,jsonc,yml,yaml}": ["prettier --write"], "*.{json,jsonc,yml,yaml}": ["prettier --write"],
"*.{md,mdx}": ["prettier --write", "markdownlint --dot --fix"] "*.{md,mdx}": ["prettier --write", "markdownlint-cli2 --fix"]
} }

11
.markdownlint-cli2.jsonc Normal file
View File

@ -0,0 +1,11 @@
{
"config": {
"extends": "markdownlint/style/prettier",
"relative-links": true,
"default": true,
"MD033": false
},
"globs": ["**/*.{md,mdx}"],
"ignores": ["**/node_modules"],
"customRules": ["markdownlint-rule-relative-links"]
}

View File

@ -1,6 +0,0 @@
{
"default": true,
"MD013": false,
"MD033": false,
"MD041": false
}

1
.npmrc
View File

@ -1 +1,2 @@
save-exact=true save-exact=true
provenance=true

View File

@ -60,7 +60,7 @@ representative at an online or offline event.
Instances of abusive, harassing, or otherwise unacceptable behavior may be Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at reported to the community leaders responsible for enforcement at
contact@divlo.fr. <contact@theoludwig.fr>.
All complaints will be reviewed and investigated promptly and fairly. All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the All community leaders are obligated to respect the privacy and security of the

View File

@ -2,6 +2,14 @@
Thanks a lot for your interest in contributing to **eslint-config-conventions**! 🎉 Thanks a lot for your interest in contributing to **eslint-config-conventions**! 🎉
## Code of Conduct
**eslint-config-conventions** adopted the [Contributor Covenant](https://www.contributor-covenant.org/) as its Code of Conduct, and we expect project participants to adhere to it. Please read [the full text](./CODE_OF_CONDUCT.md) so that you can understand what actions will and will not be tolerated.
## Open Development
All work on **eslint-config-conventions** happens directly on this repository. Both core team members and external contributors send pull requests which go through the same review process.
## Types of contributions ## Types of contributions
- Reporting a bug. - Reporting a bug.
@ -11,7 +19,7 @@ Thanks a lot for your interest in contributing to **eslint-config-conventions**!
## Pull Requests ## Pull Requests
- **Please first discuss** the change you wish to make via [issue](https://github.com/Divlo/eslint-config-conventions/issues) before making a change. It might avoid a waste of your time. - **Please first discuss** the change you wish to make via [issue](https://github.com/theoludwig/eslint-config-conventions/issues) before making a change. It might avoid a waste of your time.
- Ensure your code respect linting. - Ensure your code respect linting.
@ -21,26 +29,4 @@ If you're adding new features to **eslint-config-conventions**, please include t
## Commits ## Commits
The commit message guidelines respect [@commitlint/config-conventional](https://github.com/conventional-changelog/commitlint/tree/master/%40commitlint/config-conventional) and [Semantic Versioning](https://semver.org/) for releases. The commit message guidelines adheres to [Conventional Commits](https://www.conventionalcommits.org/) and [Semantic Versioning](https://semver.org/) for releases.
### Types
Types define which kind of changes you made to the project.
| Types | Description |
| -------- | ------------------------------------------------------------------------------------------------------------ |
| feat | A new feature. |
| fix | A bug fix. |
| docs | Documentation only changes. |
| style | Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc). |
| refactor | A code change that neither fixes a bug nor adds a feature. |
| perf | A code change that improves performance. |
| test | Adding missing tests or correcting existing tests. |
| build | Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm). |
| ci | Changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs). |
| chore | Other changes that don't modify src or test files. |
| revert | Reverts a previous commit. |
### Scopes
Scopes define what part of the code changed.

View File

@ -1,6 +1,6 @@
MIT License MIT License
Copyright (c) Divlo Copyright (c) Théo LUDWIG
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@ -11,8 +11,8 @@
<a href="./LICENSE"><img src="https://img.shields.io/badge/licence-MIT-blue.svg" alt="Licence MIT"/></a> <a href="./LICENSE"><img src="https://img.shields.io/badge/licence-MIT-blue.svg" alt="Licence MIT"/></a>
<a href="./CODE_OF_CONDUCT.md"><img src="https://img.shields.io/badge/Contributor%20Covenant-v2.0%20adopted-ff69b4.svg" alt="Contributor Covenant" /></a> <a href="./CODE_OF_CONDUCT.md"><img src="https://img.shields.io/badge/Contributor%20Covenant-v2.0%20adopted-ff69b4.svg" alt="Contributor Covenant" /></a>
<br /> <br />
<a href="https://github.com/Divlo/eslint-config-conventions/actions/workflows/lint.yml"><img src="https://github.com/Divlo/eslint-config-conventions/actions/workflows/lint.yml/badge.svg?branch=develop" /></a> <a href="https://github.com/theoludwig/eslint-config-conventions/actions/workflows/lint.yml"><img src="https://github.com/theoludwig/eslint-config-conventions/actions/workflows/lint.yml/badge.svg?branch=develop" /></a>
<a href="https://github.com/Divlo/eslint-config-conventions/actions/workflows/test.yml"><img src="https://github.com/Divlo/eslint-config-conventions/actions/workflows/test.yml/badge.svg?branch=develop" /></a> <a href="https://github.com/theoludwig/eslint-config-conventions/actions/workflows/test.yml"><img src="https://github.com/theoludwig/eslint-config-conventions/actions/workflows/test.yml/badge.svg?branch=develop" /></a>
<br /> <br />
<a href="https://conventionalcommits.org"><img src="https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg" alt="Conventional Commits" /></a> <a href="https://conventionalcommits.org"><img src="https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg" alt="Conventional Commits" /></a>
<a href="https://github.com/semantic-release/semantic-release"><img src="https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg" alt="semantic-release" /></a> <a href="https://github.com/semantic-release/semantic-release"><img src="https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg" alt="semantic-release" /></a>
@ -21,9 +21,9 @@
## 📜 About ## 📜 About
**eslint-config-conventions** is a [ESLint](https://eslint.org) configuration to enforce strict conventions and good code quality, it is highly inspired from [eslint-config-standard-with-typescript](https://github.com/standard/eslint-config-standard-with-typescript) but it is **stricter** and with **no formatting rules**, **only code-quality rules**. **eslint-config-conventions** is a [ESLint](https://eslint.org) configuration to enforce strict conventions and good code quality, it is highly inspired from [eslint-config-standard-with-typescript](https://github.com/standard/eslint-config-standard-with-typescript) but it is **stricter** and with **no formatting rules**, **only code-quality rules**. It supports both **JavaScript** and **TypeScript**.
This configuration is mostly **for catching bugs** and **code-quality** so it is recommanded to use it with [Prettier](https://prettier.io/) for a consistent code style, it works with any `.prettierrc.json` configuration. This configuration is mostly **for catching bugs** and **code-quality** so it is recommended to use it with [Prettier](https://prettier.io/) for a consistent code style, it works with any `.prettierrc.json` configuration.
More information about **formatting rules** vs **code-quality rules** can be found on [Prettier vs. Linters](https://prettier.io/docs/en/comparison.html). More information about **formatting rules** vs **code-quality rules** can be found on [Prettier vs. Linters](https://prettier.io/docs/en/comparison.html).
@ -31,26 +31,19 @@ More information about **formatting rules** vs **code-quality rules** can be fou
### Prerequisites ### Prerequisites
- [Node.js](https://nodejs.org/) >= 16.0.0 [Node.js](https://nodejs.org/) >= 18.0.0
### Installation ### Installation
`npm@<7` does not automatically install `peerDependencies`, so if that's what you're using, install them manually.
Here is an example, but use it only for reference, because your decisions regarding version ranges and range specifiers may vary.
```sh ```sh
npm install --save-dev \ npm install --save-dev \
eslint@^8.9.0 \ eslint@^8.51.0 \
eslint-plugin-import@^2.25.4 \ eslint-plugin-import@^2.28.1 \
eslint-plugin-promise@^6.0.0 \ eslint-plugin-promise@^6.1.1 \
eslint-plugin-unicorn@^41.0.0 \ eslint-plugin-unicorn@^48.0.1 \
typescript@^4.4.0 \
@typescript-eslint/eslint-plugin@^5.12.0 \
eslint-config-conventions@latest eslint-config-conventions@latest
``` ```
Yes, this is a large number of packages. This is due to [a known limitation in ESLint](https://github.com/eslint/eslint/issues/3458).
This list of dependencies are: This list of dependencies are:
- [ESLint](https://github.com/eslint/eslint) - [ESLint](https://github.com/eslint/eslint)
@ -58,10 +51,23 @@ This list of dependencies are:
- [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import) - [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import)
- [eslint-plugin-promise](https://github.com/xjamundx/eslint-plugin-promise) - [eslint-plugin-promise](https://github.com/xjamundx/eslint-plugin-promise)
- [eslint-plugin-unicorn](https://github.com/sindresorhus/eslint-plugin-unicorn) - [eslint-plugin-unicorn](https://github.com/sindresorhus/eslint-plugin-unicorn)
- [TypeScript](https://github.com/Microsoft/TypeScript)
- [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint); ESLint rules for TypeScript.
- This package: `eslint-config-conventions` - This package: `eslint-config-conventions`
If you want to use **TypeScript**, you also need to install:
```sh
npm install --save-dev \
typescript@^5.2.2 \
@typescript-eslint/eslint-plugin@^6.8.0 \
@typescript-eslint/parser@^6.8.0
```
Dependencies are:
- [TypeScript](https://github.com/Microsoft/TypeScript)
- [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint): ESLint rules for TypeScript.
- [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint): ESLint parser for TypeScript.
### Configuration with [Prettier](https://prettier.io/) (recommended) ### Configuration with [Prettier](https://prettier.io/) (recommended)
You will need to install some dependencies in addition to those required: You will need to install some dependencies in addition to those required:
@ -71,7 +77,7 @@ npm install --save-dev prettier eslint-config-prettier eslint-plugin-prettier
# Create an empty config file to let editors and other tools know you are using Prettier # Create an empty config file to let editors and other tools know you are using Prettier
# You can personalize it with your own rules # You can personalize it with your own rules
echo {}> .prettierrc.json echo "{}" > .prettierrc.json
``` ```
#### `.eslintrc.json` #### `.eslintrc.json`
@ -80,6 +86,7 @@ echo {}> .prettierrc.json
{ {
"extends": ["conventions", "prettier"], "extends": ["conventions", "prettier"],
"plugins": ["prettier"], "plugins": ["prettier"],
"parser": "@typescript-eslint/parser",
"parserOptions": { "parserOptions": {
"project": "./tsconfig.json" "project": "./tsconfig.json"
}, },
@ -91,15 +98,15 @@ echo {}> .prettierrc.json
**Note:** Please read some important instructions regarding the `project` option [here](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/parser/README.md#configuration). **Note:** Please read some important instructions regarding the `project` option [here](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/parser/README.md#configuration).
You must have a valid `tsconfig.json` file to specify `"parserOptions.project"`. `"parserOptions.project"` is only required if you use **TypeScript**.
#### `package.json` #### `package.json`
```jsonc ```jsonc
{ {
"scripts": { "scripts": {
"lint:typescript": "eslint \"**/*.{js,jsx,ts,tsx}\" --ignore-path \".gitignore\"", "lint:eslint": "eslint . --max-warnings 0 --report-unused-disable-directives --ignore-path .gitignore",
"lint:prettier": "prettier \".\" --check --ignore-path \".gitignore\"" "lint:prettier": "prettier . --check"
} }
} }
``` ```
@ -107,9 +114,9 @@ You must have a valid `tsconfig.json` file to specify `"parserOptions.project"`.
### Usage ### Usage
```sh ```sh
npm run lint:typescript npm run lint:eslint
# or to apply automatic fixes to code # or to apply automatic fixes to code
npm run lint:typescript -- --fix npm run lint:eslint -- --fix
# Validate code formatting in all supported languages by Prettier # Validate code formatting in all supported languages by Prettier
npm run lint:prettier npm run lint:prettier

6
eslintrc.json Normal file
View File

@ -0,0 +1,6 @@
{
"extends": "./index.js",
"parserOptions": {
"project": "./tsconfig.json"
}
}

15422
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -3,16 +3,16 @@
"version": "0.0.0-development", "version": "0.0.0-development",
"public": true, "public": true,
"description": "ESLint shareable config to enforce strict conventions and good code quality.", "description": "ESLint shareable config to enforce strict conventions and good code quality.",
"author": "Divlo <contact@divlo.fr>", "author": "Théo LUDWIG <contact@theoludwig.fr>",
"license": "MIT", "license": "MIT",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "https://github.com/Divlo/eslint-config-conventions.git" "url": "https://github.com/theoludwig/eslint-config-conventions.git"
}, },
"bugs": { "bugs": {
"url": "https://github.com/Divlo/eslint-config-conventions/issues" "url": "https://github.com/theoludwig/eslint-config-conventions/issues"
}, },
"homepage": "https://github.com/Divlo/eslint-config-conventions#readme", "homepage": "https://github.com/theoludwig/eslint-config-conventions#readme",
"keywords": [ "keywords": [
"eslintconfig", "eslintconfig",
"eslint", "eslint",
@ -23,50 +23,57 @@
"conventions" "conventions"
], ],
"main": "index.js", "main": "index.js",
"files": [
"index.js",
".eslintrc.json"
],
"publishConfig": {
"access": "public",
"provenance": true
},
"engines": { "engines": {
"node": ">=16.0.0", "node": ">=18.0.0",
"npm": ">=8.0.0" "npm": ">=9.0.0"
}, },
"scripts": { "scripts": {
"lint:commit": "commitlint", "lint:commit": "commitlint",
"lint:editorconfig": "editorconfig-checker", "lint:editorconfig": "editorconfig-checker",
"lint:markdown": "markdownlint \"**/*.md\" --dot --ignore-path \".gitignore\"", "lint:markdown": "markdownlint-cli2",
"lint:javascript": "eslint \"**/*.{js,jsx,ts,tsx}\"", "lint:eslint": "eslint . --max-warnings 0 --report-unused-disable-directives --config eslintrc.json",
"lint:prettier": "prettier \".\" --check --ignore-path \".gitignore\"", "lint:prettier": "prettier . --check",
"lint:staged": "lint-staged", "lint:staged": "lint-staged",
"test": "tape \"test/**/*.js\"", "test": "node --test test/",
"release": "semantic-release", "release": "semantic-release",
"postinstall": "husky install", "postinstall": "husky install",
"prepublishOnly": "pinst --disable", "prepublishOnly": "pinst --disable",
"postpublish": "pinst --enable" "postpublish": "pinst --enable"
}, },
"peerDependencies": { "peerDependencies": {
"eslint": "^8.9.0", "eslint": "^8.51.0",
"eslint-plugin-import": "^2.25.4", "eslint-plugin-import": "^2.28.1",
"eslint-plugin-promise": "^6.0.0", "eslint-plugin-promise": "^6.1.1",
"eslint-plugin-unicorn": "^41.0.0", "eslint-plugin-unicorn": "^48.0.1"
"typescript": "^4.4.0",
"@typescript-eslint/eslint-plugin": "^5.12.0"
}, },
"devDependencies": { "devDependencies": {
"@commitlint/cli": "16.2.1", "@commitlint/cli": "17.8.0",
"@commitlint/config-conventional": "16.2.1", "@commitlint/config-conventional": "17.8.0",
"editorconfig-checker": "4.0.2", "@tsconfig/strictest": "2.0.2",
"eslint": "8.9.0", "@types/eslint": "8.44.5",
"@types/eslint": "8.4.1", "@types/node": "20.8.7",
"eslint-plugin-import": "2.25.4", "@typescript-eslint/eslint-plugin": "6.8.0",
"eslint-plugin-promise": "6.0.0", "@typescript-eslint/parser": "6.8.0",
"eslint-plugin-unicorn": "41.0.0", "editorconfig-checker": "5.1.1",
"typescript": "4.5.5", "eslint": "8.51.0",
"@typescript-eslint/parser": "5.12.0", "eslint-plugin-import": "2.28.1",
"@typescript-eslint/eslint-plugin": "5.12.0", "eslint-plugin-promise": "6.1.1",
"tape": "5.5.2", "eslint-plugin-unicorn": "48.0.1",
"husky": "7.0.4", "husky": "8.0.3",
"lint-staged": "12.3.4", "lint-staged": "15.0.1",
"markdownlint-cli": "0.31.1", "markdownlint-cli2": "0.10.0",
"@types/tape": "4.13.2", "markdownlint-rule-relative-links": "2.1.0",
"pinst": "2.1.6", "pinst": "3.0.0",
"prettier": "2.5.1", "prettier": "3.0.3",
"semantic-release": "19.0.2" "semantic-release": "22.0.5",
"typescript": "5.2.2"
} }
} }

View File

@ -1,15 +1,20 @@
const test = require('tape') const test = require('node:test')
const assert = require('node:assert/strict')
const config = require('../index.js') const config = require('../index.js')
test('test basic properties of config', function (t) { /**
t.ok(isObject(config.parserOptions)) * @param {unknown} object
t.ok(isObject(config.env)) * @returns {boolean}
t.ok(isObject(config.rules)) */
t.ok(isObject(config.overrides)) const isObject = (object) => {
t.end()
})
function isObject(object) {
return typeof object === 'object' && object !== null return typeof object === 'object' && object !== null
} }
test('test basic properties of config', async () => {
assert.ok(isObject(config))
assert.ok(isObject(config.parserOptions))
assert.ok(isObject(config.env))
assert.ok(isObject(config.rules))
assert.ok(isObject(config.overrides))
})

View File

@ -1,3 +1,3 @@
const foo = await 1 const foo = await 1
const bar = function () {} const bar = () => {}
await bar(foo) await bar(foo)

View File

@ -1,37 +1,39 @@
const { ESLint } = require('eslint') const test = require('node:test')
const test = require('tape') const assert = require('node:assert/strict')
test('ensure we validate correctly JavaScript files', async (t) => { const { ESLint } = require('eslint')
const eslint = new ESLint({ ignore: false })
const eslint = new ESLint({
ignore: false,
useEslintrc: false,
overrideConfigFile: 'eslintrc.json'
})
test('ensure we validate correctly JavaScript files', async () => {
const [noErrors] = await eslint.lintFiles( const [noErrors] = await eslint.lintFiles(
'test/fixtures/javascript-no-errors.js' 'test/fixtures/javascript-no-errors.js'
) )
const [withErrors] = await eslint.lintFiles( const [withErrors] = await eslint.lintFiles(
'test/fixtures/javascript-with-errors.js' 'test/fixtures/javascript-with-errors.js'
) )
t.equal(noErrors.errorCount, 0) assert.strictEqual(noErrors?.errorCount, 0)
t.equal(withErrors.errorCount, 3) assert.strictEqual(withErrors?.errorCount, 3)
t.end()
}) })
test('ensure we validate correctly TypeScript files', async (t) => { test('ensure we validate correctly TypeScript files', async () => {
const eslint = new ESLint({ ignore: false })
const [noErrors] = await eslint.lintFiles( const [noErrors] = await eslint.lintFiles(
'test/fixtures/typescript-no-errors.ts' 'test/fixtures/typescript-no-errors.ts'
) )
const [withErrors] = await eslint.lintFiles( const [withErrors] = await eslint.lintFiles(
'test/fixtures/javascript-with-errors.js' 'test/fixtures/javascript-with-errors.js'
) )
t.equal(noErrors.errorCount, 0) assert.strictEqual(noErrors?.errorCount, 0)
t.equal(withErrors.errorCount, 3) assert.strictEqual(withErrors?.errorCount, 3)
t.end()
}) })
test('ensure we allow top-level await', async (t) => { test('ensure we allow top-level await', async () => {
const eslint = new ESLint({ ignore: false })
const [lintResult] = await eslint.lintFiles( const [lintResult] = await eslint.lintFiles(
'test/fixtures/top-level-await.mjs' 'test/fixtures/top-level-await.mjs'
) )
t.equal(lintResult.errorCount, 0) assert.strictEqual(lintResult?.errorCount, 0)
t.end()
}) })

View File

@ -1,12 +1,11 @@
{ {
"extends": "@tsconfig/strictest/tsconfig.json",
"compilerOptions": { "compilerOptions": {
"resolveJsonModule": true,
"target": "ESNext", "target": "ESNext",
"module": "commonjs", "module": "commonjs",
"lib": ["ESNext"], "lib": ["ESNext"],
"moduleResolution": "node", "moduleResolution": "node",
"rootDir": "./", "rootDir": "./"
"strict": true,
"skipLibCheck": true,
"esModuleInterop": true
} }
} }