Binder Declarations
node
とsymbol
の間のリンクは、いくつかの関数によって実行されます。ある1つの関数は、SourceFile
NodeをSource File Symbolにバインドするために使われます。それは、addDeclarationToSymbol
関数です。
注:外部モジュールソースファイルのSymbol
はflags : SymbolFlags.ValueModule
とname: '"' + removeFileExtension(file.fileName) + '"'
)としてセットアップされています。
function addDeclarationToSymbol(symbol: Symbol, node: Declaration, symbolFlags: SymbolFlags) {
symbol.flags |= symbolFlags;
node.symbol = symbol;
if (!symbol.declarations) {
symbol.declarations = [];
}
symbol.declarations.push(node);
if (symbolFlags & SymbolFlags.HasExports && !symbol.exports) {
symbol.exports = {};
}
if (symbolFlags & SymbolFlags.HasMembers && !symbol.members) {
symbol.members = {};
}
if (symbolFlags & SymbolFlags.Value && !symbol.valueDeclaration) {
symbol.valueDeclaration = node;
}
}
重要なリンクを行っている部分:
AST node(
node.symbol
)からSymbolへのリンクを作成します。NodeをSymbolのDeclaration(
symbol.declarations
)の1つとして追加します。
Declaration
Declarationはオプションの名前を持つnode
です。types.ts
にあります:
interface Declaration extends Node {
_declarationBrand: any;
name?: DeclarationName;
}
最終更新
役に立ちましたか?