Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
168d2118
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,发现更多精彩内容 >>
提交
168d2118
编写于
8月 09, 2018
作者:
R
Rob Lourens
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Start removing TPromise.cancel from search -
#55883
上级
afec727a
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
18 addition
and
13 deletion
+18
-13
src/vs/workbench/services/search/node/rawSearchService.ts
src/vs/workbench/services/search/node/rawSearchService.ts
+18
-13
未找到文件。
src/vs/workbench/services/search/node/rawSearchService.ts
浏览文件 @
168d2118
...
...
@@ -21,6 +21,8 @@ import { Engine as TextSearchEngine } from 'vs/workbench/services/search/node/te
import
{
TextSearchWorkerProvider
}
from
'
vs/workbench/services/search/node/textSearchWorkerProvider
'
;
import
{
IFileSearchProgressItem
,
IRawFileMatch
,
IRawSearch
,
IRawSearchService
,
ISearchEngine
,
ISerializedFileMatch
,
ISerializedSearchComplete
,
ISerializedSearchProgressItem
,
ITelemetryEvent
,
ISerializedSearchSuccess
}
from
'
./search
'
;
import
{
Event
,
Emitter
}
from
'
vs/base/common/event
'
;
import
{
createCancelablePromise
,
CancelablePromise
}
from
'
vs/base/common/async
'
;
import
{
CancellationToken
}
from
'
vs/base/common/cancellation
'
;
gracefulFs
.
gracefulify
(
fs
);
...
...
@@ -55,12 +57,14 @@ export class SearchService implements IRawSearchService {
}
public
textSearch
(
config
:
IRawSearch
):
Event
<
ISerializedSearchProgressItem
|
ISerializedSearchComplete
>
{
let
promise
:
TPromise
<
ISerializedSearchSuccess
>
;
let
promise
:
CancelablePromise
<
void
>
;
const
emitter
=
new
Emitter
<
ISerializedSearchProgressItem
|
ISerializedSearchComplete
>
({
onFirstListenerDidAdd
:
()
=>
{
promise
=
(
config
.
useRipgrep
?
this
.
ripgrepTextSearch
(
config
,
p
=>
emitter
.
fire
(
p
))
:
this
.
legacyTextSearch
(
config
,
p
=>
emitter
.
fire
(
p
)))
.
then
(
c
=>
emitter
.
fire
(
c
),
err
=>
emitter
.
fire
({
type
:
'
error
'
,
error
:
{
message
:
err
.
message
,
stack
:
err
.
stack
}
}));
promise
=
createCancelablePromise
(
token
=>
{
return
(
config
.
useRipgrep
?
this
.
ripgrepTextSearch
(
config
,
p
=>
emitter
.
fire
(
p
),
token
)
:
this
.
legacyTextSearch
(
config
,
p
=>
emitter
.
fire
(
p
),
token
))
.
then
(
c
=>
emitter
.
fire
(
c
),
err
=>
emitter
.
fire
({
type
:
'
error
'
,
error
:
{
message
:
err
.
message
,
stack
:
err
.
stack
}
}));
});
},
onLastListenerRemove
:
()
=>
{
promise
.
cancel
();
...
...
@@ -70,11 +74,13 @@ export class SearchService implements IRawSearchService {
return
emitter
.
event
;
}
private
ripgrepTextSearch
(
config
:
IRawSearch
,
progressCallback
:
IProgressCallback
):
T
Promise
<
ISerializedSearchSuccess
>
{
private
ripgrepTextSearch
(
config
:
IRawSearch
,
progressCallback
:
IProgressCallback
,
token
:
CancellationToken
):
Promise
<
ISerializedSearchSuccess
>
{
config
.
maxFilesize
=
MAX_FILE_SIZE
;
let
engine
=
new
RipgrepEngine
(
config
);
return
new
TPromise
<
ISerializedSearchSuccess
>
((
c
,
e
)
=>
{
token
.
onCancellationRequested
(()
=>
engine
.
cancel
());
return
new
Promise
<
ISerializedSearchSuccess
>
((
c
,
e
)
=>
{
// Use BatchedCollector to get new results to the frontend every 2s at least, until 50 results have been returned
const
collector
=
new
BatchedCollector
<
ISerializedFileMatch
>
(
SearchService
.
BATCH_SIZE
,
progressCallback
);
engine
.
search
((
match
)
=>
{
...
...
@@ -90,12 +96,10 @@ export class SearchService implements IRawSearchService {
c
(
stats
);
}
});
},
()
=>
{
engine
.
cancel
();
});
}
private
legacyTextSearch
(
config
:
IRawSearch
,
progressCallback
:
IProgressCallback
):
T
Promise
<
ISerializedSearchComplete
>
{
private
legacyTextSearch
(
config
:
IRawSearch
,
progressCallback
:
IProgressCallback
,
token
:
CancellationToken
):
Promise
<
ISerializedSearchComplete
>
{
if
(
!
this
.
textSearchWorkerProvider
)
{
this
.
textSearchWorkerProvider
=
new
TextSearchWorkerProvider
();
}
...
...
@@ -113,7 +117,7 @@ export class SearchService implements IRawSearchService {
}),
this
.
textSearchWorkerProvider
);
return
this
.
doTextSearch
(
engine
,
progressCallback
,
SearchService
.
BATCH_SIZE
);
return
this
.
doTextSearch
(
engine
,
progressCallback
,
SearchService
.
BATCH_SIZE
,
token
);
}
doFileSearch
(
EngineClass
:
{
new
(
config
:
IRawSearch
):
ISearchEngine
<
IRawFileMatch
>
;
},
config
:
IRawSearch
,
progressCallback
:
IProgressCallback
,
batchSize
?:
number
):
TPromise
<
ISerializedSearchSuccess
>
{
...
...
@@ -241,6 +245,7 @@ export class SearchService implements IRawSearchService {
const
cached
=
this
.
getResultsFromCache
(
cache
,
config
.
filePattern
,
progressCallback
);
if
(
cached
)
{
let
chained
:
TPromise
<
void
>
;
return
new
TPromise
<
[
ISerializedSearchSuccess
,
IRawFileMatch
[]]
>
((
c
,
e
)
=>
{
chained
=
cached
.
then
(([
result
,
results
,
cacheStats
])
=>
{
const
cacheLookupResultTime
=
Date
.
now
();
...
...
@@ -361,8 +366,10 @@ export class SearchService implements IRawSearchService {
});
}
private
doTextSearch
(
engine
:
TextSearchEngine
,
progressCallback
:
IProgressCallback
,
batchSize
:
number
):
TPromise
<
ISerializedSearchSuccess
>
{
return
new
TPromise
<
ISerializedSearchSuccess
>
((
c
,
e
)
=>
{
private
doTextSearch
(
engine
:
TextSearchEngine
,
progressCallback
:
IProgressCallback
,
batchSize
:
number
,
token
:
CancellationToken
):
Promise
<
ISerializedSearchSuccess
>
{
token
.
onCancellationRequested
(()
=>
engine
.
cancel
());
return
new
Promise
<
ISerializedSearchSuccess
>
((
c
,
e
)
=>
{
// Use BatchedCollector to get new results to the frontend every 2s at least, until 50 results have been returned
const
collector
=
new
BatchedCollector
<
ISerializedFileMatch
>
(
batchSize
,
progressCallback
);
engine
.
search
((
matches
)
=>
{
...
...
@@ -379,8 +386,6 @@ export class SearchService implements IRawSearchService {
c
(
stats
);
}
});
},
()
=>
{
engine
.
cancel
();
});
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录