Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
e0b01078
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,发现更多精彩内容 >>
提交
e0b01078
编写于
7月 10, 2017
作者:
C
CyrusNajmabadi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Simplufy code.
上级
1c33e881
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
175 addition
and
23 deletion
+175
-23
src/EditorFeatures/CSharpTest/AddParameter/AddParameterTests.cs
...itorFeatures/CSharpTest/AddParameter/AddParameterTests.cs
+117
-0
src/Features/Core/Portable/AddParameter/AbstractAddParameterCodeFixProvider.cs
...table/AddParameter/AbstractAddParameterCodeFixProvider.cs
+58
-23
未找到文件。
src/EditorFeatures/CSharpTest/AddParameter/AddParameterTests.cs
浏览文件 @
e0b01078
...
...
@@ -339,6 +339,123 @@ private void Foo()
new C(0, 0, true);
}
}"
,
ignoreTrivia
:
false
);
}
[
WorkItem
(
20708
,
"https://github.com/dotnet/roslyn/issues/20708"
)]
[
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsAddParameter
)]
public
async
Task
TestMultiLineParameters4
()
{
await
TestInRegularAndScriptAsync
(
@"
class C
{
public C(
int i,
/* foo */ int j)
{
}
private void Foo()
{
new [|C|](true, 0, 0);
}
}"
,
@"
class C
{
public C(
bool v,
int i,
/* foo */ int j)
{
}
private void Foo()
{
new C(true, 0, 0);
}
}"
,
ignoreTrivia
:
false
);
}
[
WorkItem
(
20708
,
"https://github.com/dotnet/roslyn/issues/20708"
)]
[
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsAddParameter
)]
public
async
Task
TestMultiLineParameters5
()
{
await
TestInRegularAndScriptAsync
(
@"
class C
{
public C(
int i,
/* foo */ int j)
{
}
private void Foo()
{
new [|C|](0, true, 0);
}
}"
,
@"
class C
{
public C(
int i,
bool v,
/* foo */ int j)
{
}
private void Foo()
{
new C(0, true, 0);
}
}"
,
ignoreTrivia
:
false
);
}
[
WorkItem
(
20708
,
"https://github.com/dotnet/roslyn/issues/20708"
)]
[
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsAddParameter
)]
public
async
Task
TestMultiLineParameters6
()
{
await
TestInRegularAndScriptAsync
(
@"
class C
{
public C(
int i,
/* foo */ int j)
{
}
private void Foo()
{
new [|C|](0, 0, true);
}
}"
,
@"
class C
{
public C(
int i,
/* foo */ int j,
bool v)
{
}
private void Foo()
{
new C(0, 0, true);
}
}"
,
ignoreTrivia
:
false
);
}
}
...
...
src/Features/Core/Portable/AddParameter/AbstractAddParameterCodeFixProvider.cs
浏览文件 @
e0b01078
...
...
@@ -183,9 +183,14 @@ private int NonParamsParameterCount(IMethodSymbol method)
var
parameterDeclaration
=
editor
.
Generator
.
ParameterDeclaration
(
parameterSymbol
)
.
WithAdditionalAnnotations
(
Formatter
.
Annotation
);
var
existingParameters
=
editor
.
Generator
.
GetParameters
(
methodDeclaration
);
var
insertionIndex
=
isNamedArgument
?
existingParameters
.
Count
:
argumentList
.
IndexOf
(
argument
);
AddParameter
(
syntaxFacts
,
editor
,
methodDeclaration
,
isNamedArgument
,
argument
,
argumentList
,
parameterDeclaration
,
cancellationToken
);
syntaxFacts
,
editor
,
methodDeclaration
,
argument
,
insertionIndex
,
parameterDeclaration
,
cancellationToken
);
var
newRoot
=
editor
.
GetChangedRoot
();
var
newDocument
=
methodDocument
.
WithSyntaxRoot
(
newRoot
);
...
...
@@ -231,19 +236,18 @@ private int NonParamsParameterCount(IMethodSymbol method)
ISyntaxFactsService
syntaxFacts
,
SyntaxEditor
editor
,
SyntaxNode
declaration
,
bool
isNamedArgument
,
TArgumentSyntax
argument
,
SeparatedSyntaxList
<
TArgumentSyntax
>
argumentList
,
int
insertionIndex
,
SyntaxNode
parameterDeclaration
,
CancellationToken
cancellationToken
)
{
var
sourceText
=
declaration
.
SyntaxTree
.
GetText
(
cancellationToken
);
var
generator
=
editor
.
Generator
;
var
existingParameters
=
generator
.
GetParameters
(
declaration
);
var
placeOnNewLine
=
ShouldPlaceParametersOnNewLine
(
existingParameters
,
cancellationToken
);
var
argumentIndex
=
argumentList
.
IndexOf
(
argument
);
if
(
isNamedArgument
||
argumentIndex
==
existingParameters
.
Count
)
if
(
insertionIndex
==
existingParameters
.
Count
)
{
if
(
placeOnNewLine
)
{
...
...
@@ -262,21 +266,52 @@ private int NonParamsParameterCount(IMethodSymbol method)
// Inserting the parameter somewhere other than the end.
if
(
placeOnNewLine
)
{
if
(
argument
Index
==
0
)
if
(
insertion
Index
==
0
)
{
// We want to insert the parameter at the front of the exsiting parameter
// list. That means we need to move the current first parameter to a new
// line. Give the current first parameter the indentation of the second
// parameter in the list.
editor
.
InsertParameter
(
declaration
,
argumentIndex
,
parameterDeclaration
);
var
nextParameter
=
existingParameters
[
argumentIndex
];
var
firstParameter
=
existingParameters
[
0
];
var
previousToken
=
firstParameter
.
GetFirstToken
().
GetPreviousToken
();
var
leadingIndentation
=
GetDesiredLeadingIndentation
(
generator
,
syntaxFacts
,
existingParameters
[
argumentIndex
+
1
],
includeLeadingNewLine
:
true
);
editor
.
ReplaceNode
(
nextParameter
,
nextParameter
.
WithPrependedLeadingTrivia
(
leadingIndentation
)
.
WithAdditionalAnnotations
(
Formatter
.
Annotation
));
if
(
sourceText
.
AreOnSameLine
(
previousToken
,
firstParameter
.
GetFirstToken
()))
{
// First parameter is on hte same line as the method.
// We want to insert the parameter at the front of the exsiting parameter
// list. That means we need to move the current first parameter to a new
// line. Give the current first parameter the indentation of the second
// parameter in the list.
editor
.
InsertParameter
(
declaration
,
insertionIndex
,
parameterDeclaration
);
var
nextParameter
=
existingParameters
[
insertionIndex
];
var
nextLeadingIndentation
=
GetDesiredLeadingIndentation
(
generator
,
syntaxFacts
,
existingParameters
[
insertionIndex
+
1
],
includeLeadingNewLine
:
true
);
editor
.
ReplaceNode
(
nextParameter
,
nextParameter
.
WithPrependedLeadingTrivia
(
nextLeadingIndentation
)
.
WithAdditionalAnnotations
(
Formatter
.
Annotation
));
}
else
{
// First parameter is on its own line. No need to adjust its indentation.
// Just copy its indentation over to the parameter we're inserting, and
// make sure the current first parameter gets a newline so it stays on
// its own line.
// We want to insert the parameter at the front of the exsiting parameter
// list. That means we need to move the current first parameter to a new
// line. Give the current first parameter the indentation of the second
// parameter in the list.
var
firstLeadingIndentation
=
GetDesiredLeadingIndentation
(
generator
,
syntaxFacts
,
existingParameters
[
0
],
includeLeadingNewLine
:
false
);
editor
.
InsertParameter
(
declaration
,
insertionIndex
,
parameterDeclaration
.
WithLeadingTrivia
(
firstLeadingIndentation
));
var
nextParameter
=
existingParameters
[
insertionIndex
];
editor
.
ReplaceNode
(
nextParameter
,
nextParameter
.
WithPrependedLeadingTrivia
(
generator
.
ElasticCarriageReturnLineFeed
)
.
WithAdditionalAnnotations
(
Formatter
.
Annotation
));
}
}
else
{
...
...
@@ -287,12 +322,12 @@ private int NonParamsParameterCount(IMethodSymbol method)
// Because we're going to 'steal' the existing comma from that parameter,
// ensure that the next parameter has a new-line added to it so that it will
// still stay on a new line.
var
nextParameter
=
existingParameters
[
argument
Index
];
var
nextParameter
=
existingParameters
[
insertion
Index
];
var
leadingIndentation
=
GetDesiredLeadingIndentation
(
generator
,
syntaxFacts
,
existingParameters
[
argument
Index
],
includeLeadingNewLine
:
false
);
generator
,
syntaxFacts
,
existingParameters
[
insertion
Index
],
includeLeadingNewLine
:
false
);
parameterDeclaration
=
parameterDeclaration
.
WithPrependedLeadingTrivia
(
leadingIndentation
);
editor
.
InsertParameter
(
declaration
,
argument
Index
,
parameterDeclaration
);
editor
.
InsertParameter
(
declaration
,
insertion
Index
,
parameterDeclaration
);
editor
.
ReplaceNode
(
nextParameter
,
nextParameter
.
WithPrependedLeadingTrivia
(
generator
.
ElasticCarriageReturnLineFeed
)
...
...
@@ -301,7 +336,7 @@ private int NonParamsParameterCount(IMethodSymbol method)
}
else
{
editor
.
InsertParameter
(
declaration
,
argument
Index
,
parameterDeclaration
);
editor
.
InsertParameter
(
declaration
,
insertion
Index
,
parameterDeclaration
);
}
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录