mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-04 21:53:42 -06:00
Fix issue #866, detect the current location correctelly in completion entry details
This commit is contained in:
parent
161eea13e0
commit
669044c495
@ -1265,7 +1265,6 @@ module ts {
|
||||
position: number; // position in the file where the completion was requested
|
||||
entries: CompletionEntry[]; // entries for this completion
|
||||
symbols: Map<Symbol>; // symbols by entry name map
|
||||
location: Node; // the node where the completion was requested
|
||||
typeChecker: TypeChecker; // the typeChecker used to generate this completion
|
||||
}
|
||||
|
||||
@ -2515,8 +2514,10 @@ module ts {
|
||||
}
|
||||
|
||||
var node: Node;
|
||||
var location: Node;
|
||||
var isRightOfDot: boolean;
|
||||
var token = getNonIdentifierCompleteTokenOnLeft(sourceFile, position);
|
||||
|
||||
if (token && token.kind === SyntaxKind.DotToken &&
|
||||
(token.parent.kind === SyntaxKind.PropertyAccess || token.parent.kind === SyntaxKind.QualifiedName)) {
|
||||
node = (<PropertyAccess>token.parent).left;
|
||||
@ -2538,7 +2539,6 @@ module ts {
|
||||
position: position,
|
||||
entries: [],
|
||||
symbols: {},
|
||||
location: node,
|
||||
typeChecker: typeInfoResolver
|
||||
};
|
||||
|
||||
@ -2624,6 +2624,8 @@ module ts {
|
||||
// in the getCompletionsAtPosition earlier
|
||||
filename = TypeScript.switchToForwardSlashes(filename);
|
||||
|
||||
var sourceFile = getSourceFile(filename);
|
||||
|
||||
var session = activeCompletionSession;
|
||||
|
||||
// Ensure that the current active completion session is still valid for this request
|
||||
@ -2640,7 +2642,8 @@ module ts {
|
||||
// which is permissible given that it is backwards compatible; but really we should consider
|
||||
// passing the meaning for the node so that we don't report that a suggestion for a value is an interface.
|
||||
// We COULD also just do what 'getSymbolModifiers' does, which is to use the first declaration.
|
||||
var displayPartsDocumentationsAndSymbolKind = getSymbolDisplayPartsDocumentationAndSymbolKind(symbol, getSourceFile(filename), session.location, session.typeChecker, session.location, SemanticMeaning.All);
|
||||
var location = getTouchingPropertyName(sourceFile, position);
|
||||
var displayPartsDocumentationsAndSymbolKind = getSymbolDisplayPartsDocumentationAndSymbolKind(symbol, getSourceFile(filename), location, session.typeChecker, location, SemanticMeaning.All);
|
||||
return {
|
||||
name: entryName,
|
||||
kind: displayPartsDocumentationsAndSymbolKind.symbolKind,
|
||||
@ -2790,15 +2793,20 @@ module ts {
|
||||
|
||||
var type = typeResolver.getTypeOfSymbol(symbol);
|
||||
if (type) {
|
||||
if (location.parent && location.parent.kind === SyntaxKind.PropertyAccess) {
|
||||
var right = (<PropertyAccess>location.parent).right;
|
||||
// Either the location is on the right of a property access, or on the left and the right is missing
|
||||
if (right === location || (right && right.kind === SyntaxKind.Missing)){
|
||||
location = location.parent;
|
||||
}
|
||||
}
|
||||
|
||||
// try get the call/construct signature from the type if it matches
|
||||
var callExpression: CallExpression;
|
||||
if (location.kind === SyntaxKind.CallExpression || location.kind === SyntaxKind.NewExpression) {
|
||||
callExpression = <CallExpression> location;
|
||||
}
|
||||
else if (isCallExpressionTarget(location) || isNewExpressionTarget(location)) {
|
||||
if (location.parent.kind === SyntaxKind.PropertyAccess && (<PropertyAccess>location.parent).right === location) {
|
||||
location = location.parent;
|
||||
}
|
||||
callExpression = <CallExpression>location.parent;
|
||||
}
|
||||
|
||||
|
||||
@ -64,7 +64,7 @@ goTo.marker('7');
|
||||
verify.quickInfoIs("(var) myvar: m1.m2.c", "");
|
||||
|
||||
goTo.marker('8');
|
||||
verify.memberListContains("c", "class m1.m2.c", "class comment;");
|
||||
verify.memberListContains("c", "(constructor) m1.m2.c(): m1.m2.c", "");
|
||||
verify.memberListContains("i", "(var) m1.m2.i: m1.m2.c", "i");
|
||||
|
||||
goTo.file("commentsExternalModules_file1.ts");
|
||||
@ -91,5 +91,5 @@ goTo.marker('14');
|
||||
verify.quickInfoIs("(var) newVar: extMod.m1.m2.c", "");
|
||||
|
||||
goTo.marker('15');
|
||||
verify.memberListContains("c", "class extMod.m1.m2.c", "class comment;");
|
||||
verify.memberListContains("c", "(constructor) extMod.m1.m2.c(): extMod.m1.m2.c", "");
|
||||
verify.memberListContains("i", "(var) extMod.m1.m2.i: extMod.m1.m2.c", "i");
|
||||
|
||||
@ -74,7 +74,7 @@ goTo.marker('12');
|
||||
verify.quickInfoIs("(var) lambddaNoVarComment: (a: number, b: number) => number", "");
|
||||
|
||||
goTo.marker('13');
|
||||
verify.completionListContains('lambdaFoo', '(var) lambdaFoo: (a: number, b: number) => number', 'lamdaFoo var comment');
|
||||
verify.completionListContains('lambdaFoo', '(var) lambdaFoo: (a: number, b: number) => number', '');
|
||||
verify.completionListContains('lambddaNoVarComment', '(var) lambddaNoVarComment: (a: number, b: number) => number', '');
|
||||
|
||||
goTo.marker('14');
|
||||
|
||||
@ -47,5 +47,5 @@ goTo.marker('9');
|
||||
verify.quickInfoIs("(var) newVar: extMod.m1.m2.c", "");
|
||||
|
||||
goTo.marker('10');
|
||||
verify.memberListContains("c", "class extMod.m1.m2.c", "class comment;");
|
||||
verify.memberListContains("c", "(constructor) extMod.m1.m2.c(): extMod.m1.m2.c", "");
|
||||
verify.memberListContains("i", "(var) extMod.m1.m2.i: extMod.m1.m2.c", "i");
|
||||
|
||||
@ -223,7 +223,7 @@
|
||||
goTo.marker('1');
|
||||
verify.memberListContains("i1_p1", "(property) i1.i1_p1: number", "i1_p1");
|
||||
verify.memberListContains("i1_f1", "(method) i1.i1_f1(): void", "i1_f1");
|
||||
verify.memberListContains("i1_l1", "(property) i1.i1_l1: () => void", "i1_l1");
|
||||
verify.memberListContains("i1_l1", "(property) i1.i1_l1: () => void", "");
|
||||
verify.memberListContains("i1_nc_p1", "(property) i1.i1_nc_p1: number", "");
|
||||
verify.memberListContains("i1_nc_f1", "(method) i1.i1_nc_f1(): void", "");
|
||||
verify.memberListContains("i1_nc_l1", "(property) i1.i1_nc_l1: () => void", "");
|
||||
@ -278,10 +278,10 @@ verify.memberListContains("i1_nc_f1", "(method) c1.i1_nc_f1(): void", "");
|
||||
verify.memberListContains("i1_nc_l1", "(property) c1.i1_nc_l1: () => void", "");
|
||||
verify.memberListContains("p1", "(property) c1.p1: number", "c1_p1");
|
||||
verify.memberListContains("f1", "(method) c1.f1(): void", "c1_f1");
|
||||
verify.memberListContains("l1", "(property) c1.l1: () => void", "c1_l1");
|
||||
verify.memberListContains("l1", "(property) c1.l1: () => void", "");
|
||||
verify.memberListContains("nc_p1", "(property) c1.nc_p1: number", "c1_nc_p1");
|
||||
verify.memberListContains("nc_f1", "(method) c1.nc_f1(): void", "c1_nc_f1");
|
||||
verify.memberListContains("nc_l1", "(property) c1.nc_l1: () => void", "c1_nc_l1");
|
||||
verify.memberListContains("nc_l1", "(property) c1.nc_l1: () => void", "");
|
||||
goTo.marker('7');
|
||||
verify.currentSignatureHelpDocCommentIs("");
|
||||
goTo.marker('8');
|
||||
@ -321,7 +321,7 @@ verify.quickInfoIs("(property) c1.nc_l1: () => void", "");
|
||||
goTo.marker('11');
|
||||
verify.memberListContains("i1_p1", "(property) i1.i1_p1: number", "i1_p1");
|
||||
verify.memberListContains("i1_f1", "(method) i1.i1_f1(): void", "i1_f1");
|
||||
verify.memberListContains("i1_l1", "(property) i1.i1_l1: () => void", "i1_l1");
|
||||
verify.memberListContains("i1_l1", "(property) i1.i1_l1: () => void", "");
|
||||
verify.memberListContains("i1_nc_p1", "(property) i1.i1_nc_p1: number", "");
|
||||
verify.memberListContains("i1_nc_f1", "(method) i1.i1_nc_f1(): void", "");
|
||||
verify.memberListContains("i1_nc_l1", "(property) i1.i1_nc_l1: () => void", "");
|
||||
@ -508,13 +508,13 @@ verify.completionListContains("c4_i", "(var) c4_i: c4", "");
|
||||
goTo.marker('36');
|
||||
verify.memberListContains("i2_p1", "(property) i2.i2_p1: number", "i2_p1");
|
||||
verify.memberListContains("i2_f1", "(method) i2.i2_f1(): void", "i2_f1");
|
||||
verify.memberListContains("i2_l1", "(property) i2.i2_l1: () => void", "i2_l1");
|
||||
verify.memberListContains("i2_l1", "(property) i2.i2_l1: () => void", "");
|
||||
verify.memberListContains("i2_nc_p1", "(property) i2.i2_nc_p1: number", "");
|
||||
verify.memberListContains("i2_nc_f1", "(method) i2.i2_nc_f1(): void", "");
|
||||
verify.memberListContains("i2_nc_l1", "(property) i2.i2_nc_l1: () => void", "");
|
||||
verify.memberListContains("p1", "(property) i2.p1: number", "i2 p1");
|
||||
verify.memberListContains("f1", "(method) i2.f1(): void", "i2 f1");
|
||||
verify.memberListContains("l1", "(property) i2.l1: () => void", "i2 l1");
|
||||
verify.memberListContains("l1", "(property) i2.l1: () => void", "");
|
||||
verify.memberListContains("nc_p1", "(property) i2.nc_p1: number", "");
|
||||
verify.memberListContains("nc_f1", "(method) i2.nc_f1(): void", "");
|
||||
verify.memberListContains("nc_l1", "(property) i2.nc_l1: () => void", "");
|
||||
@ -559,13 +559,13 @@ verify.quickInfoIs("(property) i2.nc_l1: () => void", "");
|
||||
goTo.marker('41');
|
||||
verify.memberListContains("i2_p1", "(property) i2.i2_p1: number", "i2_p1");
|
||||
verify.memberListContains("i2_f1", "(method) i2.i2_f1(): void", "i2_f1");
|
||||
verify.memberListContains("i2_l1", "(property) i2.i2_l1: () => void", "i2_l1");
|
||||
verify.memberListContains("i2_l1", "(property) i2.i2_l1: () => void", "");
|
||||
verify.memberListContains("i2_nc_p1", "(property) i2.i2_nc_p1: number", "");
|
||||
verify.memberListContains("i2_nc_f1", "(method) i2.i2_nc_f1(): void", "");
|
||||
verify.memberListContains("i2_nc_l1", "(property) i2.i2_nc_l1: () => void", "");
|
||||
verify.memberListContains("p1", "(property) i3.p1: number", "i3 p1");
|
||||
verify.memberListContains("f1", "(method) i3.f1(): void", "i3 f1");
|
||||
verify.memberListContains("l1", "(property) i3.l1: () => void", "i3 l1");
|
||||
verify.memberListContains("l1", "(property) i3.l1: () => void", "");
|
||||
verify.memberListContains("nc_p1", "(property) i3.nc_p1: number", "");
|
||||
verify.memberListContains("nc_f1", "(method) i3.nc_f1(): void", "");
|
||||
verify.memberListContains("nc_l1", "(property) i3.nc_l1: () => void", "");
|
||||
@ -606,13 +606,13 @@ verify.quickInfoIs("(property) i3.nc_l1: () => void", "");
|
||||
goTo.marker('46');
|
||||
verify.memberListContains("i2_p1", "(property) i2.i2_p1: number", "i2_p1");
|
||||
verify.memberListContains("i2_f1", "(method) i2.i2_f1(): void", "i2_f1");
|
||||
verify.memberListContains("i2_l1", "(property) i2.i2_l1: () => void", "i2_l1");
|
||||
verify.memberListContains("i2_l1", "(property) i2.i2_l1: () => void", "");
|
||||
verify.memberListContains("i2_nc_p1", "(property) i2.i2_nc_p1: number", "");
|
||||
verify.memberListContains("i2_nc_f1", "(method) i2.i2_nc_f1(): void", "");
|
||||
verify.memberListContains("i2_nc_l1", "(property) i2.i2_nc_l1: () => void", "");
|
||||
verify.memberListContains("p1", "(property) i2.p1: number", "i2 p1");
|
||||
verify.memberListContains("f1", "(method) i2.f1(): void", "i2 f1");
|
||||
verify.memberListContains("l1", "(property) i2.l1: () => void", "i2 l1");
|
||||
verify.memberListContains("l1", "(property) i2.l1: () => void", "");
|
||||
verify.memberListContains("nc_p1", "(property) i2.nc_p1: number", "");
|
||||
verify.memberListContains("nc_f1", "(method) i2.nc_f1(): void", "");
|
||||
verify.memberListContains("nc_l1", "(property) i2.nc_l1: () => void", "");
|
||||
|
||||
@ -235,7 +235,7 @@ verify.completionListContains("i3_i", "(var) i3_i: i3", "");
|
||||
goTo.marker('41');
|
||||
verify.quickInfoIs("(method) i3.f(a: number): string", "Function i3 f");
|
||||
verify.memberListContains("f", "(method) i3.f(a: number): string", "Function i3 f");
|
||||
verify.memberListContains("l", "(property) i3.l: (b: number) => string", "i3 l");
|
||||
verify.memberListContains("l", "(property) i3.l: (b: number) => string", "");
|
||||
verify.memberListContains("x", "(property) i3.x: number", "Comment i3 x");
|
||||
verify.memberListContains("nc_f", "(method) i3.nc_f(a: number): string", "");
|
||||
verify.memberListContains("nc_l", "(property) i3.nc_l: (b: number) => string", "");
|
||||
|
||||
@ -125,7 +125,7 @@ verify.quickInfoIs("(var) myvar: m1.m2.c", "");
|
||||
|
||||
goTo.marker('8');
|
||||
verify.quickInfoIs("(constructor) m1.m2.c(): m1.m2.c", "");
|
||||
verify.memberListContains("c", "class m1.m2.c", "class comment;");
|
||||
verify.memberListContains("c", "(constructor) m1.m2.c(): m1.m2.c", "");
|
||||
verify.memberListContains("i", "(var) m1.m2.i: m1.m2.c", "i");
|
||||
|
||||
goTo.marker('9');
|
||||
@ -138,7 +138,7 @@ verify.quickInfoIs("module m2.m3", "module comment of m2.m3");
|
||||
|
||||
goTo.marker('11');
|
||||
verify.quickInfoIs("(constructor) m2.m3.c(): m2.m3.c", "");
|
||||
verify.memberListContains("c", "class m2.m3.c", "Exported class comment");
|
||||
verify.memberListContains("c", "(constructor) m2.m3.c(): m2.m3.c", "");
|
||||
|
||||
goTo.marker('12');
|
||||
verify.completionListContains("m3", "module m3", "");
|
||||
@ -153,8 +153,8 @@ verify.memberListContains("m5", "module m3.m4.m5");
|
||||
verify.quickInfoIs("module m3.m4.m5", "module comment of m3.m4.m5");
|
||||
|
||||
goTo.marker('15');
|
||||
verify.memberListContains("c", "class m3.m4.m5.c", "Exported class comment");
|
||||
verify.quickInfoIs("(constructor) m3.m4.m5.c(): m3.m4.m5.c", "");
|
||||
verify.memberListContains("c", "(constructor) m3.m4.m5.c(): m3.m4.m5.c", "");
|
||||
|
||||
goTo.marker('16');
|
||||
verify.completionListContains("m4", "module m4", "");
|
||||
@ -173,7 +173,7 @@ verify.memberListContains("m7", "module m4.m5.m6.m7");
|
||||
verify.quickInfoIs("module m4.m5.m6.m7", "");
|
||||
|
||||
goTo.marker('20');
|
||||
verify.memberListContains("c", "class m4.m5.m6.m7.c", "Exported class comment");
|
||||
verify.memberListContains("c", "(constructor) m4.m5.m6.m7.c(): m4.m5.m6.m7.c", "");
|
||||
verify.quickInfoIs("(constructor) m4.m5.m6.m7.c(): m4.m5.m6.m7.c", "");
|
||||
|
||||
goTo.marker('21');
|
||||
@ -193,7 +193,7 @@ verify.memberListContains("m8", "module m5.m6.m7.m8");
|
||||
verify.quickInfoIs("module m5.m6.m7.m8", "module m8 comment");
|
||||
|
||||
goTo.marker('25');
|
||||
verify.memberListContains("c", "class m5.m6.m7.m8.c", "Exported class comment");
|
||||
verify.memberListContains("c", "(constructor) m5.m6.m7.m8.c(): m5.m6.m7.m8.c", "");
|
||||
verify.quickInfoIs("(constructor) m5.m6.m7.m8.c(): m5.m6.m7.m8.c", "");
|
||||
|
||||
goTo.marker('26');
|
||||
@ -209,7 +209,7 @@ verify.memberListContains("m8", "module m6.m7.m8");
|
||||
verify.quickInfoIs("module m6.m7.m8", "");
|
||||
|
||||
goTo.marker('29');
|
||||
verify.memberListContains("c", "class m6.m7.m8.c", "Exported class comment");
|
||||
verify.memberListContains("c", "(constructor) m6.m7.m8.c(): m6.m7.m8.c", "");
|
||||
verify.quickInfoIs("(constructor) m6.m7.m8.c(): m6.m7.m8.c", "");
|
||||
|
||||
goTo.marker('30');
|
||||
@ -225,7 +225,7 @@ verify.memberListContains("m9", "module m7.m8.m9");
|
||||
verify.quickInfoIs("module m7.m8.m9", "module m9 comment");
|
||||
|
||||
goTo.marker('33');
|
||||
verify.memberListContains("c", "class m7.m8.m9.c", "Exported class comment");
|
||||
verify.memberListContains("c", "(constructor) m7.m8.m9.c(): m7.m8.m9.c", "");
|
||||
verify.quickInfoIs("(constructor) m7.m8.m9.c(): m7.m8.m9.c", "");
|
||||
|
||||
goTo.marker('34');
|
||||
|
||||
@ -37,7 +37,7 @@ verify.quickInfoIs("(var) a: {\n (): a1.connectExport;\n test1: a1.connect
|
||||
|
||||
goTo.marker('3');
|
||||
verify.quickInfoIs("(property) test1: a1.connectModule(res: any, req: any, next: any) => void", undefined);
|
||||
verify.completionListContains("test1", "(property) test1: a1.connectModule", undefined);
|
||||
verify.completionListContains("test1", "(property) test1: a1.connectModule(res: any, req: any, next: any) => void", undefined);
|
||||
verify.completionListContains("test2", "(method) test2(): a1.connectModule", undefined);
|
||||
verify.not.completionListContains("connectModule");
|
||||
verify.not.completionListContains("connectExport");
|
||||
@ -59,7 +59,7 @@ verify.quickInfoIs("(var) r2: a1.connectExport", undefined);
|
||||
|
||||
goTo.marker('9');
|
||||
verify.quickInfoIs("(property) test1: a1.connectModule(res: any, req: any, next: any) => void", undefined);
|
||||
verify.completionListContains("test1", "(property) test1: a1.connectModule", undefined);
|
||||
verify.completionListContains("test1", "(property) test1: a1.connectModule(res: any, req: any, next: any) => void", undefined);
|
||||
verify.completionListContains("test2", "(method) test2(): a1.connectModule", undefined);
|
||||
verify.completionListContains("connectModule");
|
||||
verify.completionListContains("connectExport");
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user