Skip to content

Commit cf7feb3

Browse files
committed
Responding to PR feedback
1 parent 310bce4 commit cf7feb3

File tree

7 files changed

+59
-67
lines changed

7 files changed

+59
-67
lines changed

src/compiler/program.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ namespace ts {
1010

1111
const defaultTypeRoots = ["node_modules/@types"];
1212

13-
export function findConfigFile(searchPath: string, fileExists: (fileName: string) => boolean, configName="tsconfig.json"): string {
13+
export function findConfigFile(searchPath: string, fileExists: (fileName: string) => boolean, configName = "tsconfig.json"): string {
1414
while (true) {
1515
const fileName = combinePaths(searchPath, configName);
1616
if (fileExists(fileName)) {

src/harness/harness.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -458,7 +458,7 @@ namespace Harness {
458458
// harness always uses one kind of new line
459459
const harnessNewLine = "\r\n";
460460

461-
// Roote for file paths that are stored in a virtual file system
461+
// Root for file paths that are stored in a virtual file system
462462
export const virtualFileSystemRoot = "/";
463463

464464
namespace IOImpl {
@@ -752,14 +752,14 @@ namespace Harness {
752752
}
753753

754754
export function readDirectory(path: string, extension?: string[], exclude?: string[], include?: string[]) {
755-
const fs = new Utils.VirtualFileSystem<string>(path, useCaseSensitiveFileNames());
755+
const fs = new Utils.VirtualFileSystem(path, useCaseSensitiveFileNames());
756756
for (const file of listFiles(path)) {
757757
fs.addFile(file);
758758
}
759759
return ts.matchFiles(path, extension, exclude, include, useCaseSensitiveFileNames(), getCurrentDirectory(), path => {
760760
const entry = fs.traversePath(path);
761761
if (entry && entry.isDirectory()) {
762-
const directory = <Utils.VirtualDirectory<string>>entry;
762+
const directory = <Utils.VirtualDirectory>entry;
763763
return {
764764
files: ts.map(directory.getFiles(), f => f.name),
765765
directories: ts.map(directory.getDirectories(), d => d.name)

src/harness/harnessLanguageService.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ namespace Harness.LanguageService {
123123
}
124124

125125
export class LanguageServiceAdapterHost {
126-
protected virtualFileSystem: Utils.VirtualFileSystem<ScriptInfo> = new Utils.VirtualFileSystem<ScriptInfo>(virtualFileSystemRoot, /*useCaseSensitiveFilenames*/false);
126+
protected virtualFileSystem: Utils.VirtualFileSystem = new Utils.VirtualFileSystem(virtualFileSystemRoot, /*useCaseSensitiveFilenames*/false);
127127

128128
constructor(protected cancellationToken = DefaultHostCancellationToken.Instance,
129129
protected settings = ts.getDefaultCompilerOptions()) {
@@ -148,7 +148,7 @@ namespace Harness.LanguageService {
148148

149149
public getScriptInfo(fileName: string): ScriptInfo {
150150
const fileEntry = this.virtualFileSystem.traversePath(fileName);
151-
return fileEntry && fileEntry.isFile() ? (<Utils.VirtualFile<ScriptInfo>>fileEntry).content : undefined;
151+
return fileEntry && fileEntry.isFile() ? (<Utils.VirtualFile>fileEntry).content : undefined;
152152
}
153153

154154
public addScript(fileName: string, content: string, isRootFile: boolean): void {
@@ -187,11 +187,11 @@ namespace Harness.LanguageService {
187187
getDirectories(path: string): string[] {
188188
const dir = this.virtualFileSystem.traversePath(path);
189189
if (dir && dir.isDirectory()) {
190-
return ts.map((<Utils.VirtualDirectory<ScriptInfo>>dir).getDirectories(), (d) => ts.combinePaths(path, d.name));
190+
return ts.map((<Utils.VirtualDirectory>dir).getDirectories(), (d) => ts.combinePaths(path, d.name));
191191
}
192192
return [];
193193
}
194-
getCurrentDirectory(): string { return virtualFileSystemRoot }
194+
getCurrentDirectory(): string { return virtualFileSystemRoot; }
195195
getDefaultLibFileName(): string { return Harness.Compiler.defaultLibFileName; }
196196
getScriptFileNames(): string[] { return this.getFilenames(); }
197197
getScriptSnapshot(fileName: string): ts.IScriptSnapshot {

src/harness/virtualFileSystem.ts

Lines changed: 38 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
/// <reference path="harness.ts" />
22
/// <reference path="..\compiler\commandLineParser.ts"/>
33
namespace Utils {
4-
export class VirtualFileSystemEntry<T> {
5-
fileSystem: VirtualFileSystem<T>;
4+
export class VirtualFileSystemEntry {
5+
fileSystem: VirtualFileSystem;
66
name: string;
77

8-
constructor(fileSystem: VirtualFileSystem<T>, name: string) {
8+
constructor(fileSystem: VirtualFileSystem, name: string) {
99
this.fileSystem = fileSystem;
1010
this.name = name;
1111
}
@@ -15,15 +15,15 @@ namespace Utils {
1515
isFileSystem() { return false; }
1616
}
1717

18-
export class VirtualFile<T> extends VirtualFileSystemEntry<T> {
19-
content: T;
18+
export class VirtualFile extends VirtualFileSystemEntry {
19+
content?: Harness.LanguageService.ScriptInfo;
2020
isFile() { return true; }
2121
}
2222

23-
export abstract class VirtualFileSystemContainer<T> extends VirtualFileSystemEntry<T> {
24-
abstract getFileSystemEntries(): VirtualFileSystemEntry<T>[];
23+
export abstract class VirtualFileSystemContainer extends VirtualFileSystemEntry {
24+
abstract getFileSystemEntries(): VirtualFileSystemEntry[];
2525

26-
getFileSystemEntry(name: string): VirtualFileSystemEntry<T> {
26+
getFileSystemEntry(name: string): VirtualFileSystemEntry {
2727
for (const entry of this.getFileSystemEntries()) {
2828
if (this.fileSystem.sameName(entry.name, name)) {
2929
return entry;
@@ -32,57 +32,57 @@ namespace Utils {
3232
return undefined;
3333
}
3434

35-
getDirectories(): VirtualDirectory<T>[] {
36-
return <VirtualDirectory<T>[]>ts.filter(this.getFileSystemEntries(), entry => entry.isDirectory());
35+
getDirectories(): VirtualDirectory[] {
36+
return <VirtualDirectory[]>ts.filter(this.getFileSystemEntries(), entry => entry.isDirectory());
3737
}
3838

39-
getFiles(): VirtualFile<T>[] {
40-
return <VirtualFile<T>[]>ts.filter(this.getFileSystemEntries(), entry => entry.isFile());
39+
getFiles(): VirtualFile[] {
40+
return <VirtualFile[]>ts.filter(this.getFileSystemEntries(), entry => entry.isFile());
4141
}
4242

43-
getDirectory(name: string): VirtualDirectory<T> {
43+
getDirectory(name: string): VirtualDirectory {
4444
const entry = this.getFileSystemEntry(name);
45-
return entry.isDirectory() ? <VirtualDirectory<T>>entry : undefined;
45+
return entry.isDirectory() ? <VirtualDirectory>entry : undefined;
4646
}
4747

48-
getFile(name: string): VirtualFile<T> {
48+
getFile(name: string): VirtualFile {
4949
const entry = this.getFileSystemEntry(name);
50-
return entry.isFile() ? <VirtualFile<T>>entry : undefined;
50+
return entry.isFile() ? <VirtualFile>entry : undefined;
5151
}
5252
}
5353

54-
export class VirtualDirectory<T> extends VirtualFileSystemContainer<T> {
55-
private entries: VirtualFileSystemEntry<T>[] = [];
54+
export class VirtualDirectory extends VirtualFileSystemContainer {
55+
private entries: VirtualFileSystemEntry[] = [];
5656

5757
isDirectory() { return true; }
5858

5959
getFileSystemEntries() { return this.entries.slice(); }
6060

61-
addDirectory(name: string): VirtualDirectory<T> {
61+
addDirectory(name: string): VirtualDirectory {
6262
const entry = this.getFileSystemEntry(name);
6363
if (entry === undefined) {
64-
const directory = new VirtualDirectory<T>(this.fileSystem, name);
64+
const directory = new VirtualDirectory(this.fileSystem, name);
6565
this.entries.push(directory);
6666
return directory;
6767
}
6868
else if (entry.isDirectory()) {
69-
return <VirtualDirectory<T>>entry;
69+
return <VirtualDirectory>entry;
7070
}
7171
else {
7272
return undefined;
7373
}
7474
}
7575

76-
addFile(name: string, content?: T): VirtualFile<T> {
76+
addFile(name: string, content?: Harness.LanguageService.ScriptInfo): VirtualFile {
7777
const entry = this.getFileSystemEntry(name);
7878
if (entry === undefined) {
79-
const file = new VirtualFile<T>(this.fileSystem, name);
79+
const file = new VirtualFile(this.fileSystem, name);
8080
file.content = content;
8181
this.entries.push(file);
8282
return file;
8383
}
8484
else if (entry.isFile()) {
85-
const file = <VirtualFile<T>>entry;
85+
const file = <VirtualFile>entry;
8686
file.content = content;
8787
return file;
8888
}
@@ -92,16 +92,16 @@ namespace Utils {
9292
}
9393
}
9494

95-
export class VirtualFileSystem<T> extends VirtualFileSystemContainer<T> {
96-
private root: VirtualDirectory<T>;
95+
export class VirtualFileSystem extends VirtualFileSystemContainer {
96+
private root: VirtualDirectory;
9797

9898
currentDirectory: string;
9999
useCaseSensitiveFileNames: boolean;
100100

101101
constructor(currentDirectory: string, useCaseSensitiveFileNames: boolean) {
102102
super(undefined, "");
103103
this.fileSystem = this;
104-
this.root = new VirtualDirectory<T>(this, "");
104+
this.root = new VirtualDirectory(this, "");
105105
this.currentDirectory = currentDirectory;
106106
this.useCaseSensitiveFileNames = useCaseSensitiveFileNames;
107107
}
@@ -111,9 +111,9 @@ namespace Utils {
111111
getFileSystemEntries() { return this.root.getFileSystemEntries(); }
112112

113113
addDirectory(path: string) {
114-
path = this.normalizePathRoot(path);
114+
path = ts.normalizePath(path);
115115
const components = ts.getNormalizedPathComponents(path, this.currentDirectory);
116-
let directory: VirtualDirectory<T> = this.root;
116+
let directory: VirtualDirectory = this.root;
117117
for (const component of components) {
118118
directory = directory.addDirectory(component);
119119
if (directory === undefined) {
@@ -124,8 +124,8 @@ namespace Utils {
124124
return directory;
125125
}
126126

127-
addFile(path: string, content?: T) {
128-
const absolutePath = this.normalizePathRoot(ts.getNormalizedAbsolutePath(path, this.currentDirectory));
127+
addFile(path: string, content?: Harness.LanguageService.ScriptInfo) {
128+
const absolutePath = ts.normalizePath(ts.getNormalizedAbsolutePath(path, this.currentDirectory));
129129
const fileName = ts.getBaseFileName(path);
130130
const directoryPath = ts.getDirectoryPath(absolutePath);
131131
const directory = this.addDirectory(directoryPath);
@@ -142,15 +142,15 @@ namespace Utils {
142142
}
143143

144144
traversePath(path: string) {
145-
path = this.normalizePathRoot(path);
146-
let directory: VirtualDirectory<T> = this.root;
145+
path = ts.normalizePath(path);
146+
let directory: VirtualDirectory = this.root;
147147
for (const component of ts.getNormalizedPathComponents(path, this.currentDirectory)) {
148148
const entry = directory.getFileSystemEntry(component);
149149
if (entry === undefined) {
150150
return undefined;
151151
}
152152
else if (entry.isDirectory()) {
153-
directory = <VirtualDirectory<T>>entry;
153+
directory = <VirtualDirectory>entry;
154154
}
155155
else {
156156
return entry;
@@ -168,7 +168,7 @@ namespace Utils {
168168
getAccessibleFileSystemEntries(path: string) {
169169
const entry = this.traversePath(path);
170170
if (entry && entry.isDirectory()) {
171-
const directory = <VirtualDirectory<T>>entry;
171+
const directory = <VirtualDirectory>entry;
172172
return {
173173
files: ts.map(directory.getFiles(), f => f.name),
174174
directories: ts.map(directory.getDirectories(), d => d.name)
@@ -178,11 +178,11 @@ namespace Utils {
178178
}
179179

180180
getAllFileEntries() {
181-
const fileEntries: VirtualFile<T>[] = [];
181+
const fileEntries: VirtualFile[] = [];
182182
getFilesRecursive(this.root, fileEntries);
183183
return fileEntries;
184184

185-
function getFilesRecursive(dir: VirtualDirectory<T>, result: VirtualFile<T>[]) {
185+
function getFilesRecursive(dir: VirtualDirectory, result: VirtualFile[]) {
186186
const files = dir.getFiles();
187187
const dirs = dir.getDirectories();
188188
for (const file of files) {
@@ -193,17 +193,9 @@ namespace Utils {
193193
}
194194
}
195195
}
196-
197-
normalizePathRoot(path: string) {
198-
const components = ts.getNormalizedPathComponents(path, this.currentDirectory);
199-
200-
// Toss the root component
201-
components[0] = "";
202-
return components.join(ts.directorySeparator);
203-
}
204196
}
205197

206-
export class MockParseConfigHost extends VirtualFileSystem<string> implements ts.ParseConfigHost {
198+
export class MockParseConfigHost extends VirtualFileSystem implements ts.ParseConfigHost {
207199
constructor(currentDirectory: string, ignoreCase: boolean, files: string[]) {
208200
super(currentDirectory, ignoreCase);
209201
for (const file of files) {

src/services/services.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1171,7 +1171,7 @@ namespace ts {
11711171
resolveTypeReferenceDirectives?(typeDirectiveNames: string[], containingFile: string): ResolvedTypeReferenceDirective[];
11721172
directoryExists?(directoryName: string): boolean;
11731173

1174-
/**
1174+
/*
11751175
* getDirectories is also required for full import and type reference completions. Without it defined, certain
11761176
* completions will not be provided
11771177
*/

tests/cases/fourslash/completionForStringLiteralRelativeImport3.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@
33
// Should give completions for absolute paths
44

55
// @Filename: tests/test0.ts
6-
//// import * as foo1 from "c:/tests/cases/f/*import_as0*/
7-
//// import * as foo2 from "c:/tests/cases/fourslash/*import_as1*/
8-
//// import * as foo3 from "c:/tests/cases/fourslash//*import_as2*/
6+
//// import * as foo1 from "/tests/cases/f/*import_as0*/
7+
//// import * as foo2 from "/tests/cases/fourslash/*import_as1*/
8+
//// import * as foo3 from "/tests/cases/fourslash//*import_as2*/
99

10-
//// import foo4 = require("c:/tests/cases/f/*import_equals0*/
11-
//// import foo5 = require("c:/tests/cases/fourslash/*import_equals1*/
12-
//// import foo6 = require("c:/tests/cases/fourslash//*import_equals2*/
10+
//// import foo4 = require("/tests/cases/f/*import_equals0*/
11+
//// import foo5 = require("/tests/cases/fourslash/*import_equals1*/
12+
//// import foo6 = require("/tests/cases/fourslash//*import_equals2*/
1313

14-
//// var foo7 = require("c:/tests/cases/f/*require0*/
15-
//// var foo8 = require("c:/tests/cases/fourslash/*require1*/
16-
//// var foo9 = require("c:/tests/cases/fourslash//*require2*/
14+
//// var foo7 = require("/tests/cases/f/*require0*/
15+
//// var foo8 = require("/tests/cases/fourslash/*require1*/
16+
//// var foo9 = require("/tests/cases/fourslash//*require2*/
1717

1818
// @Filename: f1.ts
1919
//// /*f1*/

tests/cases/fourslash/completionForTripleSlashReference3.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@
33
// Should give completions for absolute paths
44

55
// @Filename: tests/test0.ts
6-
//// /// <reference path="c:/tests/cases/f/*0*/
6+
//// /// <reference path="/tests/cases/f/*0*/
77

88
// @Filename: tests/test1.ts
9-
//// /// <reference path="c:/tests/cases/fourslash/*1*/
9+
//// /// <reference path="/tests/cases/fourslash/*1*/
1010

1111
// @Filename: tests/test2.ts
12-
//// /// <reference path="c:/tests/cases/fourslash//*2*/
12+
//// /// <reference path="/tests/cases/fourslash//*2*/
1313

1414
// @Filename: f1.ts
1515
//// /*f1*/

0 commit comments

Comments
 (0)