-
-
Notifications
You must be signed in to change notification settings - Fork 2.8k
fix(typescript-estree): forbid abstract method and accessor to have implementation #11657
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix(typescript-estree): forbid abstract method and accessor to have implementation #11657
Conversation
|
Thanks for the PR, @fisker! typescript-eslint is a 100% community driven project, and we are incredibly grateful that you are contributing to that community. The core maintainers work on this in their personal time, so please understand that it may not be possible for them to review your work immediately. Thanks again! 🙏 Please, if you or your company is finding typescript-eslint valuable, help us sustain the project by sponsoring it transparently on https://opencollective.com/typescript-eslint. |
✅ Deploy Preview for typescript-eslint ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
|
View your CI Pipeline Execution ↗ for commit c30d11d
☁️ Nx Cloud last updated this comment at |
fcd0b87 to
4230204
Compare
Codecov Report❌ Patch coverage is
❌ Your patch status has failed because the patch coverage (5.55%) is below the target coverage (90.00%). You can increase the patch coverage or adjust the target coverage. Additional details and impacted files@@ Coverage Diff @@
## main #11657 +/- ##
==========================================
- Coverage 90.93% 90.90% -0.03%
==========================================
Files 506 506
Lines 51400 51414 +14
Branches 8484 8483 -1
==========================================
- Hits 46741 46739 -2
- Misses 4646 4662 +16
Partials 13 13
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
2d59c8f to
1d5e23c
Compare
e6587ff to
c30d11d
Compare
JoshuaKGoldberg
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fantastic - very clean and thorough. Nice!
Just requesting the one (Missing) case be tested or removed. Otherwise this looks ready to go to me.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[Praise] Nice, always happy to see this file cleaned up.
| ast: ts.SourceFile, | ||
| ): string { | ||
| const text = ast.text.slice(name.pos, name.end).trimStart(); | ||
| return text || '(Missing)'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
'(Missing)'
[Testing] This doesn't show up in any of the snapshots. Can you either add a test showing it (if it's possible?) or remove it?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This original declarationNameToString from typescript package have this, so I guess it's possible, but I don't know how to test.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍 makes sense, I think it's reasonable to leave in then. Thanks.
| node.kind === SyntaxKind.GetAccessor || | ||
| node.kind === SyntaxKind.SetAccessor | ||
| ? 'An abstract accessor cannot have an implementation.' | ||
| : `Method '${declarationNameToString(node.name, this.ast)}' cannot have an implementation because it is marked abstract.`, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[Praise] These are great error messages! 👏
02e0278
into
typescript-eslint:main
| datasource | package | from | to | | ---------- | -------------------------------- | ------ | ------ | | npm | @typescript-eslint/eslint-plugin | 8.45.0 | 8.46.0 | | npm | @typescript-eslint/parser | 8.45.0 | 8.46.0 | ## [v8.46.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8460-2025-10-06) ##### 🚀 Features - **eslint-plugin:** \[no-unsafe-member-access] add allowOptionalChaining option ([#11659](typescript-eslint/typescript-eslint#11659)) - **rule-schema-to-typescript-types:** clean up and make public ([#11633](typescript-eslint/typescript-eslint#11633)) ##### 🩹 Fixes - **eslint-plugin:** \[prefer-readonly-parameter-types] ignore tagged primitives ([#11660](typescript-eslint/typescript-eslint#11660)) - **typescript-estree:** forbid abstract method and accessor to have implementation ([#11657](typescript-eslint/typescript-eslint#11657)) - **eslint-plugin:** removed error type previously deprecated ([#11674](typescript-eslint/typescript-eslint#11674)) - **eslint-plugin:** \[no-deprecated] ignore deprecated `export import`s ([#11603](typescript-eslint/typescript-eslint#11603)) - **eslint-plugin:** \[unbound-method] improve wording around `this: void` and binding ([#11634](typescript-eslint/typescript-eslint#11634)) - **rule-tester:** deprecate TestCaseError#type and LintMessage#nodeType ([#11628](typescript-eslint/typescript-eslint#11628)) - **eslint-plugin:** \[no-floating-promises] remove excess parentheses in suggestions ([#11487](typescript-eslint/typescript-eslint#11487)) ##### ❤️ Thank You - fisker Cheung [@fisker](https://github.com/fisker) - Josh Goldberg ✨ - Kirk Waiblinger [@kirkwaiblinger](https://github.com/kirkwaiblinger) - Mark de Dios [@peanutenthusiast](https://github.com/peanutenthusiast) - Richard Torres [@richardtorres314](https://github.com/richardtorres314) - Victor Genaev [@mainframev](https://github.com/mainframev) You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.
| datasource | package | from | to | | ---------- | -------------------------------- | ------ | ------ | | npm | @typescript-eslint/eslint-plugin | 8.45.0 | 8.46.0 | | npm | @typescript-eslint/parser | 8.45.0 | 8.46.0 | ## [v8.46.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8460-2025-10-06) ##### 🚀 Features - **eslint-plugin:** \[no-unsafe-member-access] add allowOptionalChaining option ([#11659](typescript-eslint/typescript-eslint#11659)) - **rule-schema-to-typescript-types:** clean up and make public ([#11633](typescript-eslint/typescript-eslint#11633)) ##### 🩹 Fixes - **eslint-plugin:** \[prefer-readonly-parameter-types] ignore tagged primitives ([#11660](typescript-eslint/typescript-eslint#11660)) - **typescript-estree:** forbid abstract method and accessor to have implementation ([#11657](typescript-eslint/typescript-eslint#11657)) - **eslint-plugin:** removed error type previously deprecated ([#11674](typescript-eslint/typescript-eslint#11674)) - **eslint-plugin:** \[no-deprecated] ignore deprecated `export import`s ([#11603](typescript-eslint/typescript-eslint#11603)) - **eslint-plugin:** \[unbound-method] improve wording around `this: void` and binding ([#11634](typescript-eslint/typescript-eslint#11634)) - **rule-tester:** deprecate TestCaseError#type and LintMessage#nodeType ([#11628](typescript-eslint/typescript-eslint#11628)) - **eslint-plugin:** \[no-floating-promises] remove excess parentheses in suggestions ([#11487](typescript-eslint/typescript-eslint#11487)) ##### ❤️ Thank You - fisker Cheung [@fisker](https://github.com/fisker) - Josh Goldberg ✨ - Kirk Waiblinger [@kirkwaiblinger](https://github.com/kirkwaiblinger) - Mark de Dios [@peanutenthusiast](https://github.com/peanutenthusiast) - Richard Torres [@richardtorres314](https://github.com/richardtorres314) - Victor Genaev [@mainframev](https://github.com/mainframev) You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.

PR Checklist
Overview