Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
a64ca747
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,发现更多精彩内容 >>
提交
a64ca747
编写于
10月 18, 2019
作者:
M
Matt Bierner
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Merge multiple triggers for parameter hints instead of always using latest
Fixes #82825
上级
34e6f94a
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
78 addition
and
8 deletion
+78
-8
src/vs/editor/contrib/parameterHints/parameterHintsModel.ts
src/vs/editor/contrib/parameterHints/parameterHintsModel.ts
+41
-8
src/vs/editor/contrib/parameterHints/test/parameterHintsModel.test.ts
...r/contrib/parameterHints/test/parameterHintsModel.test.ts
+37
-0
未找到文件。
src/vs/editor/contrib/parameterHints/parameterHintsModel.ts
浏览文件 @
a64ca747
...
...
@@ -55,6 +55,7 @@ export class ParameterHintsModel extends Disposable {
private
readonly
editor
:
ICodeEditor
;
private
triggerOnType
=
false
;
private
_state
:
ParameterHintState
.
State
=
ParameterHintState
.
Default
;
private
_pendingTriggers
:
TriggerContext
[]
=
[];
private
readonly
_lastSignatureHelpResult
=
this
.
_register
(
new
MutableDisposable
<
modes
.
SignatureHelpResult
>
());
private
triggerChars
=
new
CharacterSet
();
private
retriggerChars
=
new
CharacterSet
();
...
...
@@ -109,13 +110,12 @@ export class ParameterHintsModel extends Disposable {
}
const
triggerId
=
++
this
.
triggerId
;
this
.
throttledDelayer
.
trigger
(
()
=>
this
.
doTrigger
({
triggerKind
:
context
.
triggerKind
,
triggerCharacter
:
context
.
triggerCharacter
,
isRetrigger
:
this
.
state
.
type
===
ParameterHintState
.
Type
.
Active
||
this
.
state
.
type
===
ParameterHintState
.
Type
.
Pending
,
activeSignatureHelp
:
this
.
state
.
type
===
ParameterHintState
.
Type
.
Active
?
this
.
state
.
hints
:
undefined
},
triggerId
),
delay
).
then
(
undefined
,
onUnexpectedError
);
this
.
_pendingTriggers
.
push
(
context
);
this
.
throttledDelayer
.
trigger
(()
=>
{
return
this
.
doTrigger
(
triggerId
);
},
delay
)
.
catch
(
onUnexpectedError
);
}
public
next
():
void
{
...
...
@@ -165,9 +165,26 @@ export class ParameterHintsModel extends Disposable {
this
.
_onChangedHints
.
fire
(
this
.
state
.
hints
);
}
private
doTrigger
(
triggerContext
:
modes
.
SignatureHelpContext
,
triggerId
:
number
):
Promise
<
boolean
>
{
private
doTrigger
(
triggerId
:
number
):
Promise
<
boolean
>
{
const
isRetrigger
=
this
.
state
.
type
===
ParameterHintState
.
Type
.
Active
||
this
.
state
.
type
===
ParameterHintState
.
Type
.
Pending
;
const
activeSignatureHelp
=
this
.
state
.
type
===
ParameterHintState
.
Type
.
Active
?
this
.
state
.
hints
:
undefined
;
this
.
cancel
(
true
);
if
(
this
.
_pendingTriggers
.
length
===
0
)
{
return
Promise
.
resolve
(
false
);
}
const
context
:
TriggerContext
=
this
.
_pendingTriggers
.
reduce
(
mergeTriggerContexts
);
this
.
_pendingTriggers
=
[];
const
triggerContext
=
{
triggerKind
:
context
.
triggerKind
,
triggerCharacter
:
context
.
triggerCharacter
,
isRetrigger
:
isRetrigger
,
activeSignatureHelp
:
activeSignatureHelp
};
if
(
!
this
.
editor
.
hasModel
())
{
return
Promise
.
resolve
(
false
);
}
...
...
@@ -284,3 +301,19 @@ export class ParameterHintsModel extends Disposable {
super
.
dispose
();
}
}
function
mergeTriggerContexts
(
previous
:
TriggerContext
,
current
:
TriggerContext
)
{
switch
(
current
.
triggerKind
)
{
case
modes
.
SignatureHelpTriggerKind
.
Invoke
:
// Invoke overrides previous triggers.
return
current
;
case
modes
.
SignatureHelpTriggerKind
.
ContentChange
:
// Ignore content changes triggers
return
previous
;
case
modes
.
SignatureHelpTriggerKind
.
TriggerCharacter
:
default
:
return
current
;
}
}
src/vs/editor/contrib/parameterHints/test/parameterHintsModel.test.ts
浏览文件 @
a64ca747
...
...
@@ -425,6 +425,43 @@ suite('ParameterHintsModel', () => {
assert
.
strictEqual
(
secondHint
.
activeSignature
,
1
);
assert
.
strictEqual
(
secondHint
.
signatures
[
0
].
parameters
[
0
].
label
,
paramterLabel
);
});
test
(
'
Quick typing should use the first trigger character
'
,
async
()
=>
{
const
editor
=
createMockEditor
(
''
);
const
model
=
new
ParameterHintsModel
(
editor
,
50
);
disposables
.
add
(
model
);
const
triggerCharacter
=
'
a
'
;
let
invokeCount
=
0
;
disposables
.
add
(
modes
.
SignatureHelpProviderRegistry
.
register
(
mockFileSelector
,
new
class
implements
modes
.
SignatureHelpProvider
{
signatureHelpTriggerCharacters
=
[
triggerCharacter
];
signatureHelpRetriggerCharacters
=
[];
provideSignatureHelp
(
_model
:
ITextModel
,
_position
:
Position
,
_token
:
CancellationToken
,
context
:
modes
.
SignatureHelpContext
):
modes
.
SignatureHelpResult
|
Promise
<
modes
.
SignatureHelpResult
>
{
try
{
++
invokeCount
;
if
(
invokeCount
===
1
)
{
assert
.
strictEqual
(
context
.
triggerKind
,
modes
.
SignatureHelpTriggerKind
.
TriggerCharacter
);
assert
.
strictEqual
(
context
.
triggerCharacter
,
triggerCharacter
);
}
else
{
assert
.
fail
(
'
Unexpected invoke
'
);
}
return
emptySigHelpResult
;
}
catch
(
err
)
{
console
.
error
(
err
);
throw
err
;
}
}
}));
editor
.
trigger
(
'
keyboard
'
,
Handler
.
Type
,
{
text
:
triggerCharacter
});
editor
.
trigger
(
'
keyboard
'
,
Handler
.
Type
,
{
text
:
'
x
'
});
await
getNextHint
(
model
);
});
});
function
getNextHint
(
model
:
ParameterHintsModel
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录