Skip to content

Commit 1c47e1a

Browse files
committed
Merge pull request microsoft#952 from Microsoft/completionFixes
Remove dependency on old tree along with some fixes in completion list
2 parents 26b1f60 + 8d3fa04 commit 1c47e1a

33 files changed

Lines changed: 587 additions & 309 deletions

src/services/services.ts

Lines changed: 267 additions & 253 deletions
Large diffs are not rendered by default.

src/services/utilities.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,11 +95,12 @@ module ts {
9595
var child = current.getChildAt(i);
9696
var start = allowPositionInLeadingTrivia ? child.getFullStart() : child.getStart(sourceFile);
9797
if (start <= position) {
98-
if (position < child.getEnd()) {
98+
var end = child.getEnd();
99+
if (position < end || (position === end && child.kind === SyntaxKind.EndOfFileToken)) {
99100
current = child;
100101
continue outer;
101102
}
102-
else if (includeItemAtEndPosition && child.getEnd() === position) {
103+
else if (includeItemAtEndPosition && end === position) {
103104
var previousToken = findPrecedingToken(position, sourceFile, child);
104105
if (previousToken && includeItemAtEndPosition(previousToken)) {
105106
return previousToken;
@@ -180,7 +181,7 @@ module ts {
180181
for (var i = 0, len = children.length; i < len; ++i) {
181182
var child = children[i];
182183
if (nodeHasTokens(child)) {
183-
if (position < child.end) {
184+
if (position <= child.end) {
184185
if (child.getStart(sourceFile) >= position) {
185186
// actual start of the node is past the position - previous token should be at the end of previous child
186187
var candidate = findRightmostChildNodeWithTokens(children, /*exclusiveStartPosition*/ i);

tests/cases/fourslash/commentsExternalModules.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ goTo.marker('7');
6464
verify.quickInfoIs("(var) myvar: m1.m2.c", "");
6565

6666
goTo.marker('8');
67-
verify.memberListContains("c", "class m1.m2.c", "class comment;");
67+
verify.memberListContains("c", "(constructor) m1.m2.c(): m1.m2.c", "");
6868
verify.memberListContains("i", "(var) m1.m2.i: m1.m2.c", "i");
6969

7070
goTo.file("commentsExternalModules_file1.ts");
@@ -91,5 +91,5 @@ goTo.marker('14');
9191
verify.quickInfoIs("(var) newVar: extMod.m1.m2.c", "");
9292

9393
goTo.marker('15');
94-
verify.memberListContains("c", "class extMod.m1.m2.c", "class comment;");
94+
verify.memberListContains("c", "(constructor) extMod.m1.m2.c(): extMod.m1.m2.c", "");
9595
verify.memberListContains("i", "(var) extMod.m1.m2.i: extMod.m1.m2.c", "i");

tests/cases/fourslash/commentsFunction.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ goTo.marker('12');
7474
verify.quickInfoIs("(var) lambddaNoVarComment: (a: number, b: number) => number", "");
7575

7676
goTo.marker('13');
77-
verify.completionListContains('lambdaFoo', '(var) lambdaFoo: (a: number, b: number) => number', 'lamdaFoo var comment');
77+
verify.completionListContains('lambdaFoo', '(var) lambdaFoo: (a: number, b: number) => number', '');
7878
verify.completionListContains('lambddaNoVarComment', '(var) lambddaNoVarComment: (a: number, b: number) => number', '');
7979

8080
goTo.marker('14');

tests/cases/fourslash/commentsImportDeclaration.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,5 +47,5 @@ goTo.marker('9');
4747
verify.quickInfoIs("(var) newVar: extMod.m1.m2.c", "");
4848

4949
goTo.marker('10');
50-
verify.memberListContains("c", "class extMod.m1.m2.c", "class comment;");
50+
verify.memberListContains("c", "(constructor) extMod.m1.m2.c(): extMod.m1.m2.c", "");
5151
verify.memberListContains("i", "(var) extMod.m1.m2.i: extMod.m1.m2.c", "i");

tests/cases/fourslash/commentsInheritance.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@
223223
goTo.marker('1');
224224
verify.memberListContains("i1_p1", "(property) i1.i1_p1: number", "i1_p1");
225225
verify.memberListContains("i1_f1", "(method) i1.i1_f1(): void", "i1_f1");
226-
verify.memberListContains("i1_l1", "(property) i1.i1_l1: () => void", "i1_l1");
226+
verify.memberListContains("i1_l1", "(property) i1.i1_l1: () => void", "");
227227
verify.memberListContains("i1_nc_p1", "(property) i1.i1_nc_p1: number", "");
228228
verify.memberListContains("i1_nc_f1", "(method) i1.i1_nc_f1(): void", "");
229229
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", "");
278278
verify.memberListContains("i1_nc_l1", "(property) c1.i1_nc_l1: () => void", "");
279279
verify.memberListContains("p1", "(property) c1.p1: number", "c1_p1");
280280
verify.memberListContains("f1", "(method) c1.f1(): void", "c1_f1");
281-
verify.memberListContains("l1", "(property) c1.l1: () => void", "c1_l1");
281+
verify.memberListContains("l1", "(property) c1.l1: () => void", "");
282282
verify.memberListContains("nc_p1", "(property) c1.nc_p1: number", "c1_nc_p1");
283283
verify.memberListContains("nc_f1", "(method) c1.nc_f1(): void", "c1_nc_f1");
284-
verify.memberListContains("nc_l1", "(property) c1.nc_l1: () => void", "c1_nc_l1");
284+
verify.memberListContains("nc_l1", "(property) c1.nc_l1: () => void", "");
285285
goTo.marker('7');
286286
verify.currentSignatureHelpDocCommentIs("");
287287
goTo.marker('8');
@@ -321,7 +321,7 @@ verify.quickInfoIs("(property) c1.nc_l1: () => void", "");
321321
goTo.marker('11');
322322
verify.memberListContains("i1_p1", "(property) i1.i1_p1: number", "i1_p1");
323323
verify.memberListContains("i1_f1", "(method) i1.i1_f1(): void", "i1_f1");
324-
verify.memberListContains("i1_l1", "(property) i1.i1_l1: () => void", "i1_l1");
324+
verify.memberListContains("i1_l1", "(property) i1.i1_l1: () => void", "");
325325
verify.memberListContains("i1_nc_p1", "(property) i1.i1_nc_p1: number", "");
326326
verify.memberListContains("i1_nc_f1", "(method) i1.i1_nc_f1(): void", "");
327327
verify.memberListContains("i1_nc_l1", "(property) i1.i1_nc_l1: () => void", "");
@@ -508,13 +508,13 @@ verify.completionListContains("c4_i", "(var) c4_i: c4", "");
508508
goTo.marker('36');
509509
verify.memberListContains("i2_p1", "(property) i2.i2_p1: number", "i2_p1");
510510
verify.memberListContains("i2_f1", "(method) i2.i2_f1(): void", "i2_f1");
511-
verify.memberListContains("i2_l1", "(property) i2.i2_l1: () => void", "i2_l1");
511+
verify.memberListContains("i2_l1", "(property) i2.i2_l1: () => void", "");
512512
verify.memberListContains("i2_nc_p1", "(property) i2.i2_nc_p1: number", "");
513513
verify.memberListContains("i2_nc_f1", "(method) i2.i2_nc_f1(): void", "");
514514
verify.memberListContains("i2_nc_l1", "(property) i2.i2_nc_l1: () => void", "");
515515
verify.memberListContains("p1", "(property) i2.p1: number", "i2 p1");
516516
verify.memberListContains("f1", "(method) i2.f1(): void", "i2 f1");
517-
verify.memberListContains("l1", "(property) i2.l1: () => void", "i2 l1");
517+
verify.memberListContains("l1", "(property) i2.l1: () => void", "");
518518
verify.memberListContains("nc_p1", "(property) i2.nc_p1: number", "");
519519
verify.memberListContains("nc_f1", "(method) i2.nc_f1(): void", "");
520520
verify.memberListContains("nc_l1", "(property) i2.nc_l1: () => void", "");
@@ -559,13 +559,13 @@ verify.quickInfoIs("(property) i2.nc_l1: () => void", "");
559559
goTo.marker('41');
560560
verify.memberListContains("i2_p1", "(property) i2.i2_p1: number", "i2_p1");
561561
verify.memberListContains("i2_f1", "(method) i2.i2_f1(): void", "i2_f1");
562-
verify.memberListContains("i2_l1", "(property) i2.i2_l1: () => void", "i2_l1");
562+
verify.memberListContains("i2_l1", "(property) i2.i2_l1: () => void", "");
563563
verify.memberListContains("i2_nc_p1", "(property) i2.i2_nc_p1: number", "");
564564
verify.memberListContains("i2_nc_f1", "(method) i2.i2_nc_f1(): void", "");
565565
verify.memberListContains("i2_nc_l1", "(property) i2.i2_nc_l1: () => void", "");
566566
verify.memberListContains("p1", "(property) i3.p1: number", "i3 p1");
567567
verify.memberListContains("f1", "(method) i3.f1(): void", "i3 f1");
568-
verify.memberListContains("l1", "(property) i3.l1: () => void", "i3 l1");
568+
verify.memberListContains("l1", "(property) i3.l1: () => void", "");
569569
verify.memberListContains("nc_p1", "(property) i3.nc_p1: number", "");
570570
verify.memberListContains("nc_f1", "(method) i3.nc_f1(): void", "");
571571
verify.memberListContains("nc_l1", "(property) i3.nc_l1: () => void", "");
@@ -606,13 +606,13 @@ verify.quickInfoIs("(property) i3.nc_l1: () => void", "");
606606
goTo.marker('46');
607607
verify.memberListContains("i2_p1", "(property) i2.i2_p1: number", "i2_p1");
608608
verify.memberListContains("i2_f1", "(method) i2.i2_f1(): void", "i2_f1");
609-
verify.memberListContains("i2_l1", "(property) i2.i2_l1: () => void", "i2_l1");
609+
verify.memberListContains("i2_l1", "(property) i2.i2_l1: () => void", "");
610610
verify.memberListContains("i2_nc_p1", "(property) i2.i2_nc_p1: number", "");
611611
verify.memberListContains("i2_nc_f1", "(method) i2.i2_nc_f1(): void", "");
612612
verify.memberListContains("i2_nc_l1", "(property) i2.i2_nc_l1: () => void", "");
613613
verify.memberListContains("p1", "(property) i2.p1: number", "i2 p1");
614614
verify.memberListContains("f1", "(method) i2.f1(): void", "i2 f1");
615-
verify.memberListContains("l1", "(property) i2.l1: () => void", "i2 l1");
615+
verify.memberListContains("l1", "(property) i2.l1: () => void", "");
616616
verify.memberListContains("nc_p1", "(property) i2.nc_p1: number", "");
617617
verify.memberListContains("nc_f1", "(method) i2.nc_f1(): void", "");
618618
verify.memberListContains("nc_l1", "(property) i2.nc_l1: () => void", "");

tests/cases/fourslash/commentsInterface.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ verify.completionListContains("i3_i", "(var) i3_i: i3", "");
235235
goTo.marker('41');
236236
verify.quickInfoIs("(method) i3.f(a: number): string", "Function i3 f");
237237
verify.memberListContains("f", "(method) i3.f(a: number): string", "Function i3 f");
238-
verify.memberListContains("l", "(property) i3.l: (b: number) => string", "i3 l");
238+
verify.memberListContains("l", "(property) i3.l: (b: number) => string", "");
239239
verify.memberListContains("x", "(property) i3.x: number", "Comment i3 x");
240240
verify.memberListContains("nc_f", "(method) i3.nc_f(a: number): string", "");
241241
verify.memberListContains("nc_l", "(property) i3.nc_l: (b: number) => string", "");

tests/cases/fourslash/commentsModules.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ verify.quickInfoIs("(var) myvar: m1.m2.c", "");
125125

126126
goTo.marker('8');
127127
verify.quickInfoIs("(constructor) m1.m2.c(): m1.m2.c", "");
128-
verify.memberListContains("c", "class m1.m2.c", "class comment;");
128+
verify.memberListContains("c", "(constructor) m1.m2.c(): m1.m2.c", "");
129129
verify.memberListContains("i", "(var) m1.m2.i: m1.m2.c", "i");
130130

131131
goTo.marker('9');
@@ -138,7 +138,7 @@ verify.quickInfoIs("module m2.m3", "module comment of m2.m3");
138138

139139
goTo.marker('11');
140140
verify.quickInfoIs("(constructor) m2.m3.c(): m2.m3.c", "");
141-
verify.memberListContains("c", "class m2.m3.c", "Exported class comment");
141+
verify.memberListContains("c", "(constructor) m2.m3.c(): m2.m3.c", "");
142142

143143
goTo.marker('12');
144144
verify.completionListContains("m3", "module m3", "");
@@ -153,8 +153,8 @@ verify.memberListContains("m5", "module m3.m4.m5");
153153
verify.quickInfoIs("module m3.m4.m5", "module comment of m3.m4.m5");
154154

155155
goTo.marker('15');
156-
verify.memberListContains("c", "class m3.m4.m5.c", "Exported class comment");
157156
verify.quickInfoIs("(constructor) m3.m4.m5.c(): m3.m4.m5.c", "");
157+
verify.memberListContains("c", "(constructor) m3.m4.m5.c(): m3.m4.m5.c", "");
158158

159159
goTo.marker('16');
160160
verify.completionListContains("m4", "module m4", "");
@@ -173,7 +173,7 @@ verify.memberListContains("m7", "module m4.m5.m6.m7");
173173
verify.quickInfoIs("module m4.m5.m6.m7", "");
174174

175175
goTo.marker('20');
176-
verify.memberListContains("c", "class m4.m5.m6.m7.c", "Exported class comment");
176+
verify.memberListContains("c", "(constructor) m4.m5.m6.m7.c(): m4.m5.m6.m7.c", "");
177177
verify.quickInfoIs("(constructor) m4.m5.m6.m7.c(): m4.m5.m6.m7.c", "");
178178

179179
goTo.marker('21');
@@ -193,7 +193,7 @@ verify.memberListContains("m8", "module m5.m6.m7.m8");
193193
verify.quickInfoIs("module m5.m6.m7.m8", "module m8 comment");
194194

195195
goTo.marker('25');
196-
verify.memberListContains("c", "class m5.m6.m7.m8.c", "Exported class comment");
196+
verify.memberListContains("c", "(constructor) m5.m6.m7.m8.c(): m5.m6.m7.m8.c", "");
197197
verify.quickInfoIs("(constructor) m5.m6.m7.m8.c(): m5.m6.m7.m8.c", "");
198198

199199
goTo.marker('26');
@@ -209,7 +209,7 @@ verify.memberListContains("m8", "module m6.m7.m8");
209209
verify.quickInfoIs("module m6.m7.m8", "");
210210

211211
goTo.marker('29');
212-
verify.memberListContains("c", "class m6.m7.m8.c", "Exported class comment");
212+
verify.memberListContains("c", "(constructor) m6.m7.m8.c(): m6.m7.m8.c", "");
213213
verify.quickInfoIs("(constructor) m6.m7.m8.c(): m6.m7.m8.c", "");
214214

215215
goTo.marker('30');
@@ -225,7 +225,7 @@ verify.memberListContains("m9", "module m7.m8.m9");
225225
verify.quickInfoIs("module m7.m8.m9", "module m9 comment");
226226

227227
goTo.marker('33');
228-
verify.memberListContains("c", "class m7.m8.m9.c", "Exported class comment");
228+
verify.memberListContains("c", "(constructor) m7.m8.m9.c(): m7.m8.m9.c", "");
229229
verify.quickInfoIs("(constructor) m7.m8.m9.c(): m7.m8.m9.c", "");
230230

231231
goTo.marker('34');

tests/cases/fourslash/commentsOverloads.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -594,11 +594,7 @@ goTo.marker('64q');
594594
verify.quickInfoIs("(constructor) c5(b: string): c5 (+1 overload)", "c5 2");
595595

596596
goTo.marker('65');
597-
//verify.completionListContains("c", "class c", "");
598-
// the below check is wrong and it should show it as class but currently we have a bug for adding the parameters of ambient function in the symbol list
599-
// eg declare function foo2(x: number);
600-
// completion list here
601-
verify.completionListContains("c", "(parameter) c: boolean", "");
597+
verify.completionListContains("c", "class c", "");
602598
verify.completionListContains("c1", "class c1", "");
603599
verify.completionListContains("c2", "class c2", "");
604600
verify.completionListContains("c3", "class c3", "");
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/// <reference path='fourslash.ts' />
2+
3+
////// Outside the function
4+
////declare function f1(a: number);/*1*/
5+
////
6+
////// inside the function
7+
////declare function f2(b: number, b2 = /*2*/
8+
////
9+
////// Outside the function
10+
////function f3(c: number) { }/*3*/
11+
////
12+
////// inside the function
13+
////function f4(d: number) { /*4*/}
14+
15+
goTo.marker("1");
16+
verify.not.completionListContains("a");
17+
18+
goTo.marker("2");
19+
verify.completionListContains("b");
20+
21+
goTo.marker("3");
22+
verify.not.completionListContains("c");
23+
24+
goTo.marker("4");
25+
verify.completionListContains("d");

0 commit comments

Comments
 (0)