chore(sonar): bulk-fix mechanical CA/IDE analyzer warnings
Applied via `dotnet format analyzers --diagnostics IDE0028 CA1825 CA1834
CA1845 CA1847 CA1860 CA1866 CA1853 CA1830 CA1846 CA1806 CA1869 CA2249
--severity info`. 19 files touched, all mechanical syntactic rewrites:
- CA1847: string.Contains("x") -> string.Contains('x')
- CA2249: s.IndexOf(c) == -1 -> !s.Contains(c)
- CA1830: sb.Append(sb.ToString()) -> sb.Append(sb)
- CA1834: StringBuilder.Append("x") -> Append('x')
- CA1825, CA1860, CA1866, CA1853, IDE0028, CA1845: corresponding fixers
Three rules in the batch had no batch fixer available (CA1846 ×4,
CA1806 ×1, CA1869 ×1) and stay open for separate manual handling.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.7
parent
3010019dc5
commit
2c2a8b1193
@@ -580,7 +580,7 @@ public class LinqQueryBreakdown : QueryBreakdown
|
||||
/// <returns>True if SELECT contains *; otherwise, false.</returns>
|
||||
public bool SelectsAllColumns()
|
||||
{
|
||||
return SelectClause?.Clause?.Contains("*") ?? false;
|
||||
return SelectClause?.Clause?.Contains('*') ?? false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -248,13 +248,13 @@ public class LinqExpressionVisitor : ExpressionVisitor
|
||||
{
|
||||
if (_isInWhereClause)
|
||||
{
|
||||
_whereBuilder.Append("(");
|
||||
_whereBuilder.Append('(');
|
||||
Visit(node.Left);
|
||||
|
||||
_whereBuilder.Append($" {GetOperator(node.NodeType)} ");
|
||||
|
||||
Visit(node.Right);
|
||||
_whereBuilder.Append(")");
|
||||
_whereBuilder.Append(')');
|
||||
|
||||
return node;
|
||||
}
|
||||
|
||||
@@ -366,7 +366,7 @@ public class ExpressionGenerator : IVisitor<string>
|
||||
{
|
||||
return text;
|
||||
}
|
||||
return text.Substring(0, maxLength) + "...";
|
||||
return string.Concat(text.AsSpan(0, maxLength), "...");
|
||||
}
|
||||
|
||||
#region IVisitor Implementation
|
||||
@@ -583,7 +583,7 @@ public class ExpressionGenerator : IVisitor<string>
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
sb.AppendLine($"{Indent()}Function: {function.FunctionName}");
|
||||
if (function.Arguments.Any())
|
||||
if (function.Arguments.Length != 0)
|
||||
{
|
||||
_indentLevel++;
|
||||
sb.AppendLine($"{Indent()}Arguments:");
|
||||
@@ -602,7 +602,7 @@ public class ExpressionGenerator : IVisitor<string>
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
sb.AppendLine($"{Indent()}Aggregate Function: {aggregateFunction.FunctionName}");
|
||||
if (aggregateFunction.Arguments.Any())
|
||||
if (aggregateFunction.Arguments.Length != 0)
|
||||
{
|
||||
_indentLevel++;
|
||||
sb.AppendLine($"{Indent()}Arguments:");
|
||||
|
||||
@@ -201,7 +201,7 @@ public class QueryBreakdownGenerator
|
||||
return text;
|
||||
}
|
||||
|
||||
return text.Substring(0, maxLength) + "...";
|
||||
return string.Concat(text.AsSpan(0, maxLength), "...");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -122,7 +122,7 @@ public class SqlStatementGenerator
|
||||
return text;
|
||||
}
|
||||
|
||||
return text.Substring(0, maxLength) + "...";
|
||||
return string.Concat(text.AsSpan(0, maxLength), "...");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -129,7 +129,7 @@ public class StatementExpressionParser : SqlServerStatementExpressionParser
|
||||
|
||||
if (reader.TokenType == TokenType.String || reader.TokenType == TokenType.ColumnIdentifier)
|
||||
{
|
||||
columnBuilder.Append(".").Append(reader.TokenValue);
|
||||
columnBuilder.Append('.').Append(reader.TokenValue);
|
||||
reader.Read();
|
||||
}
|
||||
else
|
||||
@@ -191,7 +191,7 @@ public class StatementExpressionParser : SqlServerStatementExpressionParser
|
||||
|
||||
if (reader.TokenType == TokenType.ColumnIdentifier || reader.TokenType == TokenType.String)
|
||||
{
|
||||
columnBuilder.Append(".").Append(reader.TokenValue);
|
||||
columnBuilder.Append('.').Append(reader.TokenValue);
|
||||
reader.Read();
|
||||
}
|
||||
else
|
||||
|
||||
@@ -11,7 +11,7 @@ public class Value
|
||||
|
||||
public IEnumerable<CalculationFilterGroup> FilterGroups { get; }
|
||||
|
||||
public Value() : this(string.Empty, string.Empty, new int[0], new string[0], new CalculationFilterGroup[0])
|
||||
public Value() : this(string.Empty, string.Empty, Array.Empty<int>(), Array.Empty<string>(), Array.Empty<CalculationFilterGroup>())
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@ public class ProcedureBreakdown : SqlServerProcedureBreakdown
|
||||
|
||||
sb.Append("CALL ");
|
||||
sb.Append(ProcedureName.Clause);
|
||||
sb.Append("(");
|
||||
sb.Append('(');
|
||||
|
||||
if (IsUsingParameters)
|
||||
{
|
||||
@@ -68,7 +68,7 @@ public class ProcedureBreakdown : SqlServerProcedureBreakdown
|
||||
sb.Append(string.Join(", ", paramList));
|
||||
}
|
||||
|
||||
sb.Append(")");
|
||||
sb.Append(')');
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
@@ -141,7 +141,7 @@ public class QueryBreakdown : SqlServerQueryBreakdown
|
||||
|
||||
if (parameterName.StartsWith('@'))
|
||||
{
|
||||
return ":" + parameterName.Substring(1);
|
||||
return string.Concat(":", parameterName.AsSpan(1));
|
||||
}
|
||||
|
||||
// Add : prefix
|
||||
@@ -159,7 +159,7 @@ public class QueryBreakdown : SqlServerQueryBreakdown
|
||||
if (paramName.StartsWith(':'))
|
||||
{
|
||||
// Add @param version
|
||||
var atParam = "@" + paramName.Substring(1);
|
||||
var atParam = string.Concat("@", paramName.AsSpan(1));
|
||||
if (!Parameters.ContainsKey(atParam))
|
||||
{
|
||||
Parameters[atParam] = Parameters[paramName];
|
||||
@@ -168,7 +168,7 @@ public class QueryBreakdown : SqlServerQueryBreakdown
|
||||
else if (paramName.StartsWith('@'))
|
||||
{
|
||||
// Add :param version
|
||||
var colonParam = ":" + paramName.Substring(1);
|
||||
var colonParam = string.Concat(":", paramName.AsSpan(1));
|
||||
if (!Parameters.ContainsKey(colonParam))
|
||||
{
|
||||
Parameters[colonParam] = Parameters[paramName];
|
||||
@@ -539,7 +539,7 @@ public class QueryBreakdown : SqlServerQueryBreakdown
|
||||
|
||||
if (i > 0)
|
||||
{
|
||||
sb.Append(",");
|
||||
sb.Append(',');
|
||||
sb.AppendLine();
|
||||
}
|
||||
|
||||
|
||||
@@ -67,7 +67,7 @@ public class QueryBreakdownCollection : SqlServer.QueryBreakdownCollectionBase<Q
|
||||
|
||||
if (!trimmed.EndsWith(';'))
|
||||
{
|
||||
sb.Append(";");
|
||||
sb.Append(';');
|
||||
}
|
||||
|
||||
// Add spacing between statements
|
||||
@@ -111,7 +111,7 @@ public class QueryBreakdownCollection : SqlServer.QueryBreakdownCollectionBase<Q
|
||||
return true;
|
||||
}
|
||||
|
||||
var specificPattern = stageName.Contains("~")
|
||||
var specificPattern = stageName.Contains('~')
|
||||
? $@"@~/{System.Text.RegularExpressions.Regex.Escape(stageName.TrimStart('@', '~', '/'))}/"
|
||||
: $@"@{System.Text.RegularExpressions.Regex.Escape(stageName.TrimStart('@'))}/";
|
||||
|
||||
@@ -289,7 +289,7 @@ public class QueryBreakdownCollection : SqlServer.QueryBreakdownCollectionBase<Q
|
||||
/// </summary>
|
||||
private static bool UsesStageReference(QueryBreakdown query)
|
||||
{
|
||||
return query.GetSql().Contains("@") &&
|
||||
return query.GetSql().Contains('@') &&
|
||||
(query.GetSql().Contains("FROM @") || query.GetSql().Contains(" @"));
|
||||
}
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ public static class GuidUtils
|
||||
return Guid.Empty;
|
||||
}
|
||||
|
||||
if (value.Contains("-"))
|
||||
if (value.Contains('-'))
|
||||
{
|
||||
// This function was called on an already valid guid
|
||||
return new Guid(value);
|
||||
@@ -92,7 +92,7 @@ public static class GuidUtils
|
||||
var sb = new System.Text.StringBuilder(newguid);
|
||||
while (sb.Length < Guid.Empty.ToString().Length)
|
||||
{
|
||||
sb.Append(sb.ToString());
|
||||
sb.Append(sb);
|
||||
}
|
||||
newguid = sb.ToString();
|
||||
|
||||
@@ -114,7 +114,7 @@ public static class GuidUtils
|
||||
for (int i = 0; i < guidChars.Length; i++)
|
||||
{
|
||||
char chr = guidChars[i];
|
||||
if (valid.IndexOf(chr) == -1 && !((chr == '-') && (i == 8 || i == 13 || i == 18 || i == 23)))
|
||||
if (!valid.Contains(chr) && !((chr == '-') && (i == 8 || i == 13 || i == 18 || i == 23)))
|
||||
{
|
||||
guidChars[i] = valid[Math.Abs(StringUtils.GetHashCode32Bit(chr)) % valid.Length];
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ public static partial class SqlUtils
|
||||
public static void AppendAliasColumnWithComma(StringBuilder stringBuilder, string alias, string columnName)
|
||||
{
|
||||
stringBuilder.Append(alias);
|
||||
stringBuilder.Append(".");
|
||||
stringBuilder.Append('.');
|
||||
stringBuilder.Append(columnName);
|
||||
stringBuilder.AppendLine(",");
|
||||
}
|
||||
@@ -58,7 +58,7 @@ public static partial class SqlUtils
|
||||
{
|
||||
stringBuilder.Append("CAST(");
|
||||
stringBuilder.Append(alias);
|
||||
stringBuilder.Append(".");
|
||||
stringBuilder.Append('.');
|
||||
stringBuilder.Append(columnName);
|
||||
stringBuilder.Append(" AS ");
|
||||
stringBuilder.Append(dataType);
|
||||
@@ -94,7 +94,7 @@ public static partial class SqlUtils
|
||||
{
|
||||
if (i > 0)
|
||||
{
|
||||
sb.Append(",");
|
||||
sb.Append(',');
|
||||
}
|
||||
|
||||
string trimmed = columnNames[i].Trim();
|
||||
|
||||
@@ -42,10 +42,10 @@ public static partial class SqlUtils
|
||||
|
||||
foreach (Guid g in guidList)
|
||||
{
|
||||
sb.Append("'");
|
||||
sb.Append('\'');
|
||||
sb.Append(g.ToString());
|
||||
sb.Append("'");
|
||||
sb.Append(",");
|
||||
sb.Append('\'');
|
||||
sb.Append(',');
|
||||
}
|
||||
|
||||
return sb.ToString().Trim().TrimEnd(',');
|
||||
|
||||
@@ -27,7 +27,7 @@ public static partial class SqlUtils
|
||||
double.TryParse(value, out double dblValue);
|
||||
|
||||
// Optimize IN if only one value
|
||||
if (operation == FilterOperation.In && !value.Contains(","))
|
||||
if (operation == FilterOperation.In && !value.Contains(','))
|
||||
{
|
||||
operation = FilterOperation.Equal;
|
||||
}
|
||||
@@ -144,7 +144,7 @@ public static partial class SqlUtils
|
||||
}
|
||||
|
||||
int lastCloseParen = sb.ToString().LastIndexOf(')');
|
||||
filter.SqlExpression = sb.ToString().Substring(0, lastCloseParen + 1) + ")";
|
||||
filter.SqlExpression = string.Concat(sb.ToString().AsSpan(0, lastCloseParen + 1), ")");
|
||||
break;
|
||||
|
||||
case FilterOperation.NotBetween:
|
||||
|
||||
@@ -578,7 +578,7 @@ public class QueryBreakdown : SqlBreakdownBase, IQueryBreakdown
|
||||
|
||||
if (i > 0)
|
||||
{
|
||||
sb.Append(",");
|
||||
sb.Append(',');
|
||||
sb.AppendLine();
|
||||
}
|
||||
|
||||
|
||||
@@ -513,7 +513,7 @@ public class QueryBreakdownTests
|
||||
|
||||
// Assert
|
||||
// Find the UserId parameter value
|
||||
var userIdKey = merged.Keys.FirstOrDefault(k => k.Contains("UserId") && !k.Contains("$"));
|
||||
var userIdKey = merged.Keys.FirstOrDefault(k => k.Contains("UserId") && !k.Contains('$'));
|
||||
Assert.That(userIdKey, Is.Not.Null);
|
||||
Assert.That(merged[userIdKey], Is.EqualTo(123)); // Main query value, not CTE value
|
||||
}
|
||||
@@ -559,9 +559,9 @@ public class QueryBreakdownTests
|
||||
var merged = mainQuery.GetMergedParameters();
|
||||
|
||||
// Assert
|
||||
var dateKey = merged.Keys.FirstOrDefault(k => k.Contains("CreatedDate") && !k.Contains("$"));
|
||||
var boolKey = merged.Keys.FirstOrDefault(k => k.Contains("IsActive") && !k.Contains("$"));
|
||||
var doubleKey = merged.Keys.FirstOrDefault(k => k.Contains("Threshold") && !k.Contains("$"));
|
||||
var dateKey = merged.Keys.FirstOrDefault(k => k.Contains("CreatedDate") && !k.Contains('$'));
|
||||
var boolKey = merged.Keys.FirstOrDefault(k => k.Contains("IsActive") && !k.Contains('$'));
|
||||
var doubleKey = merged.Keys.FirstOrDefault(k => k.Contains("Threshold") && !k.Contains('$'));
|
||||
|
||||
Assert.That(dateKey, Is.Not.Null);
|
||||
Assert.That(merged[dateKey], Is.TypeOf<DateTime>());
|
||||
|
||||
@@ -133,7 +133,7 @@ public class TestRuleInput
|
||||
|
||||
public string? ImGoingToMakeThisNull { get; set; } = null;
|
||||
|
||||
public TestRuleDetail[] Details { get; set; } = { };
|
||||
public TestRuleDetail[] Details { get; set; } = Array.Empty<TestRuleDetail>();
|
||||
}
|
||||
|
||||
public class TestRuleDetail
|
||||
|
||||
+1
-1
@@ -31,7 +31,7 @@ public class ExpressionFactoryFilterTests : ExpressionTestsBase
|
||||
).SetName("CalendarFilter_{m}");
|
||||
|
||||
yield return new TestCaseData(
|
||||
new Filter(4, FilterType.Timeframe, new object[] { }, Array.Empty<FilterCondition>(), DatePart.Month, false, 1, 3),
|
||||
new Filter(4, FilterType.Timeframe, Array.Empty<object>(), Array.Empty<FilterCondition>(), DatePart.Month, false, 1, 3),
|
||||
$"DEPT.DISCHARGE_DATE >= '{startOfCurrentMonth:yyyy-MM-dd}' AND DEPT.DISCHARGE_DATE < '{startOfEndMonth:yyyy-MM-dd}'"
|
||||
).SetName("TimeframeFilter_{m}");
|
||||
}
|
||||
|
||||
@@ -174,7 +174,7 @@ public class RecursiveCTETests
|
||||
var merged = mainQuery.GetMergedParameters();
|
||||
|
||||
// Assert
|
||||
var statusKey = merged.Keys.FirstOrDefault(k => k.Contains("Status") && !k.Contains("@") && !k.Contains("$"));
|
||||
var statusKey = merged.Keys.FirstOrDefault(k => k.Contains("Status") && !k.Contains('@') && !k.Contains('$'));
|
||||
Assert.That(statusKey, Is.Not.Null);
|
||||
Assert.That(merged[statusKey], Is.EqualTo("active"), "Main query parameter should take precedence");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user