/// <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; }
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; } } } } } }