Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
690c9ab4
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,发现更多精彩内容 >>
提交
690c9ab4
编写于
9月 24, 2015
作者:
P
Paul Chen
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Special casing for single line ternary expressions that without singleline comments in C#
上级
b7fee1dc
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
144 addition
and
3 deletion
+144
-3
src/EditorFeatures/CSharpTest/Diagnostics/Async/AddAwaitTests.cs
...torFeatures/CSharpTest/Diagnostics/Async/AddAwaitTests.cs
+133
-3
src/Features/CSharp/Portable/CodeFixes/Async/CSharpAddAwaitCodeFixProvider.cs
...Portable/CodeFixes/Async/CSharpAddAwaitCodeFixProvider.cs
+11
-0
未找到文件。
src/EditorFeatures/CSharpTest/Diagnostics/Async/AddAwaitTests.cs
浏览文件 @
690c9ab4
...
@@ -90,7 +90,7 @@ async Task<int> Test2()
...
@@ -90,7 +90,7 @@ async Task<int> Test2()
}
}
[
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsAddAwait
)]
[
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsAddAwait
)]
public
void
BadAsyncReturnOperand_
WithTrailingTrivia1
()
public
void
BadAsyncReturnOperand_
ConditionalExpressionWithTrailingTrivia_SingleLine
()
{
{
var
initial
=
var
initial
=
@"using System.Threading.Tasks;
@"using System.Threading.Tasks;
...
@@ -114,14 +114,14 @@ class Program
...
@@ -114,14 +114,14 @@ class Program
async Task<int> Test2()
async Task<int> Test2()
{
{
return await (true ? Test() /* true */ : Test()
) /* false */
;
return await (true ? Test() /* true */ : Test()
/* false */)
;
}
}
}"
;
}"
;
Test
(
initial
,
expected
,
compareTokens
:
false
);
Test
(
initial
,
expected
,
compareTokens
:
false
);
}
}
[
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsAddAwait
)]
[
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsAddAwait
)]
public
void
BadAsyncReturnOperand_
WithTrailingTrivia2
()
public
void
BadAsyncReturnOperand_
ConditionalExpressionWithTrailingTrivia_Multiline
()
{
{
var
initial
=
var
initial
=
@"using System.Threading.Tasks;
@"using System.Threading.Tasks;
...
@@ -155,6 +155,136 @@ async Task<int> Test2()
...
@@ -155,6 +155,136 @@ async Task<int> Test2()
Test
(
initial
,
expected
,
compareTokens
:
false
);
Test
(
initial
,
expected
,
compareTokens
:
false
);
}
}
[
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsAddAwait
)]
public
void
BadAsyncReturnOperand_NullCoalescingExpressionWithTrailingTrivia_SingleLine
()
{
var
initial
=
@"using System.Threading.Tasks;
class Program
{
async Task<int> Test() => 3;
async Task<int> Test2()
{[|
return null /* 0 */ ?? Test() /* 1 */;
|]}
}"
;
var
expected
=
@"using System.Threading.Tasks;
class Program
{
async Task<int> Test() => 3;
async Task<int> Test2()
{
return await (null /* 0 */ ?? Test() /* 1 */);
}
}"
;
Test
(
initial
,
expected
,
compareTokens
:
false
);
}
[
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsAddAwait
)]
public
void
BadAsyncReturnOperand_NullCoalescingExpressionWithTrailingTrivia_Multiline
()
{
var
initial
=
@"using System.Threading.Tasks;
class Program
{
async Task<int> Test() => 3;
async Task<int> Test2()
{[|
return null // aaa
?? Test() // bbb
;
|]}
}"
;
var
expected
=
@"using System.Threading.Tasks;
class Program
{
async Task<int> Test() => 3;
async Task<int> Test2()
{
return await (null // aaa
?? Test()) // bbb
;
}
}"
;
Test
(
initial
,
expected
,
compareTokens
:
false
);
}
[
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsAddAwait
)]
public
void
BadAsyncReturnOperand_AsExpressionWithTrailingTrivia_SingleLine
()
{
var
initial
=
@"using System.Threading.Tasks;
class Program
{
async Task<int> Test2()
{[|
return null /* 0 */ as Task<int> /* 1 */;
|]}
}"
;
var
expected
=
@"using System.Threading.Tasks;
class Program
{
async Task<int> Test() => 3;
async Task<int> Test2()
{
return await (null /* 0 */ as Task<int> /* 1 */);
}
}"
;
Test
(
initial
,
expected
,
compareTokens
:
false
);
}
[
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsAddAwait
)]
public
void
BadAsyncReturnOperand_AsExpressionWithTrailingTrivia_Multiline
()
{
var
initial
=
@"using System.Threading.Tasks;
class Program
{
async Task<int> Test() => 3;
async Task<int> Test2()
{[|
return null // aaa
as Task<int> // bbb
;
|]}
}"
;
var
expected
=
@"using System.Threading.Tasks;
class Program
{
async Task<int> Test() => 3;
async Task<int> Test2()
{
return await (null // aaa
as Task<int>) // bbb
;
}
}"
;
Test
(
initial
,
expected
,
compareTokens
:
false
);
}
[
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsAddAwait
)]
[
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsAddAwait
)]
public
void
TaskNotAwaited
()
public
void
TaskNotAwaited
()
{
{
...
...
src/Features/CSharp/Portable/CodeFixes/Async/CSharpAddAwaitCodeFixProvider.cs
浏览文件 @
690c9ab4
...
@@ -148,6 +148,17 @@ private static bool IsInAsyncFunction(ExpressionSyntax expression)
...
@@ -148,6 +148,17 @@ private static bool IsInAsyncFunction(ExpressionSyntax expression)
private
static
SyntaxNode
ConvertToAwaitExpression
(
ExpressionSyntax
expression
)
private
static
SyntaxNode
ConvertToAwaitExpression
(
ExpressionSyntax
expression
)
{
{
if
((
expression
is
BinaryExpressionSyntax
||
expression
is
ConditionalExpressionSyntax
)
&&
expression
.
HasTrailingTrivia
)
{
var
expWithTrailing
=
expression
.
WithoutLeadingTrivia
();
var
span
=
expWithTrailing
.
GetLocation
().
GetLineSpan
().
Span
;
if
(
span
.
Start
.
Line
==
span
.
End
.
Line
&&
!
expWithTrailing
.
DescendantTrivia
().
Any
(
trivia
=>
trivia
.
IsKind
(
SyntaxKind
.
SingleLineCommentTrivia
)))
{
return
SyntaxFactory
.
AwaitExpression
(
SyntaxFactory
.
ParenthesizedExpression
(
expWithTrailing
))
.
WithLeadingTrivia
(
expression
.
GetLeadingTrivia
())
.
WithAdditionalAnnotations
(
Formatter
.
Annotation
,
Simplifier
.
Annotation
);
}
}
return
SyntaxFactory
.
AwaitExpression
(
expression
.
WithoutTrivia
().
Parenthesize
())
return
SyntaxFactory
.
AwaitExpression
(
expression
.
WithoutTrivia
().
Parenthesize
())
.
WithTriviaFrom
(
expression
)
.
WithTriviaFrom
(
expression
)
.
WithAdditionalAnnotations
(
Formatter
.
Annotation
,
Simplifier
.
Annotation
);
.
WithAdditionalAnnotations
(
Formatter
.
Annotation
,
Simplifier
.
Annotation
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录