Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
73ee03ed
V
vscode
项目概览
掘金者说
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
73ee03ed
编写于
1月 11, 2018
作者:
J
Johannes Rieken
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
remote - sketch up find in files logic
上级
44d1ccf8
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
83 addition
and
32 deletion
+83
-32
src/vs/vscode.proposed.d.ts
src/vs/vscode.proposed.d.ts
+7
-0
src/vs/workbench/api/electron-browser/mainThreadFileSystem.ts
...vs/workbench/api/electron-browser/mainThreadFileSystem.ts
+51
-30
src/vs/workbench/api/node/extHost.protocol.ts
src/vs/workbench/api/node/extHost.protocol.ts
+3
-1
src/vs/workbench/api/node/extHostFileSystem.ts
src/vs/workbench/api/node/extHostFileSystem.ts
+22
-1
未找到文件。
src/vs/vscode.proposed.d.ts
浏览文件 @
73ee03ed
...
...
@@ -83,6 +83,12 @@ declare module 'vscode' {
type
:
FileType
;
}
export
interface
FindMatch
{
uri
:
Uri
;
range
:
Range
;
preview
:
{
leading
:
string
,
matching
:
string
,
trailing
:
string
};
}
// todo@joh discover files etc
// todo@joh CancellationToken everywhere
export
interface
FileSystemProvider
{
...
...
@@ -131,6 +137,7 @@ declare module 'vscode' {
// find files by names
findFiles
?(
query
:
string
,
progress
:
Progress
<
Uri
>
,
token
:
CancellationToken
):
Thenable
<
void
>
;
findInFiles
?(
query
:
string
,
isRegex
:
boolean
,
progress
:
Progress
<
FindMatch
>
,
token
:
CancellationToken
):
Thenable
<
void
>
;
}
export
namespace
workspace
{
...
...
src/vs/workbench/api/electron-browser/mainThreadFileSystem.ts
浏览文件 @
73ee03ed
...
...
@@ -12,9 +12,10 @@ import { IDisposable, dispose } from 'vs/base/common/lifecycle';
import
Event
,
{
Emitter
}
from
'
vs/base/common/event
'
;
import
{
extHostNamedCustomer
}
from
'
vs/workbench/api/electron-browser/extHostCustomers
'
;
import
{
IProgress
}
from
'
vs/platform/progress/common/progress
'
;
import
{
ISearchResultProvider
,
ISearchQuery
,
ISearchComplete
,
ISearchProgressItem
,
QueryType
,
IFileMatch
,
ISearchService
}
from
'
vs/platform/search/common/search
'
;
import
{
ISearchResultProvider
,
ISearchQuery
,
ISearchComplete
,
ISearchProgressItem
,
QueryType
,
IFileMatch
,
ISearchService
,
ILineMatch
}
from
'
vs/platform/search/common/search
'
;
import
{
IWorkspaceEditingService
}
from
'
vs/workbench/services/workspace/common/workspaceEditing
'
;
import
{
onUnexpectedError
}
from
'
vs/base/common/errors
'
;
import
{
values
}
from
'
vs/base/common/map
'
;
@
extHostNamedCustomer
(
MainContext
.
MainThreadFileSystem
)
export
class
MainThreadFileSystem
implements
MainThreadFileSystemShape
{
...
...
@@ -59,8 +60,8 @@ export class MainThreadFileSystem implements MainThreadFileSystemShape {
// --- search
$handle
DidFindFile
(
handle
:
number
,
session
:
number
,
data
:
UriComponents
):
void
{
this
.
_provider
.
get
(
handle
).
han
elDidFindFile
(
session
,
URI
.
revive
(
data
)
);
$handle
FindMatch
(
handle
:
number
,
session
,
data
:
UriComponents
|
[
UriComponents
,
ILineMatch
]
):
void
{
this
.
_provider
.
get
(
handle
).
han
dleFindMatch
(
session
,
data
);
}
}
...
...
@@ -76,11 +77,25 @@ class FileReadOperation {
}
}
class
SearchOperation
{
private
static
_idPool
=
0
;
constructor
(
readonly
progress
:
(
match
:
IFileMatch
)
=>
any
,
readonly
id
:
number
=
++
SearchOperation
.
_idPool
,
readonly
matches
=
new
Map
<
string
,
IFileMatch
>
()
)
{
//
}
}
class
RemoteFileSystemProvider
implements
IFileSystemProvider
,
ISearchResultProvider
{
private
readonly
_onDidChange
=
new
Emitter
<
IFileChange
[]
>
();
private
readonly
_reads
=
new
Map
<
number
,
FileReadOperation
>
();
private
readonly
_registrations
:
IDisposable
[];
private
readonly
_reads
=
new
Map
<
number
,
FileReadOperation
>
();
private
readonly
_searches
=
new
Map
<
number
,
SearchOperation
>
();
readonly
onDidChange
:
Event
<
IFileChange
[]
>
=
this
.
_onDidChange
.
event
;
...
...
@@ -149,38 +164,44 @@ class RemoteFileSystemProvider implements IFileSystemProvider, ISearchResultProv
// --- search
private
_searches
=
new
Map
<
number
,
(
resource
:
URI
)
=>
void
>
();
private
_searchesIdPool
=
0
;
search
(
query
:
ISearchQuery
):
PPromise
<
ISearchComplete
,
ISearchProgressItem
>
{
if
(
query
.
type
===
QueryType
.
Text
)
{
return
PPromise
.
as
<
ISearchComplete
>
({
results
:
[],
stats
:
undefined
});
}
else
{
return
this
.
_findFiles
(
query
);
}
}
private
_findFiles
(
query
:
ISearchQuery
):
PPromise
<
ISearchComplete
,
ISearchProgressItem
>
{
const
id
=
++
this
.
_searchesIdPool
;
const
matches
:
IFileMatch
[]
=
[];
return
new
PPromise
((
resolve
,
reject
,
report
)
=>
{
this
.
_proxy
.
$findFiles
(
this
.
_handle
,
id
,
query
.
filePattern
).
then
(()
=>
{
this
.
_searches
.
delete
(
id
);
resolve
({
results
:
matches
,
stats
:
undefined
});
},
reject
);
this
.
_searches
.
set
(
id
,
resource
=>
{
const
match
:
IFileMatch
=
{
resource
};
matches
.
push
(
match
);
report
(
match
);
const
search
=
new
SearchOperation
(
report
);
this
.
_searches
.
set
(
search
.
id
,
search
);
const
promise
=
query
.
type
===
QueryType
.
File
?
this
.
_proxy
.
$findFiles
(
this
.
_handle
,
search
.
id
,
query
.
filePattern
)
:
this
.
_proxy
.
$findInFiles
(
this
.
_handle
,
search
.
id
,
query
.
contentPattern
);
promise
.
then
(()
=>
{
this
.
_searches
.
delete
(
search
.
id
);
resolve
(({
results
:
values
(
search
.
matches
),
stats
:
undefined
}));
},
err
=>
{
this
.
_searches
.
delete
(
search
.
id
);
reject
(
err
);
});
});
}
hanelDidFindFile
(
session
:
number
,
resource
:
URI
):
void
{
this
.
_searches
.
get
(
session
)(
resource
);
handleFindMatch
(
session
:
number
,
dataOrUri
:
UriComponents
|
[
UriComponents
,
ILineMatch
]):
void
{
let
resource
:
URI
;
let
match
:
ILineMatch
;
if
(
Array
.
isArray
(
dataOrUri
))
{
resource
=
URI
.
revive
(
dataOrUri
[
0
]);
match
=
dataOrUri
[
1
];
}
else
{
resource
=
URI
.
revive
(
dataOrUri
);
}
const
{
matches
}
=
this
.
_searches
.
get
(
session
);
if
(
!
matches
.
has
(
resource
.
toString
()))
{
matches
.
set
(
resource
.
toString
(),
{
resource
,
lineMatches
:
[]
});
}
if
(
match
)
{
matches
.
get
(
resource
.
toString
()).
lineMatches
.
push
(
match
);
}
}
}
src/vs/workbench/api/node/extHost.protocol.ts
浏览文件 @
73ee03ed
...
...
@@ -53,6 +53,7 @@ import { ConfigurationScope } from 'vs/platform/configuration/common/configurati
import
{
ParsedArgs
}
from
'
vs/platform/environment/common/environment
'
;
import
{
CommentRule
,
CharacterPair
,
EnterAction
}
from
'
vs/editor/common/modes/languageConfiguration
'
;
import
{
EndOfLineSequence
,
ISingleEditOperation
}
from
'
vs/editor/common/model
'
;
import
{
ILineMatch
,
IPatternInfo
}
from
'
vs/platform/search/common/search
'
;
export
interface
IEnvironment
{
isExtensionDevelopmentDebug
:
boolean
;
...
...
@@ -373,7 +374,7 @@ export interface MainThreadFileSystemShape extends IDisposable {
$onFileSystemChange
(
handle
:
number
,
resource
:
IFileChange
[]):
void
;
$reportFileChunk
(
handle
:
number
,
session
:
number
,
chunk
:
number
[]
|
null
):
void
;
$handle
DidFindFile
(
handle
:
number
,
session
:
number
,
resource
:
UriComponents
):
void
;
$handle
FindMatch
(
handle
:
number
,
session
,
data
:
UriComponents
|
[
UriComponents
,
ILineMatch
]
):
void
;
}
export
interface
MainThreadTaskShape
extends
IDisposable
{
...
...
@@ -543,6 +544,7 @@ export interface ExtHostFileSystemShape {
$readdir
(
handle
:
number
,
resource
:
UriComponents
):
TPromise
<
[
UriComponents
,
IStat
][]
>
;
$rmdir
(
handle
:
number
,
resource
:
UriComponents
):
TPromise
<
void
>
;
$findFiles
(
handle
:
number
,
session
:
number
,
query
:
string
):
TPromise
<
void
>
;
$findInFiles
(
handle
:
number
,
session
:
number
,
pattern
:
IPatternInfo
):
TPromise
<
void
>
;
}
export
interface
ExtHostExtensionServiceShape
{
...
...
src/vs/workbench/api/node/extHostFileSystem.ts
浏览文件 @
73ee03ed
...
...
@@ -11,6 +11,7 @@ import * as vscode from 'vscode';
import
{
IStat
}
from
'
vs/platform/files/common/files
'
;
import
{
IDisposable
}
from
'
vs/base/common/lifecycle
'
;
import
{
asWinJsPromise
}
from
'
vs/base/common/async
'
;
import
{
IPatternInfo
}
from
'
vs/platform/search/common/search
'
;
export
class
ExtHostFileSystem
implements
ExtHostFileSystemShape
{
...
...
@@ -79,7 +80,27 @@ export class ExtHostFileSystem implements ExtHostFileSystemShape {
if
(
!
provider
.
findFiles
)
{
return
TPromise
.
as
(
undefined
);
}
const
progress
=
{
report
:
(
uri
)
=>
this
.
_proxy
.
$handleDidFindFile
(
handle
,
session
,
uri
)
};
const
progress
=
{
report
:
(
uri
)
=>
{
this
.
_proxy
.
$handleFindMatch
(
handle
,
session
,
uri
);
}
};
return
asWinJsPromise
(
token
=>
provider
.
findFiles
(
query
,
progress
,
token
));
}
$findInFiles
(
handle
:
number
,
session
:
number
,
pattern
:
IPatternInfo
):
TPromise
<
void
>
{
const
provider
=
this
.
_provider
.
get
(
handle
);
if
(
!
provider
.
findInFiles
)
{
return
TPromise
.
as
(
undefined
);
}
const
progress
=
{
report
:
(
data
:
vscode
.
FindMatch
)
=>
{
this
.
_proxy
.
$handleFindMatch
(
handle
,
session
,
[
data
.
uri
,
{
lineNumber
:
1
+
data
.
range
.
start
.
line
,
preview
:
data
.
preview
.
leading
+
data
.
preview
.
matching
+
data
.
preview
.
trailing
,
offsetAndLengths
:
[[
data
.
preview
.
leading
.
length
,
data
.
preview
.
matching
.
length
]]
}]);
}
};
return
asWinJsPromise
(
token
=>
provider
.
findInFiles
(
pattern
.
pattern
,
pattern
.
isRegExp
,
progress
,
token
));
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录