提交 38bf120e 编写于 作者: L Lavanya

Addressed syntax changes, extra new lines, and made appropriate naming changes

上级 0348f1d8
...@@ -23,14 +23,13 @@ namespace Microsoft.CodeAnalysis.CSharp.MakeLocalFunctionStatic ...@@ -23,14 +23,13 @@ namespace Microsoft.CodeAnalysis.CSharp.MakeLocalFunctionStatic
[ExportLanguageService(typeof(MakeLocalFunctionStaticService), LanguageNames.CSharp)] [ExportLanguageService(typeof(MakeLocalFunctionStaticService), LanguageNames.CSharp)]
internal sealed class MakeLocalFunctionStaticService : ILanguageService internal sealed class MakeLocalFunctionStaticService : ILanguageService
{ {
private static readonly char[] s_underscore = { '_' };
private readonly SyntaxGenerator s_generator = CSharpSyntaxGenerator.Instance; private readonly SyntaxGenerator s_generator = CSharpSyntaxGenerator.Instance;
internal async Task<Document> CreateParameterSymbolAsync(Document document, LocalFunctionStatementSyntax localfunction, CancellationToken cancellationToken) internal async Task<Document> CreateParameterSymbolAsync(Document document, LocalFunctionStatementSyntax localFunction, CancellationToken cancellationToken)
{ {
var semanticModel = await document.GetSemanticModelAsync(cancellationToken).ConfigureAwait(true); var semanticModel = await document.GetSemanticModelAsync(cancellationToken).ConfigureAwait(true);
var localFunctionSymbol = semanticModel.GetDeclaredSymbol(localfunction, cancellationToken); var localFunctionSymbol = semanticModel.GetDeclaredSymbol(localFunction, cancellationToken);
var dataFlow = semanticModel.AnalyzeDataFlow(localfunction); var dataFlow = semanticModel.AnalyzeDataFlow(localFunction);
var captures = dataFlow.CapturedInside; var captures = dataFlow.CapturedInside;
var parameters = CreateParameterSymbol(captures); var parameters = CreateParameterSymbol(captures);
...@@ -42,7 +41,6 @@ internal async Task<Document> CreateParameterSymbolAsync(Document document, Loca ...@@ -42,7 +41,6 @@ internal async Task<Document> CreateParameterSymbolAsync(Document document, Loca
var rootOne = await document.GetSyntaxRootAsync(cancellationToken).ConfigureAwait(false); var rootOne = await document.GetSyntaxRootAsync(cancellationToken).ConfigureAwait(false);
var editor = new SyntaxEditor(rootOne, s_generator); var editor = new SyntaxEditor(rootOne, s_generator);
foreach (var referenceSymbol in arrayNode) foreach (var referenceSymbol in arrayNode)
{ {
foreach (var location in referenceSymbol.Locations) foreach (var location in referenceSymbol.Locations)
...@@ -50,7 +48,6 @@ internal async Task<Document> CreateParameterSymbolAsync(Document document, Loca ...@@ -50,7 +48,6 @@ internal async Task<Document> CreateParameterSymbolAsync(Document document, Loca
var root = await location.Document.GetSyntaxRootAsync(cancellationToken).ConfigureAwait(false); var root = await location.Document.GetSyntaxRootAsync(cancellationToken).ConfigureAwait(false);
var syntaxNode = root.FindNode(location.Location.SourceSpan); //Node for the identifier syntax var syntaxNode = root.FindNode(location.Location.SourceSpan); //Node for the identifier syntax
var invocation = (syntaxNode as IdentifierNameSyntax).Parent as InvocationExpressionSyntax; var invocation = (syntaxNode as IdentifierNameSyntax).Parent as InvocationExpressionSyntax;
if (invocation == null) if (invocation == null)
{ {
...@@ -58,31 +55,30 @@ internal async Task<Document> CreateParameterSymbolAsync(Document document, Loca ...@@ -58,31 +55,30 @@ internal async Task<Document> CreateParameterSymbolAsync(Document document, Loca
} }
var argList = invocation.ArgumentList; var argList = invocation.ArgumentList;
List<ArgumentSyntax> x = new List<ArgumentSyntax>(); List<ArgumentSyntax> paramList = new List<ArgumentSyntax>();
foreach (var parameter in parameters) foreach (var parameter in parameters)
{ {
var newArgument = GenerateArgument(parameter, parameter.Name, false); var newArgument = GenerateArgument(parameter, parameter.Name, false);
x.Add(newArgument as ArgumentSyntax); paramList.Add(newArgument as ArgumentSyntax);
} }
var newArgList = argList.WithArguments(argList.Arguments.AddRange(paramList));
var newArgList = argList.WithArguments(argList.Arguments.AddRange(x));
var newInvocation = invocation.WithArgumentList(newArgList); var newInvocation = invocation.WithArgumentList(newArgList);
editor.ReplaceNode(invocation, newInvocation); editor.ReplaceNode(invocation, newInvocation);
} }
} }
//Updates the declaration with the variables passed in //Updates the declaration with the variables passed in
var newLF = CodeGenerator.AddParameterDeclarations(localfunction, parameters, workspace); var updatedLocalFunction = CodeGenerator.AddParameterDeclarations(localFunction, parameters, workspace);
//Adds the modifier static //Adds the modifier static
var modifiers = DeclarationModifiers.From(localFunctionSymbol).WithIsStatic(true); var modifiers = DeclarationModifiers.From(localFunctionSymbol).WithIsStatic(true);
var LFWithStatic = s_generator.WithModifiers(newLF, modifiers); var localFunctionWithStatic = s_generator.WithModifiers(updatedLocalFunction, modifiers);
editor.ReplaceNode(localfunction, LFWithStatic); editor.ReplaceNode(localFunction, localFunctionWithStatic);
var newRoot = editor.GetChangedRoot(); var newRoot = editor.GetChangedRoot();
var newDocument = document.WithSyntaxRoot(newRoot); var newDocument = document.WithSyntaxRoot(newRoot);
...@@ -102,12 +98,11 @@ static ImmutableArray<IParameterSymbol> CreateParameterSymbol(ImmutableArray<ISy ...@@ -102,12 +98,11 @@ static ImmutableArray<IParameterSymbol> CreateParameterSymbol(ImmutableArray<ISy
refKind: RefKind.None, refKind: RefKind.None,
isParams: false, isParams: false,
type: type, type: type,
name: symbol.Name.ToCamelCase().TrimStart(s_underscore))); name: symbol.Name.ToCamelCase()));
} }
return parameters.ToImmutableAndFree(); return parameters.ToImmutableAndFree();
} }
} }
internal SyntaxNode GenerateArgument(IParameterSymbol p, string name, bool shouldUseNamedArguments = false) internal SyntaxNode GenerateArgument(IParameterSymbol p, string name, bool shouldUseNamedArguments = false)
......
...@@ -24,7 +24,6 @@ public PassVariableExplicitlyInLocalStaticFunctionCodeFixProvider() ...@@ -24,7 +24,6 @@ public PassVariableExplicitlyInLocalStaticFunctionCodeFixProvider()
public override ImmutableArray<string> FixableDiagnosticIds => ImmutableArray.Create("CS8421"); public override ImmutableArray<string> FixableDiagnosticIds => ImmutableArray.Create("CS8421");
public sealed override FixAllProvider GetFixAllProvider() public sealed override FixAllProvider GetFixAllProvider()
{ {
// See https://github.com/dotnet/roslyn/blob/master/docs/analyzers/FixAllProvider.md for more information on Fix All Providers // See https://github.com/dotnet/roslyn/blob/master/docs/analyzers/FixAllProvider.md for more information on Fix All Providers
...@@ -42,14 +41,11 @@ public override async Task RegisterCodeFixesAsync(CodeFixContext context) ...@@ -42,14 +41,11 @@ public override async Task RegisterCodeFixesAsync(CodeFixContext context)
var document = context.Document; var document = context.Document;
var cancellationToken = context.CancellationToken; var cancellationToken = context.CancellationToken;
var service = document.GetLanguageService<MakeLocalFunctionStaticService>(); var service = document.GetLanguageService<MakeLocalFunctionStaticService>();
context.RegisterCodeFix( context.RegisterCodeFix(
new MyCodeAction(c => service.CreateParameterSymbolAsync(context.Document, declaration, c)), new MyCodeAction(c => service.CreateParameterSymbolAsync(context.Document, declaration, c)),
diagnostic); diagnostic);
} }
private class MyCodeAction : CodeAction.DocumentChangeAction private class MyCodeAction : CodeAction.DocumentChangeAction
......
...@@ -2975,7 +2975,7 @@ internal class FeaturesResources { ...@@ -2975,7 +2975,7 @@ internal class FeaturesResources {
} }
/// <summary> /// <summary>
/// Passes in local variables explicitly in a static local function. /// Looks up a localized string similar to Pass in local variables explicitly in a static local function.
/// </summary> /// </summary>
internal static string Pass_variable_explicitly_in_local_static_function { internal static string Pass_variable_explicitly_in_local_static_function {
get { get {
......
...@@ -1694,6 +1694,6 @@ This version used in: {2}</value> ...@@ -1694,6 +1694,6 @@ This version used in: {2}</value>
<value>Warning: Semantics may change when converting statement.</value> <value>Warning: Semantics may change when converting statement.</value>
</data> </data>
<data name="Pass_variable_explicitly_in_local_static_function" xml:space="preserve"> <data name="Pass_variable_explicitly_in_local_static_function" xml:space="preserve">
<value>Passes in local variables explicitly in a static local function</value> <value>Pass in local variables explicitly in a static local function</value>
</data> </data>
</root> </root>
\ No newline at end of file
...@@ -318,8 +318,8 @@ ...@@ -318,8 +318,8 @@
<note /> <note />
</trans-unit> </trans-unit>
<trans-unit id="Pass_variable_explicitly_in_local_static_function"> <trans-unit id="Pass_variable_explicitly_in_local_static_function">
<source>Pass_variable_explicitly_in_local_static_function</source> <source>Pass in local variables explicitly in a static local function</source>
<target state="new">Pass_variable_explicitly_in_local_static_function</target> <target state="new">Pass in local variables explicitly in a static local function</target>
<note /> <note />
</trans-unit> </trans-unit>
<trans-unit id="Private_member_0_can_be_removed_as_the_value_assigned_to_it_is_never_read"> <trans-unit id="Private_member_0_can_be_removed_as_the_value_assigned_to_it_is_never_read">
......
...@@ -318,8 +318,8 @@ ...@@ -318,8 +318,8 @@
<note /> <note />
</trans-unit> </trans-unit>
<trans-unit id="Pass_variable_explicitly_in_local_static_function"> <trans-unit id="Pass_variable_explicitly_in_local_static_function">
<source>Pass_variable_explicitly_in_local_static_function</source> <source>Pass in local variables explicitly in a static local function</source>
<target state="new">Pass_variable_explicitly_in_local_static_function</target> <target state="new">Pass in local variables explicitly in a static local function</target>
<note /> <note />
</trans-unit> </trans-unit>
<trans-unit id="Private_member_0_can_be_removed_as_the_value_assigned_to_it_is_never_read"> <trans-unit id="Private_member_0_can_be_removed_as_the_value_assigned_to_it_is_never_read">
......
...@@ -318,8 +318,8 @@ ...@@ -318,8 +318,8 @@
<note /> <note />
</trans-unit> </trans-unit>
<trans-unit id="Pass_variable_explicitly_in_local_static_function"> <trans-unit id="Pass_variable_explicitly_in_local_static_function">
<source>Pass_variable_explicitly_in_local_static_function</source> <source>Pass in local variables explicitly in a static local function</source>
<target state="new">Pass_variable_explicitly_in_local_static_function</target> <target state="new">Pass in local variables explicitly in a static local function</target>
<note /> <note />
</trans-unit> </trans-unit>
<trans-unit id="Private_member_0_can_be_removed_as_the_value_assigned_to_it_is_never_read"> <trans-unit id="Private_member_0_can_be_removed_as_the_value_assigned_to_it_is_never_read">
......
...@@ -318,8 +318,8 @@ ...@@ -318,8 +318,8 @@
<note /> <note />
</trans-unit> </trans-unit>
<trans-unit id="Pass_variable_explicitly_in_local_static_function"> <trans-unit id="Pass_variable_explicitly_in_local_static_function">
<source>Pass_variable_explicitly_in_local_static_function</source> <source>Pass in local variables explicitly in a static local function</source>
<target state="new">Pass_variable_explicitly_in_local_static_function</target> <target state="new">Pass in local variables explicitly in a static local function</target>
<note /> <note />
</trans-unit> </trans-unit>
<trans-unit id="Private_member_0_can_be_removed_as_the_value_assigned_to_it_is_never_read"> <trans-unit id="Private_member_0_can_be_removed_as_the_value_assigned_to_it_is_never_read">
......
...@@ -318,8 +318,8 @@ ...@@ -318,8 +318,8 @@
<note /> <note />
</trans-unit> </trans-unit>
<trans-unit id="Pass_variable_explicitly_in_local_static_function"> <trans-unit id="Pass_variable_explicitly_in_local_static_function">
<source>Pass_variable_explicitly_in_local_static_function</source> <source>Pass in local variables explicitly in a static local function</source>
<target state="new">Pass_variable_explicitly_in_local_static_function</target> <target state="new">Pass in local variables explicitly in a static local function</target>
<note /> <note />
</trans-unit> </trans-unit>
<trans-unit id="Private_member_0_can_be_removed_as_the_value_assigned_to_it_is_never_read"> <trans-unit id="Private_member_0_can_be_removed_as_the_value_assigned_to_it_is_never_read">
......
...@@ -318,8 +318,8 @@ ...@@ -318,8 +318,8 @@
<note /> <note />
</trans-unit> </trans-unit>
<trans-unit id="Pass_variable_explicitly_in_local_static_function"> <trans-unit id="Pass_variable_explicitly_in_local_static_function">
<source>Pass_variable_explicitly_in_local_static_function</source> <source>Pass in local variables explicitly in a static local function</source>
<target state="new">Pass_variable_explicitly_in_local_static_function</target> <target state="new">Pass in local variables explicitly in a static local function</target>
<note /> <note />
</trans-unit> </trans-unit>
<trans-unit id="Private_member_0_can_be_removed_as_the_value_assigned_to_it_is_never_read"> <trans-unit id="Private_member_0_can_be_removed_as_the_value_assigned_to_it_is_never_read">
......
...@@ -318,8 +318,8 @@ ...@@ -318,8 +318,8 @@
<note /> <note />
</trans-unit> </trans-unit>
<trans-unit id="Pass_variable_explicitly_in_local_static_function"> <trans-unit id="Pass_variable_explicitly_in_local_static_function">
<source>Pass_variable_explicitly_in_local_static_function</source> <source>Pass in local variables explicitly in a static local function</source>
<target state="new">Pass_variable_explicitly_in_local_static_function</target> <target state="new">Pass in local variables explicitly in a static local function</target>
<note /> <note />
</trans-unit> </trans-unit>
<trans-unit id="Private_member_0_can_be_removed_as_the_value_assigned_to_it_is_never_read"> <trans-unit id="Private_member_0_can_be_removed_as_the_value_assigned_to_it_is_never_read">
......
...@@ -318,8 +318,8 @@ ...@@ -318,8 +318,8 @@
<note /> <note />
</trans-unit> </trans-unit>
<trans-unit id="Pass_variable_explicitly_in_local_static_function"> <trans-unit id="Pass_variable_explicitly_in_local_static_function">
<source>Pass_variable_explicitly_in_local_static_function</source> <source>Pass in local variables explicitly in a static local function</source>
<target state="new">Pass_variable_explicitly_in_local_static_function</target> <target state="new">Pass in local variables explicitly in a static local function</target>
<note /> <note />
</trans-unit> </trans-unit>
<trans-unit id="Private_member_0_can_be_removed_as_the_value_assigned_to_it_is_never_read"> <trans-unit id="Private_member_0_can_be_removed_as_the_value_assigned_to_it_is_never_read">
......
...@@ -318,8 +318,8 @@ ...@@ -318,8 +318,8 @@
<note /> <note />
</trans-unit> </trans-unit>
<trans-unit id="Pass_variable_explicitly_in_local_static_function"> <trans-unit id="Pass_variable_explicitly_in_local_static_function">
<source>Pass_variable_explicitly_in_local_static_function</source> <source>Pass in local variables explicitly in a static local function</source>
<target state="new">Pass_variable_explicitly_in_local_static_function</target> <target state="new">Pass in local variables explicitly in a static local function</target>
<note /> <note />
</trans-unit> </trans-unit>
<trans-unit id="Private_member_0_can_be_removed_as_the_value_assigned_to_it_is_never_read"> <trans-unit id="Private_member_0_can_be_removed_as_the_value_assigned_to_it_is_never_read">
......
...@@ -318,8 +318,8 @@ ...@@ -318,8 +318,8 @@
<note /> <note />
</trans-unit> </trans-unit>
<trans-unit id="Pass_variable_explicitly_in_local_static_function"> <trans-unit id="Pass_variable_explicitly_in_local_static_function">
<source>Pass_variable_explicitly_in_local_static_function</source> <source>Pass in local variables explicitly in a static local function</source>
<target state="new">Pass_variable_explicitly_in_local_static_function</target> <target state="new">Pass in local variables explicitly in a static local function</target>
<note /> <note />
</trans-unit> </trans-unit>
<trans-unit id="Private_member_0_can_be_removed_as_the_value_assigned_to_it_is_never_read"> <trans-unit id="Private_member_0_can_be_removed_as_the_value_assigned_to_it_is_never_read">
......
...@@ -318,8 +318,8 @@ ...@@ -318,8 +318,8 @@
<note /> <note />
</trans-unit> </trans-unit>
<trans-unit id="Pass_variable_explicitly_in_local_static_function"> <trans-unit id="Pass_variable_explicitly_in_local_static_function">
<source>Pass_variable_explicitly_in_local_static_function</source> <source>Pass in local variables explicitly in a static local function</source>
<target state="new">Pass_variable_explicitly_in_local_static_function</target> <target state="new">Pass in local variables explicitly in a static local function</target>
<note /> <note />
</trans-unit> </trans-unit>
<trans-unit id="Private_member_0_can_be_removed_as_the_value_assigned_to_it_is_never_read"> <trans-unit id="Private_member_0_can_be_removed_as_the_value_assigned_to_it_is_never_read">
......
...@@ -318,8 +318,8 @@ ...@@ -318,8 +318,8 @@
<note /> <note />
</trans-unit> </trans-unit>
<trans-unit id="Pass_variable_explicitly_in_local_static_function"> <trans-unit id="Pass_variable_explicitly_in_local_static_function">
<source>Pass_variable_explicitly_in_local_static_function</source> <source>Pass in local variables explicitly in a static local function</source>
<target state="new">Pass_variable_explicitly_in_local_static_function</target> <target state="new">Pass in local variables explicitly in a static local function</target>
<note /> <note />
</trans-unit> </trans-unit>
<trans-unit id="Private_member_0_can_be_removed_as_the_value_assigned_to_it_is_never_read"> <trans-unit id="Private_member_0_can_be_removed_as_the_value_assigned_to_it_is_never_read">
......
...@@ -318,8 +318,8 @@ ...@@ -318,8 +318,8 @@
<note /> <note />
</trans-unit> </trans-unit>
<trans-unit id="Pass_variable_explicitly_in_local_static_function"> <trans-unit id="Pass_variable_explicitly_in_local_static_function">
<source>Pass_variable_explicitly_in_local_static_function</source> <source>Pass in local variables explicitly in a static local function</source>
<target state="new">Pass_variable_explicitly_in_local_static_function</target> <target state="new">Pass in local variables explicitly in a static local function</target>
<note /> <note />
</trans-unit> </trans-unit>
<trans-unit id="Private_member_0_can_be_removed_as_the_value_assigned_to_it_is_never_read"> <trans-unit id="Private_member_0_can_be_removed_as_the_value_assigned_to_it_is_never_read">
......
...@@ -272,17 +272,17 @@ protected override TDeclarationNode AddNamespace<TDeclarationNode>(TDeclarationN ...@@ -272,17 +272,17 @@ protected override TDeclarationNode AddNamespace<TDeclarationNode>(TDeclarationN
} }
public override TDeclarationNode AddParameters<TDeclarationNode>( public override TDeclarationNode AddParameters<TDeclarationNode>(
TDeclarationNode destinationMember, TDeclarationNode destination,
IEnumerable<IParameterSymbol> parameters, IEnumerable<IParameterSymbol> parameters,
CodeGenerationOptions options, CodeGenerationOptions options,
CancellationToken cancellationToken) CancellationToken cancellationToken)
{ {
var s_generator = CSharpSyntaxGenerator.Instance; var syntaxGenerator = CSharpSyntaxGenerator.Instance;
var currentParameterList = s_generator.GetParameters(destinationMember); var currentParameterList = syntaxGenerator.GetParameters(destination);
if (currentParameterList == null) if (currentParameterList == null)
{ {
return destinationMember; return destination;
} }
var currentParamsCount = currentParameterList.Count; var currentParamsCount = currentParameterList.Count;
...@@ -300,7 +300,7 @@ protected override TDeclarationNode AddNamespace<TDeclarationNode>(TDeclarationN ...@@ -300,7 +300,7 @@ protected override TDeclarationNode AddNamespace<TDeclarationNode>(TDeclarationN
} }
var finalMember = s_generator.AddParameters(destinationMember, newParams); var finalMember = syntaxGenerator.AddParameters(destination, newParams.ToImmutableAndFree());
return Cast<TDeclarationNode>(finalMember); return Cast<TDeclarationNode>(finalMember);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册