Esempio n. 1
0
        private static void Analyze(CompilationAnalysisContext context)
        {
            Version expectedVersion       = new Version(@"1.0.0.0");
            var     additionalFilesHelper = new AdditionalFilesHelper(context.Options, context.Compilation);
            string  value = additionalFilesHelper.GetValueFromEditorConfig(Rule.Id, @"assembly_version");

            if (!string.IsNullOrWhiteSpace(value))
            {
                bool isParseSuccessful = Version.TryParse(value.ToString(), out Version parsedVersion);

                if (!isParseSuccessful)
                {
                    Diagnostic diagnostic = Diagnostic.Create(InvalidExpectedVersionRule, null, value);
                    context.ReportDiagnostic(diagnostic);
                    return;
                }
                expectedVersion = parsedVersion;
            }

            Version actualVersion = context.Compilation.Assembly.Identity.Version;

            if (actualVersion.CompareTo(expectedVersion) != 0)
            {
                Diagnostic diagnostic = Diagnostic.Create(Rule, null, actualVersion.ToString(), expectedVersion.ToString());
                context.ReportDiagnostic(diagnostic);
            }
        }
        protected override void OnTestMethod(SyntaxNodeAnalysisContext context, MethodDeclarationSyntax methodDeclaration, bool isDataTestMethod)
        {
            SyntaxList <AttributeListSyntax> attributeLists = methodDeclaration.AttributeLists;

            Location categoryLocation;


            ClassDeclarationSyntax classDeclaration = methodDeclaration.Parent as ClassDeclarationSyntax;

            if (classDeclaration != null)
            {
                var exceptions = AdditionalFilesHelper.LoadExceptions(FileName);
                if (exceptions.Contains($"{classDeclaration.Identifier.Text}.{methodDeclaration.Identifier.Text}"))
                {
                    return;
                }
            }

            if (Helper.HasAttribute(attributeLists, context, MsTestFrameworkDefinitions.TestCategoryAttribute, out categoryLocation, out string category))
            {
                List <string> allowedCategories = AdditionalFilesHelper.GetValuesFromEditorConfig(Rule.Id, @"allowed_test_categories");
                if (!allowedCategories.Contains(category.Replace("\"", string.Empty)))
                {
                    Diagnostic diagnostic = Diagnostic.Create(Rule, categoryLocation);
                    context.ReportDiagnostic(diagnostic);
                }
            }
            else
            {
                Diagnostic diagnostic = Diagnostic.Create(Rule, methodDeclaration.Identifier.GetLocation());
                context.ReportDiagnostic(diagnostic);
            }
        }
        protected override void OnInitializeAnalyzer(AnalyzerOptions options, Compilation compilation)
        {
            AdditionalFilesHelper helper = new AdditionalFilesHelper(options, compilation);

            _exceptions        = helper.LoadExceptions(FileName);
            _allowedCategories = helper.GetValuesFromEditorConfig(Rule.Id, @"allowed_test_categories");
        }
 /// <summary>
 /// <inheritdoc/>
 /// </summary>
 public override void Initialize(AnalysisContext context)
 {
     context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None);
     context.EnableConcurrentExecution();
     context.RegisterCompilationStartAction(
         startContext =>
     {
         var additionalFiles = new AdditionalFilesHelper(
             startContext.Options,
             startContext.Compilation);
         var maxStr = additionalFiles.GetValueFromEditorConfig(Rule.Id, "max_operators");
         if (int.TryParse(maxStr, out int parsedMax))
         {
             _maxOperators = parsedMax;
         }
         else
         {
             _maxOperators = DefaultMaxOperators;
         }
         startContext.RegisterSyntaxNodeAction(
             AnalyzeIfStatement,
             SyntaxKind.IfStatement);
         startContext.RegisterSyntaxNodeAction(
             AnalyzeTernary,
             SyntaxKind.ConditionalExpression);
     });
 }
        protected override TestMethodImplementation OnInitializeTestMethodAnalyzer(AnalyzerOptions options, Compilation compilation, MsTestAttributeDefinitions definitions)
        {
            AdditionalFilesHelper helper = new AdditionalFilesHelper(options, compilation);

            var exceptions        = helper.LoadExceptions(FileName);
            var allowedCategories = helper.GetValuesFromEditorConfig(Rule.Id, @"allowed_test_categories").ToImmutableHashSet();

            return(new TestHasCategoryAttribute(exceptions, allowedCategories, definitions));
        }
        public virtual void Register(CompilationStartAnalysisContext compilationContext)
        {
            AdditionalFilesHelper helper     = new AdditionalFilesHelper(compilationContext.Options, compilationContext.Compilation);
            HashSet <string>      exceptions = helper.InitializeExceptions(FileName, Rule.Id);

            // Add standard exceptions
            exceptions.Add(@"*.Startup");
            exceptions.Add(@"*.Program");
            exceptions.Add(@"*.AssemblyInitialize");

            var compilationAnalyzer = CreateCompilationAnalyzer(exceptions, helper.ExceptionsOptions.GenerateExceptionsFile);

            compilationContext.RegisterSyntaxNodeAction(compilationAnalyzer.Analyze, SyntaxKind.ClassDeclaration);
        }
        public override void Initialize(AnalysisContext context)
        {
            context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.Analyze | GeneratedCodeAnalysisFlags.ReportDiagnostics);
            context.EnableConcurrentExecution();

            context.RegisterCompilationStartAction(startContext =>
            {
                if (startContext.Compilation.GetTypeByMetadataName("Microsoft.VisualStudio.TestTools.UnitTesting.Assert") == null)
                {
                    return;
                }
                AdditionalFilesHelper = new AdditionalFilesHelper(startContext.Options.AdditionalFiles);
                startContext.RegisterSyntaxNodeAction(Analyze, SyntaxKind.MethodDeclaration);
            });
        }
Esempio n. 8
0
        private static bool CheckCopyrightStatement(SyntaxNodeAnalysisContext context, SyntaxTrivia trivia)
        {
            var comment = trivia.ToFullString();
            // Check the copyright mar itself
            var hasCopyright = comment.Contains("©") || comment.Contains("Copyright");

            // Check the year
            bool hasYear = yearRegex.IsMatch(comment);

            // Check the company name, only if it is configured.
            var additionalFilesHelper = new AdditionalFilesHelper(context.Options, context.Compilation);
            var companyName           = additionalFilesHelper.GetValueFromEditorConfig(Rule.Id, @"company_name");
            var hasCompanyName        = string.IsNullOrEmpty(companyName) || comment.Contains(companyName);

            return(hasCopyright && hasYear && hasCompanyName);
        }
        private void Analyze(SyntaxNodeAnalysisContext context)
        {
            AdditionalFilesHelper additionalFilesHelper = new AdditionalFilesHelper(context.Options, context.Compilation);
            string expected_prefix = additionalFilesHelper.GetValueFromEditorConfig(RuleForIncorrectNamespace.Id, @"namespace_prefix");

            NamespaceDeclarationSyntax namespaceDeclaration = (NamespaceDeclarationSyntax)context.Node;
            string myNamespace = namespaceDeclaration.Name.ToString();

            if (string.IsNullOrEmpty(expected_prefix))
            {
                Diagnostic diagnostic = Diagnostic.Create(RuleForEmptyPrefix, namespaceDeclaration.Name.GetLocation());
                context.ReportDiagnostic(diagnostic);
            }
            else if (!myNamespace.StartsWith(expected_prefix))
            {
                Diagnostic diagnostic = Diagnostic.Create(RuleForIncorrectNamespace, namespaceDeclaration.Name.GetLocation());
                context.ReportDiagnostic(diagnostic);
            }
        }
Esempio n. 10
0
        public virtual EditorConfigOptions InitializeEditorConfigOptions(AnalyzerOptions analyzerOptions, Compilation compilation, out Diagnostic error)
        {
            error = null;
            EditorConfigOptions options = new EditorConfigOptions(DefaultDuplicateTokenThreshold);
            var editorConfigHelper      = new AdditionalFilesHelper(analyzerOptions, compilation);

            ExceptionsOptions exceptionsOptions = editorConfigHelper.LoadExceptionsOptions(Rule.Id);

            options.IgnoreExceptionsFile   = exceptionsOptions.IgnoreExceptionsFile;
            options.GenerateExceptionsFile = exceptionsOptions.GenerateExceptionsFile;

            string strTokenCount = editorConfigHelper.GetValueFromEditorConfig(Rule.Id, @"token_count");

            if (!string.IsNullOrWhiteSpace(strTokenCount))
            {
                strTokenCount = strTokenCount.Trim();
                bool isParseSuccessful = int.TryParse(strTokenCount, out int duplicateTokenThreshold);

                if (!isParseSuccessful)
                {
                    duplicateTokenThreshold = DefaultDuplicateTokenThreshold;
                    error = Diagnostic.Create(InvalidTokenCountRule, null, strTokenCount);
                }

                const int MaxTokenCount = 200;
                if (duplicateTokenThreshold > MaxTokenCount)
                {
                    error = Diagnostic.Create(TokenCountTooBigRule, null, duplicateTokenThreshold, MaxTokenCount);
                    duplicateTokenThreshold = MaxTokenCount;
                }
                const int MinTokenCount = 20;
                if (duplicateTokenThreshold < MinTokenCount)
                {
                    error = Diagnostic.Create(TokenCountTooSmallRule, null, duplicateTokenThreshold, MinTokenCount);
                    duplicateTokenThreshold = MinTokenCount;
                }
                options.TokenCount = duplicateTokenThreshold;
            }
            return(options);
        }
        /// <summary>
        /// <inheritdoc/>
        /// </summary>
        public override void Initialize(AnalysisContext context)
        {
            context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None);
            context.EnableConcurrentExecution();
            context.RegisterCompilationStartAction(
                startContext =>
            {
                var additionalFiles = new AdditionalFilesHelper(
                    startContext.Options,
                    startContext.Compilation);
                var methodNames = additionalFiles.GetValuesFromEditorConfig(Rule.Id, LogMethodNames);

                var compilationAnalyzer = new CompilationAnalyzer(methodNames);

                if (methodNames.Count == 0)
                {
                    startContext.RegisterCompilationEndAction(compilationAnalyzer.ReportParsingError);
                }
                else
                {
                    startContext.RegisterSyntaxNodeAction(compilationAnalyzer.AnalyzeCatchException, SyntaxKind.CatchClause);
                }
            });
        }
 public TestHasTimeout(MsTestAttributeDefinitions definitions, AdditionalFilesHelper additionalFilesHelper) : base(definitions)
 {
     _additionalFilesHelper = additionalFilesHelper;
 }
        protected override TestMethodImplementation OnInitializeTestMethodAnalyzer(AnalyzerOptions options, Compilation compilation, MsTestAttributeDefinitions definitions)
        {
            var additionalFilesHelper = new AdditionalFilesHelper(options, compilation);

            return(new TestHasTimeout(definitions, additionalFilesHelper));
        }