Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/workbench/api/node/extHostDiskFileSystemProvider.ts
3296 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import type * as vscode from 'vscode';
7
import { IExtHostConsumerFileSystem } from '../common/extHostFileSystemConsumer.js';
8
import { Schemas } from '../../../base/common/network.js';
9
import { ILogService } from '../../../platform/log/common/log.js';
10
import { DiskFileSystemProvider } from '../../../platform/files/node/diskFileSystemProvider.js';
11
import { FilePermission } from '../../../platform/files/common/files.js';
12
import { isLinux } from '../../../base/common/platform.js';
13
14
export class ExtHostDiskFileSystemProvider {
15
16
constructor(
17
@IExtHostConsumerFileSystem extHostConsumerFileSystem: IExtHostConsumerFileSystem,
18
@ILogService logService: ILogService
19
) {
20
21
// Register disk file system provider so that certain
22
// file operations can execute fast within the extension
23
// host without roundtripping.
24
extHostConsumerFileSystem.addFileSystemProvider(Schemas.file, new DiskFileSystemProviderAdapter(logService), { isCaseSensitive: isLinux });
25
}
26
}
27
28
class DiskFileSystemProviderAdapter implements vscode.FileSystemProvider {
29
30
private readonly impl: DiskFileSystemProvider;
31
32
constructor(logService: ILogService) {
33
this.impl = new DiskFileSystemProvider(logService);
34
}
35
36
async stat(uri: vscode.Uri): Promise<vscode.FileStat> {
37
const stat = await this.impl.stat(uri);
38
39
return {
40
type: stat.type,
41
ctime: stat.ctime,
42
mtime: stat.mtime,
43
size: stat.size,
44
permissions: stat.permissions === FilePermission.Readonly ? 1 : undefined
45
};
46
}
47
48
readDirectory(uri: vscode.Uri): Promise<[string, vscode.FileType][]> {
49
return this.impl.readdir(uri);
50
}
51
52
createDirectory(uri: vscode.Uri): Promise<void> {
53
return this.impl.mkdir(uri);
54
}
55
56
readFile(uri: vscode.Uri): Promise<Uint8Array> {
57
return this.impl.readFile(uri);
58
}
59
60
writeFile(uri: vscode.Uri, content: Uint8Array, options: { readonly create: boolean; readonly overwrite: boolean }): Promise<void> {
61
return this.impl.writeFile(uri, content, { ...options, unlock: false, atomic: false });
62
}
63
64
delete(uri: vscode.Uri, options: { readonly recursive: boolean }): Promise<void> {
65
return this.impl.delete(uri, { ...options, useTrash: false, atomic: false });
66
}
67
68
rename(oldUri: vscode.Uri, newUri: vscode.Uri, options: { readonly overwrite: boolean }): Promise<void> {
69
return this.impl.rename(oldUri, newUri, options);
70
}
71
72
copy(source: vscode.Uri, destination: vscode.Uri, options: { readonly overwrite: boolean }): Promise<void> {
73
return this.impl.copy(source, destination, options);
74
}
75
76
// --- Not Implemented ---
77
78
get onDidChangeFile(): never { throw new Error('Method not implemented.'); }
79
watch(uri: vscode.Uri, options: { readonly recursive: boolean; readonly excludes: readonly string[] }): vscode.Disposable { throw new Error('Method not implemented.'); }
80
}
81
82