100 Commits
Author SHA1 Message Date
Mikhail Baev ae43c804e4 fix(linter/unicorn/prefer-single-call): remove duplicate fix status (#28763)
Noticed that `unicorn/prefer-single-call` rule declared both `pending`
and `fix` as its fix status, this PR removes `pending` and also changes
to `fix` to `conditional_fix` since the fix is skipped in 2 cases.

Also small change to `declare_oxc_lint` so that it rejects a second fix
capability
2026-11-03 15:04:12 +00:00
Mikhail Baev 848a4e7173 docs(linter): update fix metadata for tsgolint rules that already provide fixes (#27408)
updates fix metadata for tsgolint rules that provide fixes\suggestions:

- typescript/no-unnecessary-boolean-literal-compare -
[fix](https://github.com/oxc-project/tsgolint/blob/24b18b48c47b7ae0d84e21a0e974575026e27908/internal/rules/no_unnecessary_boolean_literal_compare/no_unnecessary_boolean_literal_compare.go#L191)
- typescript/no-unnecessary-condition -
[conditional_suggestion](https://github.com/oxc-project/tsgolint/blob/24b18b48c47b7ae0d84e21a0e974575026e27908/internal/rules/no_unnecessary_condition/no_unnecessary_condition.go#L1397)
- typescript/consistent-type-exports -
[fix](https://github.com/oxc-project/tsgolint/blob/24b18b48c47b7ae0d84e21a0e974575026e27908/internal/rules/consistent_type_exports/consistent_type_exports.go#L193)
- typescript/prefer-readonly -
[fix](https://github.com/oxc-project/tsgolint/blob/24b18b48c47b7ae0d84e21a0e974575026e27908/internal/rules/prefer_readonly/prefer_readonly.go#L464)
- typescript/dot-notation -
[conditional_fix](https://github.com/oxc-project/tsgolint/blob/24b18b48c47b7ae0d84e21a0e974575026e27908/internal/rules/dot_notation/dot_notation.go#L213)
- typescript/prefer-string-starts-ends-with -
[conditional_fix](https://github.com/oxc-project/tsgolint/blob/24b18b48c47b7ae0d84e21a0e974575026e27908/internal/rules/prefer_string_starts_ends_with/prefer_string_starts_ends_with.go#L531)
2026-10-07 13:36:07 +00:00
Mikhail BaevandCameron 3c361a7fb5 feat(linter/unicorn/prefer-query-selector): add allowWithVariables option (#27346)
fixes #27344

---------

Signed-off-by: Cameron <cameron.clark@hey.com>
Co-authored-by: Cameron <cameron.clark@hey.com>
2026-10-05 11:13:25 +00:00
Mikhail Baev 42dcfd234c feat(linter/react/no-unescaped-entities): implement suggestion (#27292)
this PR implements suggestion for `react/no-unescaped-entities`, issue #1022
2026-10-04 11:02:27 +01:00
Mikhail Baev cd4510d3f6 feat(linter/unicorn/no-useless-switch-case): implement suggestion (#27245)
this PR implements suggestion for `unicorn/no-useless-switch-case` rule.
Issue #684
2026-10-01 10:31:31 +01:00
Mikhail Baev 1a7c902a96 feat(linter/react/jsx-no-target-blank): implement suggestion (#27181)
this PR implements suggestion for `react/jsx-no-target-blank` rule. Used
all upstream tests.

issue #1022
2026-09-29 16:47:34 +01:00
Mikhail Baev 64f7ccdf5a docs(linter): mark unsupported unicorn css rules (#26734)
Some new rules released in [v75.0.0](https://github.com/sindresorhus/eslint-plugin-unicorn/releases/tag/v75.0.0)
require css parsing

unicorn issue #684
2026-09-17 17:23:04 +08:00
Mikhail Baev 23008981ef feat(linter/unicorn/no-unreadable-iife): implement suggestion (#26658)
implements suggestion for `unicorn/no-unreadable-iife` rule, used
upstream tests. Issue #684
2026-09-15 11:45:27 +08:00
Mikhail Baev 1e90019ea7 fix(linter/typescript): mark no-unnecessary-type-parameters and prefer-find suggestions as implemented (#26586)
made a mistake in #24956, suggestions for these 2 rules were already
implemented in tsgolint, so I should have added `suggestion`, not
`pending`
2026-09-13 06:50:01 +01:00
Mikhail Baev 562dd14e3d fix(jsx-a11y/anchor-has-content): allow anchors passed as custom component props (#26360) 2026-09-06 10:54:29 +00:00
Mikhail Baev 60b945d61d feat(linter/nextjs/no-typos): implement suggestion (#26091)
add suggestion for `nextjs/no-typos` rule, upstream rule rn doesnt
provide suggestion, but since we already have the matched suggestion, I
think it should be safe to implement

issue #1929
2026-08-26 08:41:18 +01:00
Mikhail Baev 70c3e35356 feat(linter/typescript/no-confusing-non-null-assertion): implement suggestion (#26012)
implements suggestion for `typescript/no-confusing-non-null-assertion`,
used tests from upstream. Issue #2180
2026-08-23 18:14:00 +01:00
Mikhail Baev 9b7394ed8b feat(linter/typescript/no-empty-object-type): implement suggestion (#25833)
Implement suggestion for `typescript/no-empty-object-type` rule, issue
#2180. Tests ported from
[upstream](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/tests/rules/no-empty-object-type.test.ts)
2026-08-18 08:18:48 +01:00
Mikhail Baev 1cbbcb7c3e fix(linter/unicorn/prefer-string-replace-all): apply fixes in one pass (#25709) 2026-08-15 16:50:21 +01:00
Mikhail Baev 285820eed6 fix(linter/no-large-snapshots): precompile and document allowed snapshot matchers (#25611)
issue #23594

- Move regex compilation to configuration parsing to avoid recompiling
patterns for every snapshot entry
- Document the matching behavior of allowedSnapshots (first interpret as
regex, if not valid match as string)
- Fix a small typo where both example sections were labeled “incorrect"
- Replace manual config parsing with DefaultRuleConfig
2026-08-14 10:47:51 +01:00
Mikhail Baev 1be1e20c18 fix(linter/eslint/prefer-promise-reject-errors): report on spread arguments (#25648)
fixes #25620. Matches upstream:
https://eslint.org/play/#eyJ0ZXh0IjoiXG5uZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdHNvbWVQcm9taXNlLmNhdGNoKCguLi5hcmdzKSA9PiB7XG5cdFx0cmVqZWN0KC4uLmFyZ3MpXG5cdH0pXG59KSIsIm9wdGlvbnMiOnsicnVsZXMiOnsibm8tbG9uZS1ibG9ja3MiOiJlcnJvciIsInByZWZlci1wcm9taXNlLXJlamVjdC1lcnJvcnMiOlsiZXJyb3IiXX0sImxhbmd1YWdlT3B0aW9ucyI6eyJwYXJzZXJPcHRpb25zIjp7ImVjbWFGZWF0dXJlcyI6eyJqc3giOnRydWV9fX19fQ==
2026-08-14 10:39:54 +01:00
Mikhail Baev 80e64c20f2 fix(linter/expect-expect): validate assertion regex (#25504)
this PR adds validation for regex for `jest/expect-expect` rule, issue
#23594 (issue tracks matches_assert_function_name as affecting
expect-expect, but the rule had moved its regex logic into its own
implementation, so it was missed by the earlier fix)
2026-08-12 10:10:49 +01:00
Mikhail Baev c451a0ebcf fix(linter/vitest): validate consistent-test-filename regex patterns (#25408)
adds validation for the regex patterns from #23594, also replaced manual
config parsing with DefaultRuleConfig
2026-08-09 10:10:15 +01:00
Mikhail Baev 589e5fb576 fix(linter/eslint/no-param-reassign): validate ignorePropertyModificationsForRegex property (#25346) 2026-08-07 09:26:30 +01:00
Mikhail Baev ccb8fe89db feat(linter/jsdoc): implement no-blank-blocks rule (#25207)
this PR implements `jsdoc/no-blank-blocks` rule, issue #1170
2026-08-05 22:38:24 +01:00
Mikhail Baev 9573937df3 fix(linter/typescript): validate ban-ts-comment description_format (#25320)
adds validation for the `descriptionFormat` regex option from #23594 and
replaces manual config parsing with `DefaultRuleConfig`
2026-08-05 20:21:36 +01:00
Mikhail Baev bdcd3dfc2f docs(linter): mark redundant unicorn rules unsupported (#25288)
unicorn issue #684
2026-08-04 16:29:00 +01:00
Mikhail Baev 0b9f83c4f4 feat(linter/oxc/bad-char-at-comparison): expand coverage (#25001)
closes #24990.
2026-08-01 19:28:53 +01:00
Mikhail Baev 5c0fa61ddb fix(linter/eslint/no-warning-comments): unify config structs and remove manual options docs (#25151)
this PR unifies 2 config structs for `eslint/no-warning-comments` and
removes the manually written options doc, related issue: #14743.

Doc after fix:

<img width="919" height="1295" alt="image"
src="https://github.com/user-attachments/assets/dab8f999-fffa-4a77-8d6d-39746cfa3860"
/>
2026-08-01 19:26:30 +01:00
Mikhail Baev f9097f893d docs(linter): mark redundant unicorn rules unsupported (#25124)
2 rules covered by typescript type check, 1 rule covered by oxc rule

unicorn issue #684
2026-07-30 17:23:31 +01:00
Mikhail Baev a5f3a0e45e fix(linter): mark missing suggestions as pending (#24956)
found some rules that provide suggestions upstream but were missing the
`pending` status:

typescript/no-unnecessary-condition -
[upstream](https://github.com/typescript-eslint/typescript-eslint/blob/3b71948c6c5d6bbe0f96346b280fafaee467cc6b/packages/eslint-plugin/src/rules/no-unnecessary-condition.ts)
typescript/no-unnecessary-type-conversion -
[upstream](https://github.com/typescript-eslint/typescript-eslint/blob/3b71948c6c5d6bbe0f96346b280fafaee467cc6b/packages/eslint-plugin/src/rules/no-unnecessary-type-conversion.ts)
typescript/no-unnecessary-type-parameters -
[upstream](https://github.com/typescript-eslint/typescript-eslint/blob/3b71948c6c5d6bbe0f96346b280fafaee467cc6b/packages/eslint-plugin/src/rules/no-unnecessary-type-parameters.ts)
typescript/prefer-find -
[upstream](https://github.com/typescript-eslint/typescript-eslint/blob/3b71948c6c5d6bbe0f96346b280fafaee467cc6b/packages/eslint-plugin/src/rules/prefer-find.ts)
eslint/no-unused-private-class-members -
[upstream](https://github.com/eslint/eslint/blob/d08629382b0a6aaa042823b796e5100e60053b54/lib/rules/no-unused-private-class-members.js)
eslint/prefer-named-capture-group -
[upstream](https://github.com/eslint/eslint/blob/d08629382b0a6aaa042823b796e5100e60053b54/lib/rules/prefer-named-capture-group.js)
unicorn/no-array-reduce -
[upstream](https://github.com/sindresorhus/eslint-plugin-unicorn/blob/a33b1c1e207b37f5c6f4ea8f3e66dad9a9d1ad43/rules/no-array-reduce.js)
unicorn/no-unreadable-iife -
[upstream](https://github.com/sindresorhus/eslint-plugin-unicorn/blob/a33b1c1e207b37f5c6f4ea8f3e66dad9a9d1ad43/rules/no-unreadable-iife.js)
2026-07-26 20:15:38 +01:00
Mikhail Baev 0aef19e70d fix(linter/typescript/no-confusing-non-null-assertion): report in and instanceof (#24825)
report `in` and `instanceof` in
`typescript-eslint/no-confusing-non-null-assertion` rule, ported PR from
upstream
https://github.com/typescript-eslint/typescript-eslint/pull/9994
2026-07-24 12:12:16 +01:00
Mikhail BaevandCameron cdc941e5f8 feat(linter/n): implement exports-style rule (#24087)
this PR implements `n/exports-style` rule. Issue #493

---------

Co-authored-by: Cameron <cameron.clark@hey.com>
2026-07-22 16:50:23 +01:00
Mikhail Baev 1ad6f6c823 feat(linter/eslint): implement id-denylist rule (#24632)
this PR implements `eslint/id-denylist`, issue #479
2026-07-22 16:30:20 +01:00
Mikhail Baev 678bbb5f34 feat(linter/typescript-eslint): implement suggestion for class-literal-property-style rule (#24766)
this PR implements suggestion for
`typescript-eslint/class-literal-property-style` rule. Passes all (19)
[upstream test
cases](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/tests/rules/class-literal-property-style.test.ts)

issue #2180
2026-07-22 11:52:59 +01:00
Mikhail Baev 346eed13c9 perf(linter/unicorn/prefer-event-target): only run on Class and NewExpression nodes (#24685)
Narrow `unicorn/prefer-event-target` dispatch from every
`IdentifierReference` to only `Class` and `NewExpression` nodes.

This reduces rule invocations from 209,565 to 1,721 (99.18%) while
preserving existing behavior

P.S. found it running oxlint on my work codebase, used chatgpt 5.6 to
implement the performance improvement
2026-07-19 18:27:48 +01:00
Mikhail Baev 54cc4415af docs(linter): mark redundant unicorn rules unsupported (#24642)
https://github.com/oxc-project/oxc/issues/684#issuecomment-5009671130
2026-07-18 13:48:55 +01:00
Mikhail Baev cf8a868b21 docs(linter): mark redundant unicorn rules unsupported (#24602)
2 new unicorn rules are already covered by `typescript/*` rules, other 3
are reported by typescript type checking
2026-07-16 17:17:52 +01:00
Mikhail Baevandautofix-ci[bot] 7f1f585b86 feat(linter): reuse jest/padding-around-test-blocks for vitest/padding-around-test-blocks (#24519)
this PR moves `jest/padding-around-test-blocks` to the shared
jest_vitest rules, so it can be reused by both the jest and vitest
rules.

issue #4656

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-07-14 18:22:11 +01:00
Mikhail Baev 4e5a65f91c docs(linter/unicorn): mark no-non-function-verb-prefix as requiring type information (#24266)
`unicorn/no-non-function-verb-prefix` is one of the new unicorn rules
that requires type information, so I think it can be added to the
unsupported rules list

[upstream rule
doc](https://github.com/sindresorhus/eslint-plugin-unicorn/blob/main/docs/rules/no-non-function-verb-prefix.md)

issue #684
2026-07-07 15:33:49 +01:00
Mikhail Baev 5bd3f28eff docs(linter): mark n/prefer-global-* rules as unsupported (#24139)
this PR marks `n/prefer-global-*` rules as unsupported as discussed
[here](https://github.com/oxc-project/oxc/pull/23607#pullrequestreview-4626731228)
2026-07-03 22:38:30 +01:00
Mikhail BaevandCameron a2c97f348c feat(linter/unicorn): implement explicit-timer-delay rule (#23612)
this PR implements `unicorn/explicit-timer-delay`, issue #684

Co-authored-by: Cameron <cameron.clark@hey.com>
2026-07-03 16:08:33 +01:00
Mikhail Baev 743e22293b feat(linter/react): add disallowedValues option for forbid-dom-props rule (#23970)
fixes #23049. Tests regenerated from upstream
2026-06-30 09:06:52 +01:00
Mikhail Baev 2428c501ba feat(linter/react): implement suggestion for no-unknown-property rule (#23936)
this PR implements suggestion for `react/no-unknown-property` rule, uses
upstream rule tests. Issue #1022
2026-06-29 14:36:25 +01:00
Mikhail Baev 57e4469142 docs(linter/unicorn): update prefer-dom-node-text-content rationale (#23933)
Fixes #23921.

Uses the differences documented by
[MDN](https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent#differences_from_innertext)
2026-06-29 10:09:33 +01:00
Mikhail Baev 90faebbd6b test(linter/jsx-a11y/scope): cover fixer with settings (#23902)
Uncommented the TODO test in the `jsx-a11y/scope` rule and changed it to
actually test settings passed to the rule
2026-06-28 17:08:05 +01:00
Mikhail BaevandCameron d8919904e5 fix(linter/jsx-a11y/role-supports-aria-props): ignore nullish prop values (#23865)
Fixed tests for nullish values in the
`jsx-a11y/role-supports-aria-props` rule

ref:
https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/8f75961d965e47afb88854d324bd32fafde7acfe/__tests__/src/rules/role-supports-aria-props-test.js#L374

Co-authored-by: Cameron <cameron.clark@hey.com>
2026-06-28 11:50:03 +01:00
Mikhail BaevandCameron 52032cf181 fix(linter): newline-terminate tsgolint errors (#23762)
Fixes #23686, adds trailing `\n` to tsgolint error output, matching
other CLI errors

tested locally with:
```
cargo build -p oxlint

mkdir -p /tmp/oxlint-npx-repro
cd /tmp/oxlint-npx-repro
npm init -y

echo 'export default {}' > index.ts
echo '{"rules": {}}' > oxlintrc.json

mkdir -p node_modules/.bin
ln -sf oxc/target/debug/oxlint node_modules/.bin/oxlint

npx --no-install oxlint -c oxlintrc.json --type-aware
```

Before fix:


https://github.com/user-attachments/assets/4c70115d-1c26-4c9b-9f0a-c4c33d767029

After fix:


https://github.com/user-attachments/assets/1a1fd337-cca1-4fb6-ab63-326ca16095ce

Co-authored-by: Cameron <cameron.clark@hey.com>
2026-06-24 15:59:01 +01:00
Mikhail BaevandCameron 7b8bd8918e feat(linter/typescript): implement suggestion for no-unnecessary-type-constraint rule (#23646)
this PR implements suggestion for
`typescript/no-unnecessary-type-constraint` rule. passes all upstream
test cases

issue #2180

---------

Co-authored-by: Cameron <cameron.clark@hey.com>
2026-06-21 19:18:04 +02:00
Mikhail Baev b01739ade3 feat(linter): add schema for unicorn/numeric-separators-style (#23554)
issue #22955
2026-06-17 19:06:34 +02:00
Mikhail BaevandCameron b50bf4df69 docs(linter): remove manually written options doc for eslint/arrow-body-style (#23490)
this PR removes manually written options doc for
`eslint/arrow-body-style` to avoid duplication

---------

Co-authored-by: Cameron <cameron.clark@hey.com>
2026-06-16 11:37:40 +01:00
Mikhail BaevandCameron f682e25389 docs(linter): remove manually written options doc for eslint/prefer-arrow-callback (#23438)
this PR removes manually written options doc for
`eslint/prefer-arrow-callback` to avoid duplication

before:

<img width="1116" height="1218" alt="Снимок экрана 2026-06-15 в 14 42
27"
src="https://github.com/user-attachments/assets/3e485bdd-ca0e-4c5a-b9e2-38601df45852"
/>

after:

<img width="928" height="1037" alt="Снимок экрана 2026-06-15 в 14 47 48"
src="https://github.com/user-attachments/assets/8abb72cb-162e-4dd9-aa98-9409fff6ccd4"
/>

Co-authored-by: Cameron <cameron.clark@hey.com>
2026-06-15 10:59:17 +01:00
Mikhail BaevandCameron 64c942cffe docs(linter): remove manually written options doc for eslint/no-sequences (#23420)
this PR removes manually written options doc for `eslint/no-sequences`
to avoid duplication

before:

<img width="2658" height="2524" alt="image"
src="https://github.com/user-attachments/assets/0c47043b-c05a-430b-968d-d0297f9a1bf8"
/>

after: 

<img width="2604" height="2366" alt="image"
src="https://github.com/user-attachments/assets/93b3dcfa-5d56-4814-b531-27aa547f913e"
/>

---------

Co-authored-by: Cameron <cameron.clark@hey.com>
2026-06-15 08:56:25 +01:00
Mikhail BaevandCameron dd560ae213 feat(linter/unicorn): implement no-array-fill-with-reference-type rule (#23397)
this PR implements `unicorn/no-array-fill-with-reference-type` rule

issue #684

---------

Co-authored-by: Cameron <cameron.clark@hey.com>
2026-06-14 14:08:06 +01:00
Mikhail Baev 0f2fff48d2 feat(linter): add schema for react/exhaustive-deps (#23372)
part of #22955
2026-06-13 15:51:43 +01:00
Mikhail BaevandAlexander S. e3e4e105bc feat(linter): add schema for react_perf/jsx-no-new-object-as-prop (#23368)
issue #22955

---------

Signed-off-by: Alexander S. <sysix@sysix-coding.de>
Co-authored-by: Alexander S. <sysix@sysix-coding.de>
2026-06-13 15:38:33 +02:00
Mikhail Baev 51fa83ef5f feat(linter): add schema for react/no-did-update-set-state (#23357)
issue #22955

There are three rules that use the same config and default value:
- `react/no-did-mount-set-state`
- `react/no-did-update-set-state`
- `react/no-will-update-set-state`

this PR also moves that config into a shared `SetStateInFunctionConfig`
type to avoid duplication, similar to the `AlwaysNever` enum
2026-06-12 19:20:41 +02:00
Mikhail Baev 0806aae474 feat(linter): add schema for jsx_a11y/no-noninteractive-tabindex (#23337)
issue #22955

also replaced manual config parsing with `DefaultRuleConfig`
2026-06-12 13:39:39 +02:00
Mikhail BaevandCameron 0708b5a233 feat(linter): add schema for react/jsx-filename-extension (#23315)
issue #22955

---------

Co-authored-by: Cameron <cameron.clark@hey.com>
2026-06-12 10:05:03 +01:00
Mikhail Baev 3d782b7d06 feat(linter): add schema for react/no-unstable-nested-components (#23287)
issue #22955
2026-06-11 20:23:58 +02:00
Mikhail Baev e3869ac312 feat(linter): add schema for react/no-object-type-as-default-prop (#23279)
issue #22955

`react/no-object-type-as-default-prop` rule has no configuration
2026-06-11 12:49:03 +01:00
Mikhail Baev 44806094fc feat(linter): add schema for react/jsx-props-no-spreading (#23276)
part of  #22955

also replaced `get_tag_name` in rule with shared react helper `get_jsx_element_name`
2026-06-11 12:10:16 +01:00
Mikhail Baev e77ff81a6b feat(linter): add schema for unicorn/prefer-object-from-entries (#23249)
issue #22955
2026-06-10 20:06:58 +02:00
Mikhail BaevandCameron 3f018e7a3f feat(linter): add schema for unicorn/no-instanceof-builtins (#23225)
issue #22955

---------

Co-authored-by: Cameron <cameron.clark@hey.com>
2026-06-10 12:52:55 +01:00
Mikhail Baev cd0b384f12 feat(linter): add schema for unicorn/explicit-length-check (#23155)
this PR adds schema for `unicorn/explicit-length-check` rule.

issue #22955
2026-06-09 14:46:30 +01:00
Mikhail Baev 9d6a387710 feat(linter): add schema for unicorn/catch-error-name (#23137)
this PR adds schema for `unicorn/catch-error-name` rule.

issue #22955
2026-06-08 21:13:47 +02:00
Mikhail BaevandCameron 8420acb018 docs(linter): mark react/require-default-props rule as unsupported (#22995)
`react/sort-default-props` rule was marked as unsupported in #18617. I
think the same can also be done for `react/require-default-props`.

issue #1022

Co-authored-by: Cameron <cameron.clark@hey.com>
2026-06-06 12:28:49 +01:00
Mikhail BaevandCameron Clark e4b1f46bec feat(linter/typescript): implement method-signature-style rule (#22679)
This PR implements `typescript-eslint/method-signature-style`.
Part of issue #2180.

It uses all upstream test cases. The only changes are to 4 setter test
cases, changing this:
```
set f(value: number): void;
```
to this:
```
set f(value: number);
```
because they failed with `TS(1095): A 'set' accessor cannot have a
return type annotation.`

---------

Co-authored-by: Cameron Clark <cameron.clark@hey.com>
2026-06-01 10:29:17 +01:00
Mikhail BaevandCameron 8422e8bc44 feat(linter/jsdoc): implement require-yields-description rule (#22805)
this PR implements `jsdoc/require-yields-description` rule. 

[rule doc](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-yields-description.md)
[rule source](https://github.com/gajus/eslint-pluginjsdoc/blob/3d53b88baed2b49e04b4aa71599d1b449efcc3f8/src/index.js#L245)

issue #1170

---------

Co-authored-by: Cameron <cameron.clark@hey.com>
2026-05-28 20:34:08 +01:00
Mikhail BaevandCameron 0c6ebc27fc fix(linter/eslint/no-lone-blocks): do not flag empty loops (#22649)
fixes #22648. matches
[upstream](https://eslint.org/play/#eyJ0ZXh0IjoiLy8gbG9uZSBibG9ja1xue1xufVxuXG4vLyBub3QgYSBsb25lIGJsb2NrXG5sZXQgaSA9IDU7XG53aGlsZSAoaSA+IDApIHt9XG5cbi8vIG5vdCBhIGxvbmUgYmxvY2tcbmZvciAobGV0IGlkeCA9IDA7IGlkeCA8IDU7IGlkeCsrKSB7fSIsIm9wdGlvbnMiOnsicnVsZXMiOnsibm8tbG9uZS1ibG9ja3MiOiJlcnJvciJ9LCJsYW5ndWFnZU9wdGlvbnMiOnsicGFyc2VyT3B0aW9ucyI6eyJlY21hRmVhdHVyZXMiOnsianN4Ijp0cnVlfX19fX0=)

Co-authored-by: Cameron <cameron.clark@hey.com>
2026-05-21 18:04:26 +01:00
Mikhail Baev f7f370e010 fix(linter/vitest/prefer-expect-type-of): recommend toBeTypeOf instead of expectTypeOf (#22612)
Aligns the `vitest/prefer-expect-type-of` rule with upstream by
recommending `toBeTypeOf` instead of `expectTypeOf`

[ref PR](https://github.com/vitest-dev/eslint-plugin-vitest/pull/896)
released in
[1.6.17](https://github.com/vitest-dev/eslint-plugin-vitest/releases/tag/v1.6.17)
2026-05-20 08:41:38 +01:00
Mikhail BaevandCameron Clark 5fa47746a3 feat(linter/n): implement callback-return rule (#22470)
this PR implements `callback-return` rule, passes all upstream tests.
issue #493

there is an issue with config doc generation for array with default
values. Ill fix it a little later and then move the PR out of draft.

---------

Co-authored-by: Cameron Clark <cameron.clark@hey.com>
2026-05-18 15:54:28 +01:00
Mikhail BaevandCameron 5478fb5aad feat(linter/jsdoc): implement require-throws-description rule (#22386)
this PR implements `jsdoc/require-throws-description` rule. Unlike
`require-returns-description` and `require-property-description`, this
rule is not listed in the recommended section, so i picked `style`
category for it

[rule doc](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-throws-description.md)
[rule source](https://github.com/gajus/eslint-plugin-jsdoc/blob/f631620cc1b5bc948f2dfec4228913d19bb2ec0d/src/index.js#L221)

issue #1170

Co-authored-by: Cameron <cameron.clark@hey.com>
2026-05-14 18:25:49 +01:00
Mikhail BaevandCameron ba2a1d39c6 feat(linter/jsdoc): implement require-throws-type rule (#22358)
this PR implements `jsdoc/require-throws-type` rule, issue #1170

[rule source](https://github.com/gajus/eslint-plugin-jsdoc/blob/f631620cc1b5bc948f2dfec4228913d19bb2ec0d/src/index-cjs.js#L226)
[rule doc](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-throws-type.md)

---------

Co-authored-by: Cameron <cameron.clark@hey.com>
2026-05-12 18:26:09 +01:00
Mikhail BaevandCameron 1d04903a9d feat(linter/jsdoc): implement require-yields-type rule (#22331)
this PR implement `jsdoc/require-yields-type` rule, issue #1170

[upstream rule source](https://github.com/gajus/eslint-plugin-jsdoc/blob/f631620cc1b5bc948f2dfec4228913d19bb2ec0d/src/index.js#L256)
[upstream rule doc](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-yields-type.md)

---------

Co-authored-by: Cameron <cameron.clark@hey.com>
2026-05-11 20:36:05 +01:00
Mikhail BaevandCameron ae5930523d feat(linter/promise/no-promise-in-callback): add exemptDeclarations option (#22275)
this PR adds `exemptDeclarations` option in
`promise/no-promise-in-callback` from upstream rule

ref: https://github.com/eslint-community/eslint-plugin-promise/releases/tag/v7.3.0

Co-authored-by: Cameron <cameron.clark@hey.com>
2026-05-09 23:29:58 +01:00
Mikhail BaevandCameron 545c80f193 feat(linter/eslint): implement prefer-regex-literals rule (#22192)
this PR implements `eslint/prefer-regex-literals` rule, passes all
upstream tests

issue #479

Co-authored-by: Cameron <cameron.clark@hey.com>
2026-05-06 22:06:08 +01:00
Mikhail BaevandCameron Clark 5b9ea93824 feat(linter/eslint): implement require-unicode-regexp rule (#22096)
this PR implements `eslint/require-unicode-regexp`, passes all upstream
tests

issue #479

---------

Co-authored-by: Cameron Clark <cameron.clark@hey.com>
2026-05-04 20:39:21 +01:00
Mikhail Baevandautofix-ci[bot] 8804425dab feat(linter/eslint): implement logical-assignment-operators rule (#21900)
this PR implements `eslint/logical-assignment-operators` rule, passes
all upstream tests

issue #479

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-04-29 09:48:23 -04:00
Mikhail BaevandCameron Clark 5f818830c9 feat(linter/eslint): implement func-name-matching rule (#21708)
this PR implements `eslint/func-name-matching` rule, issue #479. passes
all upstream tests


## AI Disclosure
This PR was developed with AI assistance (chatgpt 5.5 high)

---------

Co-authored-by: Cameron Clark <cameron.clark@hey.com>
2026-04-25 11:45:34 +01:00
Mikhail BaevandCameron 3617864096 fix(linter/react/display-name): fix false positive for named default class (#21643)
fixes #21632, matches upstream rule logic

---------

Co-authored-by: Cameron <cameron.clark@hey.com>
2026-04-22 17:45:56 +01:00
ca81199211 feat(linter/react): implement forbid-component-props rule (#20005)
this PR adds `react/forbid-component-props` rule

issue #1022

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Cameron Clark <cameron.clark@hey.com>
2026-04-21 20:22:40 +01:00
Mikhail Baev d3a7e9a84a feat(linter/unicorn): implement suggestion for no-useless-iterator-to-array rule (#21610)
this PR implements suggestion for `no-useless-iterator-to-array` rule,
issue #684
2026-04-21 12:33:04 +01:00
4d578514dc fix(linter/eslint): enhance no-empty-function rule to support async and generator functions in VariableDeclarator (#21542)
Fixes tests:
`const foo = function*(param: string) {};` with `allow:
["generatorFunctions"]`
`const foo = async function(param: string) {}` with `allow:
["asyncFunctions"]`

Other tests were already passing, they were just uncommented

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Cameron <cameron.clark@hey.com>
2026-04-20 09:14:40 +01:00
Mikhail Baev 7dbbb99bf2 feat(linter/eslint): implement suggestion for no-case-declarations rule (#21508)
this PR implements suggestion for `eslint/no-case-declarations` rule,
also removed `None` options from test cases

issue #479
2026-04-16 21:02:17 +01:00
Mikhail Baev 61088e0b38 fix(linter/unicorn): handle computed property access in prefer-dom-node-remove rule (#21470) 2026-04-15 18:21:56 +01:00
Mikhail BaevandCameron b577efc2ca fix(linter/unicorn): handle optional chaining in prefer-array-flat and no-invalid-remove-event-listener (#21299)
fixes commented out tests with optionals in in `unicorn/prefer-array-flat` and `unicorn/no-invalid-remove-event-listener` rules

---------

Co-authored-by: Cameron <cameron.clark@hey.com>
2026-04-13 09:15:33 +01:00
Mikhail Baev cf459d3ed2 feat(linter): implement suggestion for no-empty-function rule (#21347)
this PR implements suggestion for `no-empty-function` rule, it is same
as original rule, adds `/* empty */` comment inside empty functions

issue #479
2026-04-12 20:16:49 +01:00
Mikhail Baev f636217d2e docs(linter): add explanation for n/no-callback-literal in unsupported rules (#21327) 2026-04-11 09:52:31 +01:00
Mikhail Baev f21d3aa8d0 fix(linter/unicorn): report on optional in require-number-to-fixed-digits-argument rule (#21207)
fixes commented out test with optional in
`unicorn/require-number-to-fixed-digits-argument`
2026-04-09 09:16:01 +01:00
Mikhail Baev a950f555c8 fix(linter/unicorn): do not report on optionals in no-single-promise-in-promise-methods (#21157) 2026-04-08 08:41:29 +01:00
Mikhail Baev 7e8d5206c8 fix(linter/unicorn): report on optional foo?.postMessage in require-post-message-target-origin rule (#21104)
fixes commented out test for optional `foo?.postMessage` in
`unicorn/require-post-message-target-origin` rule
2026-04-07 09:07:54 +01:00
Mikhail Baev 8be4de7e3e fix(linter/unicorn): do not report on optionals in prefer-array-flat-map (#21082)
fixes commented out tests for optionals in
https://github.com/oxc-project/oxc/pull/19428
2026-04-06 13:12:28 +01:00
Mikhail BaevandCameron 7fdf7222d7 feat(linter/unicorn): implement no-useless-iterator-to-array rule (#20945)
this PR implements `unicorn/no-useless-iterator-to-array` rule, part of #684

---------

Co-authored-by: Cameron <cameron.clark@hey.com>
2026-04-05 14:31:35 +01:00
8c3607060b fix(linter/unicorn): add support for Array.from() for prefer-set-size rule (#21016)
fixed commented out tests in #19428 for `Array.from()` in `unicorn/prefer-set-size` rule

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Cameron <cameron.clark@hey.com>
2026-04-03 21:14:02 +01:00
b9199b160a feat(linter/unicorn): implement switch-case-break-position (#20872)
this PR implements `unicorn/switch-case-break-position` rule

issue #684

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Cameron <cameron.clark@hey.com>
2026-03-31 17:21:44 +01:00
Mikhail Baevandautofix-ci[bot] ae0365304a feat(linter): implement suggestion for eslint/no-useless-computed-key rule (#20805)
this PR implements suggestion for `eslint/no-useless-computed-key` rule

issue #479

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-03-28 22:37:41 +00:00
Mikhail Baev 2244984ed6 feat(linter): implement vitest/prefer-strict-boolean-matchers rule (#20603)
This PR adds `vitest/prefer-strict-boolean-matchers` rule. 
Passes all [original tests](https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/tests/prefer-strict-boolean-matchers.test.ts)with
added extra tests for cases like this: `expect(value)["toBeFalsy"]();`

issue #4656
2026-03-21 20:33:12 +00:00
Mikhail BaevandCameron Clark f9a63cacf0 feat(linter): implement unicorn/custom-error-definition rule (#20520)
part of #684

---------

Co-authored-by: Cameron Clark <cameron.clark@hey.com>
2026-03-19 21:43:06 +00:00
7a2a7d0ab9 feat(linter): implement n/handle-callback-err rule (#19616)
this PR implements `n/handle-callback-err` rule, passes all tests from original [rule](https://github.com/eslint-community/eslint-plugin-n/blob/master/tests/lib/rules/handle-callback-err.js)

issue #493

---------

Signed-off-by: Mikhail Baev <baev2m@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Cameron Clark <cameron.clark@hey.com>
2026-03-12 16:48:48 +00:00
Mikhail Baev c8563d1531 docs(linter): mark react/require-optimization as legacy rule (#20110)
this PR moves`react/require-optimization` rule to legacy, as discussed
here
https://github.com/oxc-project/oxc/pull/17370#issuecomment-4017100880
2026-03-08 17:43:34 +00:00
2b95537911 feat(linter): implement n/no-path-concat rule (#19502)
this PR adds `n/no-path-concat` rule, passes all [test
cases](https://github.com/eslint-community/eslint-plugin-n/blob/master/tests/lib/rules/no-path-concat.js)
from original rule

issue #493

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Cameron Clark <cameron.clark@hey.com>
2026-02-19 14:58:35 +00:00
Mikhail Baev 8588670c4b feat(linter/unicorn): implement suggestion for unicorn/no-await-in-promise-methods rule (#19359)
this PR adds suggestion for `unicorn/no-await-in-promise-methods` rule,
issue #684. Also fixed commented tests with promise optionals
2026-02-13 11:45:57 +00:00
Mikhail Baev aef2af511c feat(linter/unicorn): add fixer for unicorn/relative-url-style rule (#19186)
this PR adds fixer for `unicorn/relative-url-style` rule, issue #684

for template literal urls it uses suggestion, just like in original rule
2026-02-09 18:36:20 +00:00
Mikhail Baev 533013d5ba feat(linter/unicorn): implement suggestion for unicorn/prefer-dom-node-dataset (#19051)
this PR adds suggestion for `unicorn/prefer-dom-node-dataset` rule, issue #684
2026-02-06 12:00:41 +00:00