Skip to content

Commit 21ba944

Browse files
committed
some fixes in virtual fs mode
1 parent 3276af3 commit 21ba944

File tree

3 files changed

+19
-9
lines changed

3 files changed

+19
-9
lines changed

Diff for: providers/DocumentContentProvider.ts

+3
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ export class DocumentContentProvider implements vscode.TextDocumentContentProvid
3030
if (found) {
3131
return vscode.Uri.file(found);
3232
}
33+
const fileName = name.split(".").slice(0, -1).join("/");
34+
const fileExt = name.split(".").pop();
35+
name = fileName + "." + fileExt;
3336
let uri = vscode.Uri.file(name).with({
3437
scheme: vfs ? FILESYSTEM_SCHEMA : OBJECTSCRIPT_FILE_SCHEMA,
3538
});

Diff for: providers/FileSystemPovider/Directory.ts

+1-3
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,12 @@ export class Directory implements vscode.FileStat {
66
public ctime: number;
77
public mtime: number;
88
public size: number;
9-
public name: string;
109
public entries: Map<string, File | Directory>;
11-
constructor(name: string) {
10+
constructor(public name: string, public fullName: string) {
1211
this.type = vscode.FileType.Directory;
1312
this.ctime = Date.now();
1413
this.mtime = Date.now();
1514
this.size = 0;
16-
this.name = name;
1715
this.entries = new Map();
1816
}
1917
}

Diff for: providers/FileSystemPovider/FileSystemProvider.ts

+15-6
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ export type Entry = File | Directory;
88

99
export class FileSystemProvider implements vscode.FileSystemProvider {
1010

11-
public root = new Directory("");
11+
public root = new Directory("", "");
1212

1313
public readonly onDidChangeFile: vscode.Event<vscode.FileChangeEvent[]>;
1414

@@ -34,8 +34,9 @@ export class FileSystemProvider implements vscode.FileSystemProvider {
3434
.then((data) => data.result.content || [])
3535
.then((data) => data.map((item) => {
3636
const name = item.Name;
37+
const fullName = folder === "" ? name : folder + "/" + name;
3738
if (item.IsDirectory.length) {
38-
parent.entries.set(name, new Directory(name));
39+
parent.entries.set(name, new Directory(name, fullName));
3940
return [name, vscode.FileType.Directory];
4041
} else {
4142
return [name, vscode.FileType.File];
@@ -51,7 +52,7 @@ export class FileSystemProvider implements vscode.FileSystemProvider {
5152
const dirname = uri.with({ path: path.posix.dirname(uri.path) });
5253
return this._lookupAsDirectory(dirname)
5354
.then((parent) => {
54-
const entry = new Directory(basename);
55+
const entry = new Directory(basename, uri.path);
5556
parent.entries.set(entry.name, entry);
5657
parent.mtime = Date.now();
5758
parent.size += 1;
@@ -110,10 +111,18 @@ export class FileSystemProvider implements vscode.FileSystemProvider {
110111
let child: Entry | undefined;
111112
if (entry instanceof Directory) {
112113
child = entry.entries.get(part);
114+
if (!part.includes(".")) {
115+
const fullName = entry.name === "" ? part : entry.fullName + "/" + part;
116+
child = new Directory(part, fullName);
117+
entry.entries.set(part, child);
118+
}
113119
}
114120
if (!child) {
115-
return this._lookupAsFile(uri);
116-
// throw vscode.FileSystemError.FileNotFound(uri);
121+
if (part.includes(".")) {
122+
return this._lookupAsFile(uri);
123+
} else {
124+
throw vscode.FileSystemError.FileNotFound(uri);
125+
}
117126
}
118127
entry = child;
119128
}
@@ -149,7 +158,7 @@ export class FileSystemProvider implements vscode.FileSystemProvider {
149158
}),
150159
)
151160
.catch((error) => {
152-
throw vscode.FileSystemError.FileNotFound();
161+
throw vscode.FileSystemError.FileNotFound(uri);
153162
});
154163
}
155164

0 commit comments

Comments
 (0)