v0.6.0
Highlights
ESLint Plugin Compatibility
rslint can now run community ESLint plugins' rules alongside its built-in native rules. Import the plugin and mount it in a JS/TS config under a prefix of your choice — plugin diagnostics merge into the same report, autofixes apply through --fix and the editor's source.fixAll, and it works the same way in the CLI and the VS Code extension. See the ESLint plugin compatibility guide for details and current limitations.
import examplePlugin from 'eslint-plugin-example';
export default [
{
files: ['**/*.ts'],
plugins: { example: examplePlugin },
rules: {
'example/some-rule': 'error',
},
},
];40+ New Rules
This release ports over 40 new rules across @typescript-eslint, eslint-plugin-jest, eslint-plugin-jsx-a11y, eslint-plugin-promise, and eslint-plugin-react, and enables the implemented rules in the javascript, typescript, and jsx-a11y recommended presets.
What's Changed
New Features 🎉
- feat: port rule jsx-a11y/anchor-ambiguous-text by @fansenze in #939
- feat: port rule jsx-a11y/lang by @fansenze in #940
- feat: port rule jsx-a11y/no-aria-hidden-on-focusable by @fansenze in #943
- feat: port rule jsx-a11y/prefer-tag-over-role by @fansenze in #942
- feat: port rule no-unsafe-function-type by @fansenze in #947
- feat: port rule @typescript-eslint/no-empty-object-type by @fansenze in #946
- feat: port rule @typescript-eslint/no-unsafe-declaration-merging by @fansenze in #949
- feat: port rule @typescript-eslint/no-wrapper-object-types by @fansenze in #951
- feat: port rule @typescript-eslint/class-methods-use-this by @fansenze in #952
- feat: port rule @typescript-eslint/explicit-module-boundary-types by @fansenze in #953
- feat: port rule @typescript-eslint/no-confusing-non-null-assertion by @fansenze in #954
- feat: port rule @typescript-eslint/init-declarations by @fansenze in #955
- feat: port rule @typescript-eslint/no-import-type-side-effects by @fansenze in #956
- feat: port rule @typescript-eslint/no-invalid-this by @fansenze in #957
- feat: port rule @typescript-eslint/no-unnecessary-qualifier by @fansenze in #959
- feat: port rule @typescript-eslint/no-unnecessary-parameter-property-assignment by @fansenze in #958
- feat: port rule @typescript-eslint/no-unnecessary-type-conversion by @fansenze in #960
- feat: port rule @typescript-eslint/no-restricted-types by @fansenze in #973
- feat: port rule @typescript-eslint/no-unused-private-class-members by @fansenze in #975
- feat: port rule @typescript-eslint/prefer-enum-initializers by @fansenze in #977
- feat: port rule @typescript-eslint/no-useless-default-assignment by @fansenze in #979
- feat: port rule @typescript-eslint/prefer-find by @fansenze in #978
- feat: port rule @typescript-eslint/prefer-function-type by @fansenze in #980
- feat: port rule @typescript-eslint/strict-void-return by @fansenze in #981
- feat: port rule @typescript-eslint/strict-boolean-expressions by @fansenze in #982
- feat(eslint-plugin-jest): add
expect-expectrule by @eryue0220 in #950 - feat: port rule @stylistic/array-bracket-spacing by @fansenze in #983
- feat(eslint-plugin-jest): add
no-standalone-expectrule by @eryue0220 in #984 - feat: port rule @stylistic/arrow-parens by @fansenze in #986
- feat(eslint-plugin-jest): add
valid-titlerule by @eryue0220 in #948 - feat(eslint-plugin-jest): add
no-jasmine-globalsrule by @eryue0220 in #969 - feat: port rule @stylistic/arrow-spacing by @fansenze in #988
- feat: port rule @stylistic/block-spacing by @fansenze in #989
- feat: port rule @stylistic/brace-style by @fansenze in #993
- feat: port rule @stylistic/comma-dangle by @fansenze in #995
- feat: port rule @stylistic/comma-spacing by @fansenze in #994
- feat: port rule @stylistic/computed-property-spacing by @fansenze in #997
- feat: port rule @stylistic/comma-style by @fansenze in #998
- feat: port rule @stylistic/eol-last by @fansenze in #999
- feat: port rule @stylistic/dot-location by @fansenze in #1000
- feat: port rule @stylistic/generator-star-spacing by @fansenze in #1002
- feat: port rule @stylistic/jsx-closing-bracket-location by @fansenze in #1003
- feat: port rule promise/no-return-wrap by @elecmonkey in #937
- feat(website): add new jest preset by @eryue0220 in #985
- feat: port rule @stylistic/jsx-closing-tag-location by @fansenze in #1011
- feat: port rule @stylistic/jsx-curly-brace-presence by @fansenze in #1012
- feat: port rule @stylistic/jsx-curly-newline by @fansenze in #1015
- feat: port rule @stylistic/jsx-equals-spacing by @fansenze in #1016
- feat: enable implemented rules in typescript recommended config by @fansenze in #1020
- feat: enable implemented rules in jsx-a11y recommended config by @fansenze in #1021
- feat: enable implemented rules in javascript recommended config by @fansenze in #1022
- feat: port rule @stylistic/jsx-curly-spacing by @fansenze in #1023
- feat: port rule @stylistic/jsx-first-prop-new-line by @fansenze in #1024
- feat(eslint-plugin-jest): add
prefer-called-withrule by @eryue0220 in #1025 - feat: port rule @stylistic/jsx-function-call-newline by @fansenze in #1027
- feat(eslint-plugin-runner): new package for ESLint plugin compatibility runtime by @fansenze in #991
- feat: port rule @stylistic/jsx-indent-props by @fansenze in #1028
- feat: port rule react/checked-requires-onchange-or-readonly by @fansenze in #1030
- feat: run the rslint CLI over a generic Go-Node IPC channel by @fansenze in #1037
- feat(eslint-plugin-jest): add
prefer-to-have-been-calledrule by @eryue0220 in #1019 - feat(eslint-plugin-jest): add
no-duplicate-hooksrule by @eryue0220 in #1026 - feat(eslint-plugin-jest): add
valid-expectrule by @eryue0220 in #1017 - feat: internal Rust napi parser + merge eslint-plugin-runner into @rslint/core by @fansenze in #1035
- feat(eslint-plugin-jest): add
prefer-eachrule by @eryue0220 in #1032 - feat: add no-type-alias rule by @ScriptedAlchemy in #1040
- feat: add globalIgnores config helper by @fansenze in #1043
- feat: add promise/catch-or-return rule by @swwind in #1051
- feat(eslint-plugin-jest): add
prefer-to-have-been-called-timesrule by @eryue0220 in #1048 - feat: support mounting ESLint plugins in rslint config by @fansenze in #1047
- feat(eslint-plugin-jest): add
prefer-expect-resolvesrule by @eryue0220 in #1062 - feat(eslint-plugin-jest): add
max-nested-describerule by @eryue0220 in #1063 - feat: port rule promise/always-return by @elecmonkey in #938
- feat: add promise/avoid-new rule by @swwind in #1053
Bug Fixes 🐞
- fix: handle exhaustive-deps shorthand references by @elecmonkey in #963
- fix: prevent exhaustive-deps panic on cross-file dep declarations by @fansenze in #971
- fix(website): convert @Stylistic registry entry to presets format by @fansenze in #1008
- fix: prevent codebox renderer panic on invalid UTF-8 and whitespace-only lines by @fansenze in #1001
- fix(website): update
eslint-plugin-jesttest falsy cases by @eryue0220 in #992 - fix: build website without compiling napi native by @fansenze in #1044
- fix: run config plugins in the packaged VS Code extension by @fansenze in #1072
- fix: align promise/always-return ignored assignment and control flow with ESLint by @fansenze in #1075
- fix: enable promise catch-or-return preset by @elecmonkey in #1064
Refactor 🔨
- refactor: unify rule registration via per-group all.go by @fansenze in #987
- refactor: remove @Stylistic plugin and related rules by @fansenze in #1034
Document 📖
- docs(port-rule): introduce three-layer testing model and upstream/extras file split by @fansenze in #941
- docs: update Rslint introduction by @chenjiahan in #996
- docs(port-rule): refine skill guide and fix coverage-bar metric by @fansenze in #1013
Other Changes
- chore(deps): update dependency golangci/golangci-lint to v2.12.2 by @renovate[bot] in #895
- chore: sync typescript-go submodule to 47ca64821 by @fansenze in #936
- chore: sync typescript-go submodule to c282336ea by @fansenze in #944
- ci: disable Swatinem/rust-cache cache-bin to fix flaky macos rust jobs by @fansenze in #945
- chore(deps): update tailwindcss monorepo to ^4.3.0 by @renovate[bot] in #967
- chore: sync typescript-go submodule to 6a088fbd7 by @fansenze in #968
- chore: sync typescript-go submodule to 0a7c6b47e by @fansenze in #970
- ci: drop per-batch GOCACHE cleanup in Windows Go test by @fansenze in #974
- chore: sync typescript-go submodule to 879968116 by @fansenze in #976
- chore: sync typescript-go submodule to d99f6b2a5 by @fansenze in #990
- chore(deps): update rust crate bitflags to 2.11.1 by @renovate[bot] in #965
- chore(deps): update rust crate insta to 1.47.2 - autoclosed by @renovate[bot] in #966
- chore(deps): update dependency @rstack-dev/doc-ui to v1.14.2 by @renovate[bot] in #1004
- chore(deps): update module golang.org/x/sys to v0.45.0 by @renovate[bot] in #1005
- chore(deps): update actions/setup-node action to v6 by @renovate[bot] in #1010
- chore(deps): update actions/setup-go action to v6 by @renovate[bot] in #1009
- chore(deps): update actions/checkout action to v6 by @renovate[bot] in #1007
- test(eslint-plugin-runner): skip worker-pool e2e suites on windows (napi terminate aborts) by @fansenze in #1031
- chore: add draft release notes skill by @chenjiahan in #924
- chore(deps): update dependency @rslib/core to v0.22.0 by @renovate[bot] in #1039
- chore(deps): update actions/cache action to v5 by @renovate[bot] in #1006
- @typescript-eslint/no-deprecated by @ScriptedAlchemy in #491
- chore: add
tsgo-clientcrate releasing action by @CPunisher in #1045 - chore: bump
tsgo-clientfrom 0.0.2 to 0.0.3 by @CPunisher in #1046 - chore: sync typescript-go submodule to 254e9a5331 by @fansenze in #1054
- chore: sync typescript-go submodule to 69b0d53976 by @fansenze in #1074
- chore: sync typescript-go submodule to cda7baffa9 by @fansenze in #1078
New Contributors
Full Changelog: v0.5.3...v0.6.0