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(eslint-plugin): [prefer-readonly-parameter-types] handle class sharp private field and member without throwing error #4343
Merged
bradzacher
merged 9 commits into
typescript-eslint:main
from
lonyele:fix/handle-private-identifier
Mar 1, 2022
Merged
Changes from 1 commit
Commits
Show all changes
9 commits
Select commit
Hold shift + click to select a range
43e34e4
fix: handle class sharp private field and member
lonyele cf9199f
fix: handle class sharp private field and member
lonyele 915f1b3
Merge branch 'fix/handle-private-identifier' of https://github.com/lo…
lonyele 9a8d4f9
feat: exempt private identifier from the rule
lonyele 2754294
chore: shorten unnecessary logic
lonyele 4ba1c7c
test: add unit test
lonyele 33e4789
test: cover case that crashed before
lonyele 0dc841a
test: add readonly test case
lonyele 3d8acb4
Update packages/type-utils/src/propertyTypes.ts
JoshuaKGoldberg File filter
Filter by extension
Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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.
to double check - this case is ignored when
#privateField
is notreadonly
as well?Could you add a test to verify this please? EG this should not error:
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.
For the quick answer, it is not. It fails on test. But not throwing an exception.
Additional info is that before the fix,
#privateMember
throws an exception whentreatMethodsAsReadonly: true
, but no exception and test fails ontreatMethodsAsReadonly: false
After the fix, whether private method with
treatMethodsAsReadonly
is set true/false or private field withreadonly
or not. There is no exception thrown.Here are some results of after the fix
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.
Interesting.
For
private
fields - we 100% should be treating them as "public" (and thus subject them toreadonly
checks), however for#private
fields, they should be exempt fromreadonly
checks.The intent behind the rule is that you should not be able to mutate the type at runtime. You can access
private
fields via computed member access syntax, but because you cannot access#private
fields at all outside the class - they shouldn't be included in the checks.(playground)
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.
Thanks for the playground. I didn't know about that. I just enjoy all your comments on any issues or prs. I think very constructive(very educational to me) :D
please check this commit