Skip to content

Commit a5e4914

Browse files
author
Phoebe Szmucer
committed
Fix rootDirs with trailing slashes
1 parent 9aa7666 commit a5e4914

File tree

3 files changed

+60
-11
lines changed

3 files changed

+60
-11
lines changed

src/services/stringCompletions.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -629,8 +629,10 @@ function getBaseDirectoriesFromRootDirs(rootDirs: string[], basePath: string, sc
629629
rootDirs = rootDirs.map(rootDirectory => normalizePath(isRootedDiskPath(rootDirectory) ? rootDirectory : combinePaths(basePath, rootDirectory)));
630630

631631
// Determine the path to the directory containing the script relative to the root directory it is contained within
632-
const relativeDirectory = firstDefined(rootDirs, rootDirectory =>
633-
containsPath(rootDirectory, scriptDirectory, basePath, ignoreCase) ? scriptDirectory.substr(rootDirectory.length + 1) : undefined)!; // TODO: GH#18217
632+
const relativeDirectory = firstDefined(rootDirs, rootDirectory => {
633+
const rootDirectoryWithSlash = rootDirectory.endsWith("/") ? rootDirectory : (rootDirectory + "/");
634+
return containsPath(rootDirectoryWithSlash, scriptDirectory, basePath, ignoreCase) ? scriptDirectory.substr(rootDirectoryWithSlash.length) : undefined;
635+
})!; // TODO: GH#18217
634636

635637
// Now find a path for each potential directory that is to be merged with the one containing the script
636638
return deduplicate<string>(

tests/cases/fourslash/completionForStringLiteralRelativeImport5.ts

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,36 @@
22

33
// Should give correct completions for directories when invoked from within nested folders
44

5-
// @rootDirs: /repo/src,/repo/generated
5+
// @rootDirs: /repo/src1,/repo/src2/,/repo/generated1,/repo/generated2/
66

77
// @Filename: /dir/secret_file.ts
88
//// /*secret_file*/
99

10-
// @Filename: /repo/src/dir/test.ts
11-
//// import * as foo1 from ".//*import_as*/
12-
//// import foo2 = require(".//*import_equals*/
13-
//// var foo3 = require(".//*require*/
10+
// @Filename: /repo/src1/dir/test1.ts
11+
//// import * as foo1 from ".//*import_as1*/
12+
//// import foo2 = require(".//*import_equals1*/
13+
//// var foo3 = require(".//*require1*/
1414

15-
// @Filename: /repo/generated/dir/f.ts
16-
//// /*f*/
15+
// @Filename: /repo/src2/dir/test2.ts
16+
//// import * as foo1 from ".//*import_as2*/
17+
//// import foo2 = require(".//*import_equals2*/
18+
//// var foo3 = require(".//*require2*/
19+
20+
// @Filename: /repo/generated1/dir/f1.ts
21+
//// /*f1*/
22+
23+
// @Filename: /repo/generated2/dir/f2.ts
24+
//// /*f2*/
1725

1826
verify.completions(
1927
{
20-
marker: ["import_as", "import_equals", "require"],
21-
exact: ["f"],
28+
marker: ["import_as1", "import_equals1", "require1"],
29+
unsorted: ["f1", "f2", "test2"],
30+
isNewIdentifierLocation: true,
31+
},
32+
{
33+
marker: ["import_as2", "import_equals2", "require2"],
34+
unsorted: ["f1", "f2", "test1"],
2235
isNewIdentifierLocation: true,
2336
}
2437
);
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/// <reference path='fourslash.ts' />
2+
3+
// Should give correct completions for rootDirs regardless of the slash at the end
4+
5+
// @rootDirs: /repo/src1,/repo/src2/,/repo/generated1,/repo/generated2/
6+
7+
// @Filename: /repo/src1/test1.ts
8+
//// import * as foo1 from "./dir//*import_as1*/
9+
//// import foo2 = require("./dir//*import_equals1*/
10+
//// var foo3 = require("./dir//*require1*/
11+
12+
// @Filename: /repo/src2/test2.ts
13+
//// import * as foo1 from "./dir//*import_as2*/
14+
//// import foo2 = require("./dir//*import_equals2*/
15+
//// var foo3 = require("./dir//*require2*/
16+
17+
// @Filename: /repo/generated1/dir/f1.ts
18+
//// /*f1*/
19+
20+
// @Filename: /repo/generated2/dir/f2.ts
21+
//// /*f2*/
22+
23+
verify.completions(
24+
{
25+
marker: ["import_as1", "import_equals1", "require1"],
26+
exact: ["f1", "f2"],
27+
isNewIdentifierLocation: true,
28+
},
29+
{
30+
marker: ["import_as2", "import_equals2", "require2"],
31+
exact: ["f1", "f2"],
32+
isNewIdentifierLocation: true,
33+
}
34+
);

0 commit comments

Comments
 (0)