Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
201b6dac
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,发现更多精彩内容 >>
提交
201b6dac
编写于
11月 12, 2018
作者:
J
Johannes Rieken
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add proposed api for declaration provider, add test, add ipc logic, #62483
上级
bfd40c5a
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
93 addition
and
5 deletion
+93
-5
src/vs/vscode.proposed.d.ts
src/vs/vscode.proposed.d.ts
+30
-0
src/vs/workbench/api/electron-browser/mainThreadLanguageFeatures.ts
...kbench/api/electron-browser/mainThreadLanguageFeatures.ts
+9
-1
src/vs/workbench/api/node/extHost.api.impl.ts
src/vs/workbench/api/node/extHost.api.impl.ts
+3
-0
src/vs/workbench/api/node/extHost.protocol.ts
src/vs/workbench/api/node/extHost.protocol.ts
+3
-1
src/vs/workbench/api/node/extHostLanguageFeatures.ts
src/vs/workbench/api/node/extHostLanguageFeatures.ts
+26
-2
src/vs/workbench/test/electron-browser/api/extHostLanguageFeatures.test.ts
...test/electron-browser/api/extHostLanguageFeatures.test.ts
+22
-1
未找到文件。
src/vs/vscode.proposed.d.ts
浏览文件 @
201b6dac
...
@@ -20,6 +20,36 @@ declare module 'vscode' {
...
@@ -20,6 +20,36 @@ declare module 'vscode' {
export
function
sampleFunction
():
Thenable
<
any
>
;
export
function
sampleFunction
():
Thenable
<
any
>
;
}
}
//#region Joh
/**
* The declaration provider interface defines the contract between extensions and
* the go to declaration feature.
*/
export
interface
DeclarationProvider
{
/**
* Provide the declaration of the symbol at the given position and document.
*
* @param document The document in which the command was invoked.
* @param position The position at which the command was invoked.
* @param token A cancellation token.
* @return A declaration or a thenable that resolves to such. The lack of a result can be
* signaled by returning `undefined` or `null`.
*/
provideDeclaration
(
document
:
TextDocument
,
position
:
Position
,
token
:
CancellationToken
):
ProviderResult
<
Definition
|
DefinitionLink
[]
>
;
}
export
namespace
languages
{
/**
*
* @param selector
* @param provider
*/
export
function
registerDeclarationProvider
(
selector
:
DocumentSelector
,
provider
:
DeclarationProvider
):
Disposable
;
}
//#endregion
//#region Joh - https://github.com/Microsoft/vscode/issues/57093
//#region Joh - https://github.com/Microsoft/vscode/issues/57093
/**
/**
...
...
src/vs/workbench/api/electron-browser/mainThreadLanguageFeatures.ts
浏览文件 @
201b6dac
...
@@ -148,7 +148,7 @@ export class MainThreadLanguageFeatures implements MainThreadLanguageFeaturesSha
...
@@ -148,7 +148,7 @@ export class MainThreadLanguageFeatures implements MainThreadLanguageFeaturesSha
// --- declaration
// --- declaration
$registerDe
clarac
tionSupport
(
handle
:
number
,
selector
:
ISerializedDocumentFilter
[]):
void
{
$registerDe
fini
tionSupport
(
handle
:
number
,
selector
:
ISerializedDocumentFilter
[]):
void
{
this
.
_registrations
[
handle
]
=
modes
.
DefinitionProviderRegistry
.
register
(
typeConverters
.
LanguageSelector
.
from
(
selector
),
<
modes
.
DefinitionProvider
>
{
this
.
_registrations
[
handle
]
=
modes
.
DefinitionProviderRegistry
.
register
(
typeConverters
.
LanguageSelector
.
from
(
selector
),
<
modes
.
DefinitionProvider
>
{
provideDefinition
:
(
model
,
position
,
token
):
Thenable
<
modes
.
DefinitionLink
[]
>
=>
{
provideDefinition
:
(
model
,
position
,
token
):
Thenable
<
modes
.
DefinitionLink
[]
>
=>
{
return
this
.
_proxy
.
$provideDefinition
(
handle
,
model
.
uri
,
position
,
token
).
then
(
MainThreadLanguageFeatures
.
_reviveDefinitionLinkDto
);
return
this
.
_proxy
.
$provideDefinition
(
handle
,
model
.
uri
,
position
,
token
).
then
(
MainThreadLanguageFeatures
.
_reviveDefinitionLinkDto
);
...
@@ -156,6 +156,14 @@ export class MainThreadLanguageFeatures implements MainThreadLanguageFeaturesSha
...
@@ -156,6 +156,14 @@ export class MainThreadLanguageFeatures implements MainThreadLanguageFeaturesSha
});
});
}
}
$registerDeclarationSupport
(
handle
:
number
,
selector
:
ISerializedDocumentFilter
[]):
void
{
this
.
_registrations
[
handle
]
=
modes
.
DeclarationProviderRegistry
.
register
(
typeConverters
.
LanguageSelector
.
from
(
selector
),
<
modes
.
DeclarationProvider
>
{
provideDeclaration
:
(
model
,
position
,
token
)
=>
{
return
this
.
_proxy
.
$provideDeclaration
(
handle
,
model
.
uri
,
position
,
token
).
then
(
MainThreadLanguageFeatures
.
_reviveDefinitionLinkDto
);
}
});
}
$registerImplementationSupport
(
handle
:
number
,
selector
:
ISerializedDocumentFilter
[]):
void
{
$registerImplementationSupport
(
handle
:
number
,
selector
:
ISerializedDocumentFilter
[]):
void
{
this
.
_registrations
[
handle
]
=
modes
.
ImplementationProviderRegistry
.
register
(
typeConverters
.
LanguageSelector
.
from
(
selector
),
<
modes
.
ImplementationProvider
>
{
this
.
_registrations
[
handle
]
=
modes
.
ImplementationProviderRegistry
.
register
(
typeConverters
.
LanguageSelector
.
from
(
selector
),
<
modes
.
ImplementationProvider
>
{
provideImplementation
:
(
model
,
position
,
token
):
Thenable
<
modes
.
Definition
>
=>
{
provideImplementation
:
(
model
,
position
,
token
):
Thenable
<
modes
.
Definition
>
=>
{
...
...
src/vs/workbench/api/node/extHost.api.impl.ts
浏览文件 @
201b6dac
...
@@ -299,6 +299,9 @@ export function createApiFactory(
...
@@ -299,6 +299,9 @@ export function createApiFactory(
registerDefinitionProvider
(
selector
:
vscode
.
DocumentSelector
,
provider
:
vscode
.
DefinitionProvider
):
vscode
.
Disposable
{
registerDefinitionProvider
(
selector
:
vscode
.
DocumentSelector
,
provider
:
vscode
.
DefinitionProvider
):
vscode
.
Disposable
{
return
extHostLanguageFeatures
.
registerDefinitionProvider
(
extension
,
checkSelector
(
selector
),
provider
);
return
extHostLanguageFeatures
.
registerDefinitionProvider
(
extension
,
checkSelector
(
selector
),
provider
);
},
},
registerDeclarationProvider
(
selector
:
vscode
.
DocumentSelector
,
provider
:
vscode
.
DeclarationProvider
):
vscode
.
Disposable
{
return
extHostLanguageFeatures
.
registerDeclarationProvider
(
extension
,
checkSelector
(
selector
),
provider
);
},
registerImplementationProvider
(
selector
:
vscode
.
DocumentSelector
,
provider
:
vscode
.
ImplementationProvider
):
vscode
.
Disposable
{
registerImplementationProvider
(
selector
:
vscode
.
DocumentSelector
,
provider
:
vscode
.
ImplementationProvider
):
vscode
.
Disposable
{
return
extHostLanguageFeatures
.
registerImplementationProvider
(
extension
,
checkSelector
(
selector
),
provider
);
return
extHostLanguageFeatures
.
registerImplementationProvider
(
extension
,
checkSelector
(
selector
),
provider
);
},
},
...
...
src/vs/workbench/api/node/extHost.protocol.ts
浏览文件 @
201b6dac
...
@@ -279,7 +279,8 @@ export interface MainThreadLanguageFeaturesShape extends IDisposable {
...
@@ -279,7 +279,8 @@ export interface MainThreadLanguageFeaturesShape extends IDisposable {
$registerOutlineSupport
(
handle
:
number
,
selector
:
ISerializedDocumentFilter
[],
extensionId
:
string
):
void
;
$registerOutlineSupport
(
handle
:
number
,
selector
:
ISerializedDocumentFilter
[],
extensionId
:
string
):
void
;
$registerCodeLensSupport
(
handle
:
number
,
selector
:
ISerializedDocumentFilter
[],
eventHandle
:
number
):
void
;
$registerCodeLensSupport
(
handle
:
number
,
selector
:
ISerializedDocumentFilter
[],
eventHandle
:
number
):
void
;
$emitCodeLensEvent
(
eventHandle
:
number
,
event
?:
any
):
void
;
$emitCodeLensEvent
(
eventHandle
:
number
,
event
?:
any
):
void
;
$registerDeclaractionSupport
(
handle
:
number
,
selector
:
ISerializedDocumentFilter
[]):
void
;
$registerDefinitionSupport
(
handle
:
number
,
selector
:
ISerializedDocumentFilter
[]):
void
;
$registerDeclarationSupport
(
handle
:
number
,
selector
:
ISerializedDocumentFilter
[]):
void
;
$registerImplementationSupport
(
handle
:
number
,
selector
:
ISerializedDocumentFilter
[]):
void
;
$registerImplementationSupport
(
handle
:
number
,
selector
:
ISerializedDocumentFilter
[]):
void
;
$registerTypeDefinitionSupport
(
handle
:
number
,
selector
:
ISerializedDocumentFilter
[]):
void
;
$registerTypeDefinitionSupport
(
handle
:
number
,
selector
:
ISerializedDocumentFilter
[]):
void
;
$registerHoverProvider
(
handle
:
number
,
selector
:
ISerializedDocumentFilter
[]):
void
;
$registerHoverProvider
(
handle
:
number
,
selector
:
ISerializedDocumentFilter
[]):
void
;
...
@@ -843,6 +844,7 @@ export interface ExtHostLanguageFeaturesShape {
...
@@ -843,6 +844,7 @@ export interface ExtHostLanguageFeaturesShape {
$provideCodeLenses
(
handle
:
number
,
resource
:
UriComponents
,
token
:
CancellationToken
):
Thenable
<
modes
.
ICodeLensSymbol
[]
>
;
$provideCodeLenses
(
handle
:
number
,
resource
:
UriComponents
,
token
:
CancellationToken
):
Thenable
<
modes
.
ICodeLensSymbol
[]
>
;
$resolveCodeLens
(
handle
:
number
,
resource
:
UriComponents
,
symbol
:
modes
.
ICodeLensSymbol
,
token
:
CancellationToken
):
Thenable
<
modes
.
ICodeLensSymbol
>
;
$resolveCodeLens
(
handle
:
number
,
resource
:
UriComponents
,
symbol
:
modes
.
ICodeLensSymbol
,
token
:
CancellationToken
):
Thenable
<
modes
.
ICodeLensSymbol
>
;
$provideDefinition
(
handle
:
number
,
resource
:
UriComponents
,
position
:
IPosition
,
token
:
CancellationToken
):
Thenable
<
DefinitionLinkDto
[]
>
;
$provideDefinition
(
handle
:
number
,
resource
:
UriComponents
,
position
:
IPosition
,
token
:
CancellationToken
):
Thenable
<
DefinitionLinkDto
[]
>
;
$provideDeclaration
(
handle
:
number
,
resource
:
UriComponents
,
position
:
IPosition
,
token
:
CancellationToken
):
Thenable
<
DefinitionLinkDto
[]
>
;
$provideImplementation
(
handle
:
number
,
resource
:
UriComponents
,
position
:
IPosition
,
token
:
CancellationToken
):
Thenable
<
DefinitionLinkDto
[]
>
;
$provideImplementation
(
handle
:
number
,
resource
:
UriComponents
,
position
:
IPosition
,
token
:
CancellationToken
):
Thenable
<
DefinitionLinkDto
[]
>
;
$provideTypeDefinition
(
handle
:
number
,
resource
:
UriComponents
,
position
:
IPosition
,
token
:
CancellationToken
):
Thenable
<
DefinitionLinkDto
[]
>
;
$provideTypeDefinition
(
handle
:
number
,
resource
:
UriComponents
,
position
:
IPosition
,
token
:
CancellationToken
):
Thenable
<
DefinitionLinkDto
[]
>
;
$provideHover
(
handle
:
number
,
resource
:
UriComponents
,
position
:
IPosition
,
token
:
CancellationToken
):
Thenable
<
modes
.
Hover
>
;
$provideHover
(
handle
:
number
,
resource
:
UriComponents
,
position
:
IPosition
,
token
:
CancellationToken
):
Thenable
<
modes
.
Hover
>
;
...
...
src/vs/workbench/api/node/extHostLanguageFeatures.ts
浏览文件 @
201b6dac
...
@@ -166,6 +166,20 @@ class DefinitionAdapter {
...
@@ -166,6 +166,20 @@ class DefinitionAdapter {
}
}
}
}
class
DeclarationAdapter
{
constructor
(
private
readonly
_documents
:
ExtHostDocuments
,
private
readonly
_provider
:
vscode
.
DeclarationProvider
)
{
}
provideDeclaration
(
resource
:
URI
,
position
:
IPosition
,
token
:
CancellationToken
):
Thenable
<
modes
.
DefinitionLink
[]
>
{
let
doc
=
this
.
_documents
.
getDocumentData
(
resource
).
document
;
let
pos
=
typeConvert
.
Position
.
to
(
position
);
return
asThenable
(()
=>
this
.
_provider
.
provideDeclaration
(
doc
,
pos
,
token
)).
then
(
convertToDefinitionLinks
);
}
}
class
ImplementationAdapter
{
class
ImplementationAdapter
{
constructor
(
constructor
(
...
@@ -840,7 +854,7 @@ type Adapter = OutlineAdapter | CodeLensAdapter | DefinitionAdapter | HoverAdapt
...
@@ -840,7 +854,7 @@ type Adapter = OutlineAdapter | CodeLensAdapter | DefinitionAdapter | HoverAdapt
|
DocumentHighlightAdapter
|
ReferenceAdapter
|
CodeActionAdapter
|
DocumentFormattingAdapter
|
DocumentHighlightAdapter
|
ReferenceAdapter
|
CodeActionAdapter
|
DocumentFormattingAdapter
|
RangeFormattingAdapter
|
OnTypeFormattingAdapter
|
NavigateTypeAdapter
|
RenameAdapter
|
RangeFormattingAdapter
|
OnTypeFormattingAdapter
|
NavigateTypeAdapter
|
RenameAdapter
|
SuggestAdapter
|
SignatureHelpAdapter
|
LinkProviderAdapter
|
ImplementationAdapter
|
TypeDefinitionAdapter
|
SuggestAdapter
|
SignatureHelpAdapter
|
LinkProviderAdapter
|
ImplementationAdapter
|
TypeDefinitionAdapter
|
ColorProviderAdapter
|
FoldingProviderAdapter
;
|
ColorProviderAdapter
|
FoldingProviderAdapter
|
DeclarationAdapter
;
class
AdapterData
{
class
AdapterData
{
constructor
(
constructor
(
...
@@ -999,7 +1013,7 @@ export class ExtHostLanguageFeatures implements ExtHostLanguageFeaturesShape {
...
@@ -999,7 +1013,7 @@ export class ExtHostLanguageFeatures implements ExtHostLanguageFeaturesShape {
registerDefinitionProvider
(
extension
:
IExtensionDescription
,
selector
:
vscode
.
DocumentSelector
,
provider
:
vscode
.
DefinitionProvider
):
vscode
.
Disposable
{
registerDefinitionProvider
(
extension
:
IExtensionDescription
,
selector
:
vscode
.
DocumentSelector
,
provider
:
vscode
.
DefinitionProvider
):
vscode
.
Disposable
{
const
handle
=
this
.
_addNewAdapter
(
new
DefinitionAdapter
(
this
.
_documents
,
provider
),
extension
);
const
handle
=
this
.
_addNewAdapter
(
new
DefinitionAdapter
(
this
.
_documents
,
provider
),
extension
);
this
.
_proxy
.
$registerDe
clarac
tionSupport
(
handle
,
this
.
_transformDocumentSelector
(
selector
));
this
.
_proxy
.
$registerDe
fini
tionSupport
(
handle
,
this
.
_transformDocumentSelector
(
selector
));
return
this
.
_createDisposable
(
handle
);
return
this
.
_createDisposable
(
handle
);
}
}
...
@@ -1007,6 +1021,16 @@ export class ExtHostLanguageFeatures implements ExtHostLanguageFeaturesShape {
...
@@ -1007,6 +1021,16 @@ export class ExtHostLanguageFeatures implements ExtHostLanguageFeaturesShape {
return
this
.
_withAdapter
(
handle
,
DefinitionAdapter
,
adapter
=>
adapter
.
provideDefinition
(
URI
.
revive
(
resource
),
position
,
token
));
return
this
.
_withAdapter
(
handle
,
DefinitionAdapter
,
adapter
=>
adapter
.
provideDefinition
(
URI
.
revive
(
resource
),
position
,
token
));
}
}
registerDeclarationProvider
(
extension
:
IExtensionDescription
,
selector
:
vscode
.
DocumentSelector
,
provider
:
vscode
.
DeclarationProvider
):
vscode
.
Disposable
{
const
handle
=
this
.
_addNewAdapter
(
new
DeclarationAdapter
(
this
.
_documents
,
provider
),
extension
);
this
.
_proxy
.
$registerDeclarationSupport
(
handle
,
this
.
_transformDocumentSelector
(
selector
));
return
this
.
_createDisposable
(
handle
);
}
$provideDeclaration
(
handle
:
number
,
resource
:
UriComponents
,
position
:
IPosition
,
token
:
CancellationToken
):
Thenable
<
modes
.
DefinitionLink
[]
>
{
return
this
.
_withAdapter
(
handle
,
DeclarationAdapter
,
adapter
=>
adapter
.
provideDeclaration
(
URI
.
revive
(
resource
),
position
,
token
));
}
registerImplementationProvider
(
extension
:
IExtensionDescription
,
selector
:
vscode
.
DocumentSelector
,
provider
:
vscode
.
ImplementationProvider
):
vscode
.
Disposable
{
registerImplementationProvider
(
extension
:
IExtensionDescription
,
selector
:
vscode
.
DocumentSelector
,
provider
:
vscode
.
ImplementationProvider
):
vscode
.
Disposable
{
const
handle
=
this
.
_addNewAdapter
(
new
ImplementationAdapter
(
this
.
_documents
,
provider
),
extension
);
const
handle
=
this
.
_addNewAdapter
(
new
ImplementationAdapter
(
this
.
_documents
,
provider
),
extension
);
this
.
_proxy
.
$registerImplementationSupport
(
handle
,
this
.
_transformDocumentSelector
(
selector
));
this
.
_proxy
.
$registerImplementationSupport
(
handle
,
this
.
_transformDocumentSelector
(
selector
));
...
...
src/vs/workbench/test/electron-browser/api/extHostLanguageFeatures.test.ts
浏览文件 @
201b6dac
...
@@ -24,7 +24,7 @@ import { ExtHostDocumentsAndEditors } from 'vs/workbench/api/node/extHostDocumen
...
@@ -24,7 +24,7 @@ import { ExtHostDocumentsAndEditors } from 'vs/workbench/api/node/extHostDocumen
import
{
getDocumentSymbols
}
from
'
vs/editor/contrib/quickOpen/quickOpen
'
;
import
{
getDocumentSymbols
}
from
'
vs/editor/contrib/quickOpen/quickOpen
'
;
import
*
as
modes
from
'
vs/editor/common/modes
'
;
import
*
as
modes
from
'
vs/editor/common/modes
'
;
import
{
getCodeLensData
}
from
'
vs/editor/contrib/codelens/codelens
'
;
import
{
getCodeLensData
}
from
'
vs/editor/contrib/codelens/codelens
'
;
import
{
getDefinitionsAtPosition
,
getImplementationsAtPosition
,
getTypeDefinitionsAtPosition
}
from
'
vs/editor/contrib/goToDefinition/goToDefinition
'
;
import
{
getDefinitionsAtPosition
,
getImplementationsAtPosition
,
getTypeDefinitionsAtPosition
,
getDeclarationsAtPosition
}
from
'
vs/editor/contrib/goToDefinition/goToDefinition
'
;
import
{
getHover
}
from
'
vs/editor/contrib/hover/getHover
'
;
import
{
getHover
}
from
'
vs/editor/contrib/hover/getHover
'
;
import
{
getOccurrencesAtPosition
}
from
'
vs/editor/contrib/wordHighlighter/wordHighlighter
'
;
import
{
getOccurrencesAtPosition
}
from
'
vs/editor/contrib/wordHighlighter/wordHighlighter
'
;
import
{
provideReferences
}
from
'
vs/editor/contrib/referenceSearch/referenceSearch
'
;
import
{
provideReferences
}
from
'
vs/editor/contrib/referenceSearch/referenceSearch
'
;
...
@@ -346,6 +346,27 @@ suite('ExtHostLanguageFeatures', function () {
...
@@ -346,6 +346,27 @@ suite('ExtHostLanguageFeatures', function () {
});
});
});
});
// -- declaration
test
(
'
Declaration, data conversion
'
,
function
()
{
disposables
.
push
(
extHost
.
registerDeclarationProvider
(
defaultExtension
,
defaultSelector
,
<
vscode
.
DeclarationProvider
>
{
provideDeclaration
():
any
{
return
[
new
types
.
Location
(
model
.
uri
,
new
types
.
Range
(
1
,
2
,
3
,
4
))];
}
}));
return
rpcProtocol
.
sync
().
then
(()
=>
{
return
getDeclarationsAtPosition
(
model
,
new
EditorPosition
(
1
,
1
),
CancellationToken
.
None
).
then
(
value
=>
{
assert
.
equal
(
value
.
length
,
1
);
let
[
entry
]
=
value
;
assert
.
deepEqual
(
entry
.
range
,
{
startLineNumber
:
2
,
startColumn
:
3
,
endLineNumber
:
4
,
endColumn
:
5
});
assert
.
equal
(
entry
.
uri
.
toString
(),
model
.
uri
.
toString
());
});
});
});
// --- implementation
// --- implementation
test
(
'
Implementation, data conversion
'
,
function
()
{
test
(
'
Implementation, data conversion
'
,
function
()
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录