Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/workbench/api/common/extHostFileSystemInfo.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 { Schemas } from '../../../base/common/network.js';
7
import { ExtUri, IExtUri } from '../../../base/common/resources.js';
8
import { UriComponents } from '../../../base/common/uri.js';
9
import { FileSystemProviderCapabilities } from '../../../platform/files/common/files.js';
10
import { createDecorator } from '../../../platform/instantiation/common/instantiation.js';
11
import { ExtHostFileSystemInfoShape } from './extHost.protocol.js';
12
13
export class ExtHostFileSystemInfo implements ExtHostFileSystemInfoShape {
14
15
declare readonly _serviceBrand: undefined;
16
17
private readonly _systemSchemes = new Set(Object.keys(Schemas));
18
private readonly _providerInfo = new Map<string, number>();
19
20
readonly extUri: IExtUri;
21
22
constructor() {
23
this.extUri = new ExtUri(uri => {
24
const capabilities = this._providerInfo.get(uri.scheme);
25
if (capabilities === undefined) {
26
// default: not ignore
27
return false;
28
}
29
if (capabilities & FileSystemProviderCapabilities.PathCaseSensitive) {
30
// configured as case sensitive
31
return false;
32
}
33
return true;
34
});
35
}
36
37
$acceptProviderInfos(uri: UriComponents, capabilities: number | null): void {
38
if (capabilities === null) {
39
this._providerInfo.delete(uri.scheme);
40
} else {
41
this._providerInfo.set(uri.scheme, capabilities);
42
}
43
}
44
45
isFreeScheme(scheme: string): boolean {
46
return !this._providerInfo.has(scheme) && !this._systemSchemes.has(scheme);
47
}
48
49
getCapabilities(scheme: string): number | undefined {
50
return this._providerInfo.get(scheme);
51
}
52
}
53
54
export interface IExtHostFileSystemInfo extends ExtHostFileSystemInfo {
55
readonly extUri: IExtUri;
56
}
57
export const IExtHostFileSystemInfo = createDecorator<IExtHostFileSystemInfo>('IExtHostFileSystemInfo');
58
59