public static SolutionAnalysis Analyze(SolutionImplementation solution)
        {
            if (solution.IsEquivalentTo(AddSecondsWithScientificNotation))
            {
                return(solution.ApproveAsOptimal());
            }

            if (solution.IsEquivalentTo(AddSecondsWithMathPow))
            {
                return(solution.ApproveWithComment("Use 1e9 instead of Math.Pow(10, 9)"));
            }

            if (solution.IsEquivalentTo(AddSecondsWithDigitsWithoutSeparator))
            {
                return(solution.ApproveWithComment("Use 1e9 or 1_000_000 instead of 1000000"));
            }

            if (solution.IsEquivalentTo(AddSecondsWithScientificNotationInBlockBody))
            {
                return(solution.ApproveWithComment("You could write the method an an expression-bodied member"));
            }

            if (solution.IsEquivalentTo(Add))
            {
                return(solution.DisapproveWithComment("Use AddSeconds"));
            }

            if (solution.IsEquivalentTo(PlusOperator))
            {
                return(solution.DisapproveWithComment("Use AddSeconds"));
            }

            return(solution.ReferToMentor());
        }
        private static bool UsesTooManyChecks(this SolutionImplementation solution)
        {
            const int minimalNumberOfChecks = 3;

            var addMethod = solution.Implementation.SyntaxNode
                            .GetClass("Leap")
                            .GetMethod("IsLeapYear");

            return(addMethod
                   .DescendantNodes()
                   .OfType <BinaryExpressionSyntax>()
                   .Count(BinaryExpressionUsesYearParameter) > minimalNumberOfChecks);

            bool BinaryExpressionUsesYearParameter(BinaryExpressionSyntax binaryExpression) =>
            ExpressionUsesYearParameter(binaryExpression.Left) ||
            ExpressionUsesYearParameter(binaryExpression.Right);

            bool ExpressionUsesYearParameter(ExpressionSyntax expression) =>
            expression is IdentifierNameSyntax nameSyntax &&
            nameSyntax.Identifier.Text == "year";
        }
        public static SolutionAnalysis Analyze(SolutionImplementation solution)
        {
            if (solution.IsEquivalentTo(MinimumNumberOfChecks))
            {
                return(solution.ApproveAsOptimal());
            }

            if (solution.IsEquivalentTo(UnneededParentheses))
            {
                return(solution.ApproveAsOptimal());
            }

            if (solution.IsEquivalentTo(MethodWithBlockBody))
            {
                return(solution.ApproveWithComment("You could write the method an an expression-bodied member"));
            }

            if (solution.UsesTooManyChecks())
            {
                return(solution.DisapproveWithComment("Use minimum number of checks"));
            }

            return(solution.ReferToMentor());
        }
 public static SolutionAnalysis Analyze(SolutionImplementation solution) =>
 solution.ReferToMentor();
 public DteImplementation([NotNull] DteProtocolModel dteProtocolModel)
 {
     DteProtocolModel = dteProtocolModel;
     Solution         = new SolutionImplementation(this);
 }