oxc-project / oxc

⚓ A collection of JavaScript tools written in Rust.
https://oxc.rs
MIT License
10.01k stars 368 forks source link

☂️ typescript-eslint #2180

Open Boshen opened 6 months ago

Boshen commented 6 months ago

[!WARNING] This comment is maintained by CI. Do not edit this comment directly. To update comment template, see https://github.com/oxc-project/oxc/tree/main/tasks/lint_rules

This is tracking issue for @typescript-eslint/eslint-plugin.

There are 67(+ 24 deprecated) rules.

To get started, run the following command:

just new-typescript-rule <RULE_NAME>

Then register the rule in crates/oxc_linter/src/rules.rs and also declare_all_lint_rules at the bottom.

Recommended rules

✨: 31, 🚫: 0 / total: 39 | Status | Name | Docs | | :----: | :--- | :--- | | ✨ | typescript/adjacent-overload-signatures | https://typescript-eslint.io/rules/adjacent-overload-signatures | | ✨ | typescript/array-type | https://typescript-eslint.io/rules/array-type | | ✨ | typescript/ban-tslint-comment | https://typescript-eslint.io/rules/ban-tslint-comment | | ✨ | typescript/ban-types | https://typescript-eslint.io/rules/ban-types | | | typescript/class-literal-property-style | https://typescript-eslint.io/rules/class-literal-property-style | | | typescript/consistent-generic-constructors | https://typescript-eslint.io/rules/consistent-generic-constructors | | ✨ | typescript/consistent-indexed-object-style | https://typescript-eslint.io/rules/consistent-indexed-object-style | | | typescript/consistent-type-assertions | https://typescript-eslint.io/rules/consistent-type-assertions | | ✨ | typescript/consistent-type-definitions | https://typescript-eslint.io/rules/consistent-type-definitions | | ✨ | typescript/no-array-constructor | https://typescript-eslint.io/rules/no-array-constructor | | ✨ | typescript/no-confusing-non-null-assertion | https://typescript-eslint.io/rules/no-confusing-non-null-assertion | | ✨ | typescript/no-duplicate-enum-values | https://typescript-eslint.io/rules/no-duplicate-enum-values | | ✨ | typescript/no-dynamic-delete | https://typescript-eslint.io/rules/no-dynamic-delete | | ✨ | typescript/no-empty-function | https://typescript-eslint.io/rules/no-empty-function | | ✨ | typescript/no-empty-interface | https://typescript-eslint.io/rules/no-empty-interface | | ✨ | typescript/no-explicit-any | https://typescript-eslint.io/rules/no-explicit-any | | ✨ | typescript/no-extra-non-null-assertion | https://typescript-eslint.io/rules/no-extra-non-null-assertion | | ✨ | typescript/no-extraneous-class | https://typescript-eslint.io/rules/no-extraneous-class | | | typescript/no-inferrable-types | https://typescript-eslint.io/rules/no-inferrable-types | | | typescript/no-invalid-void-type | https://typescript-eslint.io/rules/no-invalid-void-type | | ✨ | typescript/no-loss-of-precision | https://typescript-eslint.io/rules/no-loss-of-precision | | ✨ | typescript/no-misused-new | https://typescript-eslint.io/rules/no-misused-new | | ✨ | typescript/no-namespace | https://typescript-eslint.io/rules/no-namespace | | ✨ | typescript/no-non-null-asserted-nullish-coalescing | https://typescript-eslint.io/rules/no-non-null-asserted-nullish-coalescing | | ✨ | typescript/no-non-null-asserted-optional-chain | https://typescript-eslint.io/rules/no-non-null-asserted-optional-chain | | ✨ | typescript/no-non-null-assertion | https://typescript-eslint.io/rules/no-non-null-assertion | | ✨ | typescript/no-this-alias | https://typescript-eslint.io/rules/no-this-alias | | ✨ | typescript/no-unnecessary-type-constraint | https://typescript-eslint.io/rules/no-unnecessary-type-constraint | | ✨ | typescript/no-unsafe-declaration-merging | https://typescript-eslint.io/rules/no-unsafe-declaration-merging | | | typescript/no-unused-vars | https://typescript-eslint.io/rules/no-unused-vars | | ✨ | typescript/no-useless-constructor | https://typescript-eslint.io/rules/no-useless-constructor | | ✨ | typescript/no-var-requires | https://typescript-eslint.io/rules/no-var-requires | | ✨ | typescript/prefer-as-const | https://typescript-eslint.io/rules/prefer-as-const | | ✨ | typescript/prefer-for-of | https://typescript-eslint.io/rules/prefer-for-of | | ✨ | typescript/prefer-function-type | https://typescript-eslint.io/rules/prefer-function-type | | ✨ | typescript/prefer-literal-enum-member | https://typescript-eslint.io/rules/prefer-literal-enum-member | | | typescript/prefer-namespace-keyword | https://typescript-eslint.io/rules/prefer-namespace-keyword | | ✨ | typescript/triple-slash-reference | https://typescript-eslint.io/rules/triple-slash-reference | | | typescript/unified-signatures | https://typescript-eslint.io/rules/unified-signatures | ✨ = Implemented, 🚫 = Not supported

Not recommended rules

✨: 10, 🚫: 0 / total: 28 | Status | Name | Docs | | :----: | :--- | :--- | | ✨ | typescript/ban-ts-comment | https://typescript-eslint.io/rules/ban-ts-comment | | | typescript/class-methods-use-this | https://typescript-eslint.io/rules/class-methods-use-this | | ✨ | typescript/consistent-type-imports | https://typescript-eslint.io/rules/consistent-type-imports | | ✨ | typescript/default-param-last | https://typescript-eslint.io/rules/default-param-last | | ✨ | typescript/explicit-function-return-type | https://typescript-eslint.io/rules/explicit-function-return-type | | | typescript/explicit-member-accessibility | https://typescript-eslint.io/rules/explicit-member-accessibility | | | typescript/explicit-module-boundary-types | https://typescript-eslint.io/rules/explicit-module-boundary-types | | | typescript/init-declarations | https://typescript-eslint.io/rules/init-declarations | | ✨ | typescript/max-params | https://typescript-eslint.io/rules/max-params | | | typescript/member-ordering | https://typescript-eslint.io/rules/member-ordering | | | typescript/method-signature-style | https://typescript-eslint.io/rules/method-signature-style | | ✨ | typescript/no-dupe-class-members | https://typescript-eslint.io/rules/no-dupe-class-members | | | typescript/no-empty-object-type | https://typescript-eslint.io/rules/no-empty-object-type | | ✨ | typescript/no-import-type-side-effects | https://typescript-eslint.io/rules/no-import-type-side-effects | | | typescript/no-invalid-this | https://typescript-eslint.io/rules/no-invalid-this | | | typescript/no-loop-func | https://typescript-eslint.io/rules/no-loop-func | | | typescript/no-magic-numbers | https://typescript-eslint.io/rules/no-magic-numbers | | ✨ | typescript/no-redeclare | https://typescript-eslint.io/rules/no-redeclare | | | typescript/no-require-imports | https://typescript-eslint.io/rules/no-require-imports | | | typescript/no-restricted-imports | https://typescript-eslint.io/rules/no-restricted-imports | | | typescript/no-shadow | https://typescript-eslint.io/rules/no-shadow | | | typescript/no-unnecessary-parameter-property-assignment | https://typescript-eslint.io/rules/no-unnecessary-parameter-property-assignment | | | typescript/no-unused-expressions | https://typescript-eslint.io/rules/no-unused-expressions | | | typescript/no-use-before-define | https://typescript-eslint.io/rules/no-use-before-define | | ✨ | typescript/no-useless-empty-export | https://typescript-eslint.io/rules/no-useless-empty-export | | | typescript/parameter-properties | https://typescript-eslint.io/rules/parameter-properties | | ✨ | typescript/prefer-enum-initializers | https://typescript-eslint.io/rules/prefer-enum-initializers | | | typescript/typedef | https://typescript-eslint.io/rules/typedef | ✨ = Implemented, 🚫 = Not supported

Deprecated rules

✨: 1, 🚫: 0 / total: 24 | Status | Name | Docs | | :----: | :--- | :--- | | | typescript/block-spacing | https://typescript-eslint.io/rules/block-spacing | | | typescript/brace-style | https://typescript-eslint.io/rules/brace-style | | | typescript/comma-dangle | https://typescript-eslint.io/rules/comma-dangle | | | typescript/comma-spacing | https://typescript-eslint.io/rules/comma-spacing | | | typescript/func-call-spacing | https://typescript-eslint.io/rules/func-call-spacing | | | typescript/indent | https://typescript-eslint.io/rules/indent | | | typescript/key-spacing | https://typescript-eslint.io/rules/key-spacing | | | typescript/keyword-spacing | https://typescript-eslint.io/rules/keyword-spacing | | | typescript/lines-around-comment | https://typescript-eslint.io/rules/lines-around-comment | | | typescript/lines-between-class-members | https://typescript-eslint.io/rules/lines-between-class-members | | | typescript/member-delimiter-style | https://typescript-eslint.io/rules/member-delimiter-style | | | typescript/no-extra-parens | https://typescript-eslint.io/rules/no-extra-parens | | | typescript/no-extra-semi | https://typescript-eslint.io/rules/no-extra-semi | | | typescript/no-type-alias | https://typescript-eslint.io/rules/no-type-alias | | | typescript/object-curly-spacing | https://typescript-eslint.io/rules/object-curly-spacing | | | typescript/padding-line-between-statements | https://typescript-eslint.io/rules/padding-line-between-statements | | ✨ | typescript/prefer-ts-expect-error | https://typescript-eslint.io/rules/prefer-ts-expect-error | | | typescript/quotes | https://typescript-eslint.io/rules/quotes | | | typescript/semi | https://typescript-eslint.io/rules/semi | | | typescript/sort-type-constituents | https://typescript-eslint.io/rules/sort-type-constituents | | | typescript/space-before-blocks | https://typescript-eslint.io/rules/space-before-blocks | | | typescript/space-before-function-paren | https://typescript-eslint.io/rules/space-before-function-paren | | | typescript/space-infix-ops | https://typescript-eslint.io/rules/space-infix-ops | | | typescript/type-annotation-spacing | https://typescript-eslint.io/rules/type-annotation-spacing | ✨ = Implemented, 🚫 = Not supported
alfaproject commented 6 months ago

Will type checking rules be considered for implementation at any point in time?

alxpsr commented 6 months ago

Have checked typescript/member-ordering: not working yet. Just for status

Version: 0.2.6

happy-turtle commented 5 months ago

I looked into typescript/no-confusing-non-null-assertion, but I am not able to run the test. The test code does not seem to be valid JavaScript? Is oxc maybe validating the test's JS code while typescript-eslint is not?

  × Cannot assign to this expression
   ╭─[no_confusing_non_null_assertion.tsx:1:2]
 1 │ (a + b!) = c;
   ·  ──────
   ╰────
Boshen commented 5 months ago

I looked into typescript/no-confusing-non-null-assertion, but I am not able to run the test. The test code does not seem to be valid JavaScript? Is oxc maybe validating the test's JS code while typescript-eslint is not?

  × Cannot assign to this expression
   ╭─[no_confusing_non_null_assertion.tsx:1:2]
 1 │ (a + b!) = c;
   ·  ──────
   ╰────

Just comment out the tests that raise an error.

todor-a commented 4 months ago

Am I missing something or is the await-thenable rule missing from the list?

Boshen commented 4 months ago

Am I missing something or is the await-thenable rule missing form the list?

It seems like we excluded all type checking rules from the recommended-type-checked list.

dsmyda-ab commented 3 months ago

@Boshen Are there plans to eventually support type checking rules?

armano2 commented 1 week ago

@Boshen Are there plans to eventually support type checking rules?

see https://github.com/oxc-project/oxc/issues/3105

TheJDen commented 1 week ago

Warning

This comment is maintained by CI. Do not edit this comment directly. To update comment template, see https://github.com/oxc-project/oxc/tree/main/tasks/lint_rules

This is tracking issue for @typescript-eslint/eslint-plugin.

There are 67(+ 24 deprecated) rules.

  • 9/39 recommended rules are remaining as TODO
  • 18/28 not recommended rules are remaining as TODO

To get started, run the following command:

just new-typescript-rule <RULE_NAME>

Then register the rule in crates/oxc_linter/src/rules.rs and also declare_all_lint_rules at the bottom.

Recommended rules

✨: 30, 🚫: 0 / total: 39 Status Name Docs ✨ typescript/adjacent-overload-signatures https://typescript-eslint.io/rules/adjacent-overload-signatures ✨ typescript/array-type https://typescript-eslint.io/rules/array-type ✨ typescript/ban-tslint-comment https://typescript-eslint.io/rules/ban-tslint-comment ✨ typescript/ban-types https://typescript-eslint.io/rules/ban-types typescript/class-literal-property-style https://typescript-eslint.io/rules/class-literal-property-style typescript/consistent-generic-constructors https://typescript-eslint.io/rules/consistent-generic-constructors ✨ typescript/consistent-indexed-object-style https://typescript-eslint.io/rules/consistent-indexed-object-style typescript/consistent-type-assertions https://typescript-eslint.io/rules/consistent-type-assertions ✨ typescript/consistent-type-definitions https://typescript-eslint.io/rules/consistent-type-definitions ✨ typescript/no-array-constructor https://typescript-eslint.io/rules/no-array-constructor ✨ typescript/no-confusing-non-null-assertion https://typescript-eslint.io/rules/no-confusing-non-null-assertion ✨ typescript/no-duplicate-enum-values https://typescript-eslint.io/rules/no-duplicate-enum-values ✨ typescript/no-dynamic-delete https://typescript-eslint.io/rules/no-dynamic-delete ✨ typescript/no-empty-function https://typescript-eslint.io/rules/no-empty-function ✨ typescript/no-empty-interface https://typescript-eslint.io/rules/no-empty-interface ✨ typescript/no-explicit-any https://typescript-eslint.io/rules/no-explicit-any ✨ typescript/no-extra-non-null-assertion https://typescript-eslint.io/rules/no-extra-non-null-assertion typescript/no-extraneous-class https://typescript-eslint.io/rules/no-extraneous-class typescript/no-inferrable-types https://typescript-eslint.io/rules/no-inferrable-types typescript/no-invalid-void-type https://typescript-eslint.io/rules/no-invalid-void-type ✨ typescript/no-loss-of-precision https://typescript-eslint.io/rules/no-loss-of-precision ✨ typescript/no-misused-new https://typescript-eslint.io/rules/no-misused-new ✨ typescript/no-namespace https://typescript-eslint.io/rules/no-namespace ✨ typescript/no-non-null-asserted-nullish-coalescing https://typescript-eslint.io/rules/no-non-null-asserted-nullish-coalescing ✨ typescript/no-non-null-asserted-optional-chain https://typescript-eslint.io/rules/no-non-null-asserted-optional-chain ✨ typescript/no-non-null-assertion https://typescript-eslint.io/rules/no-non-null-assertion ✨ typescript/no-this-alias https://typescript-eslint.io/rules/no-this-alias ✨ typescript/no-unnecessary-type-constraint https://typescript-eslint.io/rules/no-unnecessary-type-constraint ✨ typescript/no-unsafe-declaration-merging https://typescript-eslint.io/rules/no-unsafe-declaration-merging typescript/no-unused-vars https://typescript-eslint.io/rules/no-unused-vars ✨ typescript/no-useless-constructor https://typescript-eslint.io/rules/no-useless-constructor ✨ typescript/no-var-requires https://typescript-eslint.io/rules/no-var-requires ✨ typescript/prefer-as-const https://typescript-eslint.io/rules/prefer-as-const ✨ typescript/prefer-for-of https://typescript-eslint.io/rules/prefer-for-of ✨ typescript/prefer-function-type https://typescript-eslint.io/rules/prefer-function-type ✨ typescript/prefer-literal-enum-member https://typescript-eslint.io/rules/prefer-literal-enum-member typescript/prefer-namespace-keyword https://typescript-eslint.io/rules/prefer-namespace-keyword ✨ typescript/triple-slash-reference https://typescript-eslint.io/rules/triple-slash-reference typescript/unified-signatures https://typescript-eslint.io/rules/unified-signatures ✨ = Implemented, 🚫 = Not supported

Not recommended rules

✨: 10, 🚫: 0 / total: 28 Status Name Docs ✨ typescript/ban-ts-comment https://typescript-eslint.io/rules/ban-ts-comment typescript/class-methods-use-this https://typescript-eslint.io/rules/class-methods-use-this ✨ typescript/consistent-type-imports https://typescript-eslint.io/rules/consistent-type-imports ✨ typescript/default-param-last https://typescript-eslint.io/rules/default-param-last ✨ typescript/explicit-function-return-type https://typescript-eslint.io/rules/explicit-function-return-type typescript/explicit-member-accessibility https://typescript-eslint.io/rules/explicit-member-accessibility typescript/explicit-module-boundary-types https://typescript-eslint.io/rules/explicit-module-boundary-types typescript/init-declarations https://typescript-eslint.io/rules/init-declarations ✨ typescript/max-params https://typescript-eslint.io/rules/max-params typescript/member-ordering https://typescript-eslint.io/rules/member-ordering typescript/method-signature-style https://typescript-eslint.io/rules/method-signature-style ✨ typescript/no-dupe-class-members https://typescript-eslint.io/rules/no-dupe-class-members typescript/no-empty-object-type https://typescript-eslint.io/rules/no-empty-object-type ✨ typescript/no-import-type-side-effects https://typescript-eslint.io/rules/no-import-type-side-effects typescript/no-invalid-this https://typescript-eslint.io/rules/no-invalid-this typescript/no-loop-func https://typescript-eslint.io/rules/no-loop-func typescript/no-magic-numbers https://typescript-eslint.io/rules/no-magic-numbers ✨ typescript/no-redeclare https://typescript-eslint.io/rules/no-redeclare typescript/no-require-imports https://typescript-eslint.io/rules/no-require-imports typescript/no-restricted-imports https://typescript-eslint.io/rules/no-restricted-imports typescript/no-shadow https://typescript-eslint.io/rules/no-shadow typescript/no-unnecessary-parameter-property-assignment https://typescript-eslint.io/rules/no-unnecessary-parameter-property-assignment typescript/no-unused-expressions https://typescript-eslint.io/rules/no-unused-expressions typescript/no-use-before-define https://typescript-eslint.io/rules/no-use-before-define ✨ typescript/no-useless-empty-export https://typescript-eslint.io/rules/no-useless-empty-export typescript/parameter-properties https://typescript-eslint.io/rules/parameter-properties ✨ typescript/prefer-enum-initializers https://typescript-eslint.io/rules/prefer-enum-initializers typescript/typedef https://typescript-eslint.io/rules/typedef ✨ = Implemented, 🚫 = Not supported

Deprecated rules

✨: 1, 🚫: 0 / total: 24

Can we change command name here, it doesn't actually exist (it is ts instead of full typescript) @Boshen