Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
1a292d59
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,发现更多精彩内容 >>
提交
1a292d59
编写于
6月 20, 2018
作者:
C
Cyrus Najmabadi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add tests.
上级
34ba8bcc
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
126 addition
and
5 deletion
+126
-5
src/EditorFeatures/CSharpTest/ConvertAnonymousTypeToTuple/ConvertAnonymousTypeToTupleTests.cs
...tAnonymousTypeToTuple/ConvertAnonymousTypeToTupleTests.cs
+96
-0
src/Features/CSharp/Portable/ConvertAnonymousTypeToTuple/CSharpConvertAnonymousTypeToTupleDiagnosticAnalyzer.cs
...le/CSharpConvertAnonymousTypeToTupleDiagnosticAnalyzer.cs
+7
-1
src/Features/Core/Portable/ConvertAnonymousTypeToTuple/AbstractConvertAnonymousTypeToTupleDiagnosticAnalyzer.cs
.../AbstractConvertAnonymousTypeToTupleDiagnosticAnalyzer.cs
+16
-3
src/Features/VisualBasic/Portable/ConvertAnonymousTypeToTuple/VisualBasicConvertAnonymousTypeToTupleDiagnosticAnalyzer.vb
...sualBasicConvertAnonymousTypeToTupleDiagnosticAnalyzer.vb
+7
-1
未找到文件。
src/EditorFeatures/CSharpTest/ConvertAnonymousTypeToTuple/ConvertAnonymousTypeToTupleTests.cs
浏览文件 @
1a292d59
...
...
@@ -46,6 +46,34 @@ void Method()
await
TestInRegularAndScriptAsync
(
text
,
expected
);
}
[
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsConvertAnonymousTypeToTuple
)]
public
async
Task
NotOnEmptyAnonymousType
()
{
await
TestMissingInRegularAndScriptAsync
(
@"
class Test
{
void Method()
{
var t1 = [||]new { };
}
}
"
);
}
[
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsConvertAnonymousTypeToTuple
)]
public
async
Task
NotOnSingleFieldAnonymousType
()
{
await
TestMissingInRegularAndScriptAsync
(
@"
class Test
{
void Method()
{
var t1 = [||]new { a = 1 };
}
}
"
);
}
[
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsConvertAnonymousTypeToTuple
)]
public
async
Task
ConvertSingleAnonymousTypeWithInferredName
()
{
...
...
@@ -160,6 +188,74 @@ void Method(int b)
var t4 = new { b = 5, a = 6 };
}
}
"
;
await
TestInRegularAndScriptAsync
(
text
,
expected
);
}
[
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsConvertAnonymousTypeToTuple
)]
public
async
Task
TestFixAllInSingleMethod
()
{
var
text
=
@"
class Test
{
void Method(int b)
{
var t1 = {|FixAllInDocument:|}new { a = 1, b = 2 };
var t2 = new { a = 3, b };
var t3 = new { a = 4 };
var t4 = new { b = 5, a = 6 };
}
}
"
;
var
expected
=
@"
class Test
{
void Method(int b)
{
var t1 = (a: 1, b: 2);
var t2 = (a: 3, b);
var t3 = new { a = 4 };
var t4 = (b: 5, a: 6);
}
}
"
;
await
TestInRegularAndScriptAsync
(
text
,
expected
);
}
[
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsConvertAnonymousTypeToTuple
)]
public
async
Task
TestFixAllAcrossMehtods
()
{
var
text
=
@"
class Test
{
void Method()
{
var t1 = {|FixAllInDocument:|}new { a = 1, b = 2 };
var t2 = new { a = 3, b = 4 };
}
void Method2()
{
var t1 = new { a = 1, b = 2 };
var t2 = new { a = 3, b = 4 };
}
}
"
;
var
expected
=
@"
class Test
{
void Method()
{
var t1 = (a: 1, b: 2);
var t2 = (a: 3, b: 4);
}
void Method2()
{
var t1 = (a: 1, b: 2);
var t2 = (a: 3, b: 4);
}
}
"
;
await
TestInRegularAndScriptAsync
(
text
,
expected
);
}
...
...
src/Features/CSharp/Portable/ConvertAnonymousTypeToTuple/CSharpConvertAnonymousTypeToTupleDiagnosticAnalyzer.cs
浏览文件 @
1a292d59
// 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
Microsoft.CodeAnalysis.ConvertAnonymousTypeToTuple
;
using
Microsoft.CodeAnalysis.CSharp.Syntax
;
using
Microsoft.CodeAnalysis.Diagnostics
;
namespace
Microsoft.CodeAnalysis.CSharp.ConvertAnonymousTypeToTuple
{
[
DiagnosticAnalyzer
(
LanguageNames
.
CSharp
)]
internal
class
CSharpConvertAnonymousTypeToTupleDiagnosticAnalyzer
:
AbstractConvertAnonymousTypeToTupleDiagnosticAnalyzer
<
SyntaxKind
>
:
AbstractConvertAnonymousTypeToTupleDiagnosticAnalyzer
<
SyntaxKind
,
AnonymousObjectCreationExpressionSyntax
>
{
protected
override
SyntaxKind
GetAnonymousObjectCreationExpressionSyntaxKind
()
=>
SyntaxKind
.
AnonymousObjectCreationExpression
;
protected
override
int
GetInitializerCount
(
AnonymousObjectCreationExpressionSyntax
anonymousType
)
=>
anonymousType
.
Initializers
.
Count
;
}
}
src/Features/Core/Portable/ConvertAnonymousTypeToTuple/AbstractConvertAnonymousTypeToTupleDiagnosticAnalyzer.cs
浏览文件 @
1a292d59
...
...
@@ -6,9 +6,12 @@
namespace
Microsoft.CodeAnalysis.ConvertAnonymousTypeToTuple
{
internal
abstract
class
AbstractConvertAnonymousTypeToTupleDiagnosticAnalyzer
<
TSyntaxKind
>
internal
abstract
class
AbstractConvertAnonymousTypeToTupleDiagnosticAnalyzer
<
TSyntaxKind
,
TAnonymousObjectCreationExpressionSyntax
>
:
AbstractCodeStyleDiagnosticAnalyzer
where
TSyntaxKind
:
struct
where
TAnonymousObjectCreationExpressionSyntax
:
SyntaxNode
{
protected
AbstractConvertAnonymousTypeToTupleDiagnosticAnalyzer
()
:
base
(
IDEDiagnosticIds
.
ConvertAnonymousTypeToTupleDiagnosticId
,
...
...
@@ -18,6 +21,7 @@ protected AbstractConvertAnonymousTypeToTupleDiagnosticAnalyzer()
}
protected
abstract
TSyntaxKind
GetAnonymousObjectCreationExpressionSyntaxKind
();
protected
abstract
int
GetInitializerCount
(
TAnonymousObjectCreationExpressionSyntax
anonymousType
);
public
override
DiagnosticAnalyzerCategory
GetAnalyzerCategory
()
=>
DiagnosticAnalyzerCategory
.
SemanticSpanAnalysis
;
...
...
@@ -30,11 +34,20 @@ protected override void InitializeWorker(AnalysisContext context)
AnalyzeSyntax
,
GetAnonymousObjectCreationExpressionSyntaxKind
());
// Analysis is trivial. All anonymous types are marked as being convertible to a tuple.
// Analysis is trivial. All anonymous types with more than two fields are marked as being
// convertible to a tuple.
private
void
AnalyzeSyntax
(
SyntaxNodeAnalysisContext
context
)
=>
context
.
ReportDiagnostic
(
{
var
anonymousType
=
(
TAnonymousObjectCreationExpressionSyntax
)
context
.
Node
;
if
(
GetInitializerCount
(
anonymousType
)
<
2
)
{
return
;
}
context
.
ReportDiagnostic
(
DiagnosticHelper
.
Create
(
Descriptor
,
context
.
Node
.
GetFirstToken
().
GetLocation
(),
ReportDiagnostic
.
Hidden
,
additionalLocations
:
null
,
properties
:
null
));
}
}
}
src/Features/VisualBasic/Portable/ConvertAnonymousTypeToTuple/VisualBasicConvertAnonymousTypeToTupleDiagnosticAnalyzer.vb
浏览文件 @
1a292d59
...
...
@@ -2,14 +2,20 @@
Imports
Microsoft.CodeAnalysis.ConvertAnonymousTypeToTuple
Imports
Microsoft.CodeAnalysis.Diagnostics
Imports
Microsoft.CodeAnalysis.VisualBasic.Syntax
Namespace
Microsoft.CodeAnalysis.VisualBasic.ConvertAnonymousTypeToTuple
<
DiagnosticAnalyzer
(
LanguageNames
.
VisualBasic
)
>
Friend
Class
VisualBasicConvertAnonymousTypeToTupleDiagnosticAnalyzer
Inherits
AbstractConvertAnonymousTypeToTupleDiagnosticAnalyzer
(
Of
SyntaxKind
)
Inherits
AbstractConvertAnonymousTypeToTupleDiagnosticAnalyzer
(
Of
SyntaxKind
,
AnonymousObjectCreationExpressionSyntax
)
Protected
Overrides
Function
GetAnonymousObjectCreationExpressionSyntaxKind
()
As
SyntaxKind
Return
SyntaxKind
.
AnonymousObjectCreationExpression
End
Function
Protected
Overrides
Function
GetInitializerCount
(
anonymousType
As
AnonymousObjectCreationExpressionSyntax
)
As
Integer
Return
anonymousType
.
Initializer
.
Initializers
.
Count
End
Function
End
Class
End
Namespace
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录