提交 0f1c97b1 编写于 作者: J Johannes Rieken

rename FileSystemProvider2 to FileSystemProvider and the whole ripple.

keep the old proposed api as DeprecatedXYZ

#47475
上级 35f1c86f
......@@ -185,9 +185,9 @@ export interface FileOptions {
}
export interface IStat {
isFile: boolean;
isDirectory: boolean;
isSymbolicLink: boolean;
isFile?: boolean;
isDirectory?: boolean;
isSymbolicLink?: boolean;
mtime: number;
size: number;
}
......
......@@ -13,86 +13,40 @@ declare module 'vscode' {
//#region Joh: file system provider (OLD)
export enum FileChangeType {
export enum DeprecatedFileChangeType {
Updated = 0,
Added = 1,
Deleted = 2
}
export interface FileChange {
type: FileChangeType;
export interface DeprecatedFileChange {
type: DeprecatedFileChangeType;
resource: Uri;
}
export enum FileType {
export enum DeprecatedFileType {
File = 0,
Dir = 1,
Symlink = 2
}
export interface FileStat {
export interface DeprecatedFileStat {
id: number | string;
mtime: number;
// atime: number;
size: number;
type: FileType;
type: DeprecatedFileType;
}
// todo@joh discover files etc
// todo@joh CancellationToken everywhere
// todo@joh add open/close calls?
export interface FileSystemProvider {
readonly onDidChange?: Event<FileChange[]>;
// more...
// @deprecated - will go away
utimes(resource: Uri, mtime: number, atime: number): Thenable<FileStat>;
stat(resource: Uri): Thenable<FileStat>;
export interface DeprecatedFileSystemProvider {
readonly onDidChange?: Event<DeprecatedFileChange[]>;
utimes(resource: Uri, mtime: number, atime: number): Thenable<DeprecatedFileStat>;
stat(resource: Uri): Thenable<DeprecatedFileStat>;
read(resource: Uri, offset: number, length: number, progress: Progress<Uint8Array>): Thenable<number>;
// todo@joh - have an option to create iff not exist
// todo@remote
// offset - byte offset to start
// count - number of bytes to write
// Thenable<number> - number of bytes actually written
write(resource: Uri, content: Uint8Array): Thenable<void>;
// todo@remote
// Thenable<FileStat>
move(resource: Uri, target: Uri): Thenable<FileStat>;
// todo@remote
// helps with performance bigly
// copy?(from: Uri, to: Uri): Thenable<void>;
// todo@remote
// Thenable<FileStat>
mkdir(resource: Uri): Thenable<FileStat>;
readdir(resource: Uri): Thenable<[Uri, FileStat][]>;
// todo@remote
// ? merge both
// ? recursive del
move(resource: Uri, target: Uri): Thenable<DeprecatedFileStat>;
mkdir(resource: Uri): Thenable<DeprecatedFileStat>;
readdir(resource: Uri): Thenable<[Uri, DeprecatedFileStat][]>;
rmdir(resource: Uri): Thenable<void>;
unlink(resource: Uri): Thenable<void>;
// todo@remote
// create(resource: Uri): Thenable<FileStat>;
}
export type DeprecatedFileChangeType = FileChangeType;
export type DeprecatedFileType = FileType;
export type DeprecatedFileChange = FileChange;
export type DeprecatedFileStat = FileStat;
export type DeprecatedFileSystemProvider = FileSystemProvider;
export namespace workspace {
export function registerDeprecatedFileSystemProvider(scheme: string, provider: DeprecatedFileSystemProvider): Disposable;
export function registerFileSystemProvider(scheme: string, provider: FileSystemProvider, newProvider?: FileSystemProvider2): Disposable;
}
//#endregion
......@@ -103,7 +57,7 @@ declare module 'vscode' {
* A type that filesystem providers should use to signal errors.
*
* This class has factory methods for common error-cases, like `EntryNotFound` when
* a file or folder doesn't exist. Use them like so `throw vscode.FileSystemError.EntryNotFound(uri);`
* a file or folder doesn't exist, use them like so: `throw vscode.FileSystemError.EntryNotFound(someUri);`
*/
export class FileSystemError extends Error {
......@@ -140,9 +94,24 @@ declare module 'vscode' {
constructor(messageOrUri?: string | Uri);
}
export enum FileChangeType2 {
/**
* Enumeration of file change types.
*/
export enum FileChangeType {
/**
* The contents or metadata of a file have changed.
*/
Changed = 1,
/**
* A file has been created.
*/
Created = 2,
/**
* A file has been deleted.
*/
Deleted = 3,
}
......@@ -152,9 +121,9 @@ declare module 'vscode' {
export interface FileChangeEvent {
/**
*
* The type of change.
*/
type: FileChangeType2;
type: FileChangeType;
/**
* The uri of the file that has changed.
......@@ -165,21 +134,21 @@ declare module 'vscode' {
/**
* The `FileStat`-type represents metadata about a file.
*/
export interface FileStat2 {
export interface FileStat {
/**
* The file is a regular file.
*/
isFile: boolean;
isFile?: boolean;
/**
* The file is a directory.
*/
isDirectory: boolean;
isDirectory?: boolean;
/**
* The file is symbolic link to another file.
*/
isSymbolicLink: boolean;
isSymbolicLink?: boolean;
/**
* The modification timestamp in milliseconds.
......@@ -226,9 +195,7 @@ declare module 'vscode' {
* -use posix-path-math
* -etc...
*/
export interface FileSystemProvider2 {
_version: 9;
export interface FileSystemProvider {
/**
* An event to signal that a resource has been created, changed, or deleted. This
......@@ -252,7 +219,7 @@ declare module 'vscode' {
* @param token A cancellation token.
* @return The file metadata about the file.
*/
stat(uri: Uri, options: { /*future: followSymlinks*/ }, token: CancellationToken): FileStat2 | Thenable<FileStat2>;
stat(uri: Uri, options: { /*future: followSymlinks*/ }, token: CancellationToken): FileStat | Thenable<FileStat>;
/**
* Retrieve the meta data of all entries of a [directory](#FileType2.Directory)
......@@ -261,7 +228,7 @@ declare module 'vscode' {
* @param token A cancellation token.
* @return A thenable that resolves to an array of tuples of file names and files stats.
*/
readDirectory(uri: Uri, options: { /*future: onlyType?*/ }, token: CancellationToken): [string, FileStat2][] | Thenable<[string, FileStat2][]>;
readDirectory(uri: Uri, options: { /*future: onlyType?*/ }, token: CancellationToken): [string, FileStat][] | Thenable<[string, FileStat][]>;
/**
* Create a new directory. *Note* that new files are created via `write`-calls.
......@@ -269,7 +236,7 @@ declare module 'vscode' {
* @param uri The uri of the *new* folder.
* @param token A cancellation token.
*/
createDirectory(uri: Uri, options: { /*future: permissions?*/ }, token: CancellationToken): FileStat2 | Thenable<FileStat2>;
createDirectory(uri: Uri, options: { /*future: permissions?*/ }, token: CancellationToken): FileStat | Thenable<FileStat>;
/**
* Read the entire contents of a file.
......@@ -305,7 +272,7 @@ declare module 'vscode' {
* @param newUri The target location.
* @param token A cancellation token.
*/
rename(oldUri: Uri, newUri: Uri, options: FileOptions, token: CancellationToken): FileStat2 | Thenable<FileStat2>;
rename(oldUri: Uri, newUri: Uri, options: FileOptions, token: CancellationToken): FileStat | Thenable<FileStat>;
/**
* Copy files or folders. Implementing this function is optional but it will speedup
......@@ -315,11 +282,11 @@ declare module 'vscode' {
* @param target The target location.
* @param token A cancellation token.
*/
copy?(uri: Uri, target: Uri, options: FileOptions, token: CancellationToken): FileStat2 | Thenable<FileStat2>;
copy?(uri: Uri, target: Uri, options: FileOptions, token: CancellationToken): FileStat | Thenable<FileStat>;
}
export namespace workspace {
export function registerFileSystemProvider2(scheme: string, provider: FileSystemProvider2, options: { isCaseSensitive?: boolean }): Disposable;
export function registerFileSystemProvider(scheme: string, provider: FileSystemProvider, options: { isCaseSensitive?: boolean }): Disposable;
}
//#endregion
......
......@@ -550,11 +550,8 @@ export function createApiFactory(
onDidEndTask: (listeners, thisArgs?, disposables?) => {
return extHostTask.onDidEndTask(listeners, thisArgs, disposables);
},
registerFileSystemProvider: proposedApiFunction(extension, (scheme, provider, newProvider?) => {
return extHostFileSystem.registerFileSystemProvider(scheme, provider, newProvider);
}),
registerFileSystemProvider2: proposedApiFunction(extension, (scheme, provider, options) => {
return extHostFileSystem.registerFileSystemProvider2(scheme, provider, options);
registerFileSystemProvider: proposedApiFunction(extension, (scheme, provider, options) => {
return extHostFileSystem.registerFileSystemProvider(scheme, provider, options);
}),
registerDeprecatedFileSystemProvider: proposedApiFunction(extension, (scheme, provider) => {
return extHostFileSystem.registerDeprecatedFileSystemProvider(scheme, provider);
......@@ -701,11 +698,9 @@ export function createApiFactory(
ConfigurationTarget: extHostTypes.ConfigurationTarget,
RelativePattern: extHostTypes.RelativePattern,
DeprecatedFileChangeType: extHostTypes.DeprecatedFileChangeType,
DeprecatedFileType: extHostTypes.DeprecatedFileType,
FileChangeType: extHostTypes.FileChangeType,
FileType: extHostTypes.FileType,
DeprecatedFileChangeType: extHostTypes.FileChangeType,
DeprecatedFileType: extHostTypes.FileType,
FileChangeType2: extHostTypes.FileChangeType2,
FileSystemError: extHostTypes.FileSystemError,
FoldingRange: extHostTypes.FoldingRange,
FoldingRangeKind: extHostTypes.FoldingRangeKind
......
......@@ -14,7 +14,7 @@ import * as path from 'path';
import { IDisposable } from 'vs/base/common/lifecycle';
import { asWinJsPromise } from 'vs/base/common/async';
import { values } from 'vs/base/common/map';
import { Range, FileType, FileChangeType, FileChangeType2 } from 'vs/workbench/api/node/extHostTypes';
import { Range, DeprecatedFileType, DeprecatedFileChangeType, FileChangeType } from 'vs/workbench/api/node/extHostTypes';
import { ExtHostLanguageFeatures } from 'vs/workbench/api/node/extHostLanguageFeatures';
import { Schemas } from 'vs/base/common/network';
......@@ -57,9 +57,7 @@ class FsLinkProvider implements vscode.DocumentLinkProvider {
}
}
class FileSystemProviderShim implements vscode.FileSystemProvider2 {
_version: 9 = 9;
class FileSystemProviderShim implements vscode.FileSystemProvider {
onDidChangeFile: vscode.Event<vscode.FileChangeEvent[]>;
......@@ -77,19 +75,19 @@ class FileSystemProviderShim implements vscode.FileSystemProvider2 {
return { dispose() { } };
}
stat(resource: vscode.Uri): Thenable<vscode.FileStat2> {
stat(resource: vscode.Uri): Thenable<vscode.FileStat> {
return this._delegate.stat(resource).then(stat => FileSystemProviderShim._modernizeFileStat(stat));
}
rename(oldUri: vscode.Uri, newUri: vscode.Uri): Thenable<vscode.FileStat2> {
rename(oldUri: vscode.Uri, newUri: vscode.Uri): Thenable<vscode.FileStat> {
return this._delegate.move(oldUri, newUri).then(stat => FileSystemProviderShim._modernizeFileStat(stat));
}
readDirectory(resource: vscode.Uri): Thenable<[string, vscode.FileStat2][]> {
readDirectory(resource: vscode.Uri): Thenable<[string, vscode.FileStat][]> {
return this._delegate.readdir(resource).then(tuples => {
return tuples.map(tuple => <[string, vscode.FileStat2]>[path.posix.basename(tuple[0].path), FileSystemProviderShim._modernizeFileStat(tuple[1])]);
return tuples.map(tuple => <[string, vscode.FileStat]>[path.posix.basename(tuple[0].path), FileSystemProviderShim._modernizeFileStat(tuple[1])]);
});
}
private static _modernizeFileStat(stat: vscode.DeprecatedFileStat): vscode.FileStat2 {
private static _modernizeFileStat(stat: vscode.DeprecatedFileStat): vscode.FileStat {
let { mtime, size, type } = stat;
let isFile = false;
let isDirectory = false;
......@@ -97,13 +95,13 @@ class FileSystemProviderShim implements vscode.FileSystemProvider2 {
// no support for bitmask, effectively no support for symlinks
switch (type) {
case FileType.Dir:
case DeprecatedFileType.Dir:
isDirectory = true;
break;
case FileType.File:
case DeprecatedFileType.File:
isFile = true;
break;
case FileType.Symlink:
case DeprecatedFileType.Symlink:
isSymbolicLink = true;
break;
}
......@@ -112,16 +110,16 @@ class FileSystemProviderShim implements vscode.FileSystemProvider2 {
private static _modernizeFileChange(e: vscode.DeprecatedFileChange): vscode.FileChangeEvent {
let { resource, type } = e;
let newType: vscode.FileChangeType2;
let newType: vscode.FileChangeType;
switch (type) {
case FileChangeType.Updated:
newType = FileChangeType2.Changed;
case DeprecatedFileChangeType.Updated:
newType = FileChangeType.Changed;
break;
case FileChangeType.Added:
newType = FileChangeType2.Created;
case DeprecatedFileChangeType.Added:
newType = FileChangeType.Created;
break;
case FileChangeType.Deleted:
newType = FileChangeType2.Deleted;
case DeprecatedFileChangeType.Deleted:
newType = FileChangeType.Deleted;
break;
}
......@@ -132,14 +130,14 @@ class FileSystemProviderShim implements vscode.FileSystemProvider2 {
delete(resource: vscode.Uri): Thenable<void> {
return this._delegate.stat(resource).then(stat => {
if (stat.type === FileType.Dir) {
if (stat.type === DeprecatedFileType.Dir) {
return this._delegate.rmdir(resource);
} else {
return this._delegate.unlink(resource);
}
});
}
createDirectory(resource: vscode.Uri): Thenable<vscode.FileStat2> {
createDirectory(resource: vscode.Uri): Thenable<vscode.FileStat> {
return this._delegate.mkdir(resource).then(stat => FileSystemProviderShim._modernizeFileStat(stat));
}
......@@ -165,7 +163,7 @@ export class ExtHostFileSystem implements ExtHostFileSystemShape {
private readonly _proxy: MainThreadFileSystemShape;
private readonly _linkProvider = new FsLinkProvider();
private readonly _fsProvider = new Map<number, vscode.FileSystemProvider2>();
private readonly _fsProvider = new Map<number, vscode.FileSystemProvider>();
private readonly _usedSchemes = new Set<string>();
private readonly _watches = new Map<number, IDisposable>();
......@@ -187,20 +185,10 @@ export class ExtHostFileSystem implements ExtHostFileSystemShape {
}
registerDeprecatedFileSystemProvider(scheme: string, provider: vscode.DeprecatedFileSystemProvider) {
return this.registerFileSystemProvider2(scheme, new FileSystemProviderShim(provider), { isCaseSensitive: false });
}
registerFileSystemProvider(scheme: string, provider: vscode.DeprecatedFileSystemProvider, newProvider: vscode.FileSystemProvider2) {
if (newProvider && newProvider._version === 9) {
return this.registerFileSystemProvider2(scheme, newProvider, { isCaseSensitive: false });
} else if (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');
}
return this.registerFileSystemProvider(scheme, new FileSystemProviderShim(provider), { isCaseSensitive: false });
}
registerFileSystemProvider2(scheme: string, provider: vscode.FileSystemProvider2, options: { isCaseSensitive?: boolean }) {
registerFileSystemProvider(scheme: string, provider: vscode.FileSystemProvider, options: { isCaseSensitive?: boolean }) {
if (this._usedSchemes.has(scheme)) {
throw new Error(`a provider for the scheme '${scheme}' is already registered`);
......@@ -231,13 +219,13 @@ export class ExtHostFileSystem implements ExtHostFileSystemShape {
}
let newType: files.FileChangeType;
switch (type) {
case FileChangeType2.Changed:
case FileChangeType.Changed:
newType = files.FileChangeType.UPDATED;
break;
case FileChangeType2.Created:
case FileChangeType.Created:
newType = files.FileChangeType.ADDED;
break;
case FileChangeType2.Deleted:
case FileChangeType.Deleted:
newType = files.FileChangeType.DELETED;
break;
}
......
......@@ -1846,19 +1846,19 @@ export enum LogLevel {
//#region file api
// todo@remote
export enum FileChangeType {
export enum DeprecatedFileChangeType {
Updated = 0,
Added = 1,
Deleted = 2
}
export enum FileChangeType2 {
export enum FileChangeType {
Changed = 1,
Created = 2,
Deleted = 3,
}
export enum FileType {
export enum DeprecatedFileType {
File = 0,
Dir = 1,
Symlink = 2
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册