Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
b3517b78
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,发现更多精彩内容 >>
提交
b3517b78
编写于
12月 22, 2016
作者:
C
CyrusNajmabadi
提交者:
GitHub
12月 22, 2016
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #16027 from CyrusNajmabadi/coalesceFormatting
Format the coalesce expression we produce. Fixes #16025
上级
d81ed64e
569d16d6
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
67 addition
and
18 deletion
+67
-18
src/EditorFeatures/CSharpTest/UseCoalesceExpression/UseCoalesceExpressionTests.cs
...pTest/UseCoalesceExpression/UseCoalesceExpressionTests.cs
+29
-0
src/Features/Core/Portable/UseCoalesceExpression/UseCoalesceExpressionCodeFixProvider.cs
...oalesceExpression/UseCoalesceExpressionCodeFixProvider.cs
+38
-18
未找到文件。
src/EditorFeatures/CSharpTest/UseCoalesceExpression/UseCoalesceExpressionTests.cs
浏览文件 @
b3517b78
...
...
@@ -310,5 +310,34 @@ void M(string x, string y, string z)
}
}"
);
}
[
WorkItem
(
16025
,
"https://github.com/dotnet/roslyn/issues/16025"
)]
[
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsUseCoalesceExpression
)]
public
async
Task
TestTrivia1
()
{
await
TestAsync
(
@"using System;
class Program
{
public Program()
{
string x = "";
string y = [|x|] == null ? string.Empty : x;
}
}"
,
@"using System;
class Program
{
public Program()
{
string x = "";
string y = x ?? string.Empty;
}
}"
,
compareTokens
:
false
);
}
}
}
\ No newline at end of file
src/Features/Core/Portable/UseCoalesceExpression/UseCoalesceExpressionCodeFixProvider.cs
浏览文件 @
b3517b78
...
...
@@ -10,6 +10,7 @@
using
Microsoft.CodeAnalysis.CodeFixes
;
using
Microsoft.CodeAnalysis.Diagnostics
;
using
Microsoft.CodeAnalysis.Editing
;
using
Microsoft.CodeAnalysis.Formatting
;
using
Microsoft.CodeAnalysis.LanguageServices
;
using
Microsoft.CodeAnalysis.Shared.Extensions
;
using
Roslyn.Utilities
;
...
...
@@ -38,32 +39,51 @@ public override Task RegisterCodeFixesAsync(CodeFixContext context)
SyntaxEditor
editor
,
CancellationToken
cancellationToken
)
{
var
syntaxFacts
=
document
.
GetLanguageService
<
ISyntaxFactsService
>();
var
generator
=
editor
.
Generator
;
var
root
=
editor
.
OriginalRoot
;
foreach
(
var
diagnostic
in
diagnostics
)
{
var
conditionalExpression
=
root
.
FindNode
(
diagnostic
.
AdditionalLocations
[
0
].
SourceSpan
,
getInnermostNodeForTie
:
true
);
var
conditionalPartHigh
=
root
.
FindNode
(
diagnostic
.
AdditionalLocations
[
1
].
SourceSpan
);
var
whenPart
=
root
.
FindNode
(
diagnostic
.
AdditionalLocations
[
2
].
SourceSpan
);
syntaxFacts
.
GetPartsOfConditionalExpression
(
conditionalExpression
,
out
var
condition
,
out
var
whenTrue
,
out
var
whenFalse
);
var
conditionalPartLow
=
syntaxFacts
.
WalkDownParentheses
(
conditionalPartHigh
);
editor
.
ReplaceNode
(
conditionalExpression
,
(
c
,
g
)
=>
{
syntaxFacts
.
GetPartsOfConditionalExpression
(
c
,
out
var
currentCondition
,
out
var
currentWhenTrue
,
out
var
currentWhenFalse
);
return
whenPart
==
whenTrue
?
g
.
CoalesceExpression
(
conditionalPartLow
,
syntaxFacts
.
WalkDownParentheses
(
currentWhenTrue
))
:
g
.
CoalesceExpression
(
conditionalPartLow
,
syntaxFacts
.
WalkDownParentheses
(
currentWhenFalse
));
});
cancellationToken
.
ThrowIfCancellationRequested
();
ApplyEdit
(
editor
,
syntaxFacts
,
diagnostic
);
}
return
SpecializedTasks
.
EmptyTask
;
}
private
static
void
ApplyEdit
(
SyntaxEditor
editor
,
ISyntaxFactsService
syntaxFacts
,
Diagnostic
diagnostic
)
{
var
root
=
editor
.
OriginalRoot
;
var
conditionalExpression
=
root
.
FindNode
(
diagnostic
.
AdditionalLocations
[
0
].
SourceSpan
,
getInnermostNodeForTie
:
true
);
var
conditionalPartHigh
=
root
.
FindNode
(
diagnostic
.
AdditionalLocations
[
1
].
SourceSpan
);
var
whenPart
=
root
.
FindNode
(
diagnostic
.
AdditionalLocations
[
2
].
SourceSpan
);
syntaxFacts
.
GetPartsOfConditionalExpression
(
conditionalExpression
,
out
var
condition
,
out
var
whenTrue
,
out
var
whenFalse
);
var
conditionalPartLow
=
syntaxFacts
.
WalkDownParentheses
(
conditionalPartHigh
);
editor
.
ReplaceNode
(
conditionalExpression
,
(
c
,
g
)
=>
{
syntaxFacts
.
GetPartsOfConditionalExpression
(
c
,
out
var
currentCondition
,
out
var
currentWhenTrue
,
out
var
currentWhenFalse
);
var
coalesceExpression
=
GetCoalesceExpression
(
syntaxFacts
,
g
,
whenPart
,
whenTrue
,
conditionalPartLow
,
currentWhenTrue
,
currentWhenFalse
);
return
coalesceExpression
.
WithAdditionalAnnotations
(
Formatter
.
Annotation
);
});
}
private
static
SyntaxNode
GetCoalesceExpression
(
ISyntaxFactsService
syntaxFacts
,
SyntaxGenerator
generator
,
SyntaxNode
whenPart
,
SyntaxNode
whenTrue
,
SyntaxNode
conditionalPartLow
,
SyntaxNode
currentWhenTrue
,
SyntaxNode
currentWhenFalse
)
{
return
whenPart
==
whenTrue
?
generator
.
CoalesceExpression
(
conditionalPartLow
,
syntaxFacts
.
WalkDownParentheses
(
currentWhenTrue
))
:
generator
.
CoalesceExpression
(
conditionalPartLow
,
syntaxFacts
.
WalkDownParentheses
(
currentWhenFalse
));
}
private
class
MyCodeAction
:
CodeAction
.
DocumentChangeAction
{
public
MyCodeAction
(
Func
<
CancellationToken
,
Task
<
Document
>>
createChangedDocument
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录