Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
1d26fc4a
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,发现更多精彩内容 >>
提交
1d26fc4a
编写于
1月 15, 2020
作者:
I
Ivan Basov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
supporitng tests scenarios with no parameters in the original configuration
上级
60ecc6e2
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
120 addition
and
79 deletion
+120
-79
src/EditorFeatures/CSharpTest/ChangeSignature/AddParameterTests.cs
...rFeatures/CSharpTest/ChangeSignature/AddParameterTests.cs
+25
-0
src/EditorFeatures/VisualBasicTest/ChangeSignature/AddParameterTests.vb
...ures/VisualBasicTest/ChangeSignature/AddParameterTests.vb
+25
-0
src/Features/CSharp/Portable/ChangeSignature/CSharpChangeSignatureService.cs
.../Portable/ChangeSignature/CSharpChangeSignatureService.cs
+5
-47
src/Features/Core/Portable/ChangeSignature/AbstractChangeSignatureService.cs
...ortable/ChangeSignature/AbstractChangeSignatureService.cs
+56
-0
src/Features/VisualBasic/Portable/ChangeSignature/VisualBasicChangeSignatureService.vb
...able/ChangeSignature/VisualBasicChangeSignatureService.vb
+9
-32
未找到文件。
src/EditorFeatures/CSharpTest/ChangeSignature/AddParameterTests.cs
浏览文件 @
1d26fc4a
...
...
@@ -107,6 +107,31 @@ static void M(this object o, string b, int newIntegerParameter, string newString
await
TestChangeSignatureViaCommandAsync
(
LanguageNames
.
CSharp
,
markup
,
updatedSignature
:
updatedSignature
,
expectedUpdatedInvocationDocumentCode
:
updatedCode
);
}
[
WpfFact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
ChangeSignature
)]
public
async
Task
AddParameterToParameterlessMethod
()
{
var
markup
=
@"
static class Ext
{
static void $$M()
{
M();
}
}"
;
var
updatedSignature
=
new
[]
{
new
AddedParameterOrExistingIndex
(
new
AddedParameter
(
"int"
,
"newIntegerParameter"
,
"12345"
))};
var
updatedCode
=
@"
static class Ext
{
static void M(int newIntegerParameter)
{
M(12345);
}
}"
;
await
TestChangeSignatureViaCommandAsync
(
LanguageNames
.
CSharp
,
markup
,
updatedSignature
:
updatedSignature
,
expectedUpdatedInvocationDocumentCode
:
updatedCode
);
}
[
WpfFact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
ChangeSignature
)]
public
async
Task
AddAndReorderLocalFunctionParametersAndArguments_OnDeclaration
()
{
...
...
src/EditorFeatures/VisualBasicTest/ChangeSignature/AddParameterTests.vb
浏览文件 @
1d26fc4a
...
...
@@ -87,6 +87,31 @@ Module Program
End
Sub
End
Module
]]
></
Text
>
.
NormalizedValue
()
Await
TestChangeSignatureViaCommandAsync
(
LanguageNames
.
VisualBasic
,
markup
,
updatedSignature
:
=
permutation
,
expectedUpdatedInvocationDocumentCode
:
=
updatedCode
)
End
Function
<
WpfFact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
ChangeSignature
)
>
Public
Async
Function
TestAddParameterToParameterlessMethod
()
As
Task
Dim
markup
=
<
Text
><
!
[
CDATA
[
Module
Program
Sub
$$
M
()
M
()
End
Sub
End
Module
]]
></
Text
>
.
NormalizedValue
()
Dim
permutation
=
{
New
AddedParameterOrExistingIndex
(
New
AddedParameter
(
"Integer"
,
"newIntegerParameter"
,
"12345"
))}
Dim
updatedCode
=
<
Text
><
!
[
CDATA
[
Module
Program
Sub
M
(
newIntegerParameter
As
Integer
)
M
(
newIntegerParameter
:
=
12345
)
End
Sub
End
Module
]]
></
Text
>
.
NormalizedValue
()
Await
TestChangeSignatureViaCommandAsync
(
LanguageNames
.
VisualBasic
,
markup
,
updatedSignature
:
=
permutation
,
expectedUpdatedInvocationDocumentCode
:
=
updatedCode
)
...
...
src/Features/CSharp/Portable/ChangeSignature/CSharpChangeSignatureService.cs
浏览文件 @
1d26fc4a
...
...
@@ -8,6 +8,7 @@
using
System.Linq
;
using
System.Threading
;
using
System.Threading.Tasks
;
using
Microsoft.CodeAnalysis
;
using
Microsoft.CodeAnalysis.ChangeSignature
;
using
Microsoft.CodeAnalysis.CSharp.Syntax
;
using
Microsoft.CodeAnalysis.FindSymbols
;
...
...
@@ -365,7 +366,6 @@ private SyntaxNode GetNodeContainingTargetNode(SyntaxNode matchingNode)
else
{
// No parameters. Change to a parenthesized lambda expression
var
emptyParameterList
=
SyntaxFactory
.
ParameterList
()
.
WithLeadingTrivia
(
lambda
.
Parameter
.
GetLeadingTrivia
())
.
WithTrailingTrivia
(
lambda
.
Parameter
.
GetTrailingTrivia
());
...
...
@@ -440,7 +440,6 @@ private SyntaxNode GetNodeContainingTargetNode(SyntaxNode matchingNode)
}
// Handle references in crefs
if
(
updatedNode
.
IsKind
(
SyntaxKind
.
NameMemberCref
))
{
var
nameMemberCref
=
(
NameMemberCrefSyntax
)
updatedNode
;
...
...
@@ -550,52 +549,11 @@ private static CrefParameterSyntax CreateNewCrefParameterSyntax(AddedParameter a
SignatureChange
updatedSignature
,
Func
<
AddedParameter
,
T
>
createNewParameterMethod
)
where
T
:
SyntaxNode
{
var
originalParameters
=
updatedSignature
.
OriginalConfiguration
.
ToListOfParameters
();
var
reorderedParameters
=
updatedSignature
.
UpdatedConfiguration
.
ToListOfParameters
();
int
numAddedParameters
=
0
;
var
newParameters
=
new
List
<
T
>();
for
(
var
index
=
0
;
index
<
reorderedParameters
.
Count
;
index
++)
{
var
newParam
=
reorderedParameters
[
index
];
var
pos
=
originalParameters
.
IndexOf
(
p
=>
p
.
Symbol
==
newParam
.
Symbol
);
if
(
pos
==
-
1
)
{
// Added parameter
numAddedParameters
++;
var
newParameter
=
createNewParameterMethod
(
newParam
as
AddedParameter
);
newParameters
.
Add
(
newParameter
);
}
else
{
var
param
=
list
[
pos
];
// copy whitespace trivia from original position
param
=
TransferLeadingWhitespaceTrivia
(
param
,
list
[
index
-
numAddedParameters
]);
newParameters
.
Add
(
param
);
}
}
int
numSeparatorsToSkip
;
if
(
originalParameters
.
Count
==
0
)
{
// ()
// Adding X parameters, need to add X-1 separators.
numSeparatorsToSkip
=
originalParameters
.
Count
-
reorderedParameters
.
Count
+
1
;
}
else
{
// (a,b,c)
// Adding X parameters, need to add X separators.
numSeparatorsToSkip
=
originalParameters
.
Count
-
reorderedParameters
.
Count
;
}
return
SyntaxFactory
.
SeparatedList
(
newParameters
,
GetSeparators
(
list
,
numSeparatorsToSkip
));
var
permuteDeclarationBase
=
base
.
PermuteDeclarationBase
<
T
>(
list
,
updatedSignature
,
createNewParameterMethod
);
return
SyntaxFactory
.
SeparatedList
(
permuteDeclarationBase
.
Item1
,
permuteDeclarationBase
.
Item2
);
}
pr
ivate
static
T
TransferLeadingWhitespaceTrivia
<
T
>(
T
newArgument
,
SyntaxNode
oldArgument
)
where
T
:
SyntaxNode
pr
otected
override
T
TransferLeadingWhitespaceTrivia
<
T
>(
T
newArgument
,
SyntaxNode
oldArgument
)
{
var
oldTrivia
=
oldArgument
.
GetLeadingTrivia
();
var
oldOnlyHasWhitespaceTrivia
=
oldTrivia
.
All
(
t
=>
t
.
IsKind
(
SyntaxKind
.
WhitespaceTrivia
));
...
...
@@ -647,7 +605,7 @@ private static CrefParameterSyntax CreateNewCrefParameterSyntax(AddedParameter a
return
SyntaxFactory
.
SeparatedList
(
newArgumentsWithTrivia
,
GetSeparators
(
arguments
,
numSeparatorsToSkip
));
}
private
static
List
<
T
>
TransferLeadingWhitespaceTrivia
<
T
,
U
>(
IEnumerable
<
T
>
newArguments
,
SeparatedSyntaxList
<
U
>
oldArguments
)
private
List
<
T
>
TransferLeadingWhitespaceTrivia
<
T
,
U
>(
IEnumerable
<
T
>
newArguments
,
SeparatedSyntaxList
<
U
>
oldArguments
)
where
T
:
SyntaxNode
where
U
:
SyntaxNode
{
...
...
src/Features/Core/Portable/ChangeSignature/AbstractChangeSignatureService.cs
浏览文件 @
1d26fc4a
...
...
@@ -48,6 +48,8 @@ internal abstract class AbstractChangeSignatureService : ILanguageService
protected
abstract
IEnumerable
<
AbstractFormattingRule
>
GetFormattingRules
(
Document
document
);
protected
abstract
T
TransferLeadingWhitespaceTrivia
<
T
>(
T
newArgument
,
SyntaxNode
oldArgument
)
where
T
:
SyntaxNode
;
public
async
Task
<
ImmutableArray
<
ChangeSignatureCodeAction
>>
GetChangeSignatureCodeActionAsync
(
Document
document
,
TextSpan
span
,
CancellationToken
cancellationToken
)
{
var
context
=
await
GetContextAsync
(
document
,
span
.
Start
,
restrictToDeclarations
:
true
,
cancellationToken
:
cancellationToken
).
ConfigureAwait
(
false
);
...
...
@@ -598,9 +600,63 @@ protected static int GetParameterIndex<TNode>(SeparatedSyntaxList<TNode> paramet
return
parameters
.
Count
-
1
;
}
protected
(
IEnumerable
<
T
>,
IEnumerable
<
SyntaxToken
>)
PermuteDeclarationBase
<
T
>(
SeparatedSyntaxList
<
T
>
list
,
SignatureChange
updatedSignature
,
Func
<
AddedParameter
,
T
>
createNewParameterMethod
)
where
T
:
SyntaxNode
{
var
originalParameters
=
updatedSignature
.
OriginalConfiguration
.
ToListOfParameters
();
var
reorderedParameters
=
updatedSignature
.
UpdatedConfiguration
.
ToListOfParameters
();
int
numAddedParameters
=
0
;
var
newParameters
=
new
List
<
T
>();
for
(
var
index
=
0
;
index
<
reorderedParameters
.
Count
;
index
++)
{
var
newParam
=
reorderedParameters
[
index
];
var
pos
=
originalParameters
.
IndexOf
(
p
=>
p
.
Symbol
==
newParam
.
Symbol
);
if
(
pos
==
-
1
)
{
// Added parameter
numAddedParameters
++;
var
newParameter
=
createNewParameterMethod
(
newParam
as
AddedParameter
);
newParameters
.
Add
(
newParameter
);
}
else
{
var
param
=
list
[
pos
];
// copy whitespace trivia from original position
param
=
TransferLeadingWhitespaceTrivia
(
param
,
list
[
index
-
numAddedParameters
]);
newParameters
.
Add
(
param
);
}
}
int
numSeparatorsToSkip
;
if
(
originalParameters
.
Count
==
0
)
{
// ()
// Adding X parameters, need to add X-1 separators.
numSeparatorsToSkip
=
originalParameters
.
Count
-
reorderedParameters
.
Count
+
1
;
}
else
{
// (a,b,c)
// Adding X parameters, need to add X separators.
numSeparatorsToSkip
=
originalParameters
.
Count
-
reorderedParameters
.
Count
;
}
return
(
newParameters
,
GetSeparators
(
list
,
numSeparatorsToSkip
));
}
protected
List
<
SyntaxToken
>
GetSeparators
<
T
>(
SeparatedSyntaxList
<
T
>
arguments
,
int
numSeparatorsToSkip
=
0
)
where
T
:
SyntaxNode
{
var
separators
=
new
List
<
SyntaxToken
>();
if
(
numSeparatorsToSkip
<
0
)
{
numSeparatorsToSkip
=
0
;
}
for
(
int
i
=
0
;
i
<
arguments
.
SeparatorCount
-
numSeparatorsToSkip
;
i
++)
{
...
...
src/Features/VisualBasic/Portable/ChangeSignature/VisualBasicChangeSignatureService.vb
浏览文件 @
1d26fc4a
...
...
@@ -11,6 +11,7 @@ Imports Microsoft.CodeAnalysis.Host.Mef
Imports
Microsoft.CodeAnalysis.PooledObjects
Imports
System.Composition
Imports
Microsoft.CodeAnalysis.Utilities
Imports
Microsoft.CodeAnalysis
Namespace
Microsoft.CodeAnalysis.VisualBasic.ChangeSignature
<
ExportLanguageService
(
GetType
(
AbstractChangeSignatureService
),
LanguageNames
.
VisualBasic
),
[
Shared
]
>
...
...
@@ -438,37 +439,8 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.ChangeSignature
parameterList
As
SeparatedSyntaxList
(
Of
T
),
updatedSignature
As
SignatureChange
,
createNewParameterMethod
As
Func
(
Of
AddedParameter
,
T
))
As
SeparatedSyntaxList
(
Of
T
)
Dim
originalParameterSymbols
=
updatedSignature
.
OriginalConfiguration
.
ToListOfParameters
().
Select
(
Function
(
p
)
p
.
Symbol
).
ToArray
()
Dim
reorderedParameters
=
updatedSignature
.
UpdatedConfiguration
.
ToListOfParameters
()
Dim
numSeparatorsToSkip
=
originalParameterSymbols
.
Length
-
reorderedParameters
.
Count
' The parameter list could be empty if dealing with delegates.
If
parameterList
.
IsEmpty
()
Then
Return
SyntaxFactory
.
SeparatedList
(
parameterList
,
GetSeparators
(
parameterList
,
numSeparatorsToSkip
))
End
If
Dim
numAddedParameters
=
0
Dim
newParameters
=
New
List
(
Of
T
)
For
Each
newParam
In
reorderedParameters
Dim
existingParam
=
TryCast
(
newParam
,
ExistingParameter
)
If
existingParam
IsNot
Nothing
Then
Dim
pos
=
originalParameterSymbols
.
IndexOf
(
existingParam
.
Symbol
)
Dim
param
=
parameterList
(
pos
)
newParameters
.
Add
(
param
)
Else
' Added parameter
numAddedParameters
+=
1
Dim
newParameter
=
createNewParameterMethod
(
DirectCast
(
newParam
,
AddedParameter
))
newParameters
.
Add
(
newParameter
)
End
If
Next
Return
SyntaxFactory
.
SeparatedList
(
newParameters
,
GetSeparators
(
parameterList
,
numSeparatorsToSkip
))
End
Function
Private
Shared
Function
CreateNewArgumentSyntax
(
addedParameter
As
AddedParameter
)
As
ArgumentSyntax
Return
SyntaxFactory
.
SimpleArgument
(
SyntaxFactory
.
IdentifierName
(
SyntaxFactory
.
Identifier
(
addedParameter
.
TypeName
)))
Dim
basePermuteDeclaration
=
PermuteDeclarationBase
(
parameterList
,
updatedSignature
,
createNewParameterMethod
)
Return
SyntaxFactory
.
SeparatedList
(
basePermuteDeclaration
.
Item1
,
basePermuteDeclaration
.
Item2
)
End
Function
Private
Shared
Function
CreateNewParameterSyntax
(
addedParameter
As
AddedParameter
)
As
ParameterSyntax
...
...
@@ -623,7 +595,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.ChangeSignature
SyntaxFactory
.
List
(
extraNodeList
.
AsEnumerable
()))
extraDocComments
=
extraDocComments
.
WithLeadingTrivia
(
SyntaxFactory
.
DocumentationCommentExteriorTrivia
(
"''' "
)).
WithTrailingTrivia
(
node
.
GetTrailingTrivia
()).
WithTrailingTrivia
(
SyntaxFactory
.
EndOfLine
(
document
.
Project
.
Solution
.
Workspace
.
Options
.
GetOption
(
FormattingOptions
.
NewLine
,
LanguageNames
.
CSharp
)),
WithTrailingTrivia
(
SyntaxFactory
.
EndOfLine
(
document
.
Project
.
Solution
.
Workspace
.
Options
.
GetOption
(
FormattingOptions
.
NewLine
,
LanguageNames
.
CSharp
)),
lastWhiteSpaceTrivia
)
Dim
newTrivia
=
SyntaxFactory
.
Trivia
(
extraDocComments
)
...
...
@@ -696,5 +668,10 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.ChangeSignature
Protected
Overrides
Function
CreateSeparatorSyntaxToken
()
As
SyntaxToken
Return
SyntaxFactory
.
Token
(
SyntaxKind
.
CommaToken
).
WithTrailingTrivia
(
SyntaxFactory
.
ElasticSpace
)
End
Function
Protected
Overrides
Function
TransferLeadingWhitespaceTrivia
(
Of
T
As
SyntaxNode
)(
newArgument
As
T
,
oldArgument
As
SyntaxNode
)
As
T
Return
newArgument
End
Function
End
Class
End
Namespace
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录