Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
eb376d23
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,发现更多精彩内容 >>
提交
eb376d23
编写于
10月 22, 2020
作者:
J
Johannes Rieken
提交者:
GitHub
10月 22, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add CompletionItemModel#durations, #109167
上级
f8391ef9
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
25 addition
and
7 deletion
+25
-7
src/vs/editor/contrib/suggest/suggest.ts
src/vs/editor/contrib/suggest/suggest.ts
+25
-7
未找到文件。
src/vs/editor/contrib/suggest/suggest.ts
浏览文件 @
eb376d23
...
...
@@ -17,6 +17,7 @@ import { FuzzyScore } from 'vs/base/common/filters';
import
{
isDisposable
,
DisposableStore
,
IDisposable
}
from
'
vs/base/common/lifecycle
'
;
import
{
MenuId
}
from
'
vs/platform/actions/common/actions
'
;
import
{
SnippetParser
}
from
'
vs/editor/contrib/snippet/snippetParser
'
;
import
{
StopWatch
}
from
'
vs/base/common/stopwatch
'
;
export
const
Context
=
{
Visible
:
new
RawContextKey
<
boolean
>
(
'
suggestWidgetVisible
'
,
false
),
...
...
@@ -164,10 +165,22 @@ export function setSnippetSuggestSupport(support: modes.CompletionItemProvider):
return
old
;
}
class
CompletionItemModel
{
export
interface
CompletionDurationEntry
{
readonly
provider
:
modes
.
CompletionItemProvider
;
readonly
elapsedProvider
:
number
;
readonly
elapsedOverall
:
number
;
}
export
interface
CompletionDurations
{
readonly
entries
:
readonly
CompletionDurationEntry
[];
readonly
elapsed
:
number
;
}
export
class
CompletionItemModel
{
constructor
(
readonly
items
:
CompletionItem
[],
readonly
needsClipboard
:
boolean
,
readonly
durations
:
CompletionDurations
,
readonly
disposable
:
IDisposable
,
)
{
}
}
...
...
@@ -180,7 +193,7 @@ export async function provideSuggestionItems(
token
:
CancellationToken
=
CancellationToken
.
None
):
Promise
<
CompletionItemModel
>
{
// const t1 = Date.now(
);
const
sw
=
new
StopWatch
(
true
);
position
=
position
.
clone
();
const
word
=
model
.
getWordAtPosition
(
position
);
...
...
@@ -189,9 +202,10 @@ export async function provideSuggestionItems(
const
result
:
CompletionItem
[]
=
[];
const
disposables
=
new
DisposableStore
();
const
durations
:
CompletionDurationEntry
[]
=
[];
let
needsClipboard
=
false
;
const
onCompletionList
=
(
provider
:
modes
.
CompletionItemProvider
,
container
:
modes
.
CompletionList
|
null
|
undefined
)
=>
{
const
onCompletionList
=
(
provider
:
modes
.
CompletionItemProvider
,
container
:
modes
.
CompletionList
|
null
|
undefined
,
sw
:
StopWatch
)
=>
{
if
(
!
container
)
{
return
;
}
...
...
@@ -214,6 +228,7 @@ export async function provideSuggestionItems(
if
(
isDisposable
(
container
))
{
disposables
.
add
(
container
);
}
durations
.
push
({
provider
,
elapsedProvider
:
container
.
duration
??
-
1
,
elapsedOverall
:
sw
.
elapsed
()
});
};
// ask for snippets in parallel to asking "real" providers. Only do something if configured to
...
...
@@ -225,8 +240,9 @@ export async function provideSuggestionItems(
if
(
options
.
providerFilter
.
size
>
0
&&
!
options
.
providerFilter
.
has
(
_snippetSuggestSupport
))
{
return
;
}
const
sw
=
new
StopWatch
(
true
);
const
list
=
await
_snippetSuggestSupport
.
provideCompletionItems
(
model
,
position
,
context
,
token
);
onCompletionList
(
_snippetSuggestSupport
,
list
);
onCompletionList
(
_snippetSuggestSupport
,
list
,
sw
);
})();
// add suggestions from contributed providers - providers are ordered in groups of
...
...
@@ -242,8 +258,9 @@ export async function provideSuggestionItems(
return
;
}
try
{
const
sw
=
new
StopWatch
(
true
);
const
list
=
await
provider
.
provideCompletionItems
(
model
,
position
,
context
,
token
);
onCompletionList
(
provider
,
list
);
onCompletionList
(
provider
,
list
,
sw
);
}
catch
(
err
)
{
onUnexpectedExternalError
(
err
);
}
...
...
@@ -260,11 +277,12 @@ export async function provideSuggestionItems(
disposables
.
dispose
();
return
Promise
.
reject
<
any
>
(
canceled
());
}
// console.log(`${result.length} items AFTER ${Date.now() - t1}ms`);
return
new
CompletionItemModel
(
result
.
sort
(
getSuggestionComparator
(
options
.
snippetSortOrder
)),
needsClipboard
,
disposables
{
entries
:
durations
,
elapsed
:
sw
.
elapsed
()
},
disposables
,
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录