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

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

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