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

Compare commits

..

84 Commits

Author SHA1 Message Date
424235bd4f docs: specify TypeScript version with ~ to avoid issues with semver 2024-09-28 18:52:46 +02:00
7486e3aab6 build(deps): update latest
BREAKING CHANGE: peerDependencies:
`@typescript-eslint/eslint-plugin@^8.3.0`
`@typescript-eslint/parser@^8.3.0`
2024-09-28 18:50:44 +02:00
12f37d01b3 feat: add @typescript-eslint/no-unnecessary-condition
BREAKING CHANGE: New rule introduced
2024-09-25 18:02:43 +02:00
6af4b4f6ac feat: add @typescript-eslint/no-deprecated
BREAKING CHANGE: New rule introduced

Fixes #5
2024-09-25 17:52:28 +02:00
b4f1c0b8dd feat: add @typescript-eslint/no-redundant-type-constituents
BREAKING CHANGE: New rule introduced
2024-09-25 16:44:52 +02:00
116c3c600a feat: add @typescript-eslint/no-unsafe-declaration-merging
BREAKING CHANGE: New rule introduced
2024-09-25 16:30:23 +02:00
4115843cc1 feat: add @typescript-eslint/unbound-method
BREAKING CHANGE: New rule introduced
2024-09-25 16:22:08 +02:00
14d3e0ba30 chore: usage of projectService for tsconfig.json 2024-09-18 00:32:33 +02:00
921aacdc9b test: easier to debug in case of failures 2024-09-18 00:29:14 +02:00
a03e2bd109 fix: relax @typescript-eslint/return-await 2024-09-18 00:26:51 +02:00
2db017e805 test: ensure we do not use deprecated rules 2024-09-18 00:20:22 +02:00
19f74fc6a2 feat: add unicorn/prefer-structured-clone
BREAKING CHANGE: New rule introduced
2024-09-17 23:58:02 +02:00
bcd9fe10d3 fix: remove deprecated TypeScript ESLint rules
`@typescript-eslint/no-loss-of-precision`
`@typescript-eslint/no-var-requires`
`@typescript-eslint/prefer-ts-expect-error`
`@typescript-eslint/no-throw-literal`
`@typescript-eslint/no-useless-template-literals`
`@typescript-eslint/ban-types`
`@typescript-eslint/type-annotation-spacing`

Fixes #4
2024-09-17 23:43:56 +02:00
c2147dbc7a fix: remove deprecated ESLint rules
`no-confusing-arrow`
`no-floating-decimal`
`no-mixed-operators`
`quote-props`
`arrow-parens`
2024-09-17 23:17:45 +02:00
e6a222d01f build(deps): update latest
BREAKING CHANGE: peerDependencies:
`eslint@^8.57.0`
`eslint-plugin-promise@^7.0.0`
`eslint-plugin-unicorn@^55.0.0`
`@typescript-eslint/eslint-plugin@^8.0.0`
`@typescript-eslint/parser@^8.0.0`
2024-09-17 23:11:38 +02:00
eac273c076 feat: add @typescript-eslint/prefer-return-this-type
BREAKING CHANGE: New rule introduced
2024-07-27 09:00:42 +02:00
0df1b867a4 docs: update README.md 2024-07-26 07:00:24 +02:00
92e6e56884 ci: usage of Node.js v22 2024-07-25 14:01:48 +02:00
305df380aa chore: remove usage of git hooks (husky, lint-staged, commitlint) + usage of node --run 2024-07-25 14:00:05 +02:00
8b3d9109d7 build(deps): update latest 2024-07-25 13:51:35 +02:00
d0fa4e3688 feat: support eslint-plugin-unicorn@^55.0.0 2024-07-25 13:49:08 +02:00
9fa86e2133 feat: support eslint-plugin-promise@^7.0.0 2024-07-25 13:48:49 +02:00
6cb7af3a05 docs: import plugin is not used anymore 2024-07-10 13:34:28 +02:00
b4de437548 fix: remove eslint-plugin-import rules
We'll consider using eslint-plugin-import-x in the next major version,
https://github.com/theoludwig/eslint-config-conventions/issues/3
We remove this plugin to avoid issues like this: https://github.com/pnpm/pnpm/issues/4619
(should be resolved when ESLint v9 is fully supported)
And because of the lack of features, that eslint-plugin-import-x implement:
(https://github.com/un-ts/eslint-plugin-import-x/issues/24#issuecomment-1991605123)
2024-07-10 13:02:54 +02:00
c751162403 feat: support eslint-plugin-unicorn@^54.0.0 2024-07-10 12:44:40 +02:00
152ccba986 build(deps): update latest 2024-07-10 12:42:53 +02:00
10b5a0d8df fix: allow to ignore floating promise with void operator: @typescript-eslint/no-floating-promises 2024-05-21 19:35:36 +02:00
815518c613 chore: allow to publish pre-release beta version 2024-05-21 19:35:36 +02:00
860873aa4b ci: update GitHub actions 2024-05-21 19:35:36 +02:00
5eacace152 docs: stop recommending eslint-config-prettier and eslint-plugin-prettier to use Prettier 2024-05-21 19:35:36 +02:00
0dcde0af51 feat: support eslint-plugin-unicorn@^52.0.0 and eslint-plugin-unicorn@^53.0.0 2024-05-21 19:35:36 +02:00
b0fa907559 build(deps): update latest 2024-05-21 19:35:36 +02:00
d15df84a73 docs: delete additional </p> 2024-05-21 19:35:36 +02:00
aa4da3f6e8 docs: stop mentioning eslint-config-standard-with-typescript as it is now very different 2024-05-21 19:35:36 +02:00
b180eae455 fix: relax @typescript-eslint/member-delimiter-style
Deprecated stylistic rule.
2024-05-21 19:35:36 +02:00
31b226ffa4 docs: rename master branch to main 2024-02-16 20:04:49 +01:00
8403ef4254 build(deps): update latest 2024-02-16 20:03:29 +01:00
dbe252f3b4 feat: add support for @typescript-eslint v7 2024-02-16 20:03:21 +01:00
6e6a8d7aa1 feat: add @typescript-eslint/no-require-imports
Not considered breaking, as `@typescript-eslint/no-var-requires` is already there.
You should already not use, `require` in your codebase.
It was a mistake to not include this rule.

However, the newly added rule, will now report an error for the following example code:
```tsx
const [loaded, error] = useFonts({
  CustomFont: require("../assets/fonts/CustomFont.ttf")
})
```

Must read: "Every change breaks someones workflow", https://xkcd.com/1172/
2024-02-16 20:02:41 +01:00
256a5024d6 feat: add @typescript-eslint/prefer-as-const
BREAKING CHANGE: New rule introduced
2024-02-08 22:56:43 +01:00
3d2e708e96 docs: update link to eslint-config-standard-with-typescript 2024-02-08 22:54:22 +01:00
b0f6ef585f feat: add @typescript-eslint/prefer-promise-reject-errors
BREAKING CHANGE: New rule introduced
2024-02-08 22:53:25 +01:00
7abcc179e5 feat: add @typescript-eslint/no-useless-template-literals
BREAKING CHANGE: New rule introduced
2024-02-08 22:49:11 +01:00
b72745bdbe feat: add @typescript-eslint/prefer-find
BREAKING CHANGE: New rule introduced
2024-02-08 22:47:38 +01:00
89c012cac2 feat: add @typescript-eslint/no-array-delete
BREAKING CHANGE: New rule introduced
2024-02-08 22:46:43 +01:00
00b7a2a89b feat: add promise/no-nesting
BREAKING CHANGE: New rule introduced
2024-02-08 22:34:10 +01:00
a5036c8381 feat: add promise/no-multiple-resolved
BREAKING CHANGE: New rule introduced
2024-02-08 22:32:39 +01:00
c9365be768 feat: add import/no-anonymous-default-export
BREAKING CHANGE: New rule introduced
2024-02-08 22:29:14 +01:00
c1a524e31b feat: add no-useless-concat
BREAKING CHANGE: New rule introduced
2024-02-08 22:25:31 +01:00
8585574a70 feat: add no-else-return
BREAKING CHANGE: New rule introduced
2024-02-08 22:24:19 +01:00
fce826e24a feat: add no-sparse-arrays
BREAKING CHANGE: New rule introduced
2024-02-08 22:09:31 +01:00
17e90bcc35 feat: add no-constant-binary-expression
BREAKING CHANGE: New rule introduced
2024-02-08 21:57:58 +01:00
dab4433431 build(deps): update latest
BREAKING CHANGE: peerDependencies: `eslint@^8.56.0`
`eslint-plugin-import@^2.29.1`
`eslint-plugin-unicorn@^51.0.1`
`typescript@^5.3.3`
`@typescript-eslint/eslint-plugin@^6.21.0`
`@typescript-eslint/parser@^6.21.0`
2024-02-08 21:50:33 +01:00
b671018a00 chore: cleaner configs 2024-01-30 01:32:52 +01:00
17dea937eb docs(license): add email address 2024-01-30 01:28:25 +01:00
7f3c152e61 build(deps): update latest 2023-12-26 22:07:17 +01:00
f243013173 feat: support eslint-plugin-unicorn@^50.0.0 2023-12-22 00:23:29 +01:00
d3d71f9a78 feat: add @typescript-eslint/no-unsafe-unary-minus
BREAKING CHANGE: New rule introduced
2023-11-14 12:52:10 +01:00
6a064c227e fix: relax unicorn/no-array-push-push 2023-11-14 12:50:21 +01:00
113a469ac5 build(deps): update latest
BREAKING CHANGE: peerDependencies:
`eslint@^8.52.0`
`eslint-plugin-import@^2.28.1`
`eslint-plugin-promise@^6.1.1`
`eslint-plugin-unicorn@^49.0.0`
`@typescript-eslint/eslint-plugin@^6.11.0`
`@typescript-eslint/parser@^6.11.0`
2023-11-14 12:49:18 +01:00
0e2b2ae89d chore: better Prettier config for easier reviews 2023-10-23 23:00:22 +02:00
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
30 changed files with 3022 additions and 5958 deletions

View File

@ -1 +0,0 @@
{ "extends": ["@commitlint/config-conventional"] }

View File

@ -1,6 +1,6 @@
{ {
"root": true, "root": true,
"plugins": ["import", "promise", "unicorn"], "plugins": ["promise", "unicorn"],
"env": { "env": {
"browser": true, "browser": true,
"node": true, "node": true,
@ -22,6 +22,7 @@
"no-compare-neg-zero": "error", "no-compare-neg-zero": "error",
"no-cond-assign": "error", "no-cond-assign": "error",
"no-const-assign": "error", "no-const-assign": "error",
"no-constant-binary-expression": "error",
"no-constant-condition": "error", "no-constant-condition": "error",
"no-constructor-return": "error", "no-constructor-return": "error",
"no-control-regex": "error", "no-control-regex": "error",
@ -34,7 +35,6 @@
"no-duplicate-imports": "error", "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",
@ -51,6 +51,7 @@
"no-self-assign": "error", "no-self-assign": "error",
"no-self-compare": "error", "no-self-compare": "error",
"no-setter-return": "error", "no-setter-return": "error",
"no-sparse-arrays": "error",
"no-this-before-super": "error", "no-this-before-super": "error",
"no-undef": "error", "no-undef": "error",
"no-unexpected-multiline": "error", "no-unexpected-multiline": "error",
@ -92,27 +93,15 @@
], ],
"no-array-constructor": "error", "no-array-constructor": "error",
"no-caller": "error", "no-caller": "error",
"no-confusing-arrow": "error",
"no-delete-var": "error", "no-delete-var": "error",
"no-empty": ["error", { "allowEmptyCatch": true }], "no-empty": ["error", { "allowEmptyCatch": true }],
"no-empty-static-block": "error",
"no-eval": "error", "no-eval": "error",
"no-floating-decimal": "error",
"no-global-assign": "error", "no-global-assign": "error",
"no-implied-eval": "error", "no-implied-eval": "error",
"no-mixed-operators": [
"error",
{
"groups": [
["==", "!=", "===", "!==", ">", ">=", "<", "<="],
["&&", "||"],
["in", "instanceof"]
],
"allowSamePrecedence": true
}
],
"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",
@ -130,13 +119,15 @@
} }
], ],
"no-useless-call": "error", "no-useless-call": "error",
"no-useless-concat": "error",
"no-useless-computed-key": "error", "no-useless-computed-key": "error",
"no-useless-constructor": "error", "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",
"no-else-return": ["error", { "allowElseIf": false }],
"no-var": "error", "no-var": "error",
"no-void": "error", "no-void": ["error", { "allowAsStatement": true }],
"no-with": "error", "no-with": "error",
"object-shorthand": ["error", "properties"], "object-shorthand": ["error", "properties"],
"one-var": ["error", { "initialized": "never" }], "one-var": ["error", { "initialized": "never" }],
@ -144,48 +135,46 @@
"prefer-object-has-own": "error", "prefer-object-has-own": "error",
"prefer-promise-reject-errors": "error", "prefer-promise-reject-errors": "error",
"prefer-regex-literals": ["error", { "disallowRedundantWrapping": true }], "prefer-regex-literals": ["error", { "disallowRedundantWrapping": true }],
"quote-props": ["error", "as-needed"],
"radix": "error", "radix": "error",
"yoda": ["error", "never"], "yoda": ["error", "never"],
"curly": ["error", "all"], "curly": ["error", "all"],
"func-style": ["error", "expression"], "func-style": ["error", "expression"],
"prefer-arrow-callback": "error", "prefer-arrow-callback": "error",
"arrow-parens": ["error", "always"],
"arrow-body-style": ["error", "always"], "arrow-body-style": ["error", "always"],
"import/no-absolute-path": "error",
"import/no-webpack-loader-syntax": "error",
"import/no-self-import": "error",
"import/no-useless-path-segments": "error",
"import/export": "error",
"import/first": "error",
"import/no-duplicates": "error",
"import/order": [
"error",
{
"groups": ["builtin", "external", "internal"],
"newlines-between": "always"
}
],
"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",
"promise/no-multiple-resolved": "error",
"promise/no-nesting": "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-for-each": "error",
"unicorn/no-array-method-this-argument": "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/no-typeof-undefined": "error",
"unicorn/require-array-join-separator": "error",
"unicorn/prefer-number-properties": "error",
"unicorn/prefer-modern-math-apis": "error",
"unicorn/prefer-structured-clone": "error",
"unicorn/template-indent": "error"
}, },
"overrides": [ "overrides": [
{ {
@ -196,8 +185,6 @@
"no-undef": "off", "no-undef": "off",
"no-dupe-class-members": "off", "no-dupe-class-members": "off",
"@typescript-eslint/no-dupe-class-members": "error", "@typescript-eslint/no-dupe-class-members": "error",
"no-loss-of-precision": "off",
"@typescript-eslint/no-loss-of-precision": "error",
"no-unused-vars": "off", "no-unused-vars": "off",
"@typescript-eslint/no-unused-vars": [ "@typescript-eslint/no-unused-vars": [
"error", "error",
@ -228,7 +215,7 @@
{ "builtinGlobals": false } { "builtinGlobals": false }
], ],
"no-throw-literal": "off", "no-throw-literal": "off",
"@typescript-eslint/no-throw-literal": "error", "@typescript-eslint/only-throw-error": "error",
"no-unused-expressions": "off", "no-unused-expressions": "off",
"@typescript-eslint/no-unused-expressions": [ "@typescript-eslint/no-unused-expressions": [
"error", "error",
@ -240,17 +227,26 @@
], ],
"no-useless-constructor": "off", "no-useless-constructor": "off",
"@typescript-eslint/no-useless-constructor": "error", "@typescript-eslint/no-useless-constructor": "error",
"@typescript-eslint/no-unnecessary-template-expression": "error",
"@typescript-eslint/no-unnecessary-condition": [
"error",
{
"allowConstantLoopConditions": true
}
],
"@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/ban-types": "error", "@typescript-eslint/no-unsafe-function-type": "error",
"@typescript-eslint/no-wrapper-object-types": "error",
"@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/consistent-type-imports": "error",
"@typescript-eslint/explicit-function-return-type": [ "@typescript-eslint/explicit-function-return-type": [
"error", "error",
@ -261,14 +257,8 @@
"allowDirectConstAssertionInArrowFunctions": true "allowDirectConstAssertionInArrowFunctions": true
} }
], ],
"@typescript-eslint/member-delimiter-style": [
"error",
{
"multiline": { "delimiter": "none" },
"singleline": { "delimiter": "comma", "requireLast": false }
}
],
"@typescript-eslint/method-signature-style": "error", "@typescript-eslint/method-signature-style": "error",
"@typescript-eslint/unbound-method": "error",
"@typescript-eslint/naming-convention": [ "@typescript-eslint/naming-convention": [
"error", "error",
{ {
@ -279,8 +269,10 @@
} }
], ],
"@typescript-eslint/no-base-to-string": "error", "@typescript-eslint/no-base-to-string": "error",
"@typescript-eslint/no-deprecated": "error",
"@typescript-eslint/no-dynamic-delete": "error", "@typescript-eslint/no-dynamic-delete": "error",
"@typescript-eslint/no-extra-non-null-assertion": "error", "@typescript-eslint/no-extra-non-null-assertion": "error",
"@typescript-eslint/no-redundant-type-constituents": "error",
"@typescript-eslint/no-extraneous-class": [ "@typescript-eslint/no-extraneous-class": [
"error", "error",
{ "allowWithDecorator": true } { "allowWithDecorator": true }
@ -297,20 +289,28 @@
], ],
"@typescript-eslint/no-unnecessary-boolean-literal-compare": "error", "@typescript-eslint/no-unnecessary-boolean-literal-compare": "error",
"@typescript-eslint/no-unnecessary-type-assertion": "error", "@typescript-eslint/no-unnecessary-type-assertion": "error",
"@typescript-eslint/no-var-requires": "error", "@typescript-eslint/no-require-imports": "error",
"@typescript-eslint/no-unsafe-unary-minus": "error",
"@typescript-eslint/no-unsafe-declaration-merging": "error",
"@typescript-eslint/no-array-delete": "error",
"@typescript-eslint/prefer-as-const": "error",
"@typescript-eslint/prefer-function-type": "error", "@typescript-eslint/prefer-function-type": "error",
"@typescript-eslint/prefer-find": "error",
"@typescript-eslint/prefer-includes": "error", "@typescript-eslint/prefer-includes": "error",
"@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-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-return-this-type": "error",
"@typescript-eslint/promise-function-async": "error", "@typescript-eslint/promise-function-async": "error",
"prefer-promise-reject-errors": "off",
"@typescript-eslint/prefer-promise-reject-errors": "error",
"@typescript-eslint/require-array-sort-compare": [ "@typescript-eslint/require-array-sort-compare": [
"error", "error",
{ "ignoreStringArrays": true } { "ignoreStringArrays": true }
@ -323,7 +323,6 @@
"error", "error",
{ "allowNumber": true } { "allowNumber": true }
], ],
"@typescript-eslint/return-await": ["error", "always"],
"@typescript-eslint/strict-boolean-expressions": [ "@typescript-eslint/strict-boolean-expressions": [
"error", "error",
{ {
@ -335,8 +334,7 @@
"allowNullableNumber": false, "allowNullableNumber": false,
"allowAny": false "allowAny": false
} }
], ]
"@typescript-eslint/type-annotation-spacing": "error"
} }
} }
] ]

View File

@ -1,8 +1,8 @@
--- ---
name: '🐛 Bug Report' name: "🐛 Bug Report"
about: 'Report an unexpected problem or unintended behavior.' about: "Report an unexpected problem or unintended behavior."
title: '[Bug]' title: "[Bug]"
labels: 'bug' labels: "bug"
--- ---
<!-- <!--

View File

@ -1,8 +1,8 @@
--- ---
name: '📜 Documentation' name: "📜 Documentation"
about: 'Correct spelling errors, improvements or additions to documentation files (README, CONTRIBUTING...).' about: "Correct spelling errors, improvements or additions to documentation files (README, CONTRIBUTING...)."
title: '[Documentation]' title: "[Documentation]"
labels: 'documentation' labels: "documentation"
--- ---
<!-- Please make sure your issue has not already been fixed. --> <!-- Please make sure your issue has not already been fixed. -->

View File

@ -1,8 +1,8 @@
--- ---
name: '✨ Feature Request' name: "✨ Feature Request"
about: 'Suggest a new feature idea.' about: "Suggest a new feature idea."
title: '[Feature]' title: "[Feature]"
labels: 'feature request' labels: "feature request"
--- ---
<!-- Please make sure your issue has not already been fixed. --> <!-- Please make sure your issue has not already been fixed. -->

View File

@ -1,8 +1,8 @@
--- ---
name: '🔧 Improvement' name: "🔧 Improvement"
about: 'Improve structure/format/performance/refactor/tests of the code.' about: "Improve structure/format/performance/refactor/tests of the code."
title: '[Improvement]' title: "[Improvement]"
labels: 'improvement' labels: "improvement"
--- ---
<!-- Please make sure your issue has not already been fixed. --> <!-- Please make sure your issue has not already been fixed. -->

View File

@ -1,8 +1,8 @@
--- ---
name: '🙋 Question' name: "🙋 Question"
about: 'Further information is requested.' about: "Further information is requested."
title: '[Question]' title: "[Question]"
labels: 'question' labels: "question"
--- ---
### Question ### Question

View File

@ -1,28 +1,34 @@
name: 'Lint' name: "Lint"
on: on:
push: push:
branches: [develop] branches: [develop]
pull_request: pull_request:
branches: [master, develop] branches: [main, develop]
jobs: jobs:
lint: lint:
runs-on: 'ubuntu-latest' runs-on: "ubuntu-latest"
steps: steps:
- uses: 'actions/checkout@v3.5.3' - uses: "actions/checkout@v4.1.7"
- name: 'Setup Node.js' - name: "Setup Node.js"
uses: 'actions/setup-node@v3.6.0' uses: "actions/setup-node@v4.0.3"
with: with:
node-version: 'lts/*' node-version: "22.x"
cache: 'npm' cache: "npm"
- name: 'Install dependencies' - name: "Install dependencies"
run: 'npm clean-install' run: "npm clean-install"
- run: 'npm run lint:commit -- --to "${{ github.sha }}"' - run: "node --run lint:editorconfig"
- run: 'npm run lint:editorconfig' - run: "node --run lint:markdown"
- run: 'npm run lint:markdown' - run: "node --run lint:eslint"
- run: 'npm run lint:eslint' - run: "node --run lint:prettier"
- run: 'npm run lint:prettier'
commitlint:
runs-on: "ubuntu-latest"
steps:
- uses: "actions/checkout@v4.1.7"
- uses: "wagoid/commitlint-github-action@v6.1.2"

View File

@ -1,37 +1,37 @@
name: 'Release' name: "Release"
on: on:
push: push:
branches: [master] branches: [main]
jobs: jobs:
release: release:
runs-on: 'ubuntu-latest' runs-on: "ubuntu-latest"
permissions: permissions:
contents: 'write' contents: "write"
issues: 'write' issues: "write"
pull-requests: 'write' pull-requests: "write"
id-token: 'write' id-token: "write"
steps: steps:
- uses: 'actions/checkout@v3.5.3' - uses: "actions/checkout@v4.1.7"
with: with:
fetch-depth: 0 fetch-depth: 0
persist-credentials: false persist-credentials: false
- name: 'Setup Node.js' - name: "Setup Node.js"
uses: 'actions/setup-node@v3.6.0' uses: "actions/setup-node@v4.0.3"
with: with:
node-version: 'lts/*' node-version: "22.x"
cache: 'npm' cache: "npm"
- name: 'Install dependencies' - name: "Install dependencies"
run: 'npm clean-install' run: "npm clean-install"
- name: 'Verify the integrity of provenance attestations and registry signatures for installed dependencies' - name: "Verify the integrity of provenance attestations and registry signatures for installed dependencies"
run: 'npm audit signatures' run: "npm audit signatures"
- name: 'Release' - name: "Release"
run: 'npm run release' run: "node --run release"
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }} NPM_TOKEN: ${{ secrets.NPM_TOKEN }}

View File

@ -1,25 +1,25 @@
name: 'Test' name: "Test"
on: on:
push: push:
branches: [develop] branches: [develop]
pull_request: pull_request:
branches: [master, develop] branches: [main, develop]
jobs: jobs:
test: test:
runs-on: 'ubuntu-latest' runs-on: "ubuntu-latest"
steps: steps:
- uses: 'actions/checkout@v3.5.3' - uses: "actions/checkout@v4.1.7"
- name: 'Setup Node.js' - name: "Setup Node.js"
uses: 'actions/setup-node@v3.6.0' uses: "actions/setup-node@v4.0.3"
with: with:
node-version: 'lts/*' node-version: "22.x"
cache: 'npm' cache: "npm"
- name: 'Install dependencies' - name: "Install dependencies"
run: 'npm clean-install' run: "npm clean-install"
- name: 'Test' - name: "Test"
run: 'npm run test' run: "node --run test"

View File

@ -1,4 +0,0 @@
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
npm run lint:commit -- --edit

View File

@ -1,5 +0,0 @@
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
npm run lint:staged
npm run test

View File

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

View File

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

4
.npmrc
View File

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

View File

@ -1,6 +1,3 @@
{ {
"singleQuote": true, "semi": false
"jsxSingleQuote": true,
"semi": false,
"trailingComma": "none"
} }

View File

@ -1,18 +1,8 @@
{ {
"branches": ["master"], "branches": ["main", { "name": "beta", "prerelease": true }],
"plugins": [ "plugins": [
[ "@semantic-release/commit-analyzer",
"@semantic-release/commit-analyzer", "@semantic-release/release-notes-generator",
{
"preset": "conventionalcommits"
}
],
[
"@semantic-release/release-notes-generator",
{
"preset": "conventionalcommits"
}
],
"@semantic-release/npm", "@semantic-release/npm",
"@semantic-release/github" "@semantic-release/github"
] ]

View File

@ -1,8 +0,0 @@
{
"recommendations": [
"editorconfig.editorconfig",
"esbenp.prettier-vscode",
"dbaeumer.vscode-eslint",
"davidanson.vscode-markdownlint"
]
}

10
.vscode/settings.json vendored
View File

@ -1,10 +0,0 @@
{
"typescript.tsdk": "node_modules/typescript/lib",
"typescript.preferences.importModuleSpecifierEnding": "js",
"editor.defaultFormatter": "esbenp.prettier-vscode",
"prettier.configPath": ".prettierrc.json",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll": true
}
}

View File

@ -1,6 +1,6 @@
MIT License # MIT License
Copyright (c) Théo LUDWIG Copyright (c) Théo LUDWIG <contact@theoludwig.fr>
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

@ -4,15 +4,13 @@
<strong><a href="https://eslint.org/docs/developer-guide/shareable-configs">ESLint shareable config</a> to enforce strict conventions and good code quality.</strong> <strong><a href="https://eslint.org/docs/developer-guide/shareable-configs">ESLint shareable config</a> to enforce strict conventions and good code quality.</strong>
</p> </p>
</p>
<p align="center"> <p align="center">
<a href="./CONTRIBUTING.md"><img src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat" /></a> <a href="./CONTRIBUTING.md"><img src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat" alt="CONTRIBUTING" /></a>
<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/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/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" alt="lint action" /></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> <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" alt="test action" /></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,7 +19,7 @@
## 📜 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**. It supports both **JavaScript** and **TypeScript**. **eslint-config-conventions** is a [ESLint](https://eslint.org) configuration to enforce strict conventions and good code quality. It supports both **JavaScript** and **TypeScript**.
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. 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.
@ -31,37 +29,35 @@ 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
```sh ```sh
npm install --save-dev \ npm install --save-dev \
eslint@^8.44.0 \ eslint@^8.57.0 \
eslint-plugin-import@^2.27.5 \ eslint-plugin-promise@^7.0.0 \
eslint-plugin-promise@^6.1.1 \ eslint-plugin-unicorn@^55.0.0 \
eslint-plugin-unicorn@^47.0.0 \
eslint-config-conventions@latest eslint-config-conventions@latest
``` ```
This is a large number of packages due to [a known limitation in ESLint](https://github.com/eslint/eslint/issues/3458). Dependencies are:
This list of dependencies are:
- [ESLint](https://github.com/eslint/eslint) - [ESLint](https://github.com/eslint/eslint)
- 3 [ESLint Plugins](https://eslint.org/docs/user-guide/configuring/plugins) - [ESLint Plugins](https://eslint.org/docs/user-guide/configuring/plugins)
- [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)
- This package: `eslint-config-conventions` - This package: `eslint-config-conventions`
#### Installation with TypeScript
If you want to use **TypeScript**, you also need to install: If you want to use **TypeScript**, you also need to install:
```sh ```sh
npm install --save-dev \ npm install --save-dev \
typescript@^5.1.6 \ "typescript@~5.5.4" \
@typescript-eslint/eslint-plugin@^6.0.0 \ "@typescript-eslint/eslint-plugin@^8.3.0" \
@typescript-eslint/parser@^6.0.0 "@typescript-eslint/parser@^8.3.0"
``` ```
Dependencies are: Dependencies are:
@ -70,43 +66,58 @@ Dependencies are:
- [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint): ESLint rules for 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. - [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint): ESLint parser for TypeScript.
### Configuration with [Prettier](https://prettier.io/) (recommended) ### Configuration
You will need to install some dependencies in addition to those required: #### `.eslintrc.json` (JavaScript)
```json
{
"root": true,
"extends": ["conventions"],
"plugins": ["promise", "unicorn"]
}
```
#### `.eslintrc.json` (TypeScript)
```json
{
"root": true,
"extends": ["conventions"],
"plugins": ["promise", "unicorn"],
"overrides": [
{
"files": ["*.ts", "*.tsx"],
"parser": "@typescript-eslint/parser",
"plugins": ["@typescript-eslint"],
"parserOptions": {
"projectService": true
}
}
]
}
```
#### Configuration with [Prettier](https://prettier.io/) (recommended)
```sh ```sh
npm install --save-dev prettier eslint-config-prettier eslint-plugin-prettier npm install --save-dev 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` That's all! No need to update the `.eslintrc.json` configuration.
```json We discourage usage of [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) and [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier), as `eslint-config-conventions` doesn't include any stylistic rules, and including these packages has several drawbacks (listed in [Integrating with Linters](https://prettier.io/docs/en/integrating-with-linters.html)) and brings no benefits for this configuration.
{
"extends": ["conventions", "prettier"],
"plugins": ["prettier"],
"parserOptions": {
"project": "./tsconfig.json"
},
"rules": {
"prettier/prettier": "error"
}
}
```
**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).
`"parserOptions.project"` is only required if you use **TypeScript**.
#### `package.json` #### `package.json`
```jsonc ```json
{ {
"scripts": { "scripts": {
"lint:eslint": "eslint . --ignore-path .gitignore", "lint:eslint": "eslint . --max-warnings 0 --report-unused-disable-directives --ignore-path .gitignore",
"lint:prettier": "prettier . --check" "lint:prettier": "prettier . --check"
} }
} }
@ -115,12 +126,12 @@ echo "{}" > .prettierrc.json
### Usage ### Usage
```sh ```sh
npm run lint:eslint node --run lint:eslint
# or to apply automatic fixes to code # or to apply automatic fixes to code
npm run lint:eslint -- --fix node --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 node --run lint:prettier
``` ```
## 💡 Contributing ## 💡 Contributing

View File

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

View File

@ -1 +1 @@
module.exports = require('./.eslintrc.json') module.exports = require("./.eslintrc.json")

8419
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -32,48 +32,34 @@
"provenance": true "provenance": true
}, },
"engines": { "engines": {
"node": ">=16.0.0", "node": ">=18.0.0"
"npm": ">=9.0.0"
}, },
"scripts": { "scripts": {
"lint:commit": "commitlint",
"lint:editorconfig": "editorconfig-checker", "lint:editorconfig": "editorconfig-checker",
"lint:markdown": "markdownlint-cli2", "lint:markdown": "markdownlint-cli2",
"lint:eslint": "eslint . -c eslintrc.json", "lint:eslint": "eslint . --max-warnings 0 --report-unused-disable-directives --config eslintrc.json",
"lint:prettier": "prettier . --check", "lint:prettier": "prettier . --check",
"lint:staged": "lint-staged", "test": "node --test",
"test": "node --test test/", "release": "semantic-release"
"release": "semantic-release",
"postinstall": "husky install",
"prepublishOnly": "pinst --disable",
"postpublish": "pinst --enable"
}, },
"peerDependencies": { "peerDependencies": {
"eslint": "^8.44.0", "eslint": "^8.57.0",
"eslint-plugin-import": "^2.27.5", "eslint-plugin-promise": "^7.0.0",
"eslint-plugin-promise": "^6.1.1", "eslint-plugin-unicorn": "^55.0.0"
"eslint-plugin-unicorn": "^47.0.0"
}, },
"devDependencies": { "devDependencies": {
"@commitlint/cli": "17.6.6", "@types/eslint": "8.56.12",
"@commitlint/config-conventional": "17.6.6", "@types/node": "22.7.4",
"@tsconfig/strictest": "2.0.1", "@typescript-eslint/eslint-plugin": "8.7.0",
"@types/eslint": "8.44.0", "@typescript-eslint/parser": "8.7.0",
"@types/node": "20.4.2", "editorconfig-checker": "6.0.0",
"@typescript-eslint/eslint-plugin": "6.0.0", "eslint": "8.57.1",
"@typescript-eslint/parser": "6.0.0", "eslint-plugin-promise": "7.1.0",
"editorconfig-checker": "5.1.1", "eslint-plugin-unicorn": "55.0.0",
"eslint": "8.45.0", "markdownlint-cli2": "0.14.0",
"eslint-plugin-import": "2.27.5", "markdownlint-rule-relative-links": "3.0.0",
"eslint-plugin-promise": "6.1.1", "prettier": "3.3.3",
"eslint-plugin-unicorn": "47.0.0", "semantic-release": "23.1.1",
"husky": "8.0.3", "typescript": "5.6.2"
"lint-staged": "13.2.3",
"markdownlint-cli2": "0.8.1",
"markdownlint-rule-relative-links": "2.1.0",
"pinst": "3.0.0",
"prettier": "3.0.0",
"semantic-release": "21.0.7",
"typescript": "5.1.6"
} }
} }

View File

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

View File

@ -1 +1 @@
'invalid eqeqeq' == 'invalid eqeqeq' "invalid eqeqeq" == "invalid eqeqeq"

View File

@ -0,0 +1,3 @@
const returnsPromise = async (): Promise<void> => {}
void returnsPromise()

View File

@ -1,39 +1,81 @@
const test = require('node:test') const test = require("node:test")
const assert = require('node:assert/strict') const assert = require("node:assert/strict")
const { ESLint } = require('eslint') const { ESLint } = require("eslint")
const eslint = new ESLint({ const eslint = new ESLint({
ignore: false, ignore: false,
useEslintrc: false, useEslintrc: false,
overrideConfigFile: 'eslintrc.json' overrideConfigFile: "eslintrc.json",
}) })
test('ensure we validate correctly JavaScript files', async () => { 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",
)
assert.strictEqual(noErrors?.errorCount, 0, JSON.stringify(noErrors, null, 2))
assert.strictEqual(
withErrors?.errorCount,
3,
JSON.stringify(withErrors, null, 2),
) )
assert.strictEqual(noErrors?.errorCount, 0)
assert.strictEqual(withErrors?.errorCount, 3)
}) })
test('ensure we validate correctly TypeScript files', async () => { test("ensure we do not use deprecated rules", async () => {
const [javascriptLintResult] = await eslint.lintFiles(
"test/fixtures/javascript-no-errors.js",
)
const [typescriptLintResult] = await eslint.lintFiles(
"test/fixtures/typescript-no-errors.ts",
)
assert.strictEqual(
javascriptLintResult.usedDeprecatedRules.length,
0,
JSON.stringify(javascriptLintResult, null, 2),
)
assert.strictEqual(
typescriptLintResult.usedDeprecatedRules.length,
0,
JSON.stringify(typescriptLintResult, null, 2),
)
})
test("ensure we validate correctly TypeScript files", async () => {
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",
)
assert.strictEqual(noErrors?.errorCount, 0, JSON.stringify(noErrors, null, 2))
assert.strictEqual(
withErrors?.errorCount,
3,
JSON.stringify(withErrors, null, 2),
) )
assert.strictEqual(noErrors?.errorCount, 0)
assert.strictEqual(withErrors?.errorCount, 3)
}) })
test('ensure we allow top-level await', async () => { test("ensure we allow top-level await", async () => {
const [lintResult] = await eslint.lintFiles( const [lintResult] = await eslint.lintFiles(
'test/fixtures/top-level-await.mjs' "test/fixtures/top-level-await.mjs",
)
assert.strictEqual(
lintResult?.errorCount,
0,
JSON.stringify(lintResult, null, 2),
)
})
test("ensure we allow to ignore floating promise with void operator (@typescript-eslint/no-floating-promises)", async () => {
const [lintResult] = await eslint.lintFiles(
"test/fixtures/typescript-no-errors-ignore-promise.ts",
)
assert.strictEqual(
lintResult?.errorCount,
0,
JSON.stringify(lintResult, null, 2),
) )
assert.strictEqual(lintResult?.errorCount, 0)
}) })

View File

@ -1,7 +1,7 @@
{ {
"extends": "@tsconfig/strictest/tsconfig.json",
"compilerOptions": { "compilerOptions": {
"resolveJsonModule": true, "resolveJsonModule": true,
"strict": true,
"target": "ESNext", "target": "ESNext",
"module": "commonjs", "module": "commonjs",
"lib": ["ESNext"], "lib": ["ESNext"],