Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
066c8a44
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,发现更多精彩内容 >>
提交
066c8a44
编写于
6月 10, 2019
作者:
G
Gen Lu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix ItemManager to handler expander
上级
f1a5628e
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
46 addition
and
46 deletion
+46
-46
src/EditorFeatures/Core/Implementation/IntelliSense/AsyncCompletion/ItemManager.cs
...mplementation/IntelliSense/AsyncCompletion/ItemManager.cs
+46
-46
未找到文件。
src/EditorFeatures/Core/Implementation/IntelliSense/AsyncCompletion/ItemManager.cs
浏览文件 @
066c8a44
...
...
@@ -114,10 +114,14 @@ internal ItemManager(RecentItemsManager recentItemsManager)
// We need to filter if
// 1. a non-empty strict subset of filters are selected
// 2. any unselected expander exists
var
selectedNonExpanderFilters
=
data
.
SelectedFilters
.
Where
(
f
=>
f
.
IsSelected
).
Select
(
f
=>
f
.
Filter
).
Where
(
f
=>
!(
f
is
CompletionExpander
)).
ToImmutableArray
();
var
unselectedExpanders
=
data
.
SelectedFilters
.
Where
(
f
=>
f
.
Filter
is
CompletionExpander
&&
!
f
.
IsSelected
).
Select
(
f
=>
f
.
Filter
).
ToImmutableArray
();
var
needToFilter
=
selectedNonExpanderFilters
.
Length
>
0
&&
selectedNonExpanderFilters
.
Length
<
data
.
SelectedFilters
.
Length
;
// 2. a non-empty set of expanders are unselected
var
nonExpanderFilterStates
=
data
.
SelectedFilters
.
Where
(
f
=>
!(
f
.
Filter
is
CompletionExpander
)).
ToImmutableArray
();
var
selectedNonExpanderFilters
=
nonExpanderFilterStates
.
Where
(
f
=>
f
.
IsSelected
).
Select
(
f
=>
f
.
Filter
).
ToImmutableArray
();
var
needToFilter
=
selectedNonExpanderFilters
.
Length
>
0
&&
selectedNonExpanderFilters
.
Length
<
nonExpanderFilterStates
.
Length
;
var
unselectedExpanders
=
data
.
SelectedFilters
.
Where
(
f
=>
!
f
.
IsSelected
).
Select
(
f
=>
f
.
Filter
).
Where
(
f
=>
f
is
CompletionExpander
).
ToImmutableArray
();
var
needToFilterExpanded
=
unselectedExpanders
.
Length
>
0
;
if
(
session
.
TextView
.
Properties
.
TryGetProperty
(
CompletionSource
.
TargetTypeFilterExperimentEnabled
,
out
bool
isExperimentEnabled
)
&&
isExperimentEnabled
)
{
...
...
@@ -156,10 +160,7 @@ internal ItemManager(RecentItemsManager recentItemsManager)
continue
;
}
// TODO: Putting expander in filter list might affect perf, even no expander is selected.
// Since we are creating a editor owned special expander, we should consider making
// it a independent property on VS CompletionItem.
if
(
unselectedExpanders
.
Length
>
0
&&
ShouldBeFilteredOutOfExpandedCompletionList
(
item
,
unselectedExpanders
))
if
(
needToFilterExpanded
&&
ShouldBeFilteredOutOfExpandedCompletionList
(
item
,
unselectedExpanders
))
{
continue
;
}
...
...
@@ -247,6 +248,43 @@ internal ItemManager(RecentItemsManager recentItemsManager)
highlightedList
,
completionHelper
,
hasSuggestedItemOptions
);
static
bool
ShouldBeFilteredOutOfCompletionList
(
VSCompletionItem
item
,
ImmutableArray
<
CompletionFilter
>
activeNonExpanderFilters
)
{
foreach
(
var
itemFilter
in
item
.
Filters
)
{
if
(
activeNonExpanderFilters
.
Contains
(
itemFilter
))
{
return
false
;
}
}
return
true
;
}
static
bool
ShouldBeFilteredOutOfExpandedCompletionList
(
VSCompletionItem
item
,
ImmutableArray
<
CompletionFilter
>
unselectedExpanders
)
{
var
associatedWithUnselectedExpander
=
false
;
foreach
(
var
itemFilter
in
item
.
Filters
)
{
if
(
itemFilter
is
CompletionExpander
)
{
if
(!
unselectedExpanders
.
Contains
(
itemFilter
))
{
// If any of the associated expander is selected, the item should be included in the expanded list.
return
false
;
}
associatedWithUnselectedExpander
=
true
;
}
}
// at this point, the item either:
// 1. has no expander filter, therefore should be included
// 2, or, all associated expanders are unselected, therefore should be excluded
return
associatedWithUnselectedExpander
;
}
}
private
static
bool
IsAfterDot
(
ITextSnapshot
snapshot
,
ITrackingSpan
applicableToSpan
)
...
...
@@ -460,44 +498,6 @@ private static bool IsAfterDot(ITextSnapshot snapshot, ITrackingSpan applicableT
return
ImmutableArray
.
CreateRange
(
filters
.
Select
(
n
=>
n
.
WithAvailability
(
n
.
Filter
is
CompletionExpander
?
true
:
textFilteredFilters
.
Contains
(
n
.
Filter
))));
}
private
static
bool
ShouldBeFilteredOutOfCompletionList
(
VSCompletionItem
item
,
ImmutableArray
<
CompletionFilter
>
activeNonExpanderFilters
)
{
Debug
.
Assert
(!
activeNonExpanderFilters
.
Any
(
f
=>
f
is
CompletionExpander
));
foreach
(
var
itemFilter
in
item
.
Filters
)
{
if
(
activeNonExpanderFilters
.
Contains
(
itemFilter
))
{
return
false
;
}
}
return
true
;
}
private
static
bool
ShouldBeFilteredOutOfExpandedCompletionList
(
VSCompletionItem
item
,
ImmutableArray
<
CompletionFilter
>
unselectedExpanders
)
{
var
associatedWithUnselectedExpander
=
false
;
foreach
(
var
itemFilter
in
item
.
Filters
)
{
if
(
itemFilter
is
CompletionExpander
)
{
if
(!
unselectedExpanders
.
Contains
(
itemFilter
))
{
// If any of the associated expander is selected, the item should be included in the expanded list.
return
false
;
}
associatedWithUnselectedExpander
=
true
;
}
}
// at this point, the item either:
// 1. has no expander filter, therefore should be included
// 2, or, all associated expanders are unselected, therefore should be excluded
return
associatedWithUnselectedExpander
;
}
/// <summary>
/// Given multiple possible chosen completion items, pick the one that has the
/// best MRU index.
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录