Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
8e91c0db
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,发现更多精彩内容 >>
未验证
提交
8e91c0db
编写于
6月 14, 2019
作者:
J
Johannes Rieken
提交者:
GitHub
6月 14, 2019
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #75461 from microsoft/dev/mjbvz/remote-heap-for-sig-help
Don't use heap service for signature help
上级
15b7c86d
50d38881
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
145 addition
and
71 deletion
+145
-71
src/vs/editor/common/modes.ts
src/vs/editor/common/modes.ts
+5
-1
src/vs/editor/contrib/parameterHints/parameterHintsModel.ts
src/vs/editor/contrib/parameterHints/parameterHintsModel.ts
+13
-5
src/vs/editor/contrib/parameterHints/provideSignatureHelp.ts
src/vs/editor/contrib/parameterHints/provideSignatureHelp.ts
+19
-5
src/vs/editor/contrib/parameterHints/test/parameterHintsModel.test.ts
...r/contrib/parameterHints/test/parameterHintsModel.test.ts
+55
-40
src/vs/monaco.d.ts
src/vs/monaco.d.ts
+5
-1
src/vs/workbench/api/browser/mainThreadLanguageFeatures.ts
src/vs/workbench/api/browser/mainThreadLanguageFeatures.ts
+11
-2
src/vs/workbench/api/common/extHost.protocol.ts
src/vs/workbench/api/common/extHost.protocol.ts
+16
-1
src/vs/workbench/api/common/extHostLanguageFeatures.ts
src/vs/workbench/api/common/extHostLanguageFeatures.ts
+18
-13
src/vs/workbench/api/node/extHost.api.impl.ts
src/vs/workbench/api/node/extHost.api.impl.ts
+1
-1
src/vs/workbench/test/electron-browser/api/extHostApiCommands.test.ts
...ench/test/electron-browser/api/extHostApiCommands.test.ts
+1
-1
src/vs/workbench/test/electron-browser/api/extHostLanguageFeatures.test.ts
...test/electron-browser/api/extHostLanguageFeatures.test.ts
+1
-1
未找到文件。
src/vs/editor/common/modes.ts
浏览文件 @
8e91c0db
...
...
@@ -628,6 +628,10 @@ export interface SignatureHelp {
activeParameter
:
number
;
}
export
interface
SignatureHelpResult
extends
IDisposable
{
value
:
SignatureHelp
;
}
export
enum
SignatureHelpTriggerKind
{
Invoke
=
1
,
TriggerCharacter
=
2
,
...
...
@@ -653,7 +657,7 @@ export interface SignatureHelpProvider {
/**
* Provide help for the signature at the given position and document.
*/
provideSignatureHelp
(
model
:
model
.
ITextModel
,
position
:
Position
,
token
:
CancellationToken
,
context
:
SignatureHelpContext
):
ProviderResult
<
SignatureHelp
>
;
provideSignatureHelp
(
model
:
model
.
ITextModel
,
position
:
Position
,
token
:
CancellationToken
,
context
:
SignatureHelpContext
):
ProviderResult
<
SignatureHelp
Result
>
;
}
/**
...
...
src/vs/editor/contrib/parameterHints/parameterHintsModel.ts
浏览文件 @
8e91c0db
...
...
@@ -6,7 +6,7 @@
import
{
CancelablePromise
,
createCancelablePromise
,
Delayer
}
from
'
vs/base/common/async
'
;
import
{
onUnexpectedError
}
from
'
vs/base/common/errors
'
;
import
{
Emitter
}
from
'
vs/base/common/event
'
;
import
{
Disposable
}
from
'
vs/base/common/lifecycle
'
;
import
{
Disposable
,
MutableDisposable
}
from
'
vs/base/common/lifecycle
'
;
import
{
ICodeEditor
}
from
'
vs/editor/browser/editorBrowser
'
;
import
{
ICursorSelectionChangedEvent
}
from
'
vs/editor/common/controller/cursorEvents
'
;
import
{
CharacterSet
}
from
'
vs/editor/common/core/characterClassifier
'
;
...
...
@@ -30,7 +30,7 @@ namespace ParameterHintState {
export
class
Pending
{
readonly
type
=
Type
.
Pending
;
constructor
(
readonly
request
:
CancelablePromise
<
any
>
readonly
request
:
CancelablePromise
<
modes
.
SignatureHelpResult
|
undefined
|
null
>
)
{
}
}
...
...
@@ -54,6 +54,7 @@ export class ParameterHintsModel extends Disposable {
private
readonly
editor
:
ICodeEditor
;
private
enabled
:
boolean
;
private
_state
:
ParameterHintState
.
State
=
ParameterHintState
.
Default
;
private
readonly
_lastSignatureHelpResult
=
this
.
_register
(
new
MutableDisposable
<
modes
.
SignatureHelpResult
>
());
private
triggerChars
=
new
CharacterSet
();
private
retriggerChars
=
new
CharacterSet
();
...
...
@@ -92,7 +93,6 @@ export class ParameterHintsModel extends Disposable {
}
cancel
(
silent
:
boolean
=
false
):
void
{
this
.
state
=
ParameterHintState
.
Default
;
this
.
throttledDelayer
.
cancel
();
...
...
@@ -181,14 +181,22 @@ export class ParameterHintsModel extends Disposable {
return
this
.
state
.
request
.
then
(
result
=>
{
// Check that we are still resolving the correct signature help
if
(
triggerId
!==
this
.
triggerId
)
{
if
(
result
)
{
result
.
dispose
();
}
return
false
;
}
if
(
!
result
||
!
result
.
signatures
||
result
.
signatures
.
length
===
0
)
{
if
(
!
result
||
!
result
.
value
.
signatures
||
result
.
value
.
signatures
.
length
===
0
)
{
if
(
result
)
{
result
.
dispose
();
}
this
.
_lastSignatureHelpResult
.
clear
();
this
.
cancel
();
return
false
;
}
else
{
this
.
state
=
new
ParameterHintState
.
Active
(
result
);
this
.
state
=
new
ParameterHintState
.
Active
(
result
.
value
);
this
.
_lastSignatureHelpResult
.
value
=
result
;
this
.
_onChangedHints
.
fire
(
this
.
state
.
hints
);
return
true
;
}
...
...
src/vs/editor/contrib/parameterHints/provideSignatureHelp.ts
浏览文件 @
8e91c0db
...
...
@@ -17,18 +17,32 @@ export const Context = {
MultipleSignatures
:
new
RawContextKey
<
boolean
>
(
'
parameterHintsMultipleSignatures
'
,
false
),
};
export
function
provideSignatureHelp
(
model
:
ITextModel
,
position
:
Position
,
context
:
modes
.
SignatureHelpContext
,
token
:
CancellationToken
):
Promise
<
modes
.
SignatureHelp
|
null
|
undefined
>
{
export
function
provideSignatureHelp
(
model
:
ITextModel
,
position
:
Position
,
context
:
modes
.
SignatureHelpContext
,
token
:
CancellationToken
):
Promise
<
modes
.
SignatureHelpResult
|
null
|
undefined
>
{
const
supports
=
modes
.
SignatureHelpProviderRegistry
.
ordered
(
model
);
return
first
(
supports
.
map
(
support
=>
()
=>
{
return
Promise
.
resolve
(
support
.
provideSignatureHelp
(
model
,
position
,
token
,
context
)).
catch
(
onUnexpectedExternalError
);
return
Promise
.
resolve
(
support
.
provideSignatureHelp
(
model
,
position
,
token
,
context
))
.
catch
<
modes
.
SignatureHelpResult
|
undefined
>
(
e
=>
onUnexpectedExternalError
(
e
));
}));
}
registerDefaultLanguageCommand
(
'
_executeSignatureHelpProvider
'
,
(
model
,
position
,
args
)
=>
provideSignatureHelp
(
model
,
position
,
{
registerDefaultLanguageCommand
(
'
_executeSignatureHelpProvider
'
,
async
(
model
,
position
,
args
)
=>
{
const
result
=
await
provideSignatureHelp
(
model
,
position
,
{
triggerKind
:
modes
.
SignatureHelpTriggerKind
.
Invoke
,
isRetrigger
:
false
,
triggerCharacter
:
args
[
'
triggerCharacter
'
]
},
CancellationToken
.
None
));
},
CancellationToken
.
None
);
if
(
!
result
)
{
return
undefined
;
}
setTimeout
(()
=>
result
.
dispose
(),
0
);
return
result
.
value
;
});
src/vs/editor/contrib/parameterHints/test/parameterHintsModel.test.ts
浏览文件 @
8e91c0db
...
...
@@ -23,7 +23,7 @@ const mockFile = URI.parse('test:somefile.ttt');
const
mockFileSelector
=
{
scheme
:
'
test
'
};
const
emptySigHelp
Result
=
{
const
emptySigHelp
:
modes
.
SignatureHelp
=
{
signatures
:
[{
label
:
'
none
'
,
parameters
:
[]
...
...
@@ -31,6 +31,12 @@ const emptySigHelpResult = {
activeParameter
:
0
,
activeSignature
:
0
};
const
emptySigHelpResult
:
modes
.
SignatureHelpResult
=
{
value
:
emptySigHelp
,
dispose
:
()
=>
{
}
};
suite
(
'
ParameterHintsModel
'
,
()
=>
{
const
disposables
=
new
DisposableStore
();
...
...
@@ -88,7 +94,7 @@ suite('ParameterHintsModel', () => {
signatureHelpTriggerCharacters
=
[
triggerChar
];
signatureHelpRetriggerCharacters
=
[];
provideSignatureHelp
(
_model
:
ITextModel
,
_position
:
Position
,
_token
:
CancellationToken
,
context
:
modes
.
SignatureHelpContext
):
modes
.
SignatureHelp
|
Promise
<
modes
.
SignatureHelp
>
{
provideSignatureHelp
(
_model
:
ITextModel
,
_position
:
Position
,
_token
:
CancellationToken
,
context
:
modes
.
SignatureHelpContext
):
modes
.
SignatureHelp
Result
|
Promise
<
modes
.
SignatureHelpResult
>
{
++
invokeCount
;
if
(
invokeCount
===
1
)
{
assert
.
strictEqual
(
context
.
triggerKind
,
modes
.
SignatureHelpTriggerKind
.
TriggerCharacter
);
...
...
@@ -103,7 +109,7 @@ suite('ParameterHintsModel', () => {
assert
.
strictEqual
(
context
.
triggerKind
,
modes
.
SignatureHelpTriggerKind
.
TriggerCharacter
);
assert
.
strictEqual
(
context
.
isRetrigger
,
true
);
assert
.
strictEqual
(
context
.
triggerCharacter
,
triggerChar
);
assert
.
strictEqual
(
context
.
activeSignatureHelp
,
emptySigHelp
Result
);
assert
.
strictEqual
(
context
.
activeSignatureHelp
,
emptySigHelp
);
done
();
}
...
...
@@ -126,7 +132,7 @@ suite('ParameterHintsModel', () => {
signatureHelpTriggerCharacters
=
[
triggerChar
];
signatureHelpRetriggerCharacters
=
[];
provideSignatureHelp
(
_model
:
ITextModel
,
_position
:
Position
,
_token
:
CancellationToken
,
context
:
modes
.
SignatureHelpContext
):
modes
.
SignatureHelp
|
Promise
<
modes
.
SignatureHelp
>
{
provideSignatureHelp
(
_model
:
ITextModel
,
_position
:
Position
,
_token
:
CancellationToken
,
context
:
modes
.
SignatureHelpContext
):
modes
.
SignatureHelp
Result
|
Promise
<
modes
.
SignatureHelpResult
>
{
++
invokeCount
;
if
(
invokeCount
===
1
)
{
assert
.
strictEqual
(
context
.
triggerKind
,
modes
.
SignatureHelpTriggerKind
.
TriggerCharacter
);
...
...
@@ -192,7 +198,7 @@ suite('ParameterHintsModel', () => {
signatureHelpTriggerCharacters
=
[
'
a
'
,
'
b
'
];
signatureHelpRetriggerCharacters
=
[];
provideSignatureHelp
(
_model
:
ITextModel
,
_position
:
Position
,
_token
:
CancellationToken
,
context
:
modes
.
SignatureHelpContext
):
modes
.
SignatureHelp
|
Promise
<
modes
.
SignatureHelp
>
{
provideSignatureHelp
(
_model
:
ITextModel
,
_position
:
Position
,
_token
:
CancellationToken
,
context
:
modes
.
SignatureHelpContext
):
modes
.
SignatureHelp
Result
|
Promise
<
modes
.
SignatureHelpResult
>
{
++
invokeCount
;
if
(
invokeCount
===
1
)
{
assert
.
strictEqual
(
context
.
triggerKind
,
modes
.
SignatureHelpTriggerKind
.
TriggerCharacter
);
...
...
@@ -227,7 +233,7 @@ suite('ParameterHintsModel', () => {
signatureHelpRetriggerCharacters
=
[];
provideSignatureHelp
(
_model
:
ITextModel
,
_position
:
Position
,
token
:
CancellationToken
):
modes
.
SignatureHelp
|
Promise
<
modes
.
SignatureHelp
>
{
provideSignatureHelp
(
_model
:
ITextModel
,
_position
:
Position
,
token
:
CancellationToken
):
modes
.
SignatureHelp
Result
|
Promise
<
modes
.
SignatureHelpResult
>
{
const
count
=
invokeCount
++
;
token
.
onCancellationRequested
(()
=>
{
didRequestCancellationOf
=
count
;
});
...
...
@@ -236,15 +242,18 @@ suite('ParameterHintsModel', () => {
hintsModel
.
trigger
({
triggerKind
:
modes
.
SignatureHelpTriggerKind
.
Invoke
},
0
);
}
return
new
Promise
<
modes
.
SignatureHelp
>
(
resolve
=>
{
return
new
Promise
<
modes
.
SignatureHelp
Result
>
(
resolve
=>
{
setTimeout
(()
=>
{
resolve
({
signatures
:
[{
label
:
''
+
count
,
parameters
:
[]
}],
activeParameter
:
0
,
activeSignature
:
0
value
:
{
signatures
:
[{
label
:
''
+
count
,
parameters
:
[]
}],
activeParameter
:
0
,
activeSignature
:
0
},
dispose
:
()
=>
{
}
});
},
100
);
});
...
...
@@ -280,7 +289,7 @@ suite('ParameterHintsModel', () => {
signatureHelpTriggerCharacters
=
[
triggerChar
];
signatureHelpRetriggerCharacters
=
[
retriggerChar
];
provideSignatureHelp
(
_model
:
ITextModel
,
_position
:
Position
,
_token
:
CancellationToken
,
context
:
modes
.
SignatureHelpContext
):
modes
.
SignatureHelp
|
Promise
<
modes
.
SignatureHelp
>
{
provideSignatureHelp
(
_model
:
ITextModel
,
_position
:
Position
,
_token
:
CancellationToken
,
context
:
modes
.
SignatureHelpContext
):
modes
.
SignatureHelp
Result
|
Promise
<
modes
.
SignatureHelpResult
>
{
++
invokeCount
;
if
(
invokeCount
===
1
)
{
assert
.
strictEqual
(
context
.
triggerKind
,
modes
.
SignatureHelpTriggerKind
.
TriggerCharacter
);
...
...
@@ -322,20 +331,23 @@ suite('ParameterHintsModel', () => {
signatureHelpTriggerCharacters
=
[
triggerChar
];
signatureHelpRetriggerCharacters
=
[];
async
provideSignatureHelp
(
_model
:
ITextModel
,
_position
:
Position
,
_token
:
CancellationToken
,
context
:
modes
.
SignatureHelpContext
):
Promise
<
modes
.
SignatureHelp
|
undefined
>
{
async
provideSignatureHelp
(
_model
:
ITextModel
,
_position
:
Position
,
_token
:
CancellationToken
,
context
:
modes
.
SignatureHelpContext
):
Promise
<
modes
.
SignatureHelp
Result
|
undefined
>
{
if
(
!
context
.
isRetrigger
)
{
// retrigger after delay for widget to show up
setTimeout
(()
=>
editor
.
trigger
(
'
keyboard
'
,
Handler
.
Type
,
{
text
:
triggerChar
}),
50
);
return
{
activeParameter
:
0
,
activeSignature
:
0
,
signatures
:
[{
label
:
firstProviderId
,
parameters
:
[
{
label
:
paramterLabel
}
]
}]
value
:
{
activeParameter
:
0
,
activeSignature
:
0
,
signatures
:
[{
label
:
firstProviderId
,
parameters
:
[
{
label
:
paramterLabel
}
]
}]
},
dispose
:
()
=>
{
}
};
}
...
...
@@ -347,15 +359,18 @@ suite('ParameterHintsModel', () => {
signatureHelpTriggerCharacters
=
[
triggerChar
];
signatureHelpRetriggerCharacters
=
[];
async
provideSignatureHelp
(
_model
:
ITextModel
,
_position
:
Position
,
_token
:
CancellationToken
,
context
:
modes
.
SignatureHelpContext
):
Promise
<
modes
.
SignatureHelp
|
undefined
>
{
async
provideSignatureHelp
(
_model
:
ITextModel
,
_position
:
Position
,
_token
:
CancellationToken
,
context
:
modes
.
SignatureHelpContext
):
Promise
<
modes
.
SignatureHelp
Result
|
undefined
>
{
if
(
context
.
isRetrigger
)
{
return
{
activeParameter
:
0
,
activeSignature
:
context
.
activeSignatureHelp
?
context
.
activeSignatureHelp
.
activeSignature
+
1
:
0
,
signatures
:
[{
label
:
secondProviderId
,
parameters
:
context
.
activeSignatureHelp
?
context
.
activeSignatureHelp
.
signatures
[
0
].
parameters
:
[]
}]
value
:
{
activeParameter
:
0
,
activeSignature
:
context
.
activeSignatureHelp
?
context
.
activeSignatureHelp
.
activeSignature
+
1
:
0
,
signatures
:
[{
label
:
secondProviderId
,
parameters
:
context
.
activeSignatureHelp
?
context
.
activeSignatureHelp
.
signatures
[
0
].
parameters
:
[]
}]
},
dispose
:
()
=>
{
}
};
}
...
...
@@ -365,23 +380,23 @@ suite('ParameterHintsModel', () => {
editor
.
trigger
(
'
keyboard
'
,
Handler
.
Type
,
{
text
:
triggerChar
});
const
firstHint
=
await
getNextHint
(
model
)
;
assert
.
strictEqual
(
firstHint
!
.
signatures
[
0
].
label
,
firstProviderId
);
assert
.
strictEqual
(
firstHint
!
.
activeSignature
,
0
);
assert
.
strictEqual
(
firstHint
!
.
signatures
[
0
].
parameters
[
0
].
label
,
paramterLabel
);
const
firstHint
=
(
await
getNextHint
(
model
))
!
.
value
;
assert
.
strictEqual
(
firstHint
.
signatures
[
0
].
label
,
firstProviderId
);
assert
.
strictEqual
(
firstHint
.
activeSignature
,
0
);
assert
.
strictEqual
(
firstHint
.
signatures
[
0
].
parameters
[
0
].
label
,
paramterLabel
);
const
secondHint
=
await
getNextHint
(
model
)
;
assert
.
strictEqual
(
secondHint
!
.
signatures
[
0
].
label
,
secondProviderId
);
assert
.
strictEqual
(
secondHint
!
.
activeSignature
,
1
);
assert
.
strictEqual
(
secondHint
!
.
signatures
[
0
].
parameters
[
0
].
label
,
paramterLabel
);
const
secondHint
=
(
await
getNextHint
(
model
))
!
.
value
;
assert
.
strictEqual
(
secondHint
.
signatures
[
0
].
label
,
secondProviderId
);
assert
.
strictEqual
(
secondHint
.
activeSignature
,
1
);
assert
.
strictEqual
(
secondHint
.
signatures
[
0
].
parameters
[
0
].
label
,
paramterLabel
);
});
});
function
getNextHint
(
model
:
ParameterHintsModel
)
{
return
new
Promise
<
modes
.
SignatureHelp
|
undefined
>
(
resolve
=>
{
return
new
Promise
<
modes
.
SignatureHelp
Result
|
undefined
>
(
resolve
=>
{
const
sub
=
model
.
onChangedHints
(
e
=>
{
sub
.
dispose
();
return
resolve
(
e
);
return
resolve
(
e
?
{
value
:
e
,
dispose
:
()
=>
{
}
}
:
undefined
);
});
});
}
...
...
src/vs/monaco.d.ts
浏览文件 @
8e91c0db
...
...
@@ -4957,6 +4957,10 @@ declare namespace monaco.languages {
activeParameter
:
number
;
}
export
interface
SignatureHelpResult
extends
IDisposable
{
value
:
SignatureHelp
;
}
export
enum
SignatureHelpTriggerKind
{
Invoke
=
1
,
TriggerCharacter
=
2
,
...
...
@@ -4980,7 +4984,7 @@ declare namespace monaco.languages {
/**
* Provide help for the signature at the given position and document.
*/
provideSignatureHelp
(
model
:
editor
.
ITextModel
,
position
:
Position
,
token
:
CancellationToken
,
context
:
SignatureHelpContext
):
ProviderResult
<
SignatureHelp
>
;
provideSignatureHelp
(
model
:
editor
.
ITextModel
,
position
:
Position
,
token
:
CancellationToken
,
context
:
SignatureHelpContext
):
ProviderResult
<
SignatureHelp
Result
>
;
}
/**
...
...
src/vs/workbench/api/browser/mainThreadLanguageFeatures.ts
浏览文件 @
8e91c0db
...
...
@@ -384,8 +384,17 @@ export class MainThreadLanguageFeatures implements MainThreadLanguageFeaturesSha
signatureHelpTriggerCharacters
:
metadata
.
triggerCharacters
,
signatureHelpRetriggerCharacters
:
metadata
.
retriggerCharacters
,
provideSignatureHelp
:
(
model
:
ITextModel
,
position
:
EditorPosition
,
token
:
CancellationToken
,
context
:
modes
.
SignatureHelpContext
):
Promise
<
modes
.
SignatureHelp
|
undefined
>
=>
{
return
this
.
_proxy
.
$provideSignatureHelp
(
handle
,
model
.
uri
,
position
,
context
,
token
);
provideSignatureHelp
:
async
(
model
:
ITextModel
,
position
:
EditorPosition
,
token
:
CancellationToken
,
context
:
modes
.
SignatureHelpContext
):
Promise
<
modes
.
SignatureHelpResult
|
undefined
>
=>
{
const
result
=
await
this
.
_proxy
.
$provideSignatureHelp
(
handle
,
model
.
uri
,
position
,
context
,
token
);
if
(
!
result
)
{
return
undefined
;
}
return
{
value
:
result
,
dispose
:
()
=>
{
this
.
_proxy
.
$releaseSignatureHelp
(
handle
,
result
.
id
);
}
};
}
});
}
...
...
src/vs/workbench/api/common/extHost.protocol.ts
浏览文件 @
8e91c0db
...
...
@@ -922,6 +922,20 @@ export interface SuggestResultDto {
c
?:
boolean
;
}
export
interface
SignatureHelpDto
{
id
:
CacheId
;
signatures
:
modes
.
SignatureInformation
[];
activeSignature
:
number
;
activeParameter
:
number
;
}
export
interface
SignatureHelpContextDto
{
readonly
triggerKind
:
modes
.
SignatureHelpTriggerKind
;
readonly
triggerCharacter
?:
string
;
readonly
isRetrigger
:
boolean
;
readonly
activeSignatureHelp
?:
SignatureHelpDto
;
}
export
interface
LocationDto
{
uri
:
UriComponents
;
range
:
IRange
;
...
...
@@ -1060,7 +1074,8 @@ export interface ExtHostLanguageFeaturesShape {
$provideCompletionItems
(
handle
:
number
,
resource
:
UriComponents
,
position
:
IPosition
,
context
:
modes
.
CompletionContext
,
token
:
CancellationToken
):
Promise
<
SuggestResultDto
|
undefined
>
;
$resolveCompletionItem
(
handle
:
number
,
resource
:
UriComponents
,
position
:
IPosition
,
id
:
ChainedCacheId
,
token
:
CancellationToken
):
Promise
<
SuggestDataDto
|
undefined
>
;
$releaseCompletionItems
(
handle
:
number
,
id
:
number
):
void
;
$provideSignatureHelp
(
handle
:
number
,
resource
:
UriComponents
,
position
:
IPosition
,
context
:
modes
.
SignatureHelpContext
,
token
:
CancellationToken
):
Promise
<
modes
.
SignatureHelp
|
undefined
>
;
$provideSignatureHelp
(
handle
:
number
,
resource
:
UriComponents
,
position
:
IPosition
,
context
:
modes
.
SignatureHelpContext
,
token
:
CancellationToken
):
Promise
<
SignatureHelpDto
|
undefined
>
;
$releaseSignatureHelp
(
handle
:
number
,
id
:
number
):
void
;
$provideDocumentLinks
(
handle
:
number
,
resource
:
UriComponents
,
token
:
CancellationToken
):
Promise
<
LinksListDto
|
undefined
>
;
$resolveDocumentLink
(
handle
:
number
,
id
:
ChainedCacheId
,
token
:
CancellationToken
):
Promise
<
LinkDto
|
undefined
>
;
$releaseDocumentLinks
(
handle
:
number
,
id
:
number
):
void
;
...
...
src/vs/workbench/api/common/extHostLanguageFeatures.ts
浏览文件 @
8e91c0db
...
...
@@ -10,12 +10,11 @@ import * as typeConvert from 'vs/workbench/api/common/extHostTypeConverters';
import
{
Range
,
Disposable
,
CompletionList
,
SnippetString
,
CodeActionKind
,
SymbolInformation
,
DocumentSymbol
}
from
'
vs/workbench/api/common/extHostTypes
'
;
import
{
ISingleEditOperation
}
from
'
vs/editor/common/model
'
;
import
*
as
modes
from
'
vs/editor/common/modes
'
;
import
{
ExtHostHeapService
}
from
'
vs/workbench/api/common/extHostHeapService
'
;
import
{
ExtHostDocuments
}
from
'
vs/workbench/api/common/extHostDocuments
'
;
import
{
ExtHostCommands
,
CommandsConverter
}
from
'
vs/workbench/api/common/extHostCommands
'
;
import
{
ExtHostDiagnostics
}
from
'
vs/workbench/api/common/extHostDiagnostics
'
;
import
{
asPromise
}
from
'
vs/base/common/async
'
;
import
{
MainContext
,
MainThreadLanguageFeaturesShape
,
ExtHostLanguageFeaturesShape
,
ObjectIdentifier
,
IRawColorInfo
,
IMainContext
,
IdObject
,
ISerializedRegExp
,
ISerializedIndentationRule
,
ISerializedOnEnterRule
,
ISerializedLanguageConfiguration
,
WorkspaceSymbolDto
,
SuggestResultDto
,
WorkspaceSymbolsDto
,
CodeActionDto
,
ISerializedDocumentFilter
,
WorkspaceEditDto
,
ISerializedSignatureHelpProviderMetadata
,
LinkDto
,
CodeLensDto
,
SuggestDataDto
,
LinksListDto
,
ChainedCacheId
,
CodeLensListDto
,
CodeActionLis
tDto
}
from
'
./extHost.protocol
'
;
import
{
MainContext
,
MainThreadLanguageFeaturesShape
,
ExtHostLanguageFeaturesShape
,
IRawColorInfo
,
IMainContext
,
IdObject
,
ISerializedRegExp
,
ISerializedIndentationRule
,
ISerializedOnEnterRule
,
ISerializedLanguageConfiguration
,
WorkspaceSymbolDto
,
SuggestResultDto
,
WorkspaceSymbolsDto
,
CodeActionDto
,
ISerializedDocumentFilter
,
WorkspaceEditDto
,
ISerializedSignatureHelpProviderMetadata
,
LinkDto
,
CodeLensDto
,
SuggestDataDto
,
LinksListDto
,
ChainedCacheId
,
CodeLensListDto
,
CodeActionListDto
,
SignatureHelpDto
,
SignatureHelpContex
tDto
}
from
'
./extHost.protocol
'
;
import
{
regExpLeadsToEndlessLoop
,
regExpFlags
}
from
'
vs/base/common/strings
'
;
import
{
IPosition
}
from
'
vs/editor/common/core/position
'
;
import
{
IRange
,
Range
as
EditorRange
}
from
'
vs/editor/common/core/range
'
;
...
...
@@ -771,31 +770,32 @@ class SuggestAdapter {
class
SignatureHelpAdapter
{
private
readonly
_cache
=
new
Cache
<
vscode
.
SignatureHelp
>
();
constructor
(
private
readonly
_documents
:
ExtHostDocuments
,
private
readonly
_provider
:
vscode
.
SignatureHelpProvider
,
private
readonly
_heap
:
ExtHostHeapService
,
)
{
}
provideSignatureHelp
(
resource
:
URI
,
position
:
IPosition
,
context
:
modes
.
SignatureHelpContext
,
token
:
CancellationToken
):
Promise
<
modes
.
SignatureHelp
|
undefined
>
{
provideSignatureHelp
(
resource
:
URI
,
position
:
IPosition
,
context
:
SignatureHelpContextDto
,
token
:
CancellationToken
):
Promise
<
SignatureHelpDto
|
undefined
>
{
const
doc
=
this
.
_documents
.
getDocument
(
resource
);
const
pos
=
typeConvert
.
Position
.
to
(
position
);
const
vscodeContext
=
this
.
reviveContext
(
context
);
return
asPromise
(()
=>
this
.
_provider
.
provideSignatureHelp
(
doc
,
pos
,
token
,
vscodeContext
)).
then
(
value
=>
{
if
(
value
)
{
const
id
=
this
.
_
heap
.
keep
(
value
);
return
ObjectIdentifier
.
mixin
(
typeConvert
.
SignatureHelp
.
from
(
value
),
id
)
;
const
id
=
this
.
_
cache
.
add
([
value
]
);
return
{
...
typeConvert
.
SignatureHelp
.
from
(
value
),
id
}
;
}
return
undefined
;
});
}
private
reviveContext
(
context
:
modes
.
SignatureHelpContext
):
vscode
.
SignatureHelpContext
{
private
reviveContext
(
context
:
SignatureHelpContextDto
):
vscode
.
SignatureHelpContext
{
let
activeSignatureHelp
:
vscode
.
SignatureHelp
|
undefined
=
undefined
;
if
(
context
.
activeSignatureHelp
)
{
const
revivedSignatureHelp
=
typeConvert
.
SignatureHelp
.
to
(
context
.
activeSignatureHelp
);
const
saved
=
this
.
_
heap
.
get
<
vscode
.
SignatureHelp
>
(
ObjectIdentifier
.
of
(
context
.
activeSignatureHelp
)
);
const
saved
=
this
.
_
cache
.
get
(
context
.
activeSignatureHelp
.
id
,
0
);
if
(
saved
)
{
activeSignatureHelp
=
saved
;
activeSignatureHelp
.
activeSignature
=
revivedSignatureHelp
.
activeSignature
;
...
...
@@ -806,6 +806,10 @@ class SignatureHelpAdapter {
}
return
{
...
context
,
activeSignatureHelp
};
}
releaseSignatureHelp
(
id
:
number
):
any
{
this
.
_cache
.
delete
(
id
);
}
}
class
Cache
<
T
>
{
...
...
@@ -1065,7 +1069,6 @@ export class ExtHostLanguageFeatures implements ExtHostLanguageFeaturesShape {
private
_proxy
:
MainThreadLanguageFeaturesShape
;
private
_documents
:
ExtHostDocuments
;
private
_commands
:
ExtHostCommands
;
private
_heapService
:
ExtHostHeapService
;
private
_diagnostics
:
ExtHostDiagnostics
;
private
_adapter
=
new
Map
<
number
,
AdapterData
>
();
private
readonly
_logService
:
ILogService
;
...
...
@@ -1075,7 +1078,6 @@ export class ExtHostLanguageFeatures implements ExtHostLanguageFeaturesShape {
uriTransformer
:
IURITransformer
|
null
,
documents
:
ExtHostDocuments
,
commands
:
ExtHostCommands
,
heapMonitor
:
ExtHostHeapService
,
diagnostics
:
ExtHostDiagnostics
,
logService
:
ILogService
)
{
...
...
@@ -1083,7 +1085,6 @@ export class ExtHostLanguageFeatures implements ExtHostLanguageFeaturesShape {
this
.
_proxy
=
mainContext
.
getProxy
(
MainContext
.
MainThreadLanguageFeatures
);
this
.
_documents
=
documents
;
this
.
_commands
=
commands
;
this
.
_heapService
=
heapMonitor
;
this
.
_diagnostics
=
diagnostics
;
this
.
_logService
=
logService
;
}
...
...
@@ -1402,15 +1403,19 @@ export class ExtHostLanguageFeatures implements ExtHostLanguageFeaturesShape {
?
{
triggerCharacters
:
metadataOrTriggerChars
,
retriggerCharacters
:
[]
}
:
metadataOrTriggerChars
;
const
handle
=
this
.
_addNewAdapter
(
new
SignatureHelpAdapter
(
this
.
_documents
,
provider
,
this
.
_heapService
),
extension
);
const
handle
=
this
.
_addNewAdapter
(
new
SignatureHelpAdapter
(
this
.
_documents
,
provider
),
extension
);
this
.
_proxy
.
$registerSignatureHelpProvider
(
handle
,
this
.
_transformDocumentSelector
(
selector
),
metadata
);
return
this
.
_createDisposable
(
handle
);
}
$provideSignatureHelp
(
handle
:
number
,
resource
:
UriComponents
,
position
:
IPosition
,
context
:
modes
.
SignatureHelpContext
,
token
:
CancellationToken
):
Promise
<
modes
.
SignatureHelp
|
undefined
>
{
$provideSignatureHelp
(
handle
:
number
,
resource
:
UriComponents
,
position
:
IPosition
,
context
:
SignatureHelpContextDto
,
token
:
CancellationToken
):
Promise
<
SignatureHelpDto
|
undefined
>
{
return
this
.
_withAdapter
(
handle
,
SignatureHelpAdapter
,
adapter
=>
adapter
.
provideSignatureHelp
(
URI
.
revive
(
resource
),
position
,
context
,
token
),
undefined
);
}
$releaseSignatureHelp
(
handle
:
number
,
id
:
number
):
void
{
this
.
_withAdapter
(
handle
,
SignatureHelpAdapter
,
adapter
=>
adapter
.
releaseSignatureHelp
(
id
),
undefined
);
}
// --- links
registerDocumentLinkProvider
(
extension
:
IExtensionDescription
|
undefined
,
selector
:
vscode
.
DocumentSelector
,
provider
:
vscode
.
DocumentLinkProvider
):
vscode
.
Disposable
{
...
...
src/vs/workbench/api/node/extHost.api.impl.ts
浏览文件 @
8e91c0db
...
...
@@ -112,7 +112,7 @@ export function createApiFactory(
rpcProtocol
.
set
(
ExtHostContext
.
ExtHostConfiguration
,
extHostConfiguration
);
const
extHostEditorInsets
=
rpcProtocol
.
set
(
ExtHostContext
.
ExtHostEditorInsets
,
new
ExtHostEditorInsets
(
rpcProtocol
.
getProxy
(
MainContext
.
MainThreadEditorInsets
),
extHostEditors
));
const
extHostDiagnostics
=
rpcProtocol
.
set
(
ExtHostContext
.
ExtHostDiagnostics
,
new
ExtHostDiagnostics
(
rpcProtocol
));
const
extHostLanguageFeatures
=
rpcProtocol
.
set
(
ExtHostContext
.
ExtHostLanguageFeatures
,
new
ExtHostLanguageFeatures
(
rpcProtocol
,
uriTransformer
,
extHostDocuments
,
extHostCommands
,
extHost
HeapService
,
extHost
Diagnostics
,
extHostLogService
));
const
extHostLanguageFeatures
=
rpcProtocol
.
set
(
ExtHostContext
.
ExtHostLanguageFeatures
,
new
ExtHostLanguageFeatures
(
rpcProtocol
,
uriTransformer
,
extHostDocuments
,
extHostCommands
,
extHostDiagnostics
,
extHostLogService
));
const
extHostFileSystem
=
rpcProtocol
.
set
(
ExtHostContext
.
ExtHostFileSystem
,
new
ExtHostFileSystem
(
rpcProtocol
,
extHostLanguageFeatures
));
const
extHostFileSystemEvent
=
rpcProtocol
.
set
(
ExtHostContext
.
ExtHostFileSystemEventService
,
new
ExtHostFileSystemEventService
(
rpcProtocol
,
extHostDocumentsAndEditors
));
const
extHostQuickOpen
=
rpcProtocol
.
set
(
ExtHostContext
.
ExtHostQuickOpen
,
new
ExtHostQuickOpen
(
rpcProtocol
,
extHostWorkspace
,
extHostCommands
));
...
...
src/vs/workbench/test/electron-browser/api/extHostApiCommands.test.ts
浏览文件 @
8e91c0db
...
...
@@ -117,7 +117,7 @@ suite('ExtHostLanguageFeatureCommands', function () {
const
diagnostics
=
new
ExtHostDiagnostics
(
rpcProtocol
);
rpcProtocol
.
set
(
ExtHostContext
.
ExtHostDiagnostics
,
diagnostics
);
extHost
=
new
ExtHostLanguageFeatures
(
rpcProtocol
,
null
,
extHostDocuments
,
commands
,
heapService
,
diagnostics
,
new
NullLogService
());
extHost
=
new
ExtHostLanguageFeatures
(
rpcProtocol
,
null
,
extHostDocuments
,
commands
,
diagnostics
,
new
NullLogService
());
rpcProtocol
.
set
(
ExtHostContext
.
ExtHostLanguageFeatures
,
extHost
);
mainThread
=
rpcProtocol
.
set
(
MainContext
.
MainThreadLanguageFeatures
,
inst
.
createInstance
(
MainThreadLanguageFeatures
,
rpcProtocol
));
...
...
src/vs/workbench/test/electron-browser/api/extHostLanguageFeatures.test.ts
浏览文件 @
8e91c0db
...
...
@@ -109,7 +109,7 @@ suite('ExtHostLanguageFeatures', function () {
const
diagnostics
=
new
ExtHostDiagnostics
(
rpcProtocol
);
rpcProtocol
.
set
(
ExtHostContext
.
ExtHostDiagnostics
,
diagnostics
);
extHost
=
new
ExtHostLanguageFeatures
(
rpcProtocol
,
null
,
extHostDocuments
,
commands
,
heapService
,
diagnostics
,
new
NullLogService
());
extHost
=
new
ExtHostLanguageFeatures
(
rpcProtocol
,
null
,
extHostDocuments
,
commands
,
diagnostics
,
new
NullLogService
());
rpcProtocol
.
set
(
ExtHostContext
.
ExtHostLanguageFeatures
,
extHost
);
mainThread
=
rpcProtocol
.
set
(
MainContext
.
MainThreadLanguageFeatures
,
inst
.
createInstance
(
MainThreadLanguageFeatures
,
rpcProtocol
));
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录