Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
7a5229f1
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,发现更多精彩内容 >>
提交
7a5229f1
编写于
10月 24, 2019
作者:
G
Gen Lu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Support triggering after dot of qualified name
上级
b0615aef
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
43 addition
and
7 deletion
+43
-7
src/Features/Core/Portable/Completion/Providers/ImportCompletionProvider/AbstractExtensionMethodImportCompletionProvider.cs
...ovider/AbstractExtensionMethodImportCompletionProvider.cs
+31
-7
src/Workspaces/CSharp/Portable/LanguageServices/CSharpSyntaxFactsService.cs
...arp/Portable/LanguageServices/CSharpSyntaxFactsService.cs
+6
-0
src/Workspaces/Core/Portable/LanguageServices/SyntaxFactsService/ISyntaxFactsService.cs
...anguageServices/SyntaxFactsService/ISyntaxFactsService.cs
+1
-0
src/Workspaces/VisualBasic/Portable/LanguageServices/VisualBasicSyntaxFactsService.vb
...ortable/LanguageServices/VisualBasicSyntaxFactsService.vb
+5
-0
未找到文件。
src/Features/Core/Portable/Completion/Providers/ImportCompletionProvider/AbstractExtensionMethodImportCompletionProvider.cs
浏览文件 @
7a5229f1
...
...
@@ -3,7 +3,6 @@
#
nullable
enable
using
System.Collections.Generic
;
using
System.Collections.Immutable
;
using
System.Diagnostics.CodeAnalysis
;
using
System.Linq
;
using
System.Threading
;
...
...
@@ -45,16 +44,41 @@ protected override bool ShouldProvideCompletion(Document document, SyntaxContext
private
static
bool
TryGetReceiverTypeSymbol
(
SyntaxContext
syntaxContext
,
ISyntaxFactsService
syntaxFacts
,
[
NotNullWhen
(
true
)]
out
ITypeSymbol
?
receiverTypeSymbol
)
{
var
parentNode
=
syntaxContext
.
TargetToken
.
Parent
;
var
expressionNode
=
syntaxFacts
.
Get
ExpressionOfMemberAccessExpression
(
parentNode
,
allowImplicitTarget
:
true
);
var
expressionNode
=
syntaxFacts
.
Get
LeftSideOfDot
(
parentNode
,
allowImplicitTarget
:
true
);
if
(
expressionNode
!
=
null
)
if
(
expressionNode
=
=
null
)
{
receiverTypeSymbol
=
syntaxContext
.
SemanticModel
.
GetTypeInfo
(
expressionNode
).
Type
;
return
receiverTypeSymbol
!=
null
;
receiverTypeSymbol
=
null
;
return
false
;
}
receiverTypeSymbol
=
null
;
return
false
;
receiverTypeSymbol
=
syntaxContext
.
SemanticModel
.
GetTypeInfo
(
expressionNode
).
Type
;
if
(
receiverTypeSymbol
is
IErrorTypeSymbol
errorTypeSymbol
)
{
receiverTypeSymbol
=
errorTypeSymbol
.
CandidateSymbols
.
Select
(
s
=>
GetSymbolType
(
s
)).
FirstOrDefault
(
s
=>
s
!=
null
);
}
return
receiverTypeSymbol
!=
null
;
}
private
static
ITypeSymbol
?
GetSymbolType
(
ISymbol
symbol
)
{
switch
(
symbol
)
{
case
ILocalSymbol
localSymbol
:
return
localSymbol
.
Type
;
case
IFieldSymbol
fieldSymbol
:
return
fieldSymbol
.
Type
;
case
IPropertySymbol
propertySymbol
:
return
propertySymbol
.
Type
;
case
IParameterSymbol
parameterSymbol
:
return
parameterSymbol
.
Type
;
case
IAliasSymbol
aliasSymbol
:
return
aliasSymbol
.
Target
as
ITypeSymbol
;
}
return
symbol
as
ITypeSymbol
;
}
private
CompletionItem
Convert
(
SerializableImportCompletionItem
serializableItem
)
...
...
src/Workspaces/CSharp/Portable/LanguageServices/CSharpSyntaxFactsService.cs
浏览文件 @
7a5229f1
...
...
@@ -1267,6 +1267,12 @@ public SyntaxNode GetRightSideOfDot(SyntaxNode node)
(
node
as
MemberAccessExpressionSyntax
)?.
Name
;
}
public
SyntaxNode
GetLeftSideOfDot
(
SyntaxNode
node
,
bool
allowImplicitTarget
)
{
return
(
node
as
QualifiedNameSyntax
)?.
Left
??
(
node
as
MemberAccessExpressionSyntax
)?.
Expression
;
}
public
bool
IsLeftSideOfExplicitInterfaceSpecifier
(
SyntaxNode
node
)
=>
(
node
as
NameSyntax
).
IsLeftSideOfExplicitInterfaceSpecifier
();
...
...
src/Workspaces/Core/Portable/LanguageServices/SyntaxFactsService/ISyntaxFactsService.cs
浏览文件 @
7a5229f1
...
...
@@ -174,6 +174,7 @@ internal interface ISyntaxFactsService : ILanguageService
bool
IsLeftSideOfDot
(
SyntaxNode
node
);
SyntaxNode
GetRightSideOfDot
(
SyntaxNode
node
);
SyntaxNode
GetLeftSideOfDot
(
SyntaxNode
node
,
bool
allowImplicitTarget
=
false
);
bool
IsRightSideOfQualifiedName
(
SyntaxNode
node
);
bool
IsLeftSideOfExplicitInterfaceSpecifier
(
SyntaxNode
node
);
...
...
src/Workspaces/VisualBasic/Portable/LanguageServices/VisualBasicSyntaxFactsService.vb
浏览文件 @
7a5229f1
...
...
@@ -1312,6 +1312,11 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
TryCast
(
node
,
MemberAccessExpressionSyntax
)
?
.
Name
)
End
Function
Public
Function
GetLeftSideOfDot
(
node
As
SyntaxNode
,
Optional
allowImplicitTarget
As
Boolean
=
False
)
As
SyntaxNode
Implements
ISyntaxFactsService
.
GetLeftSideOfDot
Return
If
(
TryCast
(
node
,
QualifiedNameSyntax
)
?
.
Left
,
TryCast
(
node
,
MemberAccessExpressionSyntax
)
?
.
GetExpressionOfMemberAccessExpression
(
allowImplicitTarget
))
End
Function
Public
Function
IsLeftSideOfExplicitInterfaceSpecifier
(
node
As
SyntaxNode
)
As
Boolean
Implements
ISyntaxFactsService
.
IsLeftSideOfExplicitInterfaceSpecifier
Return
IsLeftSideOfDot
(
node
)
AndAlso
TryCast
(
node
.
Parent
.
Parent
,
ImplementsClauseSyntax
)
IsNot
Nothing
End
Function
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录