Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
e7235916
V
vscode
项目概览
xxadev
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
e7235916
编写于
12月 18, 2019
作者:
B
Benjamin Pasero
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
file service - add event for listening to capability changes
上级
286539c1
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
46 addition
and
11 deletion
+46
-11
src/vs/platform/files/common/fileService.ts
src/vs/platform/files/common/fileService.ts
+9
-5
src/vs/platform/files/common/files.ts
src/vs/platform/files/common/files.ts
+9
-0
src/vs/platform/files/test/browser/fileService.test.ts
src/vs/platform/files/test/browser/fileService.test.ts
+16
-3
src/vs/platform/files/test/common/nullFileSystemProvider.ts
src/vs/platform/files/test/common/nullFileSystemProvider.ts
+11
-3
src/vs/workbench/test/workbenchTestServices.ts
src/vs/workbench/test/workbenchTestServices.ts
+1
-0
未找到文件。
src/vs/platform/files/common/fileService.ts
浏览文件 @
e7235916
...
...
@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import
{
Disposable
,
IDisposable
,
toDisposable
,
dispose
,
DisposableStore
}
from
'
vs/base/common/lifecycle
'
;
import
{
IFileService
,
IResolveFileOptions
,
FileChangesEvent
,
FileOperationEvent
,
IFileSystemProviderRegistrationEvent
,
IFileSystemProvider
,
IFileStat
,
IResolveFileResult
,
ICreateFileOptions
,
IFileSystemProviderActivationEvent
,
FileOperationError
,
FileOperationResult
,
FileOperation
,
FileSystemProviderCapabilities
,
FileType
,
toFileSystemProviderErrorCode
,
FileSystemProviderErrorCode
,
IStat
,
IFileStatWithMetadata
,
IResolveMetadataFileOptions
,
etag
,
hasReadWriteCapability
,
hasFileFolderCopyCapability
,
hasOpenReadWriteCloseCapability
,
toFileOperationResult
,
IFileSystemProviderWithOpenReadWriteCloseCapability
,
IFileSystemProviderWithFileReadWriteCapability
,
IResolveFileResultWithMetadata
,
IWatchOptions
,
IWriteFileOptions
,
IReadFileOptions
,
IFileStreamContent
,
IFileContent
,
ETAG_DISABLED
,
hasFileReadStreamCapability
,
IFileSystemProviderWithFileReadStreamCapability
,
ensureFileSystemProviderError
}
from
'
vs/platform/files/common/files
'
;
import
{
IFileService
,
IResolveFileOptions
,
FileChangesEvent
,
FileOperationEvent
,
IFileSystemProviderRegistrationEvent
,
IFileSystemProvider
,
IFileStat
,
IResolveFileResult
,
ICreateFileOptions
,
IFileSystemProviderActivationEvent
,
FileOperationError
,
FileOperationResult
,
FileOperation
,
FileSystemProviderCapabilities
,
FileType
,
toFileSystemProviderErrorCode
,
FileSystemProviderErrorCode
,
IStat
,
IFileStatWithMetadata
,
IResolveMetadataFileOptions
,
etag
,
hasReadWriteCapability
,
hasFileFolderCopyCapability
,
hasOpenReadWriteCloseCapability
,
toFileOperationResult
,
IFileSystemProviderWithOpenReadWriteCloseCapability
,
IFileSystemProviderWithFileReadWriteCapability
,
IResolveFileResultWithMetadata
,
IWatchOptions
,
IWriteFileOptions
,
IReadFileOptions
,
IFileStreamContent
,
IFileContent
,
ETAG_DISABLED
,
hasFileReadStreamCapability
,
IFileSystemProviderWithFileReadStreamCapability
,
ensureFileSystemProviderError
,
IFileSystemProviderCapabilitiesChangeEvent
}
from
'
vs/platform/files/common/files
'
;
import
{
URI
}
from
'
vs/base/common/uri
'
;
import
{
Event
,
Emitter
}
from
'
vs/base/common/event
'
;
import
{
isAbsolutePath
,
dirname
,
basename
,
joinPath
,
isEqual
,
isEqualOrParent
}
from
'
vs/base/common/resources
'
;
...
...
@@ -33,11 +33,14 @@ export class FileService extends Disposable implements IFileService {
//#region File System Provider
private
_onDidChangeFileSystemProviderRegistrations
:
Emitter
<
IFileSystemProviderRegistrationEvent
>
=
this
.
_register
(
new
Emitter
<
IFileSystemProviderRegistrationEvent
>
());
readonly
onDidChangeFileSystemProviderRegistrations
:
Event
<
IFileSystemProviderRegistrationEvent
>
=
this
.
_onDidChangeFileSystemProviderRegistrations
.
event
;
private
_onDidChangeFileSystemProviderRegistrations
=
this
.
_register
(
new
Emitter
<
IFileSystemProviderRegistrationEvent
>
());
readonly
onDidChangeFileSystemProviderRegistrations
=
this
.
_onDidChangeFileSystemProviderRegistrations
.
event
;
private
_onWillActivateFileSystemProvider
:
Emitter
<
IFileSystemProviderActivationEvent
>
=
this
.
_register
(
new
Emitter
<
IFileSystemProviderActivationEvent
>
());
readonly
onWillActivateFileSystemProvider
:
Event
<
IFileSystemProviderActivationEvent
>
=
this
.
_onWillActivateFileSystemProvider
.
event
;
private
_onWillActivateFileSystemProvider
=
this
.
_register
(
new
Emitter
<
IFileSystemProviderActivationEvent
>
());
readonly
onWillActivateFileSystemProvider
=
this
.
_onWillActivateFileSystemProvider
.
event
;
private
_onDidChangeFileSystemProviderCapabilities
=
this
.
_register
(
new
Emitter
<
IFileSystemProviderCapabilitiesChangeEvent
>
());
readonly
onDidChangeFileSystemProviderCapabilities
=
this
.
_onDidChangeFileSystemProviderCapabilities
.
event
;
private
readonly
provider
=
new
Map
<
string
,
IFileSystemProvider
>
();
...
...
@@ -53,6 +56,7 @@ export class FileService extends Disposable implements IFileService {
// Forward events from provider
const
providerDisposables
=
new
DisposableStore
();
providerDisposables
.
add
(
provider
.
onDidChangeFile
(
changes
=>
this
.
_onFileChanges
.
fire
(
new
FileChangesEvent
(
changes
))));
providerDisposables
.
add
(
provider
.
onDidChangeCapabilities
(()
=>
this
.
_onDidChangeFileSystemProviderCapabilities
.
fire
({
provider
})));
if
(
typeof
provider
.
onDidErrorOccur
===
'
function
'
)
{
providerDisposables
.
add
(
provider
.
onDidErrorOccur
(
error
=>
this
.
_onError
.
fire
(
new
Error
(
error
))));
}
...
...
src/vs/platform/files/common/files.ts
浏览文件 @
e7235916
...
...
@@ -28,6 +28,11 @@ export interface IFileService {
*/
readonly
onDidChangeFileSystemProviderRegistrations
:
Event
<
IFileSystemProviderRegistrationEvent
>
;
/**
* An even that is fired when a registered file system provider changes it's capabilities.
*/
readonly
onDidChangeFileSystemProviderCapabilities
:
Event
<
IFileSystemProviderCapabilitiesChangeEvent
>
;
/**
* An event that is fired when a file system provider is about to be activated. Listeners
* can join this event with a long running promise to help in the activation process.
...
...
@@ -409,6 +414,10 @@ export interface IFileSystemProviderRegistrationEvent {
provider
?:
IFileSystemProvider
;
}
export
interface
IFileSystemProviderCapabilitiesChangeEvent
{
provider
:
IFileSystemProvider
;
}
export
interface
IFileSystemProviderActivationEvent
{
scheme
:
string
;
join
(
promise
:
Promise
<
void
>
):
void
;
...
...
src/vs/platform/files/test/browser/fileService.test.ts
浏览文件 @
e7235916
...
...
@@ -6,7 +6,7 @@
import
*
as
assert
from
'
assert
'
;
import
{
FileService
}
from
'
vs/platform/files/common/fileService
'
;
import
{
URI
}
from
'
vs/base/common/uri
'
;
import
{
IFileSystemProviderRegistrationEvent
,
FileSystemProviderCapabilities
}
from
'
vs/platform/files/common/files
'
;
import
{
IFileSystemProviderRegistrationEvent
,
FileSystemProviderCapabilities
,
IFileSystemProviderCapabilitiesChangeEvent
}
from
'
vs/platform/files/common/files
'
;
import
{
IDisposable
,
toDisposable
}
from
'
vs/base/common/lifecycle
'
;
import
{
NullLogService
}
from
'
vs/platform/log/common/log
'
;
import
{
timeout
}
from
'
vs/base/common/async
'
;
...
...
@@ -17,6 +17,7 @@ suite('File Service', () => {
test
(
'
provider registration
'
,
async
()
=>
{
const
service
=
new
FileService
(
new
NullLogService
());
const
resource
=
URI
.
parse
(
'
test://foo/bar
'
);
const
provider
=
new
NullFileSystemProvider
();
assert
.
equal
(
service
.
canHandleResource
(
resource
),
false
);
...
...
@@ -25,6 +26,11 @@ suite('File Service', () => {
registrations
.
push
(
e
);
});
const
capabilityChanges
:
IFileSystemProviderCapabilitiesChangeEvent
[]
=
[];
service
.
onDidChangeFileSystemProviderCapabilities
(
e
=>
{
capabilityChanges
.
push
(
e
);
});
let
registrationDisposable
:
IDisposable
|
undefined
=
undefined
;
let
callCount
=
0
;
service
.
onWillActivateFileSystemProvider
(
e
=>
{
...
...
@@ -32,7 +38,7 @@ suite('File Service', () => {
if
(
e
.
scheme
===
'
test
'
&&
callCount
===
1
)
{
e
.
join
(
new
Promise
(
resolve
=>
{
registrationDisposable
=
service
.
registerProvider
(
'
test
'
,
new
NullFileSystemProvider
()
);
registrationDisposable
=
service
.
registerProvider
(
'
test
'
,
provider
);
resolve
();
}));
...
...
@@ -48,6 +54,13 @@ suite('File Service', () => {
assert
.
equal
(
registrations
[
0
].
added
,
true
);
assert
.
ok
(
registrationDisposable
);
assert
.
equal
(
capabilityChanges
.
length
,
0
);
provider
.
setCapabilities
(
FileSystemProviderCapabilities
.
FileFolderCopy
);
assert
.
equal
(
capabilityChanges
.
length
,
1
);
provider
.
setCapabilities
(
FileSystemProviderCapabilities
.
Readonly
);
assert
.
equal
(
capabilityChanges
.
length
,
2
);
await
service
.
activateProvider
(
'
test
'
);
assert
.
equal
(
callCount
,
2
);
// activation is called again
...
...
@@ -109,4 +122,4 @@ suite('File Service', () => {
watcher3Disposable2
.
dispose
();
assert
.
equal
(
disposeCounter
,
2
);
});
});
\ No newline at end of file
});
src/vs/platform/files/test/common/nullFileSystemProvider.ts
浏览文件 @
e7235916
...
...
@@ -6,14 +6,22 @@
import
{
URI
}
from
'
vs/base/common/uri
'
;
import
{
FileSystemProviderCapabilities
,
IFileSystemProvider
,
IWatchOptions
,
IStat
,
FileType
,
FileDeleteOptions
,
FileOverwriteOptions
,
FileWriteOptions
,
FileOpenOptions
,
IFileChange
}
from
'
vs/platform/files/common/files
'
;
import
{
IDisposable
,
Disposable
}
from
'
vs/base/common/lifecycle
'
;
import
{
Event
}
from
'
vs/base/common/event
'
;
import
{
E
mitter
,
E
vent
}
from
'
vs/base/common/event
'
;
export
class
NullFileSystemProvider
implements
IFileSystemProvider
{
capabilities
:
FileSystemProviderCapabilities
=
FileSystemProviderCapabilities
.
Readonly
;
onDidChangeCapabilities
:
Event
<
void
>
=
Event
.
None
;
onDidChangeFile
:
Event
<
readonly
IFileChange
[]
>
=
Event
.
None
;
private
readonly
_onDidChangeCapabilities
=
new
Emitter
<
void
>
();
readonly
onDidChangeCapabilities
:
Event
<
void
>
=
this
.
_onDidChangeCapabilities
.
event
;
setCapabilities
(
capabilities
:
FileSystemProviderCapabilities
):
void
{
this
.
capabilities
=
capabilities
;
this
.
_onDidChangeCapabilities
.
fire
();
}
readonly
onDidChangeFile
:
Event
<
readonly
IFileChange
[]
>
=
Event
.
None
;
constructor
(
private
disposableFactory
:
()
=>
IDisposable
=
()
=>
Disposable
.
None
)
{
}
...
...
src/vs/workbench/test/workbenchTestServices.ts
浏览文件 @
e7235916
...
...
@@ -966,6 +966,7 @@ export class TestFileService implements IFileService {
private
readonly
_onAfterOperation
:
Emitter
<
FileOperationEvent
>
;
readonly
onWillActivateFileSystemProvider
=
Event
.
None
;
readonly
onDidChangeFileSystemProviderCapabilities
=
Event
.
None
;
readonly
onError
:
Event
<
Error
>
=
Event
.
None
;
private
content
=
'
Hello Html
'
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录