Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
d2a80420
R
roslyn
项目概览
lwm1986
/
roslyn
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
roslyn
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
d2a80420
编写于
5月 16, 2017
作者:
C
CyrusNajmabadi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Restore old APi to make migration easier.
上级
7a1ac4e5
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
119 addition
and
15 deletion
+119
-15
src/EditorFeatures/Core/EditorFeatures.csproj
src/EditorFeatures/Core/EditorFeatures.csproj
+1
-0
src/EditorFeatures/Core/Implementation/ReferenceHighlighting/IDocumentHighlightsService.cs
...ation/ReferenceHighlighting/IDocumentHighlightsService.cs
+53
-0
src/EditorFeatures/Core/ReferenceHighlighting/ReferenceHighlightingViewTaggerProvider.cs
...ceHighlighting/ReferenceHighlightingViewTaggerProvider.cs
+65
-15
未找到文件。
src/EditorFeatures/Core/EditorFeatures.csproj
浏览文件 @
d2a80420
...
...
@@ -165,6 +165,7 @@
<Compile
Include=
"Implementation\Intellisense\QuickInfo\Providers\LinkedFileDiscrepancyException.cs"
/>
<Compile
Include=
"Implementation\Intellisense\Completion\CompletionFilterReason.cs"
/>
<Compile
Include=
"Implementation\Intellisense\Completion\FilterResult.cs"
/>
<Compile
Include=
"Implementation\ReferenceHighlighting\IDocumentHighlightsService.cs"
/>
<Compile
Include=
"Implementation\Structure\BlockTagState.cs"
/>
<Compile
Include=
"Implementation\Suggestions\ISuggestedActionCallback.cs"
/>
<Compile
Include=
"Implementation\Suggestions\SuggestedActionSetComparer.cs"
/>
...
...
src/EditorFeatures/Core/Implementation/ReferenceHighlighting/IDocumentHighlightsService.cs
0 → 100644
浏览文件 @
d2a80420
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using
System
;
using
System.Collections.Immutable
;
using
System.Threading
;
using
System.Threading.Tasks
;
using
Microsoft.CodeAnalysis.Host
;
using
Microsoft.CodeAnalysis.Text
;
namespace
Microsoft.CodeAnalysis.Editor
{
internal
enum
HighlightSpanKind
{
None
,
Definition
,
Reference
,
WrittenReference
,
}
internal
struct
HighlightSpan
{
public
TextSpan
TextSpan
{
get
;
}
public
HighlightSpanKind
Kind
{
get
;
}
public
HighlightSpan
(
TextSpan
textSpan
,
HighlightSpanKind
kind
)
:
this
()
{
this
.
TextSpan
=
textSpan
;
this
.
Kind
=
kind
;
}
}
internal
struct
DocumentHighlights
{
public
Document
Document
{
get
;
}
public
ImmutableArray
<
HighlightSpan
>
HighlightSpans
{
get
;
}
public
DocumentHighlights
(
Document
document
,
ImmutableArray
<
HighlightSpan
>
highlightSpans
)
{
this
.
Document
=
document
;
this
.
HighlightSpans
=
highlightSpans
;
}
}
/// <summary>
/// Note: kept around for back compat until F# and TypeScript move over to
/// <see cref="Microsoft.CodeAnalysis.DocumentHighlighting.IDocumentHighlightsService"/>.
/// </summary>
internal
interface
IDocumentHighlightsService
:
ILanguageService
{
Task
<
ImmutableArray
<
DocumentHighlights
>>
GetDocumentHighlightsAsync
(
Document
document
,
int
position
,
IImmutableSet
<
Document
>
documentsToSearch
,
CancellationToken
cancellationToken
);
}
}
\ No newline at end of file
src/EditorFeatures/Core/ReferenceHighlighting/ReferenceHighlightingViewTaggerProvider.cs
浏览文件 @
d2a80420
...
...
@@ -5,14 +5,17 @@
using
System.Collections.Immutable
;
using
System.ComponentModel.Composition
;
using
System.Linq
;
using
System.Threading
;
using
System.Threading.Tasks
;
using
Microsoft.CodeAnalysis.DocumentHighlighting
;
using
Microsoft.CodeAnalysis.Editor.Shared.Options
;
using
Microsoft.CodeAnalysis.Editor.Shared.Tagging
;
using
Microsoft.CodeAnalysis.Editor.Tagging
;
using
Microsoft.CodeAnalysis.Host
;
using
Microsoft.CodeAnalysis.Internal.Log
;
using
Microsoft.CodeAnalysis.Notification
;
using
Microsoft.CodeAnalysis.Options
;
using
Microsoft.CodeAnalysis.Shared.Extensions
;
using
Microsoft.CodeAnalysis.Shared.TestHooks
;
using
Microsoft.CodeAnalysis.Text
;
using
Microsoft.CodeAnalysis.Text.Shared.Extensions
;
...
...
@@ -111,13 +114,12 @@ protected override Task ProduceTagsAsync(TaggerContext<NavigableHighlightTag> co
}
// Otherwise, we need to go produce all tags.
return
ProduceTagsAsync
(
context
,
caretPosition
,
workspace
,
document
);
return
ProduceTagsAsync
(
context
,
caretPosition
,
document
);
}
internal
async
Task
ProduceTagsAsync
(
TaggerContext
<
NavigableHighlightTag
>
context
,
SnapshotPoint
position
,
Workspace
workspace
,
Document
document
)
{
var
cancellationToken
=
context
.
CancellationToken
;
...
...
@@ -128,25 +130,73 @@ protected override Task ProduceTagsAsync(TaggerContext<NavigableHighlightTag> co
{
if
(
document
!=
null
)
{
var
documentHighlightsService
=
document
.
Project
.
LanguageServices
.
GetService
<
IDocumentHighlightsService
>();
if
(
documentHighlightsService
!=
null
)
// As we transition to the new API (defined at the Features layer) we support
// calling into both it and the old API (defined at the EditorFeatures layer).
//
// Once TypeScript and F# can move over, then we can remove the calls to the old
// API.
await
TryNewServiceAsync
(
context
,
position
,
document
).
ConfigureAwait
(
false
);
await
TryOldServiceAsync
(
context
,
position
,
document
).
ConfigureAwait
(
false
);
}
}
}
private
Task
TryOldServiceAsync
(
TaggerContext
<
NavigableHighlightTag
>
context
,
SnapshotPoint
position
,
Document
document
)
{
return
TryServiceAsync
<
IDocumentHighlightsService
>(
context
,
position
,
document
,
(
s
,
d
,
p
,
ds
,
c
)
=>
s
.
GetDocumentHighlightsAsync
(
d
,
p
,
ds
,
c
));
}
private
Task
TryNewServiceAsync
(
TaggerContext
<
NavigableHighlightTag
>
context
,
SnapshotPoint
position
,
Document
document
)
{
return
TryServiceAsync
<
DocumentHighlighting
.
IDocumentHighlightsService
>(
context
,
position
,
document
,
async
(
service
,
doc
,
point
,
documents
,
cancellation
)
=>
{
// Call into the new service.
var
newHighlights
=
await
service
.
GetDocumentHighlightsAsync
(
doc
,
point
,
documents
,
cancellation
).
ConfigureAwait
(
false
);
// then convert the result to the form the old service would return.
return
ConvertHighlights
(
newHighlights
);
});
}
private
async
Task
TryServiceAsync
<
T
>(
TaggerContext
<
NavigableHighlightTag
>
context
,
SnapshotPoint
position
,
Document
document
,
Func
<
T
,
Document
,
SnapshotPoint
,
ImmutableHashSet
<
Document
>,
CancellationToken
,
Task
<
ImmutableArray
<
DocumentHighlights
>>>
getDocumentHighlightsAsync
)
where
T
:
class
,
ILanguageService
{
var
cancellationToken
=
context
.
CancellationToken
;
var
documentHighlightsService
=
document
.
GetLanguageService
<
T
>();
if
(
documentHighlightsService
!=
null
)
{
// We only want to search inside documents that correspond to the snapshots
// we're looking at
var
documentsToSearch
=
ImmutableHashSet
.
CreateRange
(
context
.
SpansToTag
.
Select
(
vt
=>
vt
.
Document
).
WhereNotNull
());
var
documentHighlightsList
=
await
getDocumentHighlightsAsync
(
documentHighlightsService
,
document
,
position
,
documentsToSearch
,
cancellationToken
).
ConfigureAwait
(
false
);
if
(
documentHighlightsList
!=
null
)
{
foreach
(
var
documentHighlights
in
documentHighlightsList
)
{
// We only want to search inside documents that correspond to the snapshots
// we're looking at
var
documentsToSearch
=
ImmutableHashSet
.
CreateRange
(
context
.
SpansToTag
.
Select
(
vt
=>
vt
.
Document
).
WhereNotNull
());
var
documentHighlightsList
=
await
documentHighlightsService
.
GetDocumentHighlightsAsync
(
document
,
position
,
documentsToSearch
,
cancellationToken
).
ConfigureAwait
(
false
);
if
(
documentHighlightsList
!=
null
)
{
foreach
(
var
documentHighlights
in
documentHighlightsList
)
{
await
AddTagSpansAsync
(
context
,
solution
,
documentHighlights
).
ConfigureAwait
(
false
);
}
}
await
AddTagSpansAsync
(
context
,
document
.
Project
.
Solution
,
documentHighlights
).
ConfigureAwait
(
false
);
}
}
}
}
private
ImmutableArray
<
DocumentHighlights
>
ConvertHighlights
(
ImmutableArray
<
DocumentHighlighting
.
DocumentHighlights
>
newHighlights
)
=>
newHighlights
.
SelectAsArray
(
documentHighlights
=>
new
DocumentHighlights
(
documentHighlights
.
Document
,
documentHighlights
.
HighlightSpans
.
SelectAsArray
(
highlightSpan
=>
new
HighlightSpan
(
highlightSpan
.
TextSpan
,
(
HighlightSpanKind
)
highlightSpan
.
Kind
))));
private
async
Task
AddTagSpansAsync
(
TaggerContext
<
NavigableHighlightTag
>
context
,
Solution
solution
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录