refactor: move sonar-suppressions.json to .github/ directory

Keeps CI config files consolidated under .github/.
Updated Publish.yml references accordingly.
This commit is contained in:
Miha Kralj
2026-03-04 08:49:10 -08:00
parent 7e72b0760e
commit 0d94b4df52
2 changed files with 6 additions and 6 deletions
+162
View File
@@ -0,0 +1,162 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"description": "Single source of truth for Sonar rule suppressions across SonarCloud, Codacy, and local builds",
"rules": [
{
"id": "S107",
"reason": "Methods should not have too many parameters - high-performance SIMD methods require multiple parameters for zero-allocation patterns"
},
{
"id": "S1144",
"reason": "Unused private types or members should be removed - false positives on reflection/serialization patterns"
},
{
"id": "S1244",
"reason": "Floating point numbers should not be tested for equality - intentional exact comparisons in financial calculations"
},
{
"id": "S1944",
"reason": "Inappropriate casts should not be made - false positives on generic constraint patterns"
},
{
"id": "S2053",
"reason": "Hashes should include unpredictable salt - not applicable to non-cryptographic hashing"
},
{
"id": "S2245",
"reason": "Using pseudorandom number generators is security-sensitive - GBM uses deterministic seeds for reproducibility"
},
{
"id": "S2259",
"reason": "Null pointers should not be dereferenced - false positives with nullable reference types"
},
{
"id": "S2583",
"reason": "Conditionally executed code should be reachable - false positives on defensive programming patterns"
},
{
"id": "S2589",
"reason": "Boolean expressions should not be gratuitous - false positives on explicit clarity patterns"
},
{
"id": "S3236",
"reason": "Caller information arguments should not be provided explicitly - intentional for testing/debugging"
},
{
"id": "S3329",
"reason": "Cipher Block Chaining IVs should be unpredictable - not applicable to non-cryptographic code"
},
{
"id": "S3604",
"reason": "Member initializer values should not be redundant - null! is intentional for nullable reference types in Quantower adapters"
},
{
"id": "S3655",
"reason": "Empty nullable value should not be accessed - false positives with HasValue checks"
},
{
"id": "S3776",
"reason": "Cognitive Complexity of methods should not be too high - complex algorithms require complex implementations"
},
{
"id": "S3949",
"reason": "Calculations should not overflow - false positives on checked arithmetic contexts"
},
{
"id": "S3966",
"reason": "Objects should not be disposed more than once - false positives on defensive dispose patterns"
},
{
"id": "S4158",
"reason": "Empty collections should not be accessed or iterated - false positives on lazy initialization"
},
{
"id": "S4347",
"reason": "Secure random number generators should not output predictable values - deterministic seeds for reproducibility"
},
{
"id": "S5773",
"reason": "Types allowed to be deserialized should be restricted - not applicable to this codebase"
},
{
"id": "S6781",
"reason": "JWT tokens should not be created using insecure secrets - not applicable to this codebase"
},
{
"id": "S109",
"reason": "Magic numbers should be replaced with named constants - numeric literals in SIMD/math algorithms are intentional and self-documenting"
},
{
"id": "S122",
"reason": "Statements should be on separate lines - compact initialization patterns improve readability in coefficient setup"
},
{
"id": "S134",
"reason": "Control flow statements should not be nested too deeply - complex algorithms require nested loops"
},
{
"id": "S138",
"reason": "Methods should not have too many lines - SIMD batch calculations are intentionally monolithic for performance"
},
{
"id": "S1067",
"reason": "Expressions should not be too complex - validation guard clauses benefit from compound conditions"
},
{
"id": "S1227",
"reason": "Break statements should not be used - early exit patterns improve performance in search loops"
},
{
"id": "S1309",
"reason": "Track uses of in-source issue suppressions - intentional suppressions are documented"
},
{
"id": "S1451",
"reason": "File headers should match a defined format - no file header requirement for this project"
},
{
"id": "S1541",
"reason": "Cyclomatic complexity should not be too high - optimized algorithms require complex control flow"
},
{
"id": "S1659",
"reason": "Multiple variables should not be declared on the same line - SIMD register declarations benefit from grouping"
},
{
"id": "S2360",
"reason": "Optional parameters should not be used - optional parameters are idiomatic for indicator constructors"
},
{
"id": "S3254",
"reason": "Default parameter values should not be passed as arguments - explicit defaults improve clarity"
},
{
"id": "S3264",
"reason": "Events should be invoked - events may be conditionally invoked or used for chaining"
},
{
"id": "S3904",
"reason": "Assemblies should have version information - version is set via Directory.Build.props"
},
{
"id": "S3906",
"reason": "Event handlers should have the correct signature - custom delegates are used for performance"
},
{
"id": "S3908",
"reason": "Generic event handlers should be used - TValuePublishedHandler is a performance-optimized custom delegate"
},
{
"id": "S3990",
"reason": "Assemblies should be marked CLSCompliant - CLS compliance not required for internal library"
},
{
"id": "S3992",
"reason": "Assemblies should have ComVisible attribute - COM interop not required"
},
{
"id": "S4035",
"reason": "Classes implementing IComparable<T> should also implement IEquatable<T> - performance-optimized value types use custom equality semantics"
}
]
}
+6 -6
View File
@@ -327,13 +327,13 @@ jobs:
id: sonar_rules
run: |
# Read rule IDs from sonar-suppressions.json and generate multicriteria args
if [ ! -f "sonar-suppressions.json" ]; then
echo "ERROR: sonar-suppressions.json not found"
if [ ! -f ".github/sonar-suppressions.json" ]; then
echo "ERROR: .github/sonar-suppressions.json not found"
exit 1
fi
# Extract rule IDs and build multicriteria parameters
rules=$(jq -r '.rules[].id' sonar-suppressions.json)
rules=$(jq -r '.rules[].id' .github/sonar-suppressions.json)
multicriteria_names=""
multicriteria_args=""
index=1
@@ -744,13 +744,13 @@ jobs:
TOOL_UUID="8954dff3-f19c-429c-ac76-c45fa5e73b62" # SonarC# tool UUID
API_BASE="https://app.codacy.com/api/v3"
if [ ! -f "sonar-suppressions.json" ]; then
echo "ERROR: sonar-suppressions.json not found"
if [ ! -f ".github/sonar-suppressions.json" ]; then
echo "ERROR: .github/sonar-suppressions.json not found"
exit 1
fi
# Extract rule IDs from JSON
rules=$(jq -r '.rules[].id' sonar-suppressions.json)
rules=$(jq -r '.rules[].id' .github/sonar-suppressions.json)
rule_count=$(echo "$rules" | wc -w)
echo "Found $rule_count rules to disable in Codacy"