dotnet/roslyn
CSharpSyntaxGenerator doesn't appear to simplify when generating an attribute on a local function
Aberta
#52.039 aberto em 22 de mar. de 2021
Area-CompilersConcept-Continuous ImprovementFeature - Local Functionshelp wanted
Métricas do repositório
- Stars
- (20.414 estrelas)
- Métricas de merge de PR
- (Mesclagem média 6d 17h) (256 fundiu PRs em 30d)
Description
I wrote the following code to add attributes to particular declarations
var editor = new SyntaxEditor (root, document.Project.Solution.Workspace);
var generator = editor.Generator;
var semanticModel = await document.GetSemanticModelAsync (cancellationToken).ConfigureAwait (false);
if (semanticModel is null) {
return document;
}
var methodSymbol = (IMethodSymbol) semanticModel.GetDeclaredSymbol (methodDecl);
var name = semanticModel.GetSymbolInfo (targetNode).Symbol?.Name;
SyntaxNode[] attrArgs;
if (string.IsNullOrEmpty (name) || HasPublicAccessibility (methodSymbol)) {
attrArgs = Array.Empty<SyntaxNode> ();
} else {
attrArgs = new[] { generator.LiteralExpression ($"calls {name}") };
}
var newAttribute = generator
.Attribute (generator.TypeExpression (requiresUnreferencedCodeSymbol), attrArgs)
.WithAdditionalAnnotations (
Simplifier.Annotation,
Simplifier.AddImportsAnnotation);
editor.AddAttribute (methodDecl, newAttribute);
return document.WithSyntaxRoot (editor.GetChangedRoot ());
This generates an attribute correctly for local functions, but the type name is always fully qualified. Declaration forms that are not local functions appear to work correctly.