Skip to content

Commit 4f0dc28

Browse files
Merge pull request #2475 from Microsoft/completionEntryDetails
Share code between getCompletionsAtPosition and getCompletionEntryDetails.
2 parents 20a0ac5 + 69ff9b3 commit 4f0dc28

File tree

163 files changed

+1088
-1024
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

163 files changed

+1088
-1024
lines changed

src/compiler/checker.ts

+51-38
Original file line numberDiff line numberDiff line change
@@ -10587,15 +10587,64 @@ module ts {
1058710587
function getSymbolsInScope(location: Node, meaning: SymbolFlags): Symbol[] {
1058810588
let symbols: SymbolTable = {};
1058910589
let memberFlags: NodeFlags = 0;
10590-
function copySymbol(symbol: Symbol, meaning: SymbolFlags) {
10590+
10591+
if (isInsideWithStatementBody(location)) {
10592+
// We cannot answer semantic questions within a with block, do not proceed any further
10593+
return [];
10594+
}
10595+
10596+
populateSymbols();
10597+
10598+
return mapToArray(symbols);
10599+
10600+
function populateSymbols() {
10601+
while (location) {
10602+
if (location.locals && !isGlobalSourceFile(location)) {
10603+
copySymbols(location.locals, meaning);
10604+
}
10605+
10606+
switch (location.kind) {
10607+
case SyntaxKind.SourceFile:
10608+
if (!isExternalModule(<SourceFile>location)) {
10609+
break;
10610+
}
10611+
case SyntaxKind.ModuleDeclaration:
10612+
copySymbols(getSymbolOfNode(location).exports, meaning & SymbolFlags.ModuleMember);
10613+
break;
10614+
case SyntaxKind.EnumDeclaration:
10615+
copySymbols(getSymbolOfNode(location).exports, meaning & SymbolFlags.EnumMember);
10616+
break;
10617+
case SyntaxKind.ClassDeclaration:
10618+
case SyntaxKind.InterfaceDeclaration:
10619+
if (!(memberFlags & NodeFlags.Static)) {
10620+
copySymbols(getSymbolOfNode(location).members, meaning & SymbolFlags.Type);
10621+
}
10622+
break;
10623+
case SyntaxKind.FunctionExpression:
10624+
if ((<FunctionExpression>location).name) {
10625+
copySymbol(location.symbol, meaning);
10626+
}
10627+
break;
10628+
}
10629+
10630+
memberFlags = location.flags;
10631+
location = location.parent;
10632+
}
10633+
10634+
copySymbols(globals, meaning);
10635+
}
10636+
10637+
// Returns 'true' if we should stop processing symbols.
10638+
function copySymbol(symbol: Symbol, meaning: SymbolFlags): void {
1059110639
if (symbol.flags & meaning) {
1059210640
let id = symbol.name;
1059310641
if (!isReservedMemberName(id) && !hasProperty(symbols, id)) {
1059410642
symbols[id] = symbol;
1059510643
}
1059610644
}
1059710645
}
10598-
function copySymbols(source: SymbolTable, meaning: SymbolFlags) {
10646+
10647+
function copySymbols(source: SymbolTable, meaning: SymbolFlags): void {
1059910648
if (meaning) {
1060010649
for (let id in source) {
1060110650
if (hasProperty(source, id)) {
@@ -10604,42 +10653,6 @@ module ts {
1060410653
}
1060510654
}
1060610655
}
10607-
10608-
if (isInsideWithStatementBody(location)) {
10609-
// We cannot answer semantic questions within a with block, do not proceed any further
10610-
return [];
10611-
}
10612-
10613-
while (location) {
10614-
if (location.locals && !isGlobalSourceFile(location)) {
10615-
copySymbols(location.locals, meaning);
10616-
}
10617-
switch (location.kind) {
10618-
case SyntaxKind.SourceFile:
10619-
if (!isExternalModule(<SourceFile>location)) break;
10620-
case SyntaxKind.ModuleDeclaration:
10621-
copySymbols(getSymbolOfNode(location).exports, meaning & SymbolFlags.ModuleMember);
10622-
break;
10623-
case SyntaxKind.EnumDeclaration:
10624-
copySymbols(getSymbolOfNode(location).exports, meaning & SymbolFlags.EnumMember);
10625-
break;
10626-
case SyntaxKind.ClassDeclaration:
10627-
case SyntaxKind.InterfaceDeclaration:
10628-
if (!(memberFlags & NodeFlags.Static)) {
10629-
copySymbols(getSymbolOfNode(location).members, meaning & SymbolFlags.Type);
10630-
}
10631-
break;
10632-
case SyntaxKind.FunctionExpression:
10633-
if ((<FunctionExpression>location).name) {
10634-
copySymbol(location.symbol, meaning);
10635-
}
10636-
break;
10637-
}
10638-
memberFlags = location.flags;
10639-
location = location.parent;
10640-
}
10641-
copySymbols(globals, meaning);
10642-
return mapToArray(symbols);
1064310656
}
1064410657

1064510658
function isTypeDeclarationName(name: Node): boolean {

src/compiler/scanner.ts

+5
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,11 @@ module ts {
256256
return tokenStrings[t];
257257
}
258258

259+
/* @internal */
260+
export function stringToToken(s: string): SyntaxKind {
261+
return textToToken[s];
262+
}
263+
259264
export function computeLineStarts(text: string): number[] {
260265
let result: number[] = new Array();
261266
let pos = 0;

src/compiler/types.ts

+3
Original file line numberDiff line numberDiff line change
@@ -1092,6 +1092,9 @@ module ts {
10921092
getSignaturesOfType(type: Type, kind: SignatureKind): Signature[];
10931093
getIndexTypeOfType(type: Type, kind: IndexKind): Type;
10941094
getReturnTypeOfSignature(signature: Signature): Type;
1095+
1096+
// If 'predicate' is supplied, then only the first symbol in scope matching the predicate
1097+
// will be returned. Otherwise, all symbols in scope will be returned.
10951098
getSymbolsInScope(location: Node, meaning: SymbolFlags): Symbol[];
10961099
getSymbolAtLocation(node: Node): Symbol;
10971100
getShorthandAssignmentValueSymbol(location: Node): Symbol;

0 commit comments

Comments
 (0)