Add Roslyn localization extraction for DisplayName attributes

- Issue MatterHackers/MCCentral#4889
Update localizations
This commit is contained in:
John Lewin 2019-01-31 18:51:33 -08:00
parent bba7d2e164
commit d3b2148233
2 changed files with 91 additions and 0 deletions

View file

@ -33,6 +33,7 @@ namespace RoslynLocalizeDetector
public override void Initialize(AnalysisContext context)
{
context.RegisterSyntaxNodeAction(AnalyzeInvocation, SyntaxKind.InvocationExpression);
context.RegisterSyntaxNodeAction(AnalyzeAttributeNodes, SyntaxKind.Attribute);
}
private void AnalyzeInvocation(SyntaxNodeAnalysisContext analysisContext)
@ -74,5 +75,35 @@ namespace RoslynLocalizeDetector
return null;
}
// Find DisplayName attributes and extract localization strings from them
private void AnalyzeAttributeNodes(SyntaxNodeAnalysisContext analysisContext)
{
var node = analysisContext.Node;
var attributSyntax = node as AttributeSyntax;
var name = GetSimpleNameFromNode(attributSyntax);
if (name.Identifier.Value.ToString() == "DisplayName"
&& attributSyntax.ArgumentList.Arguments.FirstOrDefault() is AttributeArgumentSyntax attributeArgument
&& attributeArgument.Expression is LiteralExpressionSyntax literalExpression)
{
var textInvokedOn = literalExpression.Token.ValueText;
localizeListener.Invoke(textInvokedOn);
}
}
private static SimpleNameSyntax GetSimpleNameFromNode(AttributeSyntax node)
{
var identifierNameSyntax = node.Name as IdentifierNameSyntax;
var qualifiedNameSyntax = node.Name as QualifiedNameSyntax;
return
identifierNameSyntax
??
qualifiedNameSyntax?.Right
??
(node.Name as AliasQualifiedNameSyntax).Name;
}
}
}