예제 #1
0
        /// <summary>
        /// Specifica se la linea viola questa particolare regola.
        /// </summary>
        /// <param name="workingLine">
        /// La righa di codice.
        /// </param>
        /// <param name="errorId">
        /// L'ID dell'errore.
        /// </param>
        /// <returns>
        /// Il vaolre che indica se la linea ? violata.
        /// </returns>
        internal bool IsLineViolated(SFWorkingLine workingLine, string errorId)
        {
            if (!this.IsAllowed(errorId))
            {
                return false;
            }

            List<SAObject> violations = workingLine.Violations.FindAll(sao => sao.ErrorId == errorId);
            bool returnValue = (violations != null) && (violations.Count >= 1);
            if (returnValue)
            {
                foreach (SAObject violation in violations)
                {
                    violation.IsFixed = true;
                }
            }

            return returnValue;
        }
예제 #2
0
        internal void SA1500_IfTheStatementSpansMultipleLinesTheClosingBracketMustBePlacedOnItsOwnLine(ref List<SFWorkingLine> workingLines)
        {
            for (int i = 0; i < workingLines.Count; i++)
            {
                if (IsLineViolated(workingLines[i], "SA1500"))
                {
                    var lines = workingLines[i].Line.Split(new char[] { '}' }, StringSplitOptions.None);
                    if (lines == null || lines.Length == 0)
                        break;
                    workingLines[i].Line = lines[0];
                   
                    for (int j = 1; j < lines.Length; j++)
                    {
                        var s = new SFWorkingLine(i, "}", false, new List<SAObject>());
                        workingLines.Insert(i +(j-1)*2+1, s);
                        s = new SFWorkingLine(i, lines[j], false, new List<SAObject>());
                        workingLines.Insert(i+(j-1)*2+2, s);                       
                    }
                    i += (lines.Length-1) * 2;

                }
            }
        }
        /// <summary>
        /// Sopsta il primo parametro di un costruttore i cui parametri sono dichiarati su rughe differenti nella riga successiva
        /// </summary>
        /// <param name="workingLines">
        /// la srtuttura delle righe
        /// </param>
        internal void Sa1116_FirstParameterMustBeginInLineBeheart(ref List<SFWorkingLine> workingLines)
        {
            for (int i = 0; i < workingLines.Count; i++)
            {
                if (this.IsLineViolated(workingLines[i], "SA1116"))
                {
                    bool closedBrace = false;
                    for (int j = workingLines[i].Line.Length - 1; j > 0; j--)
                    {
                        if (workingLines[i].Line[j] == ')')
                        {
                            closedBrace = true;
                            continue;
                        }

                        if (workingLines[i].Line[j] == '(')
                        {
                            if (closedBrace)
                            {
                                closedBrace = false;
                                continue;
                            }
                            else
                            {
                                var originaString = workingLines[i].Line;
                                workingLines[i].Line = originaString.Substring(0, j + 1);
                                var nuova = new SFWorkingLine(i, originaString.Substring(j + 1, originaString.Length - j - 1), false, workingLines[i].Violations);
                                workingLines.Insert(++i, nuova);
                                j = 0;
                            }
                        }
                    }
                }
            }
        }