Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 3
0
        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));
        }
Ejemplo n.º 4
0
        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);
                }
            }
        }
Ejemplo n.º 5
0
 private static IEnumerable <MElement> GetAnalyzerSamples(AnalyzerMetadata analyzer)
 {
     return(GetAnalyzerSamples(analyzer.Samples, analyzer.Kind));
 }
Ejemplo n.º 6
0
 private static void WriteAnalyzer(XmlWriter writer, AnalyzerMetadata analyzer)
 {
     writer.WriteElementString("li", $"{analyzer.Id} - {analyzer.Title}");
 }
Ejemplo n.º 7
0
        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);
            }
        }
Ejemplo n.º 8
0
 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);
        }