Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
fcf5fd8a
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,发现更多精彩内容 >>
未验证
提交
fcf5fd8a
编写于
7月 20, 2018
作者:
J
Julien Couvreur
提交者:
GitHub
7月 20, 2018
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #28685 from CyrusNajmabadi/doNotQualifyInAttribute
Do not qualify member accesses that appear inside attributes.
上级
126e7b82
8f18d4e1
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
213 addition
and
4 deletion
+213
-4
src/EditorFeatures/CSharpTest/QualifyMemberAccess/QualifyMemberAccessTests.cs
...SharpTest/QualifyMemberAccess/QualifyMemberAccessTests.cs
+105
-0
src/EditorFeatures/VisualBasicTest/QualifyMemberAccess/QualifyMemberAccessTests.vb
...BasicTest/QualifyMemberAccess/QualifyMemberAccessTests.vb
+88
-0
src/Features/CSharp/Portable/QualifyMemberAccess/CSharpQualifyMemberAccessDiagnosticAnalyzer.cs
...mberAccess/CSharpQualifyMemberAccessDiagnosticAnalyzer.cs
+11
-3
src/Features/VisualBasic/Portable/Diagnostics/Analyzers/VisualBasicQualifyMemberAccessDiagnosticAnalyzer.vb
...yzers/VisualBasicQualifyMemberAccessDiagnosticAnalyzer.vb
+9
-1
未找到文件。
src/EditorFeatures/CSharpTest/QualifyMemberAccess/QualifyMemberAccessTests.cs
浏览文件 @
fcf5fd8a
...
...
@@ -1286,6 +1286,111 @@ public void Bar()
};
}
}"
,
CodeStyleOptions
.
QualifyPropertyAccess
);
}
[
WorkItem
(
26893
,
"https://github.com/dotnet/roslyn/issues/26893"
)]
[
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsQualifyMemberAccess
)]
public
async
Task
DoNotReportToQualify_IfInAttribute1
()
{
await
TestMissingAsyncWithOption
(
@"
using System;
class MyAttribute : Attribute
{
public MyAttribute(string name) { }
}
[My(nameof([|Goo|]))]
class Program
{
int Goo { get; set; }
}"
,
CodeStyleOptions
.
QualifyPropertyAccess
);
}
[
WorkItem
(
26893
,
"https://github.com/dotnet/roslyn/issues/26893"
)]
[
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsQualifyMemberAccess
)]
public
async
Task
DoNotReportToQualify_IfInAttribute2
()
{
await
TestMissingAsyncWithOption
(
@"
using System;
class MyAttribute : Attribute
{
public MyAttribute(string name) { }
}
class Program
{
[My(nameof([|Goo|]))]
int Goo { get; set; }
}"
,
CodeStyleOptions
.
QualifyPropertyAccess
);
}
[
WorkItem
(
26893
,
"https://github.com/dotnet/roslyn/issues/26893"
)]
[
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsQualifyMemberAccess
)]
public
async
Task
DoNotReportToQualify_IfInAttribute3
()
{
await
TestMissingAsyncWithOption
(
@"
using System;
class MyAttribute : Attribute
{
public MyAttribute(string name) { }
}
class Program
{
[My(nameof([|Goo|]))]
public int Bar = 0 ;
public int Goo { get; set; }
}"
,
CodeStyleOptions
.
QualifyPropertyAccess
);
}
[
WorkItem
(
26893
,
"https://github.com/dotnet/roslyn/issues/26893"
)]
[
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsQualifyMemberAccess
)]
public
async
Task
DoNotReportToQualify_IfInAttribute4
()
{
await
TestMissingAsyncWithOption
(
@"
using System;
class MyAttribute : Attribute
{
public MyAttribute(string name) { }
}
class Program
{
int Goo { [My(nameof([|Goo|]))]get; set; }
}"
,
CodeStyleOptions
.
QualifyPropertyAccess
);
}
[
WorkItem
(
26893
,
"https://github.com/dotnet/roslyn/issues/26893"
)]
[
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsQualifyMemberAccess
)]
public
async
Task
DoNotReportToQualify_IfInAttribute5
()
{
await
TestMissingAsyncWithOption
(
@"
using System;
class MyAttribute : Attribute
{
public MyAttribute(string name) { }
}
class Program
{
int Goo { get; set; }
void M([My(nameof([|Goo|]))]int i) { }
}"
,
CodeStyleOptions
.
QualifyPropertyAccess
);
}
}
...
...
src/EditorFeatures/VisualBasicTest/QualifyMemberAccess/QualifyMemberAccessTests.vb
浏览文件 @
fcf5fd8a
...
...
@@ -619,5 +619,93 @@ End Class
"
,
CodeStyleOptions
.
QualifyFieldAccess
)
End
Function
<
WorkItem
(
26893
,
"https://github.com/dotnet/roslyn/issues/26893"
)
>
<
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsQualifyMemberAccess
)
>
Public
Async
Function
DoNotReportToQualify_InAttribute1
()
As
Task
Await
TestMissingAsyncWithOption
(
"
Imports System
Class MyAttribute
Inherits Attribute
Public Sub New(name as String)
End Sub
End Class
<My(NameOf([|Goo|]))>
Class C
Private Property Goo As String
End Class
"
,
CodeStyleOptions
.
QualifyPropertyAccess
)
End
Function
<
WorkItem
(
26893
,
"https://github.com/dotnet/roslyn/issues/26893"
)
>
<
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsQualifyMemberAccess
)
>
Public
Async
Function
DoNotReportToQualify_InAttribute2
()
As
Task
Await
TestMissingAsyncWithOption
(
"
Imports System
Class MyAttribute
Inherits Attribute
Public Sub New(name as String)
End Sub
End Class
Class C
<My(NameOf([|Goo|]))>
Private Property Goo As String
End Class
"
,
CodeStyleOptions
.
QualifyPropertyAccess
)
End
Function
<
WorkItem
(
26893
,
"https://github.com/dotnet/roslyn/issues/26893"
)
>
<
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsQualifyMemberAccess
)
>
Public
Async
Function
DoNotReportToQualify_InAttribute3
()
As
Task
Await
TestMissingAsyncWithOption
(
"
Imports System
Class MyAttribute
Inherits Attribute
Public Sub New(name as String)
End Sub
End Class
Class C
Private Property Goo As String
<My(NameOf([|Goo|]))>
Private Bar As Integer
End Class
"
,
CodeStyleOptions
.
QualifyPropertyAccess
)
End
Function
<
WorkItem
(
26893
,
"https://github.com/dotnet/roslyn/issues/26893"
)
>
<
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsQualifyMemberAccess
)
>
Public
Async
Function
DoNotReportToQualify_InAttribute4
()
As
Task
Await
TestMissingAsyncWithOption
(
"
Imports System
Class MyAttribute
Inherits Attribute
Public Sub New(name as String)
End Sub
End Class
Class C
Private Property Goo As String
Sub X(<My(NameOf([|Goo|]))>v as integer)
End Sub
End Class
"
,
CodeStyleOptions
.
QualifyPropertyAccess
)
End
Function
End
Class
End
Namespace
src/Features/CSharp/Portable/QualifyMemberAccess/CSharpQualifyMemberAccessDiagnosticAnalyzer.cs
浏览文件 @
fcf5fd8a
...
...
@@ -5,6 +5,7 @@
using
Microsoft.CodeAnalysis.CSharp.Syntax
;
using
Microsoft.CodeAnalysis.Diagnostics
;
using
Microsoft.CodeAnalysis.QualifyMemberAccess
;
using
Microsoft.CodeAnalysis.Shared.Extensions
;
namespace
Microsoft.CodeAnalysis.CSharp.QualifyMemberAccess
{
...
...
@@ -22,9 +23,16 @@ protected override bool IsAlreadyQualifiedMemberAccess(ExpressionSyntax node)
// or member is in object initialization context,
// or member in property or field initialization, it cannot be qualified.
protected
override
bool
CanMemberAccessBeQualified
(
ISymbol
containingSymbol
,
SyntaxNode
node
)
=>
!(
node
.
IsKind
(
SyntaxKind
.
BaseExpression
)
||
node
.
Parent
.
Parent
.
IsKind
(
SyntaxKind
.
ObjectInitializerExpression
)
||
IsInPropertyOrFieldInitialization
(
containingSymbol
,
node
));
{
if
(
node
.
GetAncestorOrThis
<
AttributeSyntax
>()
!=
null
)
{
return
false
;
}
return
!(
node
.
IsKind
(
SyntaxKind
.
BaseExpression
)
||
node
.
Parent
.
Parent
.
IsKind
(
SyntaxKind
.
ObjectInitializerExpression
)
||
IsInPropertyOrFieldInitialization
(
containingSymbol
,
node
));
}
private
bool
IsInPropertyOrFieldInitialization
(
ISymbol
containingSymbol
,
SyntaxNode
node
)
{
...
...
src/Features/VisualBasic/Portable/Diagnostics/Analyzers/VisualBasicQualifyMemberAccessDiagnosticAnalyzer.vb
浏览文件 @
fcf5fd8a
...
...
@@ -18,9 +18,17 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.QualifyMemberAccess
End
Function
Protected
Overrides
Function
CanMemberAccessBeQualified
(
containingSymbol
As
ISymbol
,
node
As
SyntaxNode
)
As
Boolean
' if we're in an attribute, we can't be qualified.
If
node
.
GetAncestorOrThis
(
Of
AttributeSyntax
)
IsNot
Nothing
Then
Return
False
End
If
' If the member is already qualified with `MyBase.`, or `MyClass.`,
' or member is in object initialization context, it cannot be qualified.
Return
Not
(
node
.
IsKind
(
SyntaxKind
.
MyBaseExpression
)
OrElse
node
.
IsKind
(
SyntaxKind
.
MyClassExpression
)
OrElse
node
.
IsKind
(
SyntaxKind
.
ObjectCreationExpression
))
Return
Not
(
node
.
IsKind
(
SyntaxKind
.
MyBaseExpression
)
OrElse
node
.
IsKind
(
SyntaxKind
.
MyClassExpression
)
OrElse
node
.
IsKind
(
SyntaxKind
.
ObjectCreationExpression
))
End
Function
Protected
Overrides
Function
GetLocation
(
operation
As
IOperation
)
As
Location
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录