refactor(graphqlsp): Add `getDeclarationOfIdentifier` helper
This mirrors the getDefinitionAtPosition method in TypeScript's language service — specifically the GoToDefinition component — to create a getDeclarationOfIdentifier 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:
- types to clarify which nodes can be reached
- a utility to return the actual values of declarations
- a resolver that gets the value of a declaration and keeps resolving if it's an identifier again
🦋 Changeset detected
Latest commit: 748732702ef4322e7be5b3a46606705cce6fa7b1
The changes in this PR will be included in the next version bump.
This PR includes changesets to release 1 package
| Name | Type |
|---|---|
| @0no-co/graphqlsp | Minor |
Not sure what this means? Click here to learn what changesets are.
Click here if you're a maintainer who wants to add another changeset to this PR