Open xiaoxiangmoe opened 6 years ago
I have written a utility function to get all references to a given declaration.
import {collectVariableUsage} from 'tsutils';
/**
*`identifier` needs to be the name of the declaration and be located within `sourceFile`.
* Note that this only works on one source file at a time and can therefore not detect references to global variables in other files.
*/
function getUses(sourceFile: ts.SourceFile, identifier: ts.Identifier) {
// you might want to cache the result of `collectVariableUsage`
return collectVariableUsage(sourceFile).get(identifier)!.uses;
}
Currently you can only look up the uses of a declaration. A reverse lookup is not possible. It also doesn't tell if an identifier is in scope at a given location. Tough I'm planning on improving the API to make it more powerful and easier to use: https://github.com/ajafff/tsutils/issues/38
resolveName
is now an API on TypeChecker
: https://github.com/microsoft/TypeScript/blob/6ea273cdcca99db809074d2b2d38d0e5b59ee81b/lib/typescript.d.ts#L6884
Program
has resolveModuleNames
: https://github.com/microsoft/TypeScript/blob/6ea273cdcca99db809074d2b2d38d0e5b59ee81b/lib/typescript.d.ts#L10216
I think these are close enough to what you might be asking for - but not 100% certain.
I want to write a CustomTransformers for my webpack loader config.
Babel's visitors have API about scope If I get a path of ImportDeclaration
import * as React from "react"
, I can usingpath.scope.getBinding('React').referencePaths
to get all reference paths using React.Is there any API in TypeScript to get identifier's scope or referenced nodes/identifiers?
Also, Is there any API in TypeScript to get ImportDeclaration's moduleSpecifier's resolved source file? for example
import * as React from "react"
's resolved source file is/home/me/my-ts-project/node_modules/react/cjs/react.development.js