Define gather global names visitor #657
Merged
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.
Summary
Having a global name gatherer available helps us determine which names are in or out of scope when applying annotations. This is similar to how we are currently using the import gatherer visitor in a pass prior to applying annotations, but that gatherer seems to have use cases perhaps beyond typing codemods - having a stand alone one for names seemed appropriate.
Ideally we'd like to have better tracking for which names are in/out of scope that combines imports and globals/classes, which we could use in the apply type annotations codemod visitor to compare qualified names against. For now, having global names pre-calculated lets us determine whether or not a name in an annotation is a forward reference by checking if it's a name defined in the current module that we haven't yet seen (all others are considered builtins).
Test Plan