refactor(graphqlsp): Add getDeclarationOfIdentifier
helper
#351
+353
−0
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.
This mirrors the
getDefinitionAtPosition
method in TypeScript's language service — specifically theGoToDefinition
component — to create agetDeclarationOfIdentifier
helper.Since we're only looking up definitions of identifiers, we can actually cut out a lot of special cases and end up with a relatively lean implementation of looking up declarations for identifiers. Specifically, if we were to switch over to an implementation like this, it would cut out a lot of extra wrappers, namely positional values that require is to look up file positions. It also saves us some look up work of cases that are impossible, since we're always jumping to declarations (fewer AST cases to account for)
Additionally, the returned AST node is a lot more limited in the locations it can be in, since it's guaranteed to only ever be a declaration.
To further help with this, a few modifications have been added to prevent us from jumping to type declarations, ambient declarations, and import/export/module specifiers (Although that's an artificial limitation)
The helpers also include: