Respect overwrite_existing_annotations for attributes and globals - #1467
Open
Sanjays2402 wants to merge 1 commit into
Open
Respect overwrite_existing_annotations for attributes and globals#1467Sanjays2402 wants to merge 1 commit into
Sanjays2402 wants to merge 1 commit into
Conversation
ApplyTypeAnnotationsVisitor only replaced an existing annotation on function parameters and returns. An attribute or global that was already annotated (an AnnAssign) was never visited, so a stub annotation could not overwrite it even with overwrite_existing_annotations=True. Add leave_AnnAssign, which - only when overwriting is requested - looks up the qualified name in the stub attribute annotations and swaps in the stub annotation, recording it in the annotation counts. Adds regression tests for a class attribute, an attribute with a value, and a module-level global.
Author
|
Ping — this one's waiting on workflow approval before CI can run. Would appreciate a maintainer enabling the run whenever there's a spare moment. Open to feedback on the approach. |
This file contains hidden or 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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Closes #1159
Summary
ApplyTypeAnnotationsVisitoronly overwrote existing annotations on function parameters and returns. An attribute or global that already carries an annotation is anAnnAssign, which the transformer never visited, sooverwrite_existing_annotations=Truehad no effect there — patchingclass X: x: strwith a stubclass X: x: intleftx: strunchanged.Adds
leave_AnnAssign, which (only when overwriting is requested) looks up the qualified name in the stub's attribute annotations and swaps in the stub annotation, recording it in the annotation counts.Test Plan
New
test_annotate_attributes_with_existing_annotationsinlibcst/codemod/visitors/tests/test_apply_type_annotations.pycovers a class attribute, an attribute with a value, and a module-level global. All three fail without the source change and pass with it;libcst/codemod/is otherwise unchanged (389 passed, with one pre-existingtest_codemod_formatter_error_inputfailure present on a clean checkout too).This change was prepared with AI assistance; the regression test was run locally and fails without the fix.