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>
|
/// <returns>True if SELECT contains *; otherwise, false.</returns>
|
||||||
public bool SelectsAllColumns()
|
public bool SelectsAllColumns()
|
||||||
{
|
{
|
||||||
return SelectClause?.Clause?.Contains("*") ?? false;
|
return SelectClause?.Clause?.Contains('*') ?? false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -248,13 +248,13 @@ public class LinqExpressionVisitor : ExpressionVisitor
|
|||||||
{
|
{
|
||||||
if (_isInWhereClause)
|
if (_isInWhereClause)
|
||||||
{
|
{
|
||||||
_whereBuilder.Append("(");
|
_whereBuilder.Append('(');
|
||||||
Visit(node.Left);
|
Visit(node.Left);
|
||||||
|
|
||||||
_whereBuilder.Append($" {GetOperator(node.NodeType)} ");
|
_whereBuilder.Append($" {GetOperator(node.NodeType)} ");
|
||||||
|
|
||||||
Visit(node.Right);
|
Visit(node.Right);
|
||||||
_whereBuilder.Append(")");
|
_whereBuilder.Append(')');
|
||||||
|
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -366,7 +366,7 @@ public class ExpressionGenerator : IVisitor<string>
|
|||||||
{
|
{
|
||||||
return text;
|
return text;
|
||||||
}
|
}
|
||||||
return text.Substring(0, maxLength) + "...";
|
return string.Concat(text.AsSpan(0, maxLength), "...");
|
||||||
}
|
}
|
||||||
|
|
||||||
#region IVisitor Implementation
|
#region IVisitor Implementation
|
||||||
@@ -583,7 +583,7 @@ public class ExpressionGenerator : IVisitor<string>
|
|||||||
{
|
{
|
||||||
var sb = new StringBuilder();
|
var sb = new StringBuilder();
|
||||||
sb.AppendLine($"{Indent()}Function: {function.FunctionName}");
|
sb.AppendLine($"{Indent()}Function: {function.FunctionName}");
|
||||||
if (function.Arguments.Any())
|
if (function.Arguments.Length != 0)
|
||||||
{
|
{
|
||||||
_indentLevel++;
|
_indentLevel++;
|
||||||
sb.AppendLine($"{Indent()}Arguments:");
|
sb.AppendLine($"{Indent()}Arguments:");
|
||||||
@@ -602,7 +602,7 @@ public class ExpressionGenerator : IVisitor<string>
|
|||||||
{
|
{
|
||||||
var sb = new StringBuilder();
|
var sb = new StringBuilder();
|
||||||
sb.AppendLine($"{Indent()}Aggregate Function: {aggregateFunction.FunctionName}");
|
sb.AppendLine($"{Indent()}Aggregate Function: {aggregateFunction.FunctionName}");
|
||||||
if (aggregateFunction.Arguments.Any())
|
if (aggregateFunction.Arguments.Length != 0)
|
||||||
{
|
{
|
||||||
_indentLevel++;
|
_indentLevel++;
|
||||||
sb.AppendLine($"{Indent()}Arguments:");
|
sb.AppendLine($"{Indent()}Arguments:");
|
||||||
|
|||||||
@@ -201,7 +201,7 @@ public class QueryBreakdownGenerator
|
|||||||
return text;
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
return text.Substring(0, maxLength) + "...";
|
return string.Concat(text.AsSpan(0, maxLength), "...");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -129,7 +129,7 @@ public class StatementExpressionParser : SqlServerStatementExpressionParser
|
|||||||
|
|
||||||
if (reader.TokenType == TokenType.String || reader.TokenType == TokenType.ColumnIdentifier)
|
if (reader.TokenType == TokenType.String || reader.TokenType == TokenType.ColumnIdentifier)
|
||||||
{
|
{
|
||||||
columnBuilder.Append(".").Append(reader.TokenValue);
|
columnBuilder.Append('.').Append(reader.TokenValue);
|
||||||
reader.Read();
|
reader.Read();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -191,7 +191,7 @@ public class StatementExpressionParser : SqlServerStatementExpressionParser
|
|||||||
|
|
||||||
if (reader.TokenType == TokenType.ColumnIdentifier || reader.TokenType == TokenType.String)
|
if (reader.TokenType == TokenType.ColumnIdentifier || reader.TokenType == TokenType.String)
|
||||||
{
|
{
|
||||||
columnBuilder.Append(".").Append(reader.TokenValue);
|
columnBuilder.Append('.').Append(reader.TokenValue);
|
||||||
reader.Read();
|
reader.Read();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ public class Value
|
|||||||
|
|
||||||
public IEnumerable<CalculationFilterGroup> FilterGroups { get; }
|
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("CALL ");
|
||||||
sb.Append(ProcedureName.Clause);
|
sb.Append(ProcedureName.Clause);
|
||||||
sb.Append("(");
|
sb.Append('(');
|
||||||
|
|
||||||
if (IsUsingParameters)
|
if (IsUsingParameters)
|
||||||
{
|
{
|
||||||
@@ -68,7 +68,7 @@ public class ProcedureBreakdown : SqlServerProcedureBreakdown
|
|||||||
sb.Append(string.Join(", ", paramList));
|
sb.Append(string.Join(", ", paramList));
|
||||||
}
|
}
|
||||||
|
|
||||||
sb.Append(")");
|
sb.Append(')');
|
||||||
|
|
||||||
return sb.ToString();
|
return sb.ToString();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -141,7 +141,7 @@ public class QueryBreakdown : SqlServerQueryBreakdown
|
|||||||
|
|
||||||
if (parameterName.StartsWith('@'))
|
if (parameterName.StartsWith('@'))
|
||||||
{
|
{
|
||||||
return ":" + parameterName.Substring(1);
|
return string.Concat(":", parameterName.AsSpan(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add : prefix
|
// Add : prefix
|
||||||
@@ -159,7 +159,7 @@ public class QueryBreakdown : SqlServerQueryBreakdown
|
|||||||
if (paramName.StartsWith(':'))
|
if (paramName.StartsWith(':'))
|
||||||
{
|
{
|
||||||
// Add @param version
|
// Add @param version
|
||||||
var atParam = "@" + paramName.Substring(1);
|
var atParam = string.Concat("@", paramName.AsSpan(1));
|
||||||
if (!Parameters.ContainsKey(atParam))
|
if (!Parameters.ContainsKey(atParam))
|
||||||
{
|
{
|
||||||
Parameters[atParam] = Parameters[paramName];
|
Parameters[atParam] = Parameters[paramName];
|
||||||
@@ -168,7 +168,7 @@ public class QueryBreakdown : SqlServerQueryBreakdown
|
|||||||
else if (paramName.StartsWith('@'))
|
else if (paramName.StartsWith('@'))
|
||||||
{
|
{
|
||||||
// Add :param version
|
// Add :param version
|
||||||
var colonParam = ":" + paramName.Substring(1);
|
var colonParam = string.Concat(":", paramName.AsSpan(1));
|
||||||
if (!Parameters.ContainsKey(colonParam))
|
if (!Parameters.ContainsKey(colonParam))
|
||||||
{
|
{
|
||||||
Parameters[colonParam] = Parameters[paramName];
|
Parameters[colonParam] = Parameters[paramName];
|
||||||
@@ -539,7 +539,7 @@ public class QueryBreakdown : SqlServerQueryBreakdown
|
|||||||
|
|
||||||
if (i > 0)
|
if (i > 0)
|
||||||
{
|
{
|
||||||
sb.Append(",");
|
sb.Append(',');
|
||||||
sb.AppendLine();
|
sb.AppendLine();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ public class QueryBreakdownCollection : SqlServer.QueryBreakdownCollectionBase<Q
|
|||||||
|
|
||||||
if (!trimmed.EndsWith(';'))
|
if (!trimmed.EndsWith(';'))
|
||||||
{
|
{
|
||||||
sb.Append(";");
|
sb.Append(';');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add spacing between statements
|
// Add spacing between statements
|
||||||
@@ -111,7 +111,7 @@ public class QueryBreakdownCollection : SqlServer.QueryBreakdownCollectionBase<Q
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
var specificPattern = stageName.Contains("~")
|
var specificPattern = stageName.Contains('~')
|
||||||
? $@"@~/{System.Text.RegularExpressions.Regex.Escape(stageName.TrimStart('@', '~', '/'))}/"
|
? $@"@~/{System.Text.RegularExpressions.Regex.Escape(stageName.TrimStart('@', '~', '/'))}/"
|
||||||
: $@"@{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>
|
/// </summary>
|
||||||
private static bool UsesStageReference(QueryBreakdown query)
|
private static bool UsesStageReference(QueryBreakdown query)
|
||||||
{
|
{
|
||||||
return query.GetSql().Contains("@") &&
|
return query.GetSql().Contains('@') &&
|
||||||
(query.GetSql().Contains("FROM @") || query.GetSql().Contains(" @"));
|
(query.GetSql().Contains("FROM @") || query.GetSql().Contains(" @"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ public static class GuidUtils
|
|||||||
return Guid.Empty;
|
return Guid.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (value.Contains("-"))
|
if (value.Contains('-'))
|
||||||
{
|
{
|
||||||
// This function was called on an already valid guid
|
// This function was called on an already valid guid
|
||||||
return new Guid(value);
|
return new Guid(value);
|
||||||
@@ -92,7 +92,7 @@ public static class GuidUtils
|
|||||||
var sb = new System.Text.StringBuilder(newguid);
|
var sb = new System.Text.StringBuilder(newguid);
|
||||||
while (sb.Length < Guid.Empty.ToString().Length)
|
while (sb.Length < Guid.Empty.ToString().Length)
|
||||||
{
|
{
|
||||||
sb.Append(sb.ToString());
|
sb.Append(sb);
|
||||||
}
|
}
|
||||||
newguid = sb.ToString();
|
newguid = sb.ToString();
|
||||||
|
|
||||||
@@ -114,7 +114,7 @@ public static class GuidUtils
|
|||||||
for (int i = 0; i < guidChars.Length; i++)
|
for (int i = 0; i < guidChars.Length; i++)
|
||||||
{
|
{
|
||||||
char chr = guidChars[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];
|
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)
|
public static void AppendAliasColumnWithComma(StringBuilder stringBuilder, string alias, string columnName)
|
||||||
{
|
{
|
||||||
stringBuilder.Append(alias);
|
stringBuilder.Append(alias);
|
||||||
stringBuilder.Append(".");
|
stringBuilder.Append('.');
|
||||||
stringBuilder.Append(columnName);
|
stringBuilder.Append(columnName);
|
||||||
stringBuilder.AppendLine(",");
|
stringBuilder.AppendLine(",");
|
||||||
}
|
}
|
||||||
@@ -58,7 +58,7 @@ public static partial class SqlUtils
|
|||||||
{
|
{
|
||||||
stringBuilder.Append("CAST(");
|
stringBuilder.Append("CAST(");
|
||||||
stringBuilder.Append(alias);
|
stringBuilder.Append(alias);
|
||||||
stringBuilder.Append(".");
|
stringBuilder.Append('.');
|
||||||
stringBuilder.Append(columnName);
|
stringBuilder.Append(columnName);
|
||||||
stringBuilder.Append(" AS ");
|
stringBuilder.Append(" AS ");
|
||||||
stringBuilder.Append(dataType);
|
stringBuilder.Append(dataType);
|
||||||
@@ -94,7 +94,7 @@ public static partial class SqlUtils
|
|||||||
{
|
{
|
||||||
if (i > 0)
|
if (i > 0)
|
||||||
{
|
{
|
||||||
sb.Append(",");
|
sb.Append(',');
|
||||||
}
|
}
|
||||||
|
|
||||||
string trimmed = columnNames[i].Trim();
|
string trimmed = columnNames[i].Trim();
|
||||||
|
|||||||
@@ -42,10 +42,10 @@ public static partial class SqlUtils
|
|||||||
|
|
||||||
foreach (Guid g in guidList)
|
foreach (Guid g in guidList)
|
||||||
{
|
{
|
||||||
sb.Append("'");
|
sb.Append('\'');
|
||||||
sb.Append(g.ToString());
|
sb.Append(g.ToString());
|
||||||
sb.Append("'");
|
sb.Append('\'');
|
||||||
sb.Append(",");
|
sb.Append(',');
|
||||||
}
|
}
|
||||||
|
|
||||||
return sb.ToString().Trim().TrimEnd(',');
|
return sb.ToString().Trim().TrimEnd(',');
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ public static partial class SqlUtils
|
|||||||
double.TryParse(value, out double dblValue);
|
double.TryParse(value, out double dblValue);
|
||||||
|
|
||||||
// Optimize IN if only one value
|
// Optimize IN if only one value
|
||||||
if (operation == FilterOperation.In && !value.Contains(","))
|
if (operation == FilterOperation.In && !value.Contains(','))
|
||||||
{
|
{
|
||||||
operation = FilterOperation.Equal;
|
operation = FilterOperation.Equal;
|
||||||
}
|
}
|
||||||
@@ -144,7 +144,7 @@ public static partial class SqlUtils
|
|||||||
}
|
}
|
||||||
|
|
||||||
int lastCloseParen = sb.ToString().LastIndexOf(')');
|
int lastCloseParen = sb.ToString().LastIndexOf(')');
|
||||||
filter.SqlExpression = sb.ToString().Substring(0, lastCloseParen + 1) + ")";
|
filter.SqlExpression = string.Concat(sb.ToString().AsSpan(0, lastCloseParen + 1), ")");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FilterOperation.NotBetween:
|
case FilterOperation.NotBetween:
|
||||||
|
|||||||
@@ -578,7 +578,7 @@ public class QueryBreakdown : SqlBreakdownBase, IQueryBreakdown
|
|||||||
|
|
||||||
if (i > 0)
|
if (i > 0)
|
||||||
{
|
{
|
||||||
sb.Append(",");
|
sb.Append(',');
|
||||||
sb.AppendLine();
|
sb.AppendLine();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -513,7 +513,7 @@ public class QueryBreakdownTests
|
|||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
// Find the UserId parameter value
|
// 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(userIdKey, Is.Not.Null);
|
||||||
Assert.That(merged[userIdKey], Is.EqualTo(123)); // Main query value, not CTE value
|
Assert.That(merged[userIdKey], Is.EqualTo(123)); // Main query value, not CTE value
|
||||||
}
|
}
|
||||||
@@ -559,9 +559,9 @@ public class QueryBreakdownTests
|
|||||||
var merged = mainQuery.GetMergedParameters();
|
var merged = mainQuery.GetMergedParameters();
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
var dateKey = merged.Keys.FirstOrDefault(k => k.Contains("CreatedDate") && !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 boolKey = merged.Keys.FirstOrDefault(k => k.Contains("IsActive") && !k.Contains('$'));
|
||||||
var doubleKey = merged.Keys.FirstOrDefault(k => k.Contains("Threshold") && !k.Contains("$"));
|
var doubleKey = merged.Keys.FirstOrDefault(k => k.Contains("Threshold") && !k.Contains('$'));
|
||||||
|
|
||||||
Assert.That(dateKey, Is.Not.Null);
|
Assert.That(dateKey, Is.Not.Null);
|
||||||
Assert.That(merged[dateKey], Is.TypeOf<DateTime>());
|
Assert.That(merged[dateKey], Is.TypeOf<DateTime>());
|
||||||
|
|||||||
@@ -133,7 +133,7 @@ public class TestRuleInput
|
|||||||
|
|
||||||
public string? ImGoingToMakeThisNull { get; set; } = null;
|
public string? ImGoingToMakeThisNull { get; set; } = null;
|
||||||
|
|
||||||
public TestRuleDetail[] Details { get; set; } = { };
|
public TestRuleDetail[] Details { get; set; } = Array.Empty<TestRuleDetail>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public class TestRuleDetail
|
public class TestRuleDetail
|
||||||
|
|||||||
+1
-1
@@ -31,7 +31,7 @@ public class ExpressionFactoryFilterTests : ExpressionTestsBase
|
|||||||
).SetName("CalendarFilter_{m}");
|
).SetName("CalendarFilter_{m}");
|
||||||
|
|
||||||
yield return new TestCaseData(
|
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}'"
|
$"DEPT.DISCHARGE_DATE >= '{startOfCurrentMonth:yyyy-MM-dd}' AND DEPT.DISCHARGE_DATE < '{startOfEndMonth:yyyy-MM-dd}'"
|
||||||
).SetName("TimeframeFilter_{m}");
|
).SetName("TimeframeFilter_{m}");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -174,7 +174,7 @@ public class RecursiveCTETests
|
|||||||
var merged = mainQuery.GetMergedParameters();
|
var merged = mainQuery.GetMergedParameters();
|
||||||
|
|
||||||
// Assert
|
// 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(statusKey, Is.Not.Null);
|
||||||
Assert.That(merged[statusKey], Is.EqualTo("active"), "Main query parameter should take precedence");
|
Assert.That(merged[statusKey], Is.EqualTo("active"), "Main query parameter should take precedence");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user