private static IEnumerable <FieldDeclarationSyntax> CreateMembers(AnalyzerMetadata analyzer) { string id = analyzer.Id; string identifier = analyzer.Identifier; yield return(CreateMember(id, identifier, analyzer.IsObsolete)); }
private static MemberDeclarationSyntax CreateMember( AnalyzerMetadata analyzer, string identifiersClassName, bool useParentProperties = false) { AnalyzerMetadata parent = (useParentProperties) ? analyzer.Parent : null; MemberAccessExpressionSyntax idExpression = SimpleMemberAccessExpression(IdentifierName(identifiersClassName), IdentifierName(parent?.Identifier ?? analyzer.Identifier)); FieldDeclarationSyntax fieldDeclaration = FieldDeclaration( (analyzer.IsObsolete) ? Modifiers.Internal_Static_ReadOnly() : Modifiers.Public_Static_ReadOnly(), IdentifierName("DiagnosticDescriptor"), analyzer.Identifier, SimpleMemberInvocationExpression( SimpleMemberAccessExpression(IdentifierName("DiagnosticDescriptorFactory"), IdentifierName("Default")), IdentifierName("Create"), ArgumentList( Argument( NameColon("id"), idExpression), Argument( NameColon("title"), StringLiteralExpression(parent?.Title ?? analyzer.Title)), Argument( NameColon("messageFormat"), StringLiteralExpression(analyzer.MessageFormat)), Argument( NameColon("category"), SimpleMemberAccessExpression(IdentifierName("DiagnosticCategories"), IdentifierName(parent?.Category ?? analyzer.Category))), Argument( NameColon("defaultSeverity"), SimpleMemberAccessExpression(IdentifierName("DiagnosticSeverity"), IdentifierName(parent?.DefaultSeverity ?? analyzer.DefaultSeverity))), Argument( NameColon("isEnabledByDefault"), BooleanLiteralExpression(parent?.IsEnabledByDefault ?? analyzer.IsEnabledByDefault)), Argument( NameColon("description"), NullLiteralExpression()), Argument( NameColon("helpLinkUri"), idExpression), Argument( NameColon("customTags"), (analyzer.SupportsFadeOut) ? SimpleMemberAccessExpression(IdentifierName("WellKnownDiagnosticTags"), IdentifierName(WellKnownDiagnosticTags.Unnecessary)) : ParseExpression("Array.Empty<string>()")) ))).AddObsoleteAttributeIf(analyzer.IsObsolete, error: true); if (!analyzer.IsObsolete) { var settings = new DocumentationCommentGeneratorSettings( summary: new string[] { analyzer.Id }, indentation: " ", singleLineSummary: true); fieldDeclaration = fieldDeclaration.WithNewSingleLineDocumentationComment(settings); } return(fieldDeclaration); }
public static CompilationUnitSyntax Generate(AnalyzerMetadata analyzer, string className) { string s = _sourceTemplate .Replace("$ClassName$", className) .Replace("$Id$", analyzer.Id) .Replace("$Identifier$", analyzer.Identifier); return(ParseCompilationUnit(s)); }
private static IEnumerable <MElement> GetAnalyzerSamples(AnalyzerMetadata analyzer) { IReadOnlyList <SampleMetadata> samples = analyzer.Samples; if (samples.Count > 0) { yield return(Heading2((samples.Count == 1) ? "Example" : "Examples")); string beforeHeading = (analyzer.Kind == AnalyzerOptionKind.Disable) ? "Code" : "Code with Diagnostic"; foreach (MElement item in GetSamples(samples, Heading3(beforeHeading), Heading3("Code with Fix"))) { yield return(item); } } }
private static IEnumerable <MElement> GetAnalyzerSamples(AnalyzerMetadata analyzer) { return(GetAnalyzerSamples(analyzer.Samples, analyzer.Kind)); }
private static void WriteAnalyzer(XmlWriter writer, AnalyzerMetadata analyzer) { writer.WriteElementString("li", $"{analyzer.Id} - {analyzer.Title}"); }
private static void Main(string[] args) { string rootPath = args[0]; var metadata = new RoslynatorMetadata(rootPath); ImmutableArray <AnalyzerMetadata> analyzers = metadata.Analyzers; ImmutableArray <RefactoringMetadata> refactorings = metadata.Refactorings; ImmutableArray <CompilerDiagnosticMetadata> compilerDiagnostics = metadata.CompilerDiagnostics; foreach (string id in args.Skip(1)) { if (_analyzerIdRegex.IsMatch(id)) { AnalyzerMetadata analyzer = analyzers.FirstOrDefault(f => string.Equals(f.Id, id, StringComparison.OrdinalIgnoreCase)); if (analyzer == null) { Console.WriteLine($"Analyzer '{id}' not found"); continue; } string className = $"{analyzer.Id}{analyzer.Identifier}Tests"; WriteCompilationUnit( $@"Tests\Analyzers.Tests\{className}.cs", AnalyzerTestGenerator.Generate(analyzer, className), autoGenerated: false, normalizeWhitespace: false, fileMustExist: false, overwrite: false); } else if (_refactoringIdRegex.IsMatch(id)) { RefactoringMetadata refactoring = refactorings.FirstOrDefault(f => string.Equals(f.Id, id, StringComparison.OrdinalIgnoreCase)); if (refactoring == null) { Console.WriteLine($"Refactoring '{id}' not found"); continue; } string className = $"{refactoring.Id}{refactoring.Identifier}Tests"; WriteCompilationUnit( $@"Tests\Refactorings.Tests\{className}.cs", RefactoringTestGenerator.Generate(refactoring, className), autoGenerated: false, normalizeWhitespace: false, fileMustExist: false, overwrite: false); } else if (_codeFixIdRegex.IsMatch(id)) { CompilerDiagnosticMetadata compilerDiagnostic = compilerDiagnostics.FirstOrDefault(f => string.Equals(f.Id, id, StringComparison.OrdinalIgnoreCase)); if (compilerDiagnostic == null) { Console.WriteLine($"Compiler diagnostic '{id}' not found"); continue; } string className = $"{compilerDiagnostic.Id}{compilerDiagnostic.Identifier}Tests"; WriteCompilationUnit( $@"Tests\CodeFixes.Tests\{className}.cs", CodeFixTestGenerator.Generate(compilerDiagnostic, className), autoGenerated: false, normalizeWhitespace: false, fileMustExist: false, overwrite: false); } else { Console.WriteLine($"Id '{id}' not recognized"); } } void WriteCompilationUnit( string path, CompilationUnitSyntax compilationUnit, bool autoGenerated = true, bool normalizeWhitespace = true, bool fileMustExist = true, bool overwrite = true) { CodeGenerationHelpers.WriteCompilationUnit( path: Path.Combine(rootPath, path), compilationUnit: compilationUnit, banner: CodeGenerationHelpers.CopyrightBanner, autoGenerated: autoGenerated, normalizeWhitespace: normalizeWhitespace, fileMustExist: fileMustExist, overwrite: overwrite); } }
static string GetAction(AnalyzerMetadata analyzer) { return((analyzer.IsEnabledByDefault) ? analyzer.DefaultSeverity : "None"); }
private static FieldDeclarationSyntax CreateMember(AnalyzerOptionMetadata analyzer, AnalyzerMetadata parent) { string optionKey = analyzer.OptionKey; if (!optionKey.StartsWith("roslynator.", System.StringComparison.Ordinal)) { optionKey = $"roslynator.{analyzer.ParentId}.{optionKey}"; } FieldDeclarationSyntax fieldDeclaration = FieldDeclaration( Modifiers.Internal_Static_ReadOnly(), IdentifierName(nameof(AnalyzerOptionDescriptor)), analyzer.Identifier, ObjectCreationExpression( IdentifierName(nameof(AnalyzerOptionDescriptor)), ArgumentList( (analyzer.Id != null) ? Argument(SimpleMemberAccessExpression(IdentifierName("AnalyzerOptionDiagnosticDescriptors"), IdentifierName(analyzer.Identifier))) : Argument(NullLiteralExpression()), Argument(SimpleMemberAccessExpression(IdentifierName("DiagnosticDescriptors"), IdentifierName(parent.Identifier))), Argument(StringLiteralExpression(optionKey))))); if (analyzer.IsObsolete) { fieldDeclaration = fieldDeclaration.AddObsoleteAttributeIf(analyzer.IsObsolete, error: true); } return(fieldDeclaration); }