Skip to content

Commit

Permalink
allow file system providers to express that they are case-sensitive
Browse files Browse the repository at this point in the history
  • Loading branch information
jrieken committed Apr 20, 2018
1 parent 41538f2 commit b0ede6c
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 11 deletions.
8 changes: 5 additions & 3 deletions src/vs/platform/files/common/files.ts
Original file line number Diff line number Diff line change
Expand Up @@ -175,9 +175,11 @@ export interface IWatchOptions {
}

export enum FileSystemProviderCapabilities {
FileReadWrite = 0b1,
FileOpenReadWriteClose = 0b10,
FileFolderCopy = 0b100
FileReadWrite = 1 << 1,
FileOpenReadWriteClose = 1 << 2,
FileFolderCopy = 1 << 3,

PathCaseSensitive = 1 << 10
}

export interface IFileSystemProvider {
Expand Down
5 changes: 3 additions & 2 deletions src/vs/vscode.proposed.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ declare module 'vscode' {

export namespace workspace {
export function registerDeprecatedFileSystemProvider(scheme: string, provider: DeprecatedFileSystemProvider): Disposable;
export function registerFileSystemProvider(scheme: string, provider: FileSystemProvider, newProvider?: FileSystemProvider2): Disposable;
}

//#endregion
Expand Down Expand Up @@ -146,7 +147,7 @@ declare module 'vscode' {
*/
export interface FileSystemProvider2 {

_version: 8;
_version: 9;

/**
* An event to signal that a resource has been created, changed, or deleted. This
Expand Down Expand Up @@ -237,7 +238,7 @@ declare module 'vscode' {
}

export namespace workspace {
export function registerFileSystemProvider(scheme: string, provider: FileSystemProvider, newProvider?: FileSystemProvider2): Disposable;
export function registerFileSystemProvider2(scheme: string, provider: FileSystemProvider2, options: { isCaseSensitive?: boolean }): Disposable;
}

//#endregion
Expand Down
3 changes: 3 additions & 0 deletions src/vs/workbench/api/node/extHost.api.impl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}),
Expand Down
15 changes: 9 additions & 6 deletions src/vs/workbench/api/node/extHostFileSystem.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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[]>;

Expand Down Expand Up @@ -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`);
Expand All @@ -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;
}
Expand Down

0 comments on commit b0ede6c

Please sign in to comment.