Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
dc866cd2
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,发现更多精彩内容 >>
提交
dc866cd2
编写于
9月 11, 2015
作者:
D
Dustin Campbell
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Use StringBuilder when building C# cref completion item text
上级
ff09b954
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
48 addition
and
27 deletion
+48
-27
src/Features/CSharp/Portable/Completion/CompletionProviders/CrefCompletionProvider.cs
.../Completion/CompletionProviders/CrefCompletionProvider.cs
+48
-25
src/Workspaces/Core/Portable/Shared/Extensions/ISymbolExtensions.cs
...aces/Core/Portable/Shared/Extensions/ISymbolExtensions.cs
+0
-2
未找到文件。
src/Features/CSharp/Portable/Completion/CompletionProviders/CrefCompletionProvider.cs
浏览文件 @
dc866cd2
...
...
@@ -2,6 +2,7 @@
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
using
System.Threading
;
using
System.Threading.Tasks
;
using
Microsoft.CodeAnalysis.Completion
;
...
...
@@ -17,14 +18,22 @@ namespace Microsoft.CodeAnalysis.CSharp.Completion.Providers
{
internal
partial
class
CrefCompletionProvider
:
CompletionListProvider
{
public
static
readonly
SymbolDisplayFormat
QualifiedCrefFormat
=
new
SymbolDisplayFormat
(
globalNamespaceStyle
:
SymbolDisplayGlobalNamespaceStyle
.
Omitted
,
typeQualificationStyle
:
SymbolDisplayTypeQualificationStyle
.
NameOnly
,
propertyStyle
:
SymbolDisplayPropertyStyle
.
NameOnly
,
genericsOptions
:
SymbolDisplayGenericsOptions
.
IncludeTypeParameters
,
parameterOptions
:
SymbolDisplayParameterOptions
.
None
,
miscellaneousOptions
:
SymbolDisplayMiscellaneousOptions
.
EscapeKeywordIdentifiers
);
public
static
readonly
SymbolDisplayFormat
CrefFormat
=
new
SymbolDisplayFormat
(
globalNamespaceStyle
:
SymbolDisplayGlobalNamespaceStyle
.
Omitted
,
typeQualificationStyle
:
SymbolDisplayTypeQualificationStyle
.
NameOnly
,
propertyStyle
:
SymbolDisplayPropertyStyle
.
NameOnly
,
genericsOptions
:
SymbolDisplayGenericsOptions
.
IncludeTypeParameters
,
parameterOptions
:
SymbolDisplayParameterOptions
.
IncludeType
,
parameterOptions
:
SymbolDisplayParameterOptions
.
None
,
miscellaneousOptions
:
SymbolDisplayMiscellaneousOptions
.
EscapeKeywordIdentifiers
|
SymbolDisplayMiscellaneousOptions
.
UseSpecialTypes
);
...
...
@@ -143,51 +152,65 @@ private IEnumerable<ISymbol> GetOperatorsAndIndexers(SyntaxToken token, Semantic
private
async
Task
<
CompletionItem
>
CreateItemAsync
(
Workspace
workspace
,
SemanticModel
semanticModel
,
int
textChangeSpanPosition
,
ISymbol
symbol
,
SyntaxToken
token
,
CancellationToken
cancellationToken
)
{
var
builder
=
SharedPools
.
Default
<
StringBuilder
>().
AllocateAndClear
();
int
tokenPosition
=
token
.
SpanStart
;
string
symbolText
=
string
.
Empty
;
if
(
symbol
is
INamespaceOrTypeSymbol
&&
token
.
IsKind
(
SyntaxKind
.
DotToken
))
{
symbolText
=
symbol
.
Name
.
EscapeIdentifier
();
// Handle qualified namespace and type names.
if
(
symbol
.
GetArity
()
>
0
)
{
symbolText
+=
"{"
;
symbolText
+=
string
.
Join
(
", "
,
((
INamedTypeSymbol
)
symbol
).
TypeParameters
);
symbolText
+=
"}"
;
}
builder
.
Append
(
symbol
.
ToDisplayString
(
QualifiedCrefFormat
));
}
else
{
symbolText
=
symbol
.
ToMinimalDisplayString
(
semanticModel
,
tokenPosition
,
CrefFormat
);
var
parameters
=
symbol
.
GetParameters
().
Select
(
p
=>
{
var
displayName
=
p
.
Type
.
ToMinimalDisplayString
(
semanticModel
,
tokenPosition
);
// Handle unqualified namespace and type names, or member names.
builder
.
Append
(
symbol
.
ToMinimalDisplayString
(
semanticModel
,
tokenPosition
,
CrefFormat
));
if
(
p
.
RefKind
==
RefKind
.
Out
)
var
parameters
=
symbol
.
GetParameters
();
if
(!
parameters
.
IsDefaultOrEmpty
)
{
// Note: we intentionally don't add the "params" modifier for any parameters.
builder
.
Append
(
symbol
.
IsIndexer
()
?
'['
:
'('
);
for
(
int
i
=
0
;
i
<
parameters
.
Length
;
i
++)
{
if
(
i
>
0
)
{
return
"out "
+
displayName
;
builder
.
Append
(
", "
)
;
}
if
(
p
.
RefKind
==
RefKind
.
Ref
)
var
parameter
=
parameters
[
i
];
if
(
parameter
.
RefKind
==
RefKind
.
Out
)
{
return
"ref "
+
displayName
;
builder
.
Append
(
"out "
);
}
else
if
(
parameter
.
RefKind
==
RefKind
.
Ref
)
{
builder
.
Append
(
"ref "
);
}
return
displayName
;
}
);
builder
.
Append
(
parameter
.
Type
.
ToMinimalDisplayString
(
semanticModel
,
tokenPosition
))
;
}
var
parameterList
=
!
symbol
.
IsIndexer
()
?
string
.
Format
(
"({0})"
,
string
.
Join
(
", "
,
parameters
))
:
string
.
Format
(
"[{0}]"
,
string
.
Join
(
", "
,
parameters
));
symbolText
+=
parameterList
;
builder
.
Append
(
symbol
.
IsIndexer
()
?
']'
:
')'
);
}
}
var
insertionText
=
symbolText
var
symbolText
=
builder
.
ToString
();
var
insertionText
=
builder
.
Replace
(
'<'
,
'{'
)
.
Replace
(
'>'
,
'}'
)
.
Replace
(
"()"
,
""
);
.
ToString
();
SharedPools
.
Default
<
StringBuilder
>().
ClearAndFree
(
builder
);
var
text
=
await
semanticModel
.
SyntaxTree
.
GetTextAsync
(
cancellationToken
).
ConfigureAwait
(
false
);
return
new
Item
(
completionProvider
:
this
,
displayText
:
insertionText
,
...
...
src/Workspaces/Core/Portable/Shared/Extensions/ISymbolExtensions.cs
浏览文件 @
dc866cd2
...
...
@@ -398,7 +398,6 @@ public static ImmutableArray<IParameterSymbol> GetParameters(this ISymbol symbol
_
=>
ImmutableArray
.
Create
<
IParameterSymbol
>());
}
#if false
public
static
ImmutableArray
<
ITypeParameterSymbol
>
GetTypeParameters
(
this
ISymbol
symbol
)
{
return
symbol
.
TypeSwitch
(
...
...
@@ -406,7 +405,6 @@ public static ImmutableArray<ITypeParameterSymbol> GetTypeParameters(this ISymbo
(
INamedTypeSymbol
nt
)
=>
nt
.
TypeParameters
,
_
=>
ImmutableArray
.
Create
<
ITypeParameterSymbol
>());
}
#endif
public
static
ImmutableArray
<
ITypeSymbol
>
GetTypeArguments
(
this
ISymbol
symbol
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录