mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-25 02:58:56 +01:00
allow file system providers to express that they are case-sensitive
This commit is contained in:
@@ -546,6 +546,9 @@ export function createApiFactory(
|
||||
registerFileSystemProvider: proposedApiFunction(extension, (scheme, provider, newProvider?) => {
|
||||
return extHostFileSystem.registerFileSystemProvider(scheme, provider, newProvider);
|
||||
}),
|
||||
registerFileSystemProvider2: proposedApiFunction(extension, (scheme, provider, options) => {
|
||||
return extHostFileSystem.registerFileSystemProvider2(scheme, provider, options);
|
||||
}),
|
||||
registerDeprecatedFileSystemProvider: proposedApiFunction(extension, (scheme, provider) => {
|
||||
return extHostFileSystem.registerDeprecatedFileSystemProvider(scheme, provider);
|
||||
}),
|
||||
|
||||
@@ -59,7 +59,7 @@ class FsLinkProvider implements vscode.DocumentLinkProvider {
|
||||
|
||||
class FileSystemProviderShim implements vscode.FileSystemProvider2 {
|
||||
|
||||
_version: 8 = 8;
|
||||
_version: 9 = 9;
|
||||
|
||||
onDidChangeFile: vscode.Event<vscode.FileChange2[]>;
|
||||
|
||||
@@ -185,20 +185,20 @@ export class ExtHostFileSystem implements ExtHostFileSystemShape {
|
||||
}
|
||||
|
||||
registerDeprecatedFileSystemProvider(scheme: string, provider: vscode.DeprecatedFileSystemProvider) {
|
||||
return this._doRegisterFileSystemProvider(scheme, new FileSystemProviderShim(provider));
|
||||
return this.registerFileSystemProvider2(scheme, new FileSystemProviderShim(provider), { isCaseSensitive: false });
|
||||
}
|
||||
|
||||
registerFileSystemProvider(scheme: string, provider: vscode.DeprecatedFileSystemProvider, newProvider: vscode.FileSystemProvider2) {
|
||||
if (newProvider && newProvider._version === 8) {
|
||||
return this._doRegisterFileSystemProvider(scheme, newProvider);
|
||||
if (newProvider && newProvider._version === 9) {
|
||||
return this.registerFileSystemProvider2(scheme, newProvider, { isCaseSensitive: false });
|
||||
} else if (provider) {
|
||||
return this._doRegisterFileSystemProvider(scheme, new FileSystemProviderShim(provider));
|
||||
return this.registerFileSystemProvider2(scheme, new FileSystemProviderShim(provider), { isCaseSensitive: false });
|
||||
} else {
|
||||
throw new Error('FAILED to register file system provider, the new provider does not meet the version-constraint and there is no old provider');
|
||||
}
|
||||
}
|
||||
|
||||
private _doRegisterFileSystemProvider(scheme: string, provider: vscode.FileSystemProvider2) {
|
||||
registerFileSystemProvider2(scheme: string, provider: vscode.FileSystemProvider2, options: { isCaseSensitive?: boolean }) {
|
||||
|
||||
if (this._usedSchemes.has(scheme)) {
|
||||
throw new Error(`a provider for the scheme '${scheme}' is already registered`);
|
||||
@@ -210,6 +210,9 @@ export class ExtHostFileSystem implements ExtHostFileSystemShape {
|
||||
this._fsProvider.set(handle, provider);
|
||||
|
||||
let capabilites = files.FileSystemProviderCapabilities.FileReadWrite;
|
||||
if (options.isCaseSensitive) {
|
||||
capabilites += files.FileSystemProviderCapabilities.PathCaseSensitive;
|
||||
}
|
||||
if (typeof provider.copy === 'function') {
|
||||
capabilites += files.FileSystemProviderCapabilities.FileFolderCopy;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user