{"$schema":"https://json.schemastore.org/sarif-2.1.0.json","version":"2.1.0","runs":[{"tool":{"driver":{"name":"codehealth","informationUri":"https://codehealth.canine.dev","rules":[{"id":"D1","name":"Cyclomatic Complexity","shortDescription":{"text":"Cyclomatic Complexity"},"helpUri":"https://codehealth.canine.dev/dimensions/D1"},{"id":"D2","name":"Cognitive Complexity","shortDescription":{"text":"Cognitive Complexity"},"helpUri":"https://codehealth.canine.dev/dimensions/D2"},{"id":"D3","name":"God Classes","shortDescription":{"text":"God Classes"},"helpUri":"https://codehealth.canine.dev/dimensions/D3"},{"id":"D5","name":"Coupling","shortDescription":{"text":"Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D5"},{"id":"D9","name":"Test Distribution","shortDescription":{"text":"Test Distribution"},"helpUri":"https://codehealth.canine.dev/dimensions/D9"},{"id":"D10","name":"Test Quality","shortDescription":{"text":"Test Quality"},"helpUri":"https://codehealth.canine.dev/dimensions/D10"},{"id":"D11","name":"Test Reliability","shortDescription":{"text":"Test Reliability"},"helpUri":"https://codehealth.canine.dev/dimensions/D11"},{"id":"D12","name":"Dependency Hygiene","shortDescription":{"text":"Dependency Hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/D12"},{"id":"D13","name":"Secret Scanning","shortDescription":{"text":"Secret Scanning"},"helpUri":"https://codehealth.canine.dev/dimensions/D13","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D14","name":"License Compliance","shortDescription":{"text":"License Compliance"},"helpUri":"https://codehealth.canine.dev/dimensions/D14"},{"id":"D15","name":"Churn \u00D7 Complexity Hotspots","shortDescription":{"text":"Churn \u00D7 Complexity Hotspots"},"helpUri":"https://codehealth.canine.dev/dimensions/D15"},{"id":"D19","name":"Documentation Quality","shortDescription":{"text":"Documentation Quality"},"helpUri":"https://codehealth.canine.dev/dimensions/D19"},{"id":"D20","name":"ADR Quality","shortDescription":{"text":"ADR Quality"},"helpUri":"https://codehealth.canine.dev/dimensions/D20"},{"id":"D21","name":"Naming Consistency","shortDescription":{"text":"Naming Consistency"},"helpUri":"https://codehealth.canine.dev/dimensions/D21"},{"id":"D22","name":"Internal API Consistency","shortDescription":{"text":"Internal API Consistency"},"helpUri":"https://codehealth.canine.dev/dimensions/D22"},{"id":"D27","name":"Navigability","shortDescription":{"text":"Navigability"},"helpUri":"https://codehealth.canine.dev/dimensions/D27"},{"id":"D28","name":"Secrets (history)","shortDescription":{"text":"Secrets (history)"},"helpUri":"https://codehealth.canine.dev/dimensions/D28","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D29","name":"Static Analysis (SAST)","shortDescription":{"text":"Static Analysis (SAST)"},"helpUri":"https://codehealth.canine.dev/dimensions/D29","relationships":[{"target":{"id":"CWE-79","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-89","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-94","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-77","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-79","CWE-89","CWE-78","CWE-94","CWE-77"]}},{"id":"D30","name":"Dependency Vulnerabilities","shortDescription":{"text":"Dependency Vulnerabilities"},"helpUri":"https://codehealth.canine.dev/dimensions/D30","relationships":[{"target":{"id":"CWE-1395","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-937","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1395","CWE-937"]}},{"id":"D34","name":"Knowledge Freshness","shortDescription":{"text":"Knowledge Freshness"},"helpUri":"https://codehealth.canine.dev/dimensions/D34"},{"id":"D35","name":"Change Coupling","shortDescription":{"text":"Change Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D35"},{"id":"D36","name":"Supply-chain Provenance \u0026 Signing","shortDescription":{"text":"Supply-chain Provenance \u0026 Signing"},"helpUri":"https://codehealth.canine.dev/dimensions/D36","relationships":[{"target":{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1357","CWE-494"]}},{"id":"D43","name":"Malicious Dependencies","shortDescription":{"text":"Malicious Dependencies"},"helpUri":"https://codehealth.canine.dev/dimensions/D43","relationships":[{"target":{"id":"CWE-506","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-506"]}},{"id":"D44","name":"Platform End-of-Life","shortDescription":{"text":"Platform End-of-Life"},"helpUri":"https://codehealth.canine.dev/dimensions/D44"},{"id":"AX10","name":"Code composition","shortDescription":{"text":"Code composition"},"helpUri":"https://codehealth.canine.dev/dimensions/AX10"},{"id":"AX3","name":"Project dependency cycles","shortDescription":{"text":"Project dependency cycles"},"helpUri":"https://codehealth.canine.dev/dimensions/AX3"},{"id":"AX4","name":"Dependency direction","shortDescription":{"text":"Dependency direction"},"helpUri":"https://codehealth.canine.dev/dimensions/AX4"},{"id":"AX6","name":"Interface segregation","shortDescription":{"text":"Interface segregation"},"helpUri":"https://codehealth.canine.dev/dimensions/AX6"},{"id":"AX8","name":"Test isolation","shortDescription":{"text":"Test isolation"},"helpUri":"https://codehealth.canine.dev/dimensions/AX8"},{"id":"AXB1","name":"Runtime evidence locked \u2014 no reproducible boot","shortDescription":{"text":"Runtime evidence locked \u2014 no reproducible boot"},"helpUri":"https://codehealth.canine.dev/dimensions/AXB1"},{"id":"AXB2","name":"Runtime readiness","shortDescription":{"text":"Runtime readiness"},"helpUri":"https://codehealth.canine.dev/dimensions/AXB2"},{"id":"ED5","name":"Idempotency","shortDescription":{"text":"Idempotency"},"helpUri":"https://codehealth.canine.dev/dimensions/ED5"},{"id":"GD1","name":"Unfinished \u0026 placeholder code","shortDescription":{"text":"Unfinished \u0026 placeholder code"},"helpUri":"https://codehealth.canine.dev/dimensions/GD1"},{"id":"M1","name":"Documentation (README)","shortDescription":{"text":"Documentation (README)"},"helpUri":"https://codehealth.canine.dev/dimensions/M1"},{"id":"M2","name":"Architecture documentation","shortDescription":{"text":"Architecture documentation"},"helpUri":"https://codehealth.canine.dev/dimensions/M2"},{"id":"M3","name":"Folder \u0026 project structure","shortDescription":{"text":"Folder \u0026 project structure"},"helpUri":"https://codehealth.canine.dev/dimensions/M3"},{"id":"M4","name":"Documentation accuracy","shortDescription":{"text":"Documentation accuracy"},"helpUri":"https://codehealth.canine.dev/dimensions/M4"},{"id":"P1","name":"CI/CD gates","shortDescription":{"text":"CI/CD gates"},"helpUri":"https://codehealth.canine.dev/dimensions/P1"},{"id":"P10","name":"Library API \u0026 versioning","shortDescription":{"text":"Library API \u0026 versioning"},"helpUri":"https://codehealth.canine.dev/dimensions/P10"},{"id":"P12","name":"CI test-gate honesty","shortDescription":{"text":"CI test-gate honesty"},"helpUri":"https://codehealth.canine.dev/dimensions/P12"},{"id":"P3","name":"Security \u0026 performance tooling","shortDescription":{"text":"Security \u0026 performance tooling"},"helpUri":"https://codehealth.canine.dev/dimensions/P3"},{"id":"PF1","name":"Benchmark discipline","shortDescription":{"text":"Benchmark discipline"},"helpUri":"https://codehealth.canine.dev/dimensions/PF1"},{"id":"PF3","name":"Async \u0026 latency hygiene","shortDescription":{"text":"Async \u0026 latency hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/PF3"},{"id":"R1","name":"Type Safety","shortDescription":{"text":"Type Safety"},"helpUri":"https://codehealth.canine.dev/dimensions/R1"},{"id":"R10","name":"Code Duplication","shortDescription":{"text":"Code Duplication"},"helpUri":"https://codehealth.canine.dev/dimensions/R10"},{"id":"R2","name":"Cyclomatic Complexity","shortDescription":{"text":"Cyclomatic Complexity"},"helpUri":"https://codehealth.canine.dev/dimensions/R2"},{"id":"R3","name":"Large Files","shortDescription":{"text":"Large Files"},"helpUri":"https://codehealth.canine.dev/dimensions/R3"},{"id":"R5","name":"Dependency Freshness","shortDescription":{"text":"Dependency Freshness"},"helpUri":"https://codehealth.canine.dev/dimensions/R5"},{"id":"R6","name":"Tooling","shortDescription":{"text":"Tooling"},"helpUri":"https://codehealth.canine.dev/dimensions/R6"},{"id":"R7","name":"Dead Code","shortDescription":{"text":"Dead Code"},"helpUri":"https://codehealth.canine.dev/dimensions/R7"},{"id":"R8","name":"Dependency Hygiene","shortDescription":{"text":"Dependency Hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/R8"},{"id":"R9","name":"Circular Imports","shortDescription":{"text":"Circular Imports"},"helpUri":"https://codehealth.canine.dev/dimensions/R9"},{"id":"SC1","name":"Supply-chain hygiene","shortDescription":{"text":"Supply-chain hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/SC1"},{"id":"X10","name":"Duplicated predicate","shortDescription":{"text":"Duplicated predicate"},"helpUri":"https://codehealth.canine.dev/dimensions/X10"},{"id":"X12","name":"Unreachable branch","shortDescription":{"text":"Unreachable branch"},"helpUri":"https://codehealth.canine.dev/dimensions/X12"},{"id":"X13","name":"Undrained process stream","shortDescription":{"text":"Undrained process stream"},"helpUri":"https://codehealth.canine.dev/dimensions/X13"},{"id":"X14","name":"Bypassable address classification","shortDescription":{"text":"Bypassable address classification"},"helpUri":"https://codehealth.canine.dev/dimensions/X14"},{"id":"X15","name":"Unvalidated length from an untrusted reader","shortDescription":{"text":"Unvalidated length from an untrusted reader"},"helpUri":"https://codehealth.canine.dev/dimensions/X15"},{"id":"X16","name":"Unfloored truncation loop","shortDescription":{"text":"Unfloored truncation loop"},"helpUri":"https://codehealth.canine.dev/dimensions/X16"},{"id":"X17","name":"Uncapped recursion over a caller-supplied document","shortDescription":{"text":"Uncapped recursion over a caller-supplied document"},"helpUri":"https://codehealth.canine.dev/dimensions/X17"},{"id":"X18","name":"Disposal-pattern correctness","shortDescription":{"text":"Disposal-pattern correctness"},"helpUri":"https://codehealth.canine.dev/dimensions/X18"},{"id":"X19","name":"Unrestored process-global state","shortDescription":{"text":"Unrestored process-global state"},"helpUri":"https://codehealth.canine.dev/dimensions/X19"},{"id":"X20","name":"Mistyped argument guard","shortDescription":{"text":"Mistyped argument guard"},"helpUri":"https://codehealth.canine.dev/dimensions/X20"},{"id":"X21","name":"Side-effecting pattern guard","shortDescription":{"text":"Side-effecting pattern guard"},"helpUri":"https://codehealth.canine.dev/dimensions/X21"},{"id":"X22","name":"Contradicted release guard","shortDescription":{"text":"Contradicted release guard"},"helpUri":"https://codehealth.canine.dev/dimensions/X22"},{"id":"X23","name":"Unguarded diagnostic materialisation","shortDescription":{"text":"Unguarded diagnostic materialisation"},"helpUri":"https://codehealth.canine.dev/dimensions/X23"},{"id":"X25","name":"Inert configuration knob","shortDescription":{"text":"Inert configuration knob"},"helpUri":"https://codehealth.canine.dev/dimensions/X25"},{"id":"X26","name":"Unsynchronised callback handoff","shortDescription":{"text":"Unsynchronised callback handoff"},"helpUri":"https://codehealth.canine.dev/dimensions/X26"},{"id":"X28","name":"Index access outside its own emptiness guard","shortDescription":{"text":"Index access outside its own emptiness guard"},"helpUri":"https://codehealth.canine.dev/dimensions/X28"},{"id":"X29","name":"Per-element action decided by a fixed element","shortDescription":{"text":"Per-element action decided by a fixed element"},"helpUri":"https://codehealth.canine.dev/dimensions/X29"},{"id":"X30","name":"Support guard that admits what it rejects","shortDescription":{"text":"Support guard that admits what it rejects"},"helpUri":"https://codehealth.canine.dev/dimensions/X30"},{"id":"X32","name":"Type resolved by simple name across every loaded assembly","shortDescription":{"text":"Type resolved by simple name across every loaded assembly"},"helpUri":"https://codehealth.canine.dev/dimensions/X32"},{"id":"X5","name":"Nullable reference types","shortDescription":{"text":"Nullable reference types"},"helpUri":"https://codehealth.canine.dev/dimensions/X5"},{"id":"X6","name":"Hand-rolled structured-format parsing","shortDescription":{"text":"Hand-rolled structured-format parsing"},"helpUri":"https://codehealth.canine.dev/dimensions/X6"},{"id":"X7","name":"Silent fallback defaults","shortDescription":{"text":"Silent fallback defaults"},"helpUri":"https://codehealth.canine.dev/dimensions/X7"},{"id":"X9","name":"Subsumed condition operand","shortDescription":{"text":"Subsumed condition operand"},"helpUri":"https://codehealth.canine.dev/dimensions/X9"}]}},"results":[{"ruleId":"D1","level":"warning","message":{"text":"InterpreterFunction.CallWithStackAux (cyclomatic 172): InterpreterFunction.CallWithStackAux has cyclomatic complexity 172 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/Interpreter/Oly.Emitters.Interpreter/Emitter.fs"},"region":{"startLine":1039}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e96307839411b8ba1b135084b6486aaa7d1269b4726ce5aa26351669f36a703"}},{"ruleId":"D1","level":"warning","message":{"text":"ClrCodeGen.GenOperation (cyclomatic 139): ClrCodeGen.GenOperation has cyclomatic complexity 139 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/DotNet/Oly.Emitters.DotNet/Emitter.fs"},"region":{"startLine":603}}}],"partialFingerprints":{"codehealthFindingId/v1":"db8a87bd1d79885a99b5c2829bdfc16e08d41fdfc7d461e0ebdc7718eec19f15"}},{"ruleId":"D1","level":"warning","message":{"text":"NameResolution.bindValueModifiersAndKindAsMemberFlags (cyclomatic 128): NameResolution.bindValueModifiersAndKindAsMemberFlags has cyclomatic complexity 128 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/NameResolution.fs"},"region":{"startLine":2257}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a823c7282902487e3895827bf98c7bd62accf3d3f09814d13414adfe4a5ef8f"}},{"ruleId":"D1","level":"warning","message":{"text":"InterpreterFunction.HandleCast (cyclomatic 119): InterpreterFunction.HandleCast has cyclomatic complexity 119 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/Interpreter/Oly.Emitters.Interpreter/Emitter.fs"},"region":{"startLine":756}}}],"partialFingerprints":{"codehealthFindingId/v1":"21856d57c8a2a394035d82ed81edda0eea3454720f7b8d37bc8d7f9d866c6e3a"}},{"ruleId":"D1","level":"warning","message":{"text":"SymbolOperations.UnifyTypes (cyclomatic 104): SymbolOperations.UnifyTypes has cyclomatic complexity 104 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/SymbolOperations.fs"},"region":{"startLine":404}}}],"partialFingerprints":{"codehealthFindingId/v1":"2514f77b31282c6487e42937e0604e283ef1db55fcc09dc78e271d5765711207"}},{"ruleId":"D1","level":"warning","message":{"text":"ILGen.GenCallExpression (cyclomatic 102): ILGen.GenCallExpression has cyclomatic complexity 102 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/ILGen.fs"},"region":{"startLine":1843}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e71b6e7745772305ee973298daf0f0e17ca1fe20c9061df37f0fa8e21064d4f"}},{"ruleId":"D1","level":"warning","message":{"text":"WorkspaceExtensions.OlyDocument.GetCompletions (cyclomatic 98): WorkspaceExtensions.OlyDocument.GetCompletions has cyclomatic complexity 98 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler.Workspace/OlyWorkspaceExtensions.fs"},"region":{"startLine":627}}}],"partialFingerprints":{"codehealthFindingId/v1":"94b5f807de2c78ef2af3a0540c35e9f7f9902a62b00a90a8af26e3df9606f518"}},{"ruleId":"D1","level":"warning","message":{"text":"Pass2.bindBindingDeclarationCoreAux (cyclomatic 96): Pass2.bindBindingDeclarationCoreAux has cyclomatic complexity 96 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass2.fs"},"region":{"startLine":302}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc1a54e4a587937a4cca9953a565ac0899d05136086bb464b0bf6cd5e5f8a732"}},{"ruleId":"D1","level":"warning","message":{"text":"Pass3.bindTypeDeclarationBody (cyclomatic 92): Pass3.bindTypeDeclarationBody has cyclomatic complexity 92 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass3.fs"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f7a915cefa9cc963afb6dd2d038d73873cdfb6affe9674f7c4883b56d1b8228"}},{"ruleId":"D1","level":"warning","message":{"text":"WellKnownFunctions.Validate (cyclomatic 82): WellKnownFunctions.Validate has cyclomatic complexity 82 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/WellKnownFunctions.fs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"3dcf781750811b35581e5771e42c947a698ae8c065376eda38ff3b1769f7708e"}},{"ruleId":"D1","level":"warning","message":{"text":"Helpers.importTypeDefinitionAsOlyILEntityDefinition (cyclomatic 81): Helpers.importTypeDefinitionAsOlyILEntityDefinition has cyclomatic complexity 81 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Targets/DotNet/Oly.Compiler.CIL.Importer/Importer.fs"},"region":{"startLine":1512}}}],"partialFingerprints":{"codehealthFindingId/v1":"f308d89bacc734f64a7910b574080af03f9975bb8a1a05ec304adb8788a2ff88"}},{"ruleId":"D1","level":"warning","message":{"text":"PostInferenceAnalysis.analyzeExpressionAuxAux (cyclomatic 80): PostInferenceAnalysis.analyzeExpressionAuxAux has cyclomatic complexity 80 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/PostInferenceAnalysis.fs"},"region":{"startLine":926}}}],"partialFingerprints":{"codehealthFindingId/v1":"47c10c99a935d4263772538d18ea85e798c30b6e5376e56e1233a1eed769f9b4"}},{"ruleId":"D1","level":"warning","message":{"text":"OlyBoundModel.GetImmediateSymbols (cyclomatic 74): OlyBoundModel.GetImmediateSymbols has cyclomatic complexity 74 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/PublicAPI/PublicSymbols.fs"},"region":{"startLine":2288}}}],"partialFingerprints":{"codehealthFindingId/v1":"2de5effa5595ac7a6328fbae9f75820aa675a05aa1418911e565f2147fc0cb2c"}},{"ruleId":"D1","level":"warning","message":{"text":"SpirvTarget.GetAnalyzerDiagnostics (cyclomatic 70): SpirvTarget.GetAnalyzerDiagnostics has cyclomatic complexity 70 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Targets/Spirv/Oly.Runtime.Target.Spirv/SpirvTarget.fs"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ebd318270b4b397ebc4534541d1a4eb9714b895f9d5eb130b13ce8d4694c6a1"}},{"ruleId":"D1","level":"warning","message":{"text":"LexerModule.handleNonTriviaPeekAux (cyclomatic 69): LexerModule.handleNonTriviaPeekAux has cyclomatic complexity 69 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing. This is NOT this file\u0027s highest cyclomatic complexity: LexerModule.scanKeywordOrIdentifier (cyclomatic 85) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded method is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler.Syntax/Internal/Lexer.fs"},"region":{"startLine":849}}}],"partialFingerprints":{"codehealthFindingId/v1":"438ca2ccb4482d092a2643ca6eeaa0cc61e10932222d3b83af941b9bcc2a3b2b"}},{"ruleId":"D1","level":"warning","message":{"text":"extension.activate (cyclomatic 69): extension.activate has cyclomatic complexity 69 (threshold 15). Of this number, 31 points are the body\u0027s own statements and 38 belong to 14 function literals inside it that branch. To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"vscode/src/extension.ts"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"66d12d78be17398b506829995c2b524347483a942209cb841c10727ed0c9186b"}},{"ruleId":"D1","level":"warning","message":{"text":"CopyPropagation.handleExpressionAuxCopyPropagation (cyclomatic 66): CopyPropagation.handleExpressionAuxCopyPropagation has cyclomatic complexity 66 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Oly.Runtime/Optimizations/CopyPropagation.fs"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"51a39501a4155174a5905767b45a6364cfb86cbb57ade7bb3ea910ea2f8eb0d8"}},{"ruleId":"D1","level":"warning","message":{"text":"Pass1.bindTypeDeclarationBody (cyclomatic 64): Pass1.bindTypeDeclarationBody has cyclomatic complexity 64 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass1.fs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"4171030cb2590234d699ee8c672b458323d775637e600974cd5f5132f4fd8da0"}},{"ruleId":"D1","level":"warning","message":{"text":"BoundTreeRewriteVisitorRunner.Rewrite (cyclomatic 63): BoundTreeRewriteVisitorRunner.Rewrite has cyclomatic complexity 63 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/BoundTreeRewriter.fs"},"region":{"startLine":323}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a7228aa4b42a1e89f43100f6bd0cb85a635ee5afb80198963f6d423021d2440"}},{"ruleId":"D1","level":"warning","message":{"text":"BoundTreeRewriter.Rewrite (cyclomatic 61): BoundTreeRewriter.Rewrite has cyclomatic complexity 61 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/BoundTreeRewriter.fs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"435aba0fda81cefb50d8c60d327eb15a462f9fa7b32a21f034bff33ea11c19aa"}},{"ruleId":"D1","level":"warning","message":{"text":"ILGen.GenExpressionAux (cyclomatic 58): ILGen.GenExpressionAux has cyclomatic complexity 58 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/ILGen.fs"},"region":{"startLine":1444}}}],"partialFingerprints":{"codehealthFindingId/v1":"128b744d80a2fb56af4f26aa52cf6840217a2e9882cc0ea08be265e70b89e0a7"}},{"ruleId":"D1","level":"warning","message":{"text":"GeneralOptimizer.optimizeExpressionCore (cyclomatic 58): GeneralOptimizer.optimizeExpressionCore has cyclomatic complexity 58 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Oly.Runtime/Optimizations/GeneralOptimizer.fs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ce017bf1688546b891f7aa5fbc77a328c5348fd7f3e57ba817078297002bfc3"}},{"ruleId":"D1","level":"warning","message":{"text":"OlyRuntimeClrEmitter.Oly.Runtime.CodeGen.IOlyRuntimeEmitter\u003COly.Emitters.DotNet.ClrTypeInfo, Oly.Emitters.DotNet.ClrMethodInfo, Oly.Emitters.DotNet.ClrFieldInfo\u003E.EmitFunctionDefinition (cyclomatic 58): OlyRuntimeClrEmitter.Oly.Runtime.CodeGen.IOlyRuntimeEmitter\u003COly.Emitters.DotNet.ClrTypeInfo, Oly.Emitters.DotNet.ClrMethodInfo, Oly.Emitters.DotNet.ClrFieldInfo\u003E.EmitFunctionDefinition has cyclomatic complexity 58 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/DotNet/Oly.Emitters.DotNet/Emitter.fs"},"region":{"startLine":2798}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b4335f0281e29fc12b8c12d28a1a8f5bb54250879c65429725a00916cf18648"}},{"ruleId":"D1","level":"warning","message":{"text":"PrettyPrint.printTypeAux (cyclomatic 56): PrettyPrint.printTypeAux has cyclomatic complexity 56 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/PrettyPrint.fs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"3724e3728a4641f101589d42f6a1ceb751eec75b89a22ea7b2686738f0807b2d"}},{"ruleId":"D1","level":"warning","message":{"text":"ClrMethodDefinitionBuilder.PopulateMethodBody (cyclomatic 55): ClrMethodDefinitionBuilder.PopulateMethodBody has cyclomatic complexity 55 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/DotNet/DotNet.Metadata/MetadataBuilder.fs"},"region":{"startLine":2536}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee1b227aa99cc40519b21b499c5a737782744636b8de1724808c437820e6cfd9"}},{"ruleId":"D1","level":"warning","message":{"text":"Pass4.bindLocalExpressionAuxAux (cyclomatic 53): Pass4.bindLocalExpressionAuxAux has cyclomatic complexity 53 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass4.fs"},"region":{"startLine":1649}}}],"partialFingerprints":{"codehealthFindingId/v1":"9560966fb7547fb62360df4c91f897590c060c58a5a2a7caecb7f28fe9b12e44"}},{"ruleId":"D1","level":"warning","message":{"text":"Substitution.substituteForLambdaLifting (cyclomatic 53): Substitution.substituteForLambdaLifting has cyclomatic complexity 53 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Substitution.fs"},"region":{"startLine":378}}}],"partialFingerprints":{"codehealthFindingId/v1":"420c5dbeaa8ba3eff8e5c43742366342e4b6c36c31b382d3654d8fd2a3898f4b"}},{"ruleId":"D1","level":"warning","message":{"text":"ILGen.emitILTypeAux (cyclomatic 52): ILGen.emitILTypeAux has cyclomatic complexity 52 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/ILGen.fs"},"region":{"startLine":362}}}],"partialFingerprints":{"codehealthFindingId/v1":"904bf9f6bf9eb6f9e30229aa0c91528ff33bfb66c7899af49e6d66c8a7414eba"}},{"ruleId":"D1","level":"warning","message":{"text":"NameResolution.bindType (cyclomatic 52): NameResolution.bindType has cyclomatic complexity 52 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/NameResolution.fs"},"region":{"startLine":1419}}}],"partialFingerprints":{"codehealthFindingId/v1":"32df4b19d84e3bfa59ea36eb23e89251ff7dc9a6f58f9feb4bb360ca81b19aef"}},{"ruleId":"D1","level":"warning","message":{"text":"NameResolution.bindTypeConstructor (cyclomatic 52): NameResolution.bindTypeConstructor has cyclomatic complexity 52 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/NameResolution.fs"},"region":{"startLine":1660}}}],"partialFingerprints":{"codehealthFindingId/v1":"41f9ae202b44c3ddfcad0b4fadaf350b3c5cf22841d6462a844a6ab1699aa777"}},{"ruleId":"D1","level":"warning","message":{"text":"OlySyntaxDiffs.OlySyntaxTree.AreOpenDeclarationsEqual.Static (cyclomatic 50): OlySyntaxDiffs.OlySyntaxTree.AreOpenDeclarationsEqual.Static has cyclomatic complexity 50 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler.Syntax/SyntaxTreeImplementation.fs"},"region":{"startLine":1751}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ec9e39532af2f7a4e17873047528a9d65da907435f45a53a19ad4130477af83"}},{"ruleId":"D1","level":"warning","message":{"text":"CompilerImports.importTypeSymbol (cyclomatic 48): CompilerImports.importTypeSymbol has cyclomatic complexity 48 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/CompilerImports.fs"},"region":{"startLine":950}}}],"partialFingerprints":{"codehealthFindingId/v1":"6eca2349a064f57b17b29a4d6348ba9805384cd40a023925e2a842a2482612e6"}},{"ruleId":"D1","level":"warning","message":{"text":"SpirvLowering.LowerOperation (cyclomatic 48): SpirvLowering.LowerOperation has cyclomatic complexity 48 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/Spirv/Oly.Emitters.Spirv/SpirvLowering.fs"},"region":{"startLine":205}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2b441b665aa6feb454863b3ac2e053f33357e4de8b9a27224ae232219b82563"}},{"ruleId":"D1","level":"warning","message":{"text":"ILGen.GenEntityDefinitionNoCache (cyclomatic 45): ILGen.GenEntityDefinitionNoCache has cyclomatic complexity 45 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/ILGen.fs"},"region":{"startLine":1104}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a48ce4616478014cf2227684c307dd59da56e6248e2e283c3c6fbb99f35674b"}},{"ruleId":"D1","level":"warning","message":{"text":"ExtensionHelpers.getViewModel (cyclomatic 45): ExtensionHelpers.getViewModel has cyclomatic complexity 45 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LanguageServer/Oly.LanguageServer/LanguageServer.fs"},"region":{"startLine":798}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8d6db5f31a9f0b5d6e67631f5da83e3c85438a28b89a9a0811bf9871854df4a"}},{"ruleId":"D1","level":"warning","message":{"text":"DeadCodeElimination.DeadCodeElimination (cyclomatic 42): DeadCodeElimination.DeadCodeElimination has cyclomatic complexity 42 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Oly.Runtime/Optimizations/DeadCodeElimination.fs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"d61b9a28ba2a0d5af72f390a09ed4a13af7a36e053fd9586328e3f68e56d8ba6"}},{"ruleId":"D1","level":"warning","message":{"text":"OlyRuntimeClrEmitter.Oly.Runtime.CodeGen.IOlyRuntimeEmitter\u003COly.Emitters.DotNet.ClrTypeInfo, Oly.Emitters.DotNet.ClrMethodInfo, Oly.Emitters.DotNet.ClrFieldInfo\u003E.EmitTypeDefinitionInfo (cyclomatic 42): OlyRuntimeClrEmitter.Oly.Runtime.CodeGen.IOlyRuntimeEmitter\u003COly.Emitters.DotNet.ClrTypeInfo, Oly.Emitters.DotNet.ClrMethodInfo, Oly.Emitters.DotNet.ClrFieldInfo\u003E.EmitTypeDefinitionInfo has cyclomatic complexity 42 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/DotNet/Oly.Emitters.DotNet/Emitter.fs"},"region":{"startLine":2329}}}],"partialFingerprints":{"codehealthFindingId/v1":"807af5eb358c0fddb0911cccd03d2858e16623ce949b8f8dfda39f17b74c42bd"}},{"ruleId":"D1","level":"warning","message":{"text":"NameResolution.bindNameAsItemAux (cyclomatic 41): NameResolution.bindNameAsItemAux has cyclomatic complexity 41 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/NameResolution.fs"},"region":{"startLine":901}}}],"partialFingerprints":{"codehealthFindingId/v1":"f54cef4172d73fcea289b8d059d3c1c2b2f609e3fef6525cb337a0ef76f04401"}},{"ruleId":"D1","level":"warning","message":{"text":"SpirvCodeGen.GenOperation (cyclomatic 40): SpirvCodeGen.GenOperation has cyclomatic complexity 40 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/Spirv/Oly.Emitters.Spirv/SpirvCodeGen.fs"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c6ab0cbbe78a39dd70ad21d0859570014c0c40f90e382e308e8188c0519bf1b"}},{"ruleId":"D1","level":"warning","message":{"text":"SymbolOperations.createFunctionValueSemantic (cyclomatic 39): SymbolOperations.createFunctionValueSemantic has cyclomatic complexity 39 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/SymbolOperations.fs"},"region":{"startLine":2213}}}],"partialFingerprints":{"codehealthFindingId/v1":"2606d9a0775342c3dd1d05116a7244e2219519407c0a8c6c3096fcbd988e9f9e"}},{"ruleId":"D1","level":"warning","message":{"text":"Helpers.OptimizeImmediateConstantFolding (cyclomatic 39): Helpers.OptimizeImmediateConstantFolding has cyclomatic complexity 39 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Oly.Runtime/Optimizations/optenv.fs"},"region":{"startLine":324}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0c5cedd29f3f6003a712dd58cb29ce8559b2dc5f6a438102c452ab1f58356c5"}},{"ruleId":"D1","level":"warning","message":{"text":"DotNetTarget.BuildProjectAsync (cyclomatic 39): DotNetTarget.BuildProjectAsync has cyclomatic complexity 39 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Targets/DotNet/Oly.Compiler.CIL.Importer/DotNetTarget.fs"},"region":{"startLine":484}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ab6b2c8b0188f7cf128ea54b209c05ff7713173bb06f0e48e95f1fa85d13323"}},{"ruleId":"D1","level":"warning","message":{"text":"Symbols.getTypeSymbol (cyclomatic 38): Symbols.getTypeSymbol has cyclomatic complexity 38 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/PublicAPI/PublicSymbols.fs"},"region":{"startLine":1627}}}],"partialFingerprints":{"codehealthFindingId/v1":"abf39f60c3001f7234612b41ba5018175a5bb4475af74af17e89940314373099"}},{"ruleId":"D1","level":"warning","message":{"text":"OlyRuntimeClrEmitter.Oly.Runtime.CodeGen.IOlyRuntimeEmitter\u003COly.Emitters.DotNet.ClrTypeInfo, Oly.Emitters.DotNet.ClrMethodInfo, Oly.Emitters.DotNet.ClrFieldInfo\u003E.EmitFieldDefinition (cyclomatic 38): OlyRuntimeClrEmitter.Oly.Runtime.CodeGen.IOlyRuntimeEmitter\u003COly.Emitters.DotNet.ClrTypeInfo, Oly.Emitters.DotNet.ClrMethodInfo, Oly.Emitters.DotNet.ClrFieldInfo\u003E.EmitFieldDefinition has cyclomatic complexity 38 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/DotNet/Oly.Emitters.DotNet/Emitter.fs"},"region":{"startLine":2601}}}],"partialFingerprints":{"codehealthFindingId/v1":"9595870521df9f6ae5a0bf9492023209d354d2c08f029008988d4f4b0112b599"}},{"ruleId":"D1","level":"warning","message":{"text":"WorkspaceExtensions.OlyDocument.TryFindFunctionCallInfo (cyclomatic 37): WorkspaceExtensions.OlyDocument.TryFindFunctionCallInfo has cyclomatic complexity 37 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler.Workspace/OlyWorkspaceExtensions.fs"},"region":{"startLine":450}}}],"partialFingerprints":{"codehealthFindingId/v1":"22513d8fc1ffd92cb60423a00f302dd152c90c120c5d5ab22f4c89cce7aaba4c"}},{"ruleId":"D1","level":"warning","message":{"text":"PostInferenceAnalysis.analyzeBindingInfo (cyclomatic 37): PostInferenceAnalysis.analyzeBindingInfo has cyclomatic complexity 37 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/PostInferenceAnalysis.fs"},"region":{"startLine":526}}}],"partialFingerprints":{"codehealthFindingId/v1":"b91b889b10f47d61b1dd092b9cd2e46e4084c78ce306285f8087767f0d4d2032"}},{"ruleId":"D1","level":"warning","message":{"text":"NameResolution.bindLiteral (cyclomatic 37): NameResolution.bindLiteral has cyclomatic complexity 37 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/NameResolution.fs"},"region":{"startLine":2645}}}],"partialFingerprints":{"codehealthFindingId/v1":"efd6f4ea52266f918cd4e58b2264a296a2d1b0449cddcb3ee45f35eab84e6dd3"}},{"ruleId":"D1","level":"warning","message":{"text":"Scoping.openContentsOfEntityAux (cyclomatic 37): Scoping.openContentsOfEntityAux has cyclomatic complexity 37 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Scoping.fs"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7637977943b60ed1383a792537f1a73186f60f6dc8caf737449707882acb3a6"}},{"ruleId":"D1","level":"warning","message":{"text":"Checker.checkReceiverOfExpression (cyclomatic 37): Checker.checkReceiverOfExpression has cyclomatic complexity 37 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Checker.fs"},"region":{"startLine":863}}}],"partialFingerprints":{"codehealthFindingId/v1":"d237e61856c3b0f49ac271915cd680b069762b7cb0b6d05f51597ef453035a3b"}},{"ruleId":"D1","level":"warning","message":{"text":"WorkspaceExtensions.OlyDocument.GetDirectiveCompletions (cyclomatic 35): WorkspaceExtensions.OlyDocument.GetDirectiveCompletions has cyclomatic complexity 35 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler.Workspace/OlyWorkspaceExtensions.fs"},"region":{"startLine":1088}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee20a412d5eec775bf12668e411ad3eaa14e2ce1f67bd25b010338243c85dbac"}},{"ruleId":"D1","level":"warning","message":{"text":"TextDocumentSyncHandler.OmniSharp.Extensions.LanguageServer.Protocol.Document.IHoverHandler.Handle (cyclomatic 35): TextDocumentSyncHandler.OmniSharp.Extensions.LanguageServer.Protocol.Document.IHoverHandler.Handle has cyclomatic complexity 35 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LanguageServer/Oly.LanguageServer/LanguageServer.fs"},"region":{"startLine":1854}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6b0c0238a62c60ecf47c01d4dc07c6833d4fe9449219792a8837217b687186e"}},{"ruleId":"D1","level":"warning","message":{"text":"NameResolution.unescapeTextAux (cyclomatic 34): NameResolution.unescapeTextAux has cyclomatic complexity 34 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/NameResolution.fs"},"region":{"startLine":2559}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5e44af71ca16770e8ba4692f6ba72bfb90f0248dde9e0eab0e15220d2264822"}},{"ruleId":"D1","level":"warning","message":{"text":"Solver.solveWitnessesByType (cyclomatic 34): Solver.solveWitnessesByType has cyclomatic complexity 34 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Solver.fs"},"region":{"startLine":247}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc2d31857af1935d784ef3f839fce716d645a826ac6dc0a06bf6a4bc895bb393"}},{"ruleId":"D1","level":"warning","message":{"text":"WellKnownExpressions.AddressOfReceiverIfPossibleAux (cyclomatic 34): WellKnownExpressions.AddressOfReceiverIfPossibleAux has cyclomatic complexity 34 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/WellKnownExpressions.fs"},"region":{"startLine":270}}}],"partialFingerprints":{"codehealthFindingId/v1":"06723b362ae809f5e018089ef5d303947529976d21947fe37eac25da58b7808e"}},{"ruleId":"D1","level":"warning","message":{"text":"ILGen.GenFunctionAsILFunctionDefinition (cyclomatic 33): ILGen.GenFunctionAsILFunctionDefinition has cyclomatic complexity 33 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/ILGen.fs"},"region":{"startLine":737}}}],"partialFingerprints":{"codehealthFindingId/v1":"be20075d55ac965ce517681a237688701648a71cb8b7988f3035827d99cf84c0"}},{"ruleId":"D1","level":"warning","message":{"text":"BoundTreeVisitor.VisitExpression (cyclomatic 33): BoundTreeVisitor.VisitExpression has cyclomatic complexity 33 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/BoundTreeVisitor.fs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c82ed048d875702d58e9cf84ab56aeeccf5f1bb49b4143c197cc544e31ab432"}},{"ruleId":"D1","level":"warning","message":{"text":"CommonSubexpressionElimination.handleExpressionAuxCse (cyclomatic 33): CommonSubexpressionElimination.handleExpressionAuxCse has cyclomatic complexity 33 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Oly.Runtime/Optimizations/CommonSubexpressionElimination.fs"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"af20d33a81db47cbdde123e25ed2dbb97eeb3d50a17cef986bb6caee1acc01ed"}},{"ruleId":"D1","level":"warning","message":{"text":"ClrCodeGen.GenValue (cyclomatic 33): ClrCodeGen.GenValue has cyclomatic complexity 33 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/DotNet/Oly.Emitters.DotNet/Emitter.fs"},"region":{"startLine":1174}}}],"partialFingerprints":{"codehealthFindingId/v1":"97ba6f1ea844f5aa38f586740fa9b57cc69aeff26044f4982df23a908d33c07c"}},{"ruleId":"D1","level":"warning","message":{"text":"Pass2.bindTopLevelPropertyBinding (cyclomatic 32): Pass2.bindTopLevelPropertyBinding has cyclomatic complexity 32 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass2.fs"},"region":{"startLine":929}}}],"partialFingerprints":{"codehealthFindingId/v1":"172a0e4a52fe5927528256f23251d472a8119435c4394370911928daa4595f32"}},{"ruleId":"D1","level":"warning","message":{"text":"RuntimeType.System.IEquatable\u003COly.Runtime.CodeGen.InternalTypes.RuntimeType\u003E.Equals (cyclomatic 32): RuntimeType.System.IEquatable\u003COly.Runtime.CodeGen.InternalTypes.RuntimeType\u003E.Equals has cyclomatic complexity 32 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Oly.Runtime/InternalCodeGenTypes.fs"},"region":{"startLine":1317}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba89ce05af468a34ed74620bb82ea84c5cd6ea3206717419564a31e8907deb0e"}},{"ruleId":"D1","level":"warning","message":{"text":"SpirvType.GetDefinitionInstructions (cyclomatic 32): SpirvType.GetDefinitionInstructions has cyclomatic complexity 32 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/Spirv/Oly.Emitters.Spirv/SpirvModuleBuilder.fs"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3d1fc9d5bdee62b27e0702deca68e01001d60c12120e5464a625cd1474cba17"}},{"ruleId":"D1","level":"warning","message":{"text":"EarlyAttributes.tryAddIntrinsicPrimitivesForEntity (cyclomatic 31): EarlyAttributes.tryAddIntrinsicPrimitivesForEntity has cyclomatic complexity 31 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/EarlyAttributes.fs"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"377f7db0ac08b5c9761d6942cdac7e29d0aff06913fe3f7534475ff3c6b12622"}},{"ruleId":"D1","level":"warning","message":{"text":"NameResolution.bindConstraint (cyclomatic 31): NameResolution.bindConstraint has cyclomatic complexity 31 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/NameResolution.fs"},"region":{"startLine":2035}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ed83e271c7bbfa9a8f45be01f70b359151d511a51404d50d7719b91b8258c2a"}},{"ruleId":"D1","level":"warning","message":{"text":"LexerModule.scanNumericLiteralAux (cyclomatic 31): LexerModule.scanNumericLiteralAux has cyclomatic complexity 31 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing. This is NOT this file\u0027s highest cyclomatic complexity: LexerModule.scanKeywordOrIdentifier (cyclomatic 85) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded method is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler.Syntax/Internal/Lexer.fs"},"region":{"startLine":227}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0afb63a59cb6da1c3842891393907abb3456bf0ff32345dc7efab1077846018"}},{"ruleId":"D1","level":"warning","message":{"text":"Helpers.decodeTypedArg (cyclomatic 31): Helpers.decodeTypedArg has cyclomatic complexity 31 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing. This is NOT this file\u0027s highest cyclomatic complexity: Helpers.mapDotNetTypeToOlyType (cyclomatic 40) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded method is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Targets/DotNet/Oly.Compiler.CIL.Importer/Importer.fs"},"region":{"startLine":1334}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b00cce41c8a03c93bb03b77d21a77f82238f2a45bdfcd624e8b7e052b1c1f4b"}},{"ruleId":"D1","level":"warning","message":{"text":"Solver.solveShape (cyclomatic 30): Solver.solveShape has cyclomatic complexity 30 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Solver.fs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"a47dfdebb5e69a502a49674eca17bde53e6b41b2c5300015bb9945108cc47fcf"}},{"ruleId":"D1","level":"warning","message":{"text":"Iterator.VisitExpression (cyclomatic 30): Iterator.VisitExpression has cyclomatic complexity 30 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/BoundTreeExtensions.fs"},"region":{"startLine":339}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2e36d84acc43ccd7c1365eb528cf242a3c3d610c74dd05675e5f8c6d696d954"}},{"ruleId":"D1","level":"warning","message":{"text":"ClrCodeGen.GenExpressionAux (cyclomatic 30): ClrCodeGen.GenExpressionAux has cyclomatic complexity 30 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/DotNet/Oly.Emitters.DotNet/Emitter.fs"},"region":{"startLine":1550}}}],"partialFingerprints":{"codehealthFindingId/v1":"514de9abf2e82eb6ca2e580321f3179ad049104fe85ade3c8e91d96b4811d077"}},{"ruleId":"D1","level":"warning","message":{"text":"Program.computeInternalNode (cyclomatic 30): Program.computeInternalNode has cyclomatic complexity 30 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler.SyntaxGenerator/Program.fs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f78d8ca82251f5cb37b8f9869521d417504e86e5a729b46817d556f860abe55"}},{"ruleId":"D1","level":"warning","message":{"text":"Pass0.bindTypeDeclaration (cyclomatic 29): Pass0.bindTypeDeclaration has cyclomatic complexity 29 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass0.fs"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"789b30e3d412655b353f6ef38dd80d91f8cc98a540a2e2d7e6ec513da045b882"}},{"ruleId":"D1","level":"warning","message":{"text":"MetadataHelpers.encodeType (cyclomatic 29): MetadataHelpers.encodeType has cyclomatic complexity 29 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages. This is NOT this file\u0027s highest cyclomatic complexity: ClrAssemblyBuilder.AddAnonymousFunctionType (cyclomatic 36) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded method is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/DotNet/DotNet.Metadata/MetadataBuilder.fs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"2144e3d3d17041ac2194c701329af8928f983cde99424cde5b9e859669deee7e"}},{"ruleId":"D1","level":"warning","message":{"text":"Dump.dumpExpression (cyclomatic 28): Dump.dumpExpression has cyclomatic complexity 28 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Dump.fs"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a4979338658a8b7b65e51cc407c0dfd06716226e37f8046e3f26f608ad26181"}},{"ruleId":"D1","level":"warning","message":{"text":"OlyBoundSubModel.TryGetMatchType (cyclomatic 27): OlyBoundSubModel.TryGetMatchType has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/PublicAPI/PublicSymbols.fs"},"region":{"startLine":1329}}}],"partialFingerprints":{"codehealthFindingId/v1":"94d2f6db5ffcda00ae74c635cfd3527c0e11dc8eb0f1bf73b3653fd7d83f15af"}},{"ruleId":"D1","level":"warning","message":{"text":"Pass3.bindTypeDeclaration (cyclomatic 27): Pass3.bindTypeDeclaration has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass3.fs"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"13783fd922251b2116c78e74841eeb6d6cc1c22a00b9d985aa90c22a09902e3f"}},{"ruleId":"D1","level":"warning","message":{"text":"Checker.checkImplementation (cyclomatic 26): Checker.checkImplementation has cyclomatic complexity 26 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Checker.fs"},"region":{"startLine":450}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf63ccf3cb82cd22788fd4c3f58510944812061a3b3e9df148e6ef2907f2f067"}},{"ruleId":"D1","level":"warning","message":{"text":"PrettyPrint.printValueAux (cyclomatic 26): PrettyPrint.printValueAux has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/PrettyPrint.fs"},"region":{"startLine":439}}}],"partialFingerprints":{"codehealthFindingId/v1":"17bce51240611529a8f5f3128de53cf367db64edf580fd3a137a36b2f65e0120"}},{"ruleId":"D1","level":"warning","message":{"text":"RuntimeFunction.VerifyConstraintsCore (cyclomatic 26): RuntimeFunction.VerifyConstraintsCore has cyclomatic complexity 26 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Oly.Runtime/InternalCodeGenTypes.fs"},"region":{"startLine":1717}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ffffa260750a5efaeda504bfb0b392232b8ff1532adf119ffa24ad0969e259f"}},{"ruleId":"D1","level":"warning","message":{"text":"Pass4.bindTopLevelBinding (cyclomatic 25): Pass4.bindTopLevelBinding has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass4.fs"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc8b87e4203880ce778934c027228a96d8e1efbcd8180fa52ebeccfd8d90850a"}},{"ruleId":"D1","level":"warning","message":{"text":"Checker.checkConstructorImplementation (cyclomatic 25): Checker.checkConstructorImplementation has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Checker.fs"},"region":{"startLine":580}}}],"partialFingerprints":{"codehealthFindingId/v1":"4624200decdb413a55a644b3feac79e39ff80271f9608f2b97b3a1725ea19830"}},{"ruleId":"D1","level":"warning","message":{"text":"Helpers.hasSideEffectAux (cyclomatic 25): Helpers.hasSideEffectAux has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Oly.Runtime/Optimizations/optenv.fs"},"region":{"startLine":161}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8741035bdd1a4500853dd4f328af0e3b2ded9c0f93cd45e7680089eb2b618be"}},{"ruleId":"D1","level":"warning","message":{"text":"Extensions.BlobBuilder.WriteTypeOfC (cyclomatic 25): Extensions.BlobBuilder.WriteTypeOfC has cyclomatic complexity 25 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/DotNet/Oly.Emitters.DotNet/Extensions.fs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac2974b4ae18df2b0a8ae7b6ec986a7d46d6c7bb31f0177000b2044ea6f55aec"}},{"ruleId":"D1","level":"warning","message":{"text":"EarlyAttributes.bindEarlyAttribute (cyclomatic 24): EarlyAttributes.bindEarlyAttribute has cyclomatic complexity 24 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/EarlyAttributes.fs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b0d6a22032bda33da315c44cacca8a2766652f25b303dfaca7059bed7742b87"}},{"ruleId":"D1","level":"warning","message":{"text":"OpenDeclarations.bindOpenDeclaration (cyclomatic 24): OpenDeclarations.bindOpenDeclaration has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/OpenDeclarations.fs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"b10cc106984d8490d8184f610c02529931505e333c59f9bdbbf58def3c5591f0"}},{"ruleId":"D1","level":"warning","message":{"text":"NameResolution.bindIdentifierAsMemberValue (cyclomatic 24): NameResolution.bindIdentifierAsMemberValue has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/NameResolution.fs"},"region":{"startLine":1231}}}],"partialFingerprints":{"codehealthFindingId/v1":"43d800570819bb37c4c3c0ed5754e76913fc4036642d0e9a671255de9e398029"}},{"ruleId":"D1","level":"warning","message":{"text":"Helpers.getFreeInferenceVariables (cyclomatic 24): Helpers.getFreeInferenceVariables has cyclomatic complexity 24 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/BoundTreeExtensions.fs"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"97396120b21e2e4e781b471a88f6aed4a3bdda3084a1342dff0aecd019d89e50"}},{"ruleId":"D1","level":"warning","message":{"text":"ClrCodeGen.GenCall (cyclomatic 24): ClrCodeGen.GenCall has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/DotNet/Oly.Emitters.DotNet/Emitter.fs"},"region":{"startLine":1262}}}],"partialFingerprints":{"codehealthFindingId/v1":"3df31bb6cceff6fe9ac3404b281ba1f5f3fdf010805db202300d8951303cca71"}},{"ruleId":"D1","level":"warning","message":{"text":"ClrTypeDefinitionBuilder.Build (cyclomatic 24): ClrTypeDefinitionBuilder.Build has cyclomatic complexity 24 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions. This is NOT this file\u0027s highest cyclomatic complexity: ClrAssemblyBuilder.AddAnonymousFunctionType (cyclomatic 36) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded method is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/DotNet/DotNet.Metadata/MetadataBuilder.fs"},"region":{"startLine":3146}}}],"partialFingerprints":{"codehealthFindingId/v1":"478738a38a5d5a01ea61492d3196519b0036968b5f218ef8301f3f7d769217f0"}},{"ruleId":"D1","level":"warning","message":{"text":"BinderEnvironment.SetUnqualifiedValueAux (cyclomatic 23): BinderEnvironment.SetUnqualifiedValueAux has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Environment.fs"},"region":{"startLine":416}}}],"partialFingerprints":{"codehealthFindingId/v1":"c53cdd8a8066aa6715766fba034b0e6e12df13c46d98478fb8fc8f16d7e40716"}},{"ruleId":"D1","level":"warning","message":{"text":"DotNetTarget.GetAnalyzerDiagnostics (cyclomatic 23): DotNetTarget.GetAnalyzerDiagnostics has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Targets/DotNet/Oly.Compiler.CIL.Importer/DotNetTarget.fs"},"region":{"startLine":788}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a2ff805e6c4e03fafcc66eee5d84e1bb0c09586b9ae0c82f7f72cc835ddbea6"}},{"ruleId":"D1","level":"warning","message":{"text":"Pass4.checkExhaustiveness (cyclomatic 22): Pass4.checkExhaustiveness has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass4.fs"},"region":{"startLine":920}}}],"partialFingerprints":{"codehealthFindingId/v1":"5266e586b267b499b1bb681ce2549b2881f9b3092e3efb82fe84938850545ba3"}},{"ruleId":"D1","level":"warning","message":{"text":"NameResolution.bindIdentifierWithNoReceiverAsFormalItem (cyclomatic 22): NameResolution.bindIdentifierWithNoReceiverAsFormalItem has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/NameResolution.fs"},"region":{"startLine":246}}}],"partialFingerprints":{"codehealthFindingId/v1":"cda70eb0b908f78dd9de636a33b6a151c84911a83ac8f622b1709226c7d5a5cd"}},{"ruleId":"D1","level":"warning","message":{"text":"Checker.createGeneralizedFunctionTypeParameters (cyclomatic 22): Checker.createGeneralizedFunctionTypeParameters has cyclomatic complexity 22 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Checker.fs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5a24414d8050732d6e284ef9d06f75eaad9c4fca6fe2b0611ced52f44914d76"}},{"ruleId":"D1","level":"warning","message":{"text":"FunctionOverloading.filterFunctionsForOverloadingByWeight (cyclomatic 22): FunctionOverloading.filterFunctionsForOverloadingByWeight has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/FunctionOverloading.fs"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"7067712d4531c545139cb3c47a14716205d04fe07c2ea041ed3cd1cb86d5c9f0"}},{"ruleId":"D1","level":"warning","message":{"text":"LocalNormalization.handleExpressionAuxNormalizeLocals (cyclomatic 22): LocalNormalization.handleExpressionAuxNormalizeLocals has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Oly.Runtime/LocalNormalization.fs"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1e4a3e6014c3441f78ddc9454fc606bb05fba426d4afb6c1e40b85393e162a5"}},{"ruleId":"D1","level":"warning","message":{"text":"Helpers.importMethodDefinitionAsOlyILFunctionDefinition (cyclomatic 22): Helpers.importMethodDefinitionAsOlyILFunctionDefinition has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This is NOT this file\u0027s highest cyclomatic complexity: Helpers.mapDotNetTypeToOlyType (cyclomatic 40) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded method is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Targets/DotNet/Oly.Compiler.CIL.Importer/Importer.fs"},"region":{"startLine":1195}}}],"partialFingerprints":{"codehealthFindingId/v1":"04e208658094cca7724a194774c9d208cd82ba26bc9d4689ce50d865696b1802"}},{"ruleId":"D1","level":"warning","message":{"text":"OlyValueSymbol.IsSimilarTo (cyclomatic 21): OlyValueSymbol.IsSimilarTo has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/PublicAPI/PublicSymbols.fs"},"region":{"startLine":653}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0f7bd7c57a6f1a71bf722f1d8f825516741374d8e0843ef7f0f940009904c05"}},{"ruleId":"D1","level":"warning","message":{"text":"Pass4.bindPatternByResolutionItem (cyclomatic 21): Pass4.bindPatternByResolutionItem has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass4.fs"},"region":{"startLine":1956}}}],"partialFingerprints":{"codehealthFindingId/v1":"637e24c91fabf39525e02e76d93f5dcf7badb441ff04281e4b120662d3ca89a1"}},{"ruleId":"D1","level":"warning","message":{"text":"Solver.solveConstraint (cyclomatic 21): Solver.solveConstraint has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Solver.fs"},"region":{"startLine":447}}}],"partialFingerprints":{"codehealthFindingId/v1":"b04baa346347c7051168b0c8189c4ab244213f4a996c8bf74a0ecbe72ed4802d"}},{"ruleId":"D1","level":"warning","message":{"text":"SymbolOperations.freshenTypeAux (cyclomatic 21): SymbolOperations.freshenTypeAux has cyclomatic complexity 21 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/SymbolOperations.fs"},"region":{"startLine":2735}}}],"partialFingerprints":{"codehealthFindingId/v1":"e775bf48a84baa2236761eb45452ad9573d26f2e8e47c15fc0fada9ecfaa40e5"}},{"ruleId":"D1","level":"warning","message":{"text":"Symbols.tryActualType (cyclomatic 21): Symbols.tryActualType has cyclomatic complexity 21 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing. This is NOT this file\u0027s highest cyclomatic complexity: WellKnownFunction.TryFromName (cyclomatic 43) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded method is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/Symbols.fs"},"region":{"startLine":1189}}}],"partialFingerprints":{"codehealthFindingId/v1":"82e53e98dc57e3474c2a82ab4bd1ef3740ad248f6c26a2a767b5a2c3daa95455"}},{"ruleId":"D1","level":"warning","message":{"text":"WorkspaceExtensions.classifyValueKind (cyclomatic 20): WorkspaceExtensions.classifyValueKind has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler.Workspace/OlyWorkspaceExtensions.fs"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"db3cc67dde5f0952b90ed76c98f239d380184f67b7334541a7e3959d9656c1cb"}},{"ruleId":"D1","level":"warning","message":{"text":"NameResolution.resolveFormalValue (cyclomatic 20): NameResolution.resolveFormalValue has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/NameResolution.fs"},"region":{"startLine":821}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c405274dc1b8af7779519297259e69d202f232eb881d7d9fd0e43159ce6670f"}},{"ruleId":"D1","level":"warning","message":{"text":"Substitution.substituteForAutoGeneralization (cyclomatic 20): Substitution.substituteForAutoGeneralization has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Substitution.fs"},"region":{"startLine":269}}}],"partialFingerprints":{"codehealthFindingId/v1":"faa11378caaf69199c335a41ffe7dc65a5932c3582f80076cc22eaed7901e050"}},{"ruleId":"D1","level":"warning","message":{"text":"Symbols.actualType (cyclomatic 20): Symbols.actualType has cyclomatic complexity 20 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing. This is NOT this file\u0027s highest cyclomatic complexity: WellKnownFunction.TryFromName (cyclomatic 43) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded method is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/Symbols.fs"},"region":{"startLine":534}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac744c66e732c4e244b147c1b04f83bb360f87a82f9412992956771cb6ecc344"}},{"ruleId":"D1","level":"warning","message":{"text":"AssertionPropagation.assertionPropagateExpressionAux (cyclomatic 20): AssertionPropagation.assertionPropagateExpressionAux has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Oly.Runtime/Optimizations/AssertionPropagation.fs"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5b11d6461d5c696b8e468f396faac8f58351f93a6c66dd71b5c22dd17d0e47c"}},{"ruleId":"D1","level":"warning","message":{"text":"Helpers.tryImportFieldDefinitionAsOlyILFieldDefinition (cyclomatic 20): Helpers.tryImportFieldDefinitionAsOlyILFieldDefinition has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This is NOT this file\u0027s highest cyclomatic complexity: Helpers.mapDotNetTypeToOlyType (cyclomatic 40) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded method is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Targets/DotNet/Oly.Compiler.CIL.Importer/Importer.fs"},"region":{"startLine":1000}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8b9a469e6de645a649a0c3d31a0abb0f678889c762eb739dcc04a746402fdcb"}},{"ruleId":"D1","level":"warning","message":{"text":"Extensions.ClrTypeDefinitionBuilder.CreateMethodDefinitionBuilderEx (cyclomatic 20): Extensions.ClrTypeDefinitionBuilder.CreateMethodDefinitionBuilderEx has cyclomatic complexity 20 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages. This is NOT this file\u0027s highest cyclomatic complexity: Extensions.BlobBuilder.WriteValueOfC (cyclomatic 21) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded method is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/DotNet/Oly.Emitters.DotNet/Extensions.fs"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"006dd555631a2f7aec3c4fc2497b2fd7058f679bdccde2dd436aff5d50306ae7"}},{"ruleId":"D1","level":"warning","message":{"text":"ClrPdbBuilder.BuildSequencePoints (cyclomatic 20): ClrPdbBuilder.BuildSequencePoints has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This is NOT this file\u0027s highest cyclomatic complexity: ClrAssemblyBuilder.AddAnonymousFunctionType (cyclomatic 36) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded method is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/DotNet/DotNet.Metadata/MetadataBuilder.fs"},"region":{"startLine":337}}}],"partialFingerprints":{"codehealthFindingId/v1":"d24bb010e595f5535a3063df0793ec8a6794fae8b5566780a9343e63c5fb1667"}},{"ruleId":"D1","level":"warning","message":{"text":"ClrTypeHandle.Equals (cyclomatic 20): ClrTypeHandle.Equals has cyclomatic complexity 20 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/DotNet/DotNet.Metadata/MetadataTypes.fs"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b039ecad5f19c47f5e4fbbb0972a4673de479b5a044495aeb2aca88b2e32174"}},{"ruleId":"D1","level":"warning","message":{"text":"SpirvEmitter.Oly.Runtime.CodeGen.IOlyRuntimeEmitter\u003COly.Emitters.Spirv.SpirvType, Oly.Emitters.Spirv.SpirvFunction, Oly.Emitters.Spirv.SpirvField\u003E.EmitFunctionDefinition (cyclomatic 20): SpirvEmitter.Oly.Runtime.CodeGen.IOlyRuntimeEmitter\u003COly.Emitters.Spirv.SpirvType, Oly.Emitters.Spirv.SpirvFunction, Oly.Emitters.Spirv.SpirvField\u003E.EmitFunctionDefinition has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/Spirv/Oly.Emitters.Spirv/SpirvEmitter.fs"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"64f068dd44e1a4c6aa857326bd9543120071b6d58810fa72ae27d838acc8e297"}},{"ruleId":"D1","level":"warning","message":{"text":"PostInferenceAnalysis.analyzeTypeAux (cyclomatic 19): PostInferenceAnalysis.analyzeTypeAux has cyclomatic complexity 19 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/PostInferenceAnalysis.fs"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"e53ab0bc4a947b0e7a921bc68f797ec0941bf783c54b5c82be0b5a4f400688c7"}},{"ruleId":"D1","level":"warning","message":{"text":"Checker.checkConstraintsFromCallExpression (cyclomatic 19): Checker.checkConstraintsFromCallExpression has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Checker.fs"},"region":{"startLine":982}}}],"partialFingerprints":{"codehealthFindingId/v1":"073f96e361f110824e2777a3ab0b8960f24903184d391d1ee27f12376cbb0162"}},{"ruleId":"D1","level":"warning","message":{"text":"CompilerImports.retargetEntity (cyclomatic 19): CompilerImports.retargetEntity has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/CompilerImports.fs"},"region":{"startLine":469}}}],"partialFingerprints":{"codehealthFindingId/v1":"f442596829209c7c1e3d8abbf4bd8746227553d7314d7647dbc5352494875aa8"}},{"ruleId":"D1","level":"warning","message":{"text":"SymbolOperations.EntitySymbol.Hierarchy (cyclomatic 19): SymbolOperations.EntitySymbol.Hierarchy has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This is NOT this file\u0027s highest cyclomatic complexity: SymbolOperations.areConstantsEqual (cyclomatic 20) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded method is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/SymbolOperations.fs"},"region":{"startLine":2935}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed3f8ece0e4796c7919e5c363b04d024bb1b3c12c7c2fd778bf57fda7a4aa3bd"}},{"ruleId":"D1","level":"warning","message":{"text":"LexerModule.handlePeek (cyclomatic 19): LexerModule.handlePeek has cyclomatic complexity 19 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing. This is NOT this file\u0027s highest cyclomatic complexity: LexerModule.scanKeywordOrIdentifier (cyclomatic 85) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded method is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler.Syntax/Internal/Lexer.fs"},"region":{"startLine":1125}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ee4d6129bba1c2d4fb17aab7fb39f4faa6029411e234d378dcf4d83c1bf3eb5"}},{"ruleId":"D1","level":"warning","message":{"text":"ClrCodeGen.getPrimitiveTypeCode (cyclomatic 19): ClrCodeGen.getPrimitiveTypeCode has cyclomatic complexity 19 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/DotNet/Oly.Emitters.DotNet/Emitter.fs"},"region":{"startLine":406}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb9ec7e0330fead91367882690a3213333dd4dff53f73048f6bc8692aa4732ec"}},{"ruleId":"D1","level":"warning","message":{"text":"TextDocumentSyncHandler.OmniSharp.Extensions.LanguageServer.Protocol.Document.IDocumentSymbolHandler.Handle (cyclomatic 19): TextDocumentSyncHandler.OmniSharp.Extensions.LanguageServer.Protocol.Document.IDocumentSymbolHandler.Handle has cyclomatic complexity 19 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing. This is NOT this file\u0027s highest cyclomatic complexity: LanguageServer.OlyClassificationKind.ToLspClassificationKind (cyclomatic 23) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded method is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LanguageServer/Oly.LanguageServer/LanguageServer.fs"},"region":{"startLine":1533}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ed6fa5ff8779d55af39be04f9eb066bf7c16caee3eb3e6505e9420e671b3d92"}},{"ruleId":"D1","level":"warning","message":{"text":"Pass4.bindItemAsExpression (cyclomatic 18): Pass4.bindItemAsExpression has cyclomatic complexity 18 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass4.fs"},"region":{"startLine":391}}}],"partialFingerprints":{"codehealthFindingId/v1":"1daf836b4cb8b35521ef9ace5665e33039d091a1b07ef29dc78aa15aa61c8598"}},{"ruleId":"D1","level":"warning","message":{"text":"Attributes.bindAttributeExpressionAux (cyclomatic 18): Attributes.bindAttributeExpressionAux has cyclomatic complexity 18 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Attributes.fs"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"66aa696bb87f3f062cd80252a93f727ee5bde8e6de56fbfde258bc44df0cc045"}},{"ruleId":"D1","level":"warning","message":{"text":"NameResolution.checkVirtualUsage (cyclomatic 18): NameResolution.checkVirtualUsage has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/NameResolution.fs"},"region":{"startLine":481}}}],"partialFingerprints":{"codehealthFindingId/v1":"76cbc3cc62eff39cd49468932b818396eb73c4d0344eddc1cd4e885ea641e0b2"}},{"ruleId":"D1","level":"warning","message":{"text":"Iterator.VisitExpression (cyclomatic 18): Iterator.VisitExpression has cyclomatic complexity 18 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/BoundTreeExtensions.fs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8055983221b654054f4269b7671e0e01ada47dd5b0f0e5663d1bf2f5b2237ae"}},{"ruleId":"D1","level":"warning","message":{"text":"SymbolOperations.unifyVariadicTypes (cyclomatic 18): SymbolOperations.unifyVariadicTypes has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This is NOT this file\u0027s highest cyclomatic complexity: SymbolOperations.areConstantsEqual (cyclomatic 20) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded method is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/SymbolOperations.fs"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3dd393c471e4510bdfc2b9a011f78f7bb2f5ed1a8ff81f3061b264480bc6694"}},{"ruleId":"D1","level":"warning","message":{"text":"RuntimeType.Substitute (cyclomatic 18): RuntimeType.Substitute has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This is NOT this file\u0027s highest cyclomatic complexity: RuntimeType.Strip (cyclomatic 21) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded method is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Oly.Runtime/InternalCodeGenTypes.fs"},"region":{"startLine":1151}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7f5586adad2590b200eaad4eefb7a219e8c2b167ebf2ee57e10167dba8b67fd"}},{"ruleId":"D1","level":"warning","message":{"text":"OlySignatureTypeProvider.System.Reflection.Metadata.ISignatureTypeProvider\u003COly.Metadata.OlyILType, System.Int32\u003E.GetModifiedType (cyclomatic 18): OlySignatureTypeProvider.System.Reflection.Metadata.ISignatureTypeProvider\u003COly.Metadata.OlyILType, System.Int32\u003E.GetModifiedType has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top. This is NOT this file\u0027s highest cyclomatic complexity: Helpers.mapDotNetTypeToOlyType (cyclomatic 40) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded method is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Targets/DotNet/Oly.Compiler.CIL.Importer/Importer.fs"},"region":{"startLine":304}}}],"partialFingerprints":{"codehealthFindingId/v1":"30da54d77e756cda1c315f11610b6d141b69aea80e1aa3523a3dfc4a49553465"}},{"ruleId":"D1","level":"warning","message":{"text":"Normalization.NormalizeAndCheck (cyclomatic 18): Normalization.NormalizeAndCheck has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/Spirv/Oly.Emitters.Spirv/SpirvModuleBuilder.fs"},"region":{"startLine":1262}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc214ce5bad582ae3565d9dd1f8ef8225918b460eee26b888b792c95f78f20b2"}},{"ruleId":"D1","level":"warning","message":{"text":"SpirvModuleBuilder.CreateVariableType (cyclomatic 18): SpirvModuleBuilder.CreateVariableType has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/Spirv/Oly.Emitters.Spirv/SpirvModuleBuilder.fs"},"region":{"startLine":1045}}}],"partialFingerprints":{"codehealthFindingId/v1":"adce58e0740fce13672bd92daa8af7c8c3fa1e95ded90f013ee41d92fe973f48"}},{"ruleId":"D1","level":"warning","message":{"text":"OlyBoundSubModel.IsUnqualified (cyclomatic 17): OlyBoundSubModel.IsUnqualified has cyclomatic complexity 17 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/PublicAPI/PublicSymbols.fs"},"region":{"startLine":1241}}}],"partialFingerprints":{"codehealthFindingId/v1":"cef0e837286dfdd2fff7ac48e81ae46dc1867b64b82dc07bc135ddfd85188f2a"}},{"ruleId":"D1","level":"warning","message":{"text":"PostInferenceAnalysis.checkValue (cyclomatic 17): PostInferenceAnalysis.checkValue has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/PostInferenceAnalysis.fs"},"region":{"startLine":435}}}],"partialFingerprints":{"codehealthFindingId/v1":"58f7417237b9533ea49de5fe930025d26c65251c25a761dee3e575780d90a8fb"}},{"ruleId":"D1","level":"warning","message":{"text":"Checker.checkTypeConstructorDepthWithType (cyclomatic 17): Checker.checkTypeConstructorDepthWithType has cyclomatic complexity 17 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Checker.fs"},"region":{"startLine":345}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e4f45c942ab91480135622a9a4b04a9316f95b071f383c133e10706446d7c53"}},{"ruleId":"D1","level":"warning","message":{"text":"FunctionOverloading.filterFunctionsForOverloadingPhase4 (cyclomatic 17): FunctionOverloading.filterFunctionsForOverloadingPhase4 has cyclomatic complexity 17 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/FunctionOverloading.fs"},"region":{"startLine":226}}}],"partialFingerprints":{"codehealthFindingId/v1":"683c5406bc75e54df0445965250f972aa2f2e71982f1534958903d0526d3f389"}},{"ruleId":"D1","level":"warning","message":{"text":"BoundTreeExtensions.BoundTree.ForEachForTooling (cyclomatic 17): BoundTreeExtensions.BoundTree.ForEachForTooling has cyclomatic complexity 17 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/BoundTreeExtensions.fs"},"region":{"startLine":539}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd290da0ea8ea905e613cfe92ba4834e622656eb63e40f7763568c5ce9324e39"}},{"ruleId":"D1","level":"warning","message":{"text":"BoundTreeExtensions.subsumesShapeMembersWith (cyclomatic 17): BoundTreeExtensions.subsumesShapeMembersWith has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/BoundTreeExtensions.fs"},"region":{"startLine":869}}}],"partialFingerprints":{"codehealthFindingId/v1":"58338803522e616079183a3fddcea5efe2713547fd0fcb2732330e4c8e836ab7"}},{"ruleId":"D1","level":"warning","message":{"text":"Pass4.bindMemberValueRightSideExpression (cyclomatic 16): Pass4.bindMemberValueRightSideExpression has cyclomatic complexity 16 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass4.fs"},"region":{"startLine":654}}}],"partialFingerprints":{"codehealthFindingId/v1":"68adf204ece7b8819c145151b7f484716e5c9b9bd7fb8c67437223bb3210ea0c"}},{"ruleId":"D1","level":"warning","message":{"text":"Symbols.applyType (cyclomatic 16): Symbols.applyType has cyclomatic complexity 16 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing. This is NOT this file\u0027s highest cyclomatic complexity: WellKnownFunction.TryFromName (cyclomatic 43) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded method is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/Symbols.fs"},"region":{"startLine":467}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e3b3f9f4690ed1146be56449956a270989b0c04cb1b01aa71cd984ed1b13f87"}},{"ruleId":"D1","level":"warning","message":{"text":"SpirvModuleBuilder.Build (cyclomatic 16): SpirvModuleBuilder.Build has cyclomatic complexity 16 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline. This is NOT this file\u0027s highest cyclomatic complexity: SpirvType.GetSizeInBytes (cyclomatic 18) is higher and carries no row of its own \u2014 it was excluded as a flat dispatcher (a long switch/match over independent cases: many branches, almost no nesting), which this dimension does not treat as a refactor obligation. It is named here so the ranking you see in this file is not mistaken for the whole of it; the excluded method is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/Spirv/Oly.Emitters.Spirv/SpirvModuleBuilder.fs"},"region":{"startLine":1194}}}],"partialFingerprints":{"codehealthFindingId/v1":"c796a46db6049359073afc9ab557eba6466f4c9160215ac3269213cdf5d3098b"}},{"ruleId":"D2","level":"warning","message":{"text":"WorkspaceExtensions.OlyDocument.GetCompletions (cognitive 273): WorkspaceExtensions.OlyDocument.GetCompletions has cognitive complexity 273 (threshold 15). Drivers by points: if/else 49 (148 pts), match/switch 31 (111 pts), boolean chains 14 (nesting depth added 179). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler.Workspace/OlyWorkspaceExtensions.fs"},"region":{"startLine":627}}}],"partialFingerprints":{"codehealthFindingId/v1":"170c70fe99507e4f40706145d3a90ee477dfa7aeb3aeef1c6ca15f6fc84bdaf2"}},{"ruleId":"D2","level":"warning","message":{"text":"Pass2.bindBindingDeclarationCoreAux (cognitive 262): Pass2.bindBindingDeclarationCoreAux has cognitive complexity 262 (threshold 15). Drivers by points: if/else 81 (190 pts), match/switch 19 (59 pts), boolean chains 13 (nesting depth added 149). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass2.fs"},"region":{"startLine":302}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff5b67234903dff54529f3f6a2f3eaebd29688bdf978fde1848fa989237cad45"}},{"ruleId":"D2","level":"warning","message":{"text":"OlyBoundModel.GetImmediateSymbols (cognitive 199): OlyBoundModel.GetImmediateSymbols has cognitive complexity 199 (threshold 15). Drivers by points: match/switch 44 (170 pts), if/else 6 (28 pts), boolean chains 1 (nesting depth added 148). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/PublicAPI/PublicSymbols.fs"},"region":{"startLine":2288}}}],"partialFingerprints":{"codehealthFindingId/v1":"8718e12b453e0ff07ddb19c1538864976324a5b20ddbbd1f8b721e9e4eb91114"}},{"ruleId":"D2","level":"warning","message":{"text":"Pass3.bindTypeDeclarationBody (cognitive 198): Pass3.bindTypeDeclarationBody has cognitive complexity 198 (threshold 15). Drivers by points: if/else 60 (115 pts), match/switch 26 (68 pts), boolean chains 11, loops 1 (4 pts) (nesting depth added 100). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass3.fs"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"00a916e167c05dc972e815212b8719043448af5915bafaf7352042628f664b63"}},{"ruleId":"D2","level":"warning","message":{"text":"SymbolOperations.UnifyTypes (cognitive 198): SymbolOperations.UnifyTypes has cognitive complexity 198 (threshold 15). Drivers by points: if/else 41 (131 pts), match/switch 7 (36 pts), boolean chains 31 (nesting depth added 119). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/SymbolOperations.fs"},"region":{"startLine":404}}}],"partialFingerprints":{"codehealthFindingId/v1":"4bda08fcb39009aa26c6febcd481040c52fc5b018b32df80bdb1d4734f90bda2"}},{"ruleId":"D2","level":"warning","message":{"text":"DotNetTarget.BuildProjectAsync (cognitive 193): DotNetTarget.BuildProjectAsync has cognitive complexity 193 (threshold 15). Drivers by points: if/else 33 (133 pts), match/switch 11 (49 pts), error handling 1 (8 pts), boolean chains 3 (nesting depth added 145). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Targets/DotNet/Oly.Compiler.CIL.Importer/DotNetTarget.fs"},"region":{"startLine":484}}}],"partialFingerprints":{"codehealthFindingId/v1":"be9fc701ed80a44c9dd09bac2f516fe9fe08e9cab1744b4a2e185f8c4d50b938"}},{"ruleId":"D2","level":"warning","message":{"text":"NameResolution.bindValueModifiersAndKindAsMemberFlags (cognitive 180): NameResolution.bindValueModifiersAndKindAsMemberFlags has cognitive complexity 180 (threshold 15). Drivers by points: if/else 72 (149 pts), boolean chains 21, match/switch 7 (10 pts) (nesting depth added 80). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/NameResolution.fs"},"region":{"startLine":2257}}}],"partialFingerprints":{"codehealthFindingId/v1":"dbe9acc3597355fc135688a592b2890268b5f46769be0c4379f55b02c988ed18"}},{"ruleId":"D2","level":"warning","message":{"text":"Helpers.importTypeDefinitionAsOlyILEntityDefinition (cognitive 179): Helpers.importTypeDefinitionAsOlyILEntityDefinition has cognitive complexity 179 (threshold 15). Drivers by points: if/else 61 (115 pts), match/switch 16 (52 pts), boolean chains 8, loops 2 (4 pts) (nesting depth added 92). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Targets/DotNet/Oly.Compiler.CIL.Importer/Importer.fs"},"region":{"startLine":1512}}}],"partialFingerprints":{"codehealthFindingId/v1":"d008447c3d3576229f5e3f8dcb399f4c89a60cb2dcdd4f8f669dcf463b84c9c5"}},{"ruleId":"D2","level":"warning","message":{"text":"ClrCodeGen.GenOperation (cognitive 168): ClrCodeGen.GenOperation has cognitive complexity 168 (threshold 15). Drivers by points: if/else 61 (105 pts), match/switch 19 (52 pts), boolean chains 9, loops 1 (2 pts) (nesting depth added 78). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/DotNet/Oly.Emitters.DotNet/Emitter.fs"},"region":{"startLine":603}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ea33ad5fd11ebd52439bda2489b6eb3e0e719db4183af8349c57ad110419028"}},{"ruleId":"D2","level":"warning","message":{"text":"WorkspaceExtensions.OlyDocument.TryFindFunctionCallInfo (cognitive 163): WorkspaceExtensions.OlyDocument.TryFindFunctionCallInfo has cognitive complexity 163 (threshold 15). Drivers by points: if/else 43 (128 pts), match/switch 10 (35 pts) (nesting depth added 110). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler.Workspace/OlyWorkspaceExtensions.fs"},"region":{"startLine":450}}}],"partialFingerprints":{"codehealthFindingId/v1":"32b00c3728441998977a9b455c2cd668c8ca136c1e1c2007e4e96583091a0f28"}},{"ruleId":"D2","level":"warning","message":{"text":"WellKnownFunctions.Validate (cognitive 162): WellKnownFunctions.Validate has cognitive complexity 162 (threshold 15). Drivers by points: if/else 55 (135 pts), boolean chains 23, match/switch 2 (4 pts) (nesting depth added 82). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/WellKnownFunctions.fs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"04717898a6e7f9dc94ae299e8dae132acd0d25a52dca83bb7d25b1b63e57096b"}},{"ruleId":"D2","level":"warning","message":{"text":"ILGen.GenCallExpression (cognitive 151): ILGen.GenCallExpression has cognitive complexity 151 (threshold 15). Drivers by points: match/switch 25 (75 pts), if/else 25 (63 pts), boolean chains 13 (nesting depth added 88). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/ILGen.fs"},"region":{"startLine":1843}}}],"partialFingerprints":{"codehealthFindingId/v1":"035003b2975d9da1ab182709443d3ccabd85ca24de93c2f991aaea74af8b94d8"}},{"ruleId":"D2","level":"warning","message":{"text":"PostInferenceAnalysis.analyzeExpressionAuxAux (cognitive 149): PostInferenceAnalysis.analyzeExpressionAuxAux has cognitive complexity 149 (threshold 15). Drivers by points: match/switch 24 (70 pts), if/else 27 (62 pts), loops 2 (10 pts), boolean chains 7 (nesting depth added 89). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/PostInferenceAnalysis.fs"},"region":{"startLine":926}}}],"partialFingerprints":{"codehealthFindingId/v1":"965b1f6fb9292688ee8643dda73d6ac9e91d3c6db711ed1f0955ee7bae87bc8d"}},{"ruleId":"D2","level":"warning","message":{"text":"InterpreterFunction.CallWithStackAux (cognitive 147): InterpreterFunction.CallWithStackAux has cognitive complexity 147 (threshold 15). Drivers by points: match/switch 41 (96 pts), if/else 15 (36 pts), loops 6 (14 pts), boolean chains 1 (nesting depth added 84). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/Interpreter/Oly.Emitters.Interpreter/Emitter.fs"},"region":{"startLine":1039}}}],"partialFingerprints":{"codehealthFindingId/v1":"c43971f286139af764b8b6690cd901515c97a183aafb82da07a79e8cbd0c10ca"}},{"ruleId":"D2","level":"warning","message":{"text":"SpirvTarget.GetAnalyzerDiagnostics (cognitive 147): SpirvTarget.GetAnalyzerDiagnostics has cognitive complexity 147 (threshold 15). Drivers by points: if/else 30 (77 pts), match/switch 20 (58 pts), boolean chains 12 (nesting depth added 85). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Targets/Spirv/Oly.Runtime.Target.Spirv/SpirvTarget.fs"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d7baafe8c9edf60502597503add1d684d90ffc9eef81f7d5cfe46227a1da0bf"}},{"ruleId":"D2","level":"warning","message":{"text":"NameResolution.bindTypeConstructor (cognitive 146): NameResolution.bindTypeConstructor has cognitive complexity 146 (threshold 15). Drivers by points: if/else 52 (114 pts), match/switch 5 (20 pts), boolean chains 12 (nesting depth added 77). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/NameResolution.fs"},"region":{"startLine":1660}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0a38d811f704324806c5c4314f68c730714f584ab9710f64ff05a334a6834ad"}},{"ruleId":"D2","level":"warning","message":{"text":"Solver.solveWitnessesByType (cognitive 145): Solver.solveWitnessesByType has cognitive complexity 145 (threshold 15). Drivers by points: if/else 42 (136 pts), match/switch 4 (8 pts), boolean chains 1 (nesting depth added 98). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Solver.fs"},"region":{"startLine":247}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ce7bf478ff263fabc55ff52cb640da49887c28301c0d142c818395ae0147b2b"}},{"ruleId":"D2","level":"warning","message":{"text":"CopyPropagation.handleExpressionAuxCopyPropagation (cognitive 137): CopyPropagation.handleExpressionAuxCopyPropagation has cognitive complexity 137 (threshold 15). Drivers by points: if/else 38 (88 pts), match/switch 10 (33 pts), boolean chains 16 (nesting depth added 73). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Oly.Runtime/Optimizations/CopyPropagation.fs"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"02e4865af0b38a9a807094451b46523a78d045dc91572ab07ac9fe6ffa93a514"}},{"ruleId":"D2","level":"warning","message":{"text":"Pass1.bindTypeDeclarationBody (cognitive 131): Pass1.bindTypeDeclarationBody has cognitive complexity 131 (threshold 15). Drivers by points: if/else 50 (96 pts), match/switch 10 (22 pts), boolean chains 13 (nesting depth added 58). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass1.fs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6f25f7491efa051425296f67cac73ae816fb8ce838370beaedeae3f49cae213"}},{"ruleId":"D2","level":"warning","message":{"text":"Scoping.openContentsOfEntityAux (cognitive 130): Scoping.openContentsOfEntityAux has cognitive complexity 130 (threshold 15). Drivers by points: if/else 27 (69 pts), match/switch 10 (54 pts), boolean chains 7 (nesting depth added 86). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Scoping.fs"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"45709ac19c194f97fc3803e00fca52e028bb9c00243751cc1720667bcb988d95"}},{"ruleId":"D2","level":"warning","message":{"text":"Substitution.substituteForLambdaLifting (cognitive 130): Substitution.substituteForLambdaLifting has cognitive complexity 130 (threshold 15). Drivers by points: if/else 40 (86 pts), match/switch 14 (35 pts), boolean chains 9 (nesting depth added 67). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Substitution.fs"},"region":{"startLine":378}}}],"partialFingerprints":{"codehealthFindingId/v1":"98b2ec240afdcec13c034517388718873e1cc6af7d806d8b6dcdbd67643b3278"}},{"ruleId":"D2","level":"warning","message":{"text":"OlyRuntimeClrEmitter.Oly.Runtime.CodeGen.IOlyRuntimeEmitter\u003COly.Emitters.DotNet.ClrTypeInfo, Oly.Emitters.DotNet.ClrMethodInfo, Oly.Emitters.DotNet.ClrFieldInfo\u003E.EmitFunctionDefinition (cognitive 126): OlyRuntimeClrEmitter.Oly.Runtime.CodeGen.IOlyRuntimeEmitter\u003COly.Emitters.DotNet.ClrTypeInfo, Oly.Emitters.DotNet.ClrMethodInfo, Oly.Emitters.DotNet.ClrFieldInfo\u003E.EmitFunctionDefinition has cognitive complexity 126 (threshold 15). Drivers by points: if/else 33 (77 pts), match/switch 11 (36 pts), boolean chains 13 (nesting depth added 69). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/DotNet/Oly.Emitters.DotNet/Emitter.fs"},"region":{"startLine":2798}}}],"partialFingerprints":{"codehealthFindingId/v1":"0423886d123cfe4a07a8f4bb571c425768ccbb4faeed526983967fce88351798"}},{"ruleId":"D2","level":"warning","message":{"text":"WorkspaceExtensions.OlyDocument.GetDirectiveCompletions (cognitive 118): WorkspaceExtensions.OlyDocument.GetDirectiveCompletions has cognitive complexity 118 (threshold 15). Drivers by points: match/switch 12 (57 pts), if/else 14 (55 pts), boolean chains 6 (nesting depth added 86). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler.Workspace/OlyWorkspaceExtensions.fs"},"region":{"startLine":1088}}}],"partialFingerprints":{"codehealthFindingId/v1":"52742761b2fde2cfc0696ed3a90476b5b9dffe625d4acbfebbd93315eecd5f7f"}},{"ruleId":"D2","level":"warning","message":{"text":"ClrMethodDefinitionBuilder.PopulateMethodBody (cognitive 112): ClrMethodDefinitionBuilder.PopulateMethodBody has cognitive complexity 112 (threshold 15). Drivers by points: if/else 24 (61 pts), match/switch 11 (38 pts), loops 6 (12 pts), boolean chains 1 (nesting depth added 70). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/DotNet/DotNet.Metadata/MetadataBuilder.fs"},"region":{"startLine":2536}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa7e9084e2e8a8a760277626d19a9c48f0ff7768c4ae81b3cebd38b47d8f0b7f"}},{"ruleId":"D2","level":"warning","message":{"text":"BoundTreeRewriter.Rewrite (cognitive 111): BoundTreeRewriter.Rewrite has cognitive complexity 111 (threshold 15). Drivers by points: if/else 46 (92 pts), boolean chains 11, match/switch 3 (8 pts) (nesting depth added 51). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/BoundTreeRewriter.fs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2b467f8c5e01087516f402b13a3dd375fd0fc935c86f062ed81de970aef5751"}},{"ruleId":"D2","level":"warning","message":{"text":"BoundTreeRewriteVisitorRunner.Rewrite (cognitive 110): BoundTreeRewriteVisitorRunner.Rewrite has cognitive complexity 110 (threshold 15). Drivers by points: if/else 44 (90 pts), boolean chains 11, match/switch 4 (9 pts) (nesting depth added 51). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/BoundTreeRewriter.fs"},"region":{"startLine":323}}}],"partialFingerprints":{"codehealthFindingId/v1":"7dfa0df3bb767a7da37af1048459a1968ee6b3d9771298817913313f9e72efec"}},{"ruleId":"D2","level":"warning","message":{"text":"PostInferenceAnalysis.analyzeBindingInfo (cognitive 101): PostInferenceAnalysis.analyzeBindingInfo has cognitive complexity 101 (threshold 15). Drivers by points: match/switch 16 (54 pts), if/else 16 (35 pts), loops 2 (10 pts), boolean chains 2 (nesting depth added 65). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/PostInferenceAnalysis.fs"},"region":{"startLine":526}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3dae1d6234ecefdbbbbd109be1aab63e4eab47357f9356639a64bcfe0e4bd3f"}},{"ruleId":"D2","level":"warning","message":{"text":"Checker.checkConstraintsFromCallExpression (cognitive 99): Checker.checkConstraintsFromCallExpression has cognitive complexity 99 (threshold 15). Drivers by points: if/else 17 (61 pts), match/switch 6 (35 pts), boolean chains 3 (nesting depth added 73). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Checker.fs"},"region":{"startLine":982}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fc72e0c73ed5134cdcd5da75ddea651dafc48df9c752b3beca6da9d514573d6"}},{"ruleId":"D2","level":"warning","message":{"text":"WellKnownExpressions.AddressOfReceiverIfPossibleAux (cognitive 96): WellKnownExpressions.AddressOfReceiverIfPossibleAux has cognitive complexity 96 (threshold 15). Drivers by points: if/else 25 (60 pts), match/switch 9 (31 pts), boolean chains 5 (nesting depth added 57). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/WellKnownExpressions.fs"},"region":{"startLine":270}}}],"partialFingerprints":{"codehealthFindingId/v1":"212064d3ced2369083c2074d58be0f64031154ce59ef42d455a7473f92cc5565"}},{"ruleId":"D2","level":"warning","message":{"text":"NameResolution.unescapeTextAux (cognitive 95): NameResolution.unescapeTextAux has cognitive complexity 95 (threshold 15). Drivers by points: if/else 20 (67 pts), loops 3 (18 pts), match/switch 2 (6 pts), boolean chains 4 (nesting depth added 66). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/NameResolution.fs"},"region":{"startLine":2559}}}],"partialFingerprints":{"codehealthFindingId/v1":"4069f371e3fcf0174dc4767770f6c52bb500a41b78c5fc320450ac69f90ad50e"}},{"ruleId":"D2","level":"warning","message":{"text":"NameResolution.bindNameAsItemAux (cognitive 93): NameResolution.bindNameAsItemAux has cognitive complexity 93 (threshold 15). Drivers by points: match/switch 15 (50 pts), if/else 17 (42 pts), boolean chains 1 (nesting depth added 60). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/NameResolution.fs"},"region":{"startLine":901}}}],"partialFingerprints":{"codehealthFindingId/v1":"92d2d7f14c4f725bef74bb1870b6c46b9307a5ad33f5533aa0c4bfd51a47ef5a"}},{"ruleId":"D2","level":"warning","message":{"text":"Helpers.OptimizeImmediateConstantFolding (cognitive 92): Helpers.OptimizeImmediateConstantFolding has cognitive complexity 92 (threshold 15). Drivers by points: if/else 20 (48 pts), match/switch 14 (44 pts) (nesting depth added 58). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Oly.Runtime/Optimizations/optenv.fs"},"region":{"startLine":324}}}],"partialFingerprints":{"codehealthFindingId/v1":"32f24aa8ca586dc82889bd8d0d717140f05b1f5eec7766274c4b124732a61eba"}},{"ruleId":"D2","level":"warning","message":{"text":"OlyRuntimeClrEmitter.Oly.Runtime.CodeGen.IOlyRuntimeEmitter\u003COly.Emitters.DotNet.ClrTypeInfo, Oly.Emitters.DotNet.ClrMethodInfo, Oly.Emitters.DotNet.ClrFieldInfo\u003E.EmitTypeDefinitionInfo (cognitive 92): OlyRuntimeClrEmitter.Oly.Runtime.CodeGen.IOlyRuntimeEmitter\u003COly.Emitters.DotNet.ClrTypeInfo, Oly.Emitters.DotNet.ClrMethodInfo, Oly.Emitters.DotNet.ClrFieldInfo\u003E.EmitTypeDefinitionInfo has cognitive complexity 92 (threshold 15). Drivers by points: if/else 34 (65 pts), match/switch 8 (22 pts), boolean chains 5 (nesting depth added 45). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/DotNet/Oly.Emitters.DotNet/Emitter.fs"},"region":{"startLine":2329}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f6e12c32fafc16cbce361942c8dd1cdc16d03b2d9a32671e72ae462ff4e4ca1"}},{"ruleId":"D2","level":"warning","message":{"text":"Helpers.importMethodDefinitionAsOlyILFunctionDefinition (cognitive 90): Helpers.importMethodDefinitionAsOlyILFunctionDefinition has cognitive complexity 90 (threshold 15). Drivers by points: if/else 31 (82 pts), match/switch 2 (6 pts), boolean chains 2 (nesting depth added 55). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Targets/DotNet/Oly.Compiler.CIL.Importer/Importer.fs"},"region":{"startLine":1195}}}],"partialFingerprints":{"codehealthFindingId/v1":"f44091130cf45f17da126bc78fe0553d2e1ec7d36065487179b3f1bd38deeb59"}},{"ruleId":"D2","level":"warning","message":{"text":"extension.activate (cognitive 87): extension.activate has cognitive complexity 87 (threshold 15). Drivers by points: if/else 51 (67 pts), boolean chains 15, error handling 3 (4 pts), match/switch 1 (nesting depth added 17). Of this number, 38 points are the body\u0027s own statements and 49 belong to 14 function literals inside it that branch. To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"vscode/src/extension.ts"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"2cf225fa769b40062de8ee49b3396d07395ef4efaf86100f3d3666b8954bbdae"}},{"ruleId":"D2","level":"warning","message":{"text":"OpenDeclarations.bindOpenDeclaration (cognitive 83): OpenDeclarations.bindOpenDeclaration has cognitive complexity 83 (threshold 15). Drivers by points: if/else 25 (62 pts), match/switch 5 (18 pts), boolean chains 3 (nesting depth added 50). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/OpenDeclarations.fs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"ceb9f5dc6998c0657a21698633349abbf1716c19eae7b3e0816775a43a7d9b07"}},{"ruleId":"D2","level":"warning","message":{"text":"Program.computeInternalNode (cognitive 81): Program.computeInternalNode has cognitive complexity 81 (threshold 15). Drivers by points: if/else 32 (59 pts), loops 9 (22 pts) (nesting depth added 40). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler.SyntaxGenerator/Program.fs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"030250f5e0dd4c52dce420ff70ffcb8e9f0ca8886a038e6cedb911d1d3cca632"}},{"ruleId":"D2","level":"warning","message":{"text":"Solver.solveShape (cognitive 79): Solver.solveShape has cognitive complexity 79 (threshold 15). Drivers by points: if/else 24 (55 pts), match/switch 5 (20 pts), boolean chains 4 (nesting depth added 46). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Solver.fs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"df7e63d73d0f25027395e140f1063b8831923f1d1e5698c68aa402b2c209b4a5"}},{"ruleId":"D2","level":"warning","message":{"text":"SpirvCodeGen.GenOperation (cognitive 78): SpirvCodeGen.GenOperation has cognitive complexity 78 (threshold 15). Drivers by points: match/switch 19 (52 pts), if/else 10 (26 pts) (nesting depth added 49). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/Spirv/Oly.Emitters.Spirv/SpirvCodeGen.fs"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"3218bc4d16b881b0efdecf9102b166d01409156626ce1ae4caab1881d9d4444e"}},{"ruleId":"D2","level":"warning","message":{"text":"BinderEnvironment.SetUnqualifiedValueAux (cognitive 77): BinderEnvironment.SetUnqualifiedValueAux has cognitive complexity 77 (threshold 15). Drivers by points: if/else 26 (63 pts), match/switch 3 (11 pts), boolean chains 3 (nesting depth added 45). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Environment.fs"},"region":{"startLine":416}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c5fe661cd60361c2e04c83f178bcc2c98d42faa965ad866ebfb7a040452c8d5"}},{"ruleId":"D2","level":"warning","message":{"text":"PrettyPrint.printTypeAux (cognitive 76): PrettyPrint.printTypeAux has cognitive complexity 76 (threshold 15). Drivers by points: if/else 29 (46 pts), match/switch 10 (24 pts), boolean chains 6 (nesting depth added 31). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/PrettyPrint.fs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"f28de1779ee4cea7c34bacd607ce883604b83bb66d3ca1119a2fd3215062e20e"}},{"ruleId":"D2","level":"warning","message":{"text":"ILGen.GenFunctionAsILFunctionDefinition (cognitive 75): ILGen.GenFunctionAsILFunctionDefinition has cognitive complexity 75 (threshold 15). Drivers by points: if/else 39 (65 pts), match/switch 3 (7 pts), boolean chains 3 (nesting depth added 30). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/ILGen.fs"},"region":{"startLine":737}}}],"partialFingerprints":{"codehealthFindingId/v1":"f40088b5c9f086b57b46da21b0ab708b991a5c23d38244b947b999e1a26d12c3"}},{"ruleId":"D2","level":"warning","message":{"text":"OlyBoundSubModel.TryGetMatchType (cognitive 73): OlyBoundSubModel.TryGetMatchType has cognitive complexity 73 (threshold 15). Drivers by points: if/else 11 (36 pts), match/switch 12 (36 pts), boolean chains 1 (nesting depth added 49). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/PublicAPI/PublicSymbols.fs"},"region":{"startLine":1329}}}],"partialFingerprints":{"codehealthFindingId/v1":"117318ada50796f19d4e3cc8150d8801b9a733d78280a4a0ba7fa95f6d015d7e"}},{"ruleId":"D2","level":"warning","message":{"text":"GeneralOptimizer.optimizeExpressionCore (cognitive 73): GeneralOptimizer.optimizeExpressionCore has cognitive complexity 73 (threshold 15). Drivers by points: match/switch 10 (31 pts), if/else 16 (29 pts), boolean chains 13 (nesting depth added 34). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Oly.Runtime/Optimizations/GeneralOptimizer.fs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"5490f6cc207ff10092961c1ebeb40de6459a5df1192b624206c38d53c2cc6652"}},{"ruleId":"D2","level":"warning","message":{"text":"SpirvLowering.LowerOperation (cognitive 73): SpirvLowering.LowerOperation has cognitive complexity 73 (threshold 15). Drivers by points: match/switch 18 (36 pts), if/else 22 (35 pts), boolean chains 2 (nesting depth added 31). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/Spirv/Oly.Emitters.Spirv/SpirvLowering.fs"},"region":{"startLine":205}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf9d949fc014f0da4f3319bf30821b7483c785be2730c6687d465072a4899a1b"}},{"ruleId":"D2","level":"warning","message":{"text":"NameResolution.bindType (cognitive 72): NameResolution.bindType has cognitive complexity 72 (threshold 15). Drivers by points: match/switch 14 (40 pts), if/else 15 (26 pts), boolean chains 6 (nesting depth added 37). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/NameResolution.fs"},"region":{"startLine":1419}}}],"partialFingerprints":{"codehealthFindingId/v1":"72755fad4928bd04f633fab6f39ef1a0bd930dc3d303e3c68f1b09455016d6a1"}},{"ruleId":"D2","level":"warning","message":{"text":"NameResolution.bindIdentifierWithNoReceiverAsFormalItem (cognitive 70): NameResolution.bindIdentifierWithNoReceiverAsFormalItem has cognitive complexity 70 (threshold 15). Drivers by points: if/else 15 (38 pts), match/switch 9 (29 pts), boolean chains 3 (nesting depth added 43). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/NameResolution.fs"},"region":{"startLine":246}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e69c79dded4481299df175651c55e4b9520b6ea21188395284694cb582f018f"}},{"ruleId":"D2","level":"warning","message":{"text":"OlyToken.TryPreviousTokenBySubToken (cognitive 69): OlyToken.TryPreviousTokenBySubToken has cognitive complexity 69 (threshold 15). Drivers by points: if/else 9 (44 pts), match/switch 5 (18 pts), loops 1 (6 pts), boolean chains 1 (nesting depth added 53). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler.Syntax/SyntaxTreeImplementation.fs"},"region":{"startLine":289}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8ad43d70c4871cc4b3fbeb9adc0b16a39e186fd3ba4ef3524132f7c9391383e"}},{"ruleId":"D2","level":"warning","message":{"text":"OlySignatureTypeProvider.System.Reflection.Metadata.ISignatureTypeProvider\u003COly.Metadata.OlyILType, System.Int32\u003E.GetModifiedType (cognitive 68): OlySignatureTypeProvider.System.Reflection.Metadata.ISignatureTypeProvider\u003COly.Metadata.OlyILType, System.Int32\u003E.GetModifiedType has cognitive complexity 68 (threshold 15). Drivers by points: match/switch 7 (37 pts), if/else 8 (28 pts), boolean chains 3 (nesting depth added 50). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Targets/DotNet/Oly.Compiler.CIL.Importer/Importer.fs"},"region":{"startLine":304}}}],"partialFingerprints":{"codehealthFindingId/v1":"ace40e786683750609ec5891d2d47fe0ee53f8f61a95c6ec8882933a8ef70941"}},{"ruleId":"D2","level":"warning","message":{"text":"CompilerImports.retargetEntity (cognitive 67): CompilerImports.retargetEntity has cognitive complexity 67 (threshold 15). Drivers by points: if/else 14 (37 pts), match/switch 6 (22 pts), loops 1 (5 pts), boolean chains 3 (nesting depth added 43). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/CompilerImports.fs"},"region":{"startLine":469}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2db68c06c27a37a80e59adb8d9497f83170a3aa7167138c72734678aa821209"}},{"ruleId":"D2","level":"warning","message":{"text":"SpirvEmitter.Oly.Runtime.CodeGen.IOlyRuntimeEmitter\u003COly.Emitters.Spirv.SpirvType, Oly.Emitters.Spirv.SpirvFunction, Oly.Emitters.Spirv.SpirvField\u003E.EmitFunctionDefinition (cognitive 67): SpirvEmitter.Oly.Runtime.CodeGen.IOlyRuntimeEmitter\u003COly.Emitters.Spirv.SpirvType, Oly.Emitters.Spirv.SpirvFunction, Oly.Emitters.Spirv.SpirvField\u003E.EmitFunctionDefinition has cognitive complexity 67 (threshold 15). Drivers by points: if/else 19 (45 pts), match/switch 6 (21 pts), boolean chains 1 (nesting depth added 41). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/Spirv/Oly.Emitters.Spirv/SpirvEmitter.fs"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"61dd31f4fa1e83d812d9ad0fa03be2f4c4aa5839a0cd1d265a149a78f0b61894"}},{"ruleId":"D2","level":"warning","message":{"text":"Pass3.bindTypeDeclaration (cognitive 62): Pass3.bindTypeDeclaration has cognitive complexity 62 (threshold 15). Drivers by points: if/else 18 (42 pts), match/switch 4 (14 pts), boolean chains 6 (nesting depth added 34). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass3.fs"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"01f4ff5783afb683b74790b639cd3db5baf15d2bee4cc94f54d355bc606f372a"}},{"ruleId":"D2","level":"warning","message":{"text":"ExtensionHelpers.getViewModel (cognitive 61): ExtensionHelpers.getViewModel has cognitive complexity 61 (threshold 15). Drivers by points: if/else 43 (51 pts), match/switch 3 (6 pts), boolean chains 4 (nesting depth added 11). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LanguageServer/Oly.LanguageServer/LanguageServer.fs"},"region":{"startLine":798}}}],"partialFingerprints":{"codehealthFindingId/v1":"af29978c29cde5c32162173541b519f9f60ea4fbe50a278bd49bfaeb8ccce841"}},{"ruleId":"D2","level":"warning","message":{"text":"OlyValueSymbol.IsSimilarTo (cognitive 60): OlyValueSymbol.IsSimilarTo has cognitive complexity 60 (threshold 15). Drivers by points: match/switch 8 (35 pts), if/else 10 (21 pts), boolean chains 4 (nesting depth added 38). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/PublicAPI/PublicSymbols.fs"},"region":{"startLine":653}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e3f53725c990aecac66764369eb28af1740d6aecb4818a7d0f8629dcd44367e"}},{"ruleId":"D2","level":"warning","message":{"text":"PostInferenceAnalysis.checkValue (cognitive 60): PostInferenceAnalysis.checkValue has cognitive complexity 60 (threshold 15). Drivers by points: if/else 18 (44 pts), match/switch 4 (16 pts) (nesting depth added 38). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/PostInferenceAnalysis.fs"},"region":{"startLine":435}}}],"partialFingerprints":{"codehealthFindingId/v1":"9240cf48906e4afb6e2e3becb080f7a470e3e0b0d5b168d2f98fbbb694785198"}},{"ruleId":"D2","level":"warning","message":{"text":"WorkspaceExtensions.classifyValueKind (cognitive 59): WorkspaceExtensions.classifyValueKind has cognitive complexity 59 (threshold 15). Drivers by points: if/else 33 (59 pts) (nesting depth added 26). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler.Workspace/OlyWorkspaceExtensions.fs"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"4baac25225e1e596bd5f4977e73fef851d5f195c314c98e267bcc2a9efcb0945"}},{"ruleId":"D2","level":"warning","message":{"text":"NameResolution.bindConstraint (cognitive 59): NameResolution.bindConstraint has cognitive complexity 59 (threshold 15). Drivers by points: if/else 20 (44 pts), match/switch 5 (12 pts), boolean chains 3 (nesting depth added 31). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/NameResolution.fs"},"region":{"startLine":2035}}}],"partialFingerprints":{"codehealthFindingId/v1":"e24f23f0549d8c584ba3dede7f01fd18617c70436e543a4379283d5edb211fb4"}},{"ruleId":"D2","level":"warning","message":{"text":"DeadCodeElimination.DeadCodeElimination (cognitive 59): DeadCodeElimination.DeadCodeElimination has cognitive complexity 59 (threshold 15). Drivers by points: if/else 20 (35 pts), match/switch 10 (19 pts), boolean chains 5 (nesting depth added 24). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Oly.Runtime/Optimizations/DeadCodeElimination.fs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"29ac76fd2aec0886cc32c7906bd35019a2a38529db6857633b4e9cde3feac829"}},{"ruleId":"D2","level":"warning","message":{"text":"FunctionOverloading.filterFunctionsForOverloadingByWeight (cognitive 57): FunctionOverloading.filterFunctionsForOverloadingByWeight has cognitive complexity 57 (threshold 15). Drivers by points: if/else 20 (41 pts), match/switch 3 (9 pts), boolean chains 7 (nesting depth added 27). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/FunctionOverloading.fs"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e37b4122a43b897aa71aef2c580ad9e4e3de295c2a5f2acf6242cd83419291d"}},{"ruleId":"D2","level":"warning","message":{"text":"LexerModule.handleNonTriviaPeekAux (cognitive 57): LexerModule.handleNonTriviaPeekAux has cognitive complexity 57 (threshold 15). Drivers by points: match/switch 23 (53 pts), if/else 2 (3 pts), boolean chains 1 (nesting depth added 31). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler.Syntax/Internal/Lexer.fs"},"region":{"startLine":849}}}],"partialFingerprints":{"codehealthFindingId/v1":"2db4b5c68bd36c775de07125aba5594c06e7810a76b3bad7797cf149dda40818"}},{"ruleId":"D2","level":"warning","message":{"text":"RuntimeFunction.VerifyConstraintsCore (cognitive 57): RuntimeFunction.VerifyConstraintsCore has cognitive complexity 57 (threshold 15). Drivers by points: match/switch 11 (36 pts), if/else 8 (21 pts) (nesting depth added 38). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Oly.Runtime/InternalCodeGenTypes.fs"},"region":{"startLine":1717}}}],"partialFingerprints":{"codehealthFindingId/v1":"976882236bbe24105e42248e076c53054e1cb37e4d55be7ac4bde3491b538ede"}},{"ruleId":"D2","level":"warning","message":{"text":"CommonSubexpressionElimination.handleExpressionAuxCse (cognitive 56): CommonSubexpressionElimination.handleExpressionAuxCse has cognitive complexity 56 (threshold 15). Drivers by points: if/else 19 (32 pts), match/switch 7 (19 pts), boolean chains 5 (nesting depth added 25). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Oly.Runtime/Optimizations/CommonSubexpressionElimination.fs"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed11da624011fa0d6cb7fc22ea0675b37cf9a177e3abe56c2074dd4f81420383"}},{"ruleId":"D2","level":"warning","message":{"text":"Pass2.bindTopLevelPropertyBinding (cognitive 55): Pass2.bindTopLevelPropertyBinding has cognitive complexity 55 (threshold 15). Drivers by points: match/switch 20 (45 pts), if/else 10 (nesting depth added 25). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass2.fs"},"region":{"startLine":929}}}],"partialFingerprints":{"codehealthFindingId/v1":"70d6f5292ca2c093d9ffb7d481710e34f51e6f680c077480994ac70eea15d613"}},{"ruleId":"D2","level":"warning","message":{"text":"ILGen.GenEntityDefinitionNoCache (cognitive 53): ILGen.GenEntityDefinitionNoCache has cognitive complexity 53 (threshold 15). Drivers by points: if/else 34 (40 pts), boolean chains 7, match/switch 4 (5 pts), error handling 1 (nesting depth added 7). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/ILGen.fs"},"region":{"startLine":1104}}}],"partialFingerprints":{"codehealthFindingId/v1":"0da8463cbe6558e74946c644f8e811a161361a2730ef70bf1d713f6b65484464"}},{"ruleId":"D2","level":"warning","message":{"text":"Pass4.checkExhaustiveness (cognitive 53): Pass4.checkExhaustiveness has cognitive complexity 53 (threshold 15). Drivers by points: if/else 15 (40 pts), loops 5 (9 pts), boolean chains 2, match/switch 2 (nesting depth added 29). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass4.fs"},"region":{"startLine":920}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce4a394a3d6bab69dd8edfff6f1e2321bde8621277fd8c189459ca425913f5a5"}},{"ruleId":"D2","level":"warning","message":{"text":"SymbolOperations.unifyVariadicTypes (cognitive 53): SymbolOperations.unifyVariadicTypes has cognitive complexity 53 (threshold 15). Drivers by points: if/else 10 (28 pts), match/switch 4 (21 pts), boolean chains 4 (nesting depth added 35). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/SymbolOperations.fs"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f1b1dd94058b45c40339499bfcdd614615481365d2dd961381127916e50ad62"}},{"ruleId":"D2","level":"warning","message":{"text":"NameResolution.checkVirtualUsage (cognitive 51): NameResolution.checkVirtualUsage has cognitive complexity 51 (threshold 15). Drivers by points: if/else 12 (26 pts), match/switch 9 (25 pts) (nesting depth added 30). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/NameResolution.fs"},"region":{"startLine":481}}}],"partialFingerprints":{"codehealthFindingId/v1":"91278b23f87816f788a9c57f6dc3c2a798758edd9f151e96f8a898f590577749"}},{"ruleId":"D2","level":"warning","message":{"text":"PrettyPrint.printValueAux (cognitive 51): PrettyPrint.printValueAux has cognitive complexity 51 (threshold 15). Drivers by points: if/else 28 (45 pts), boolean chains 4, match/switch 2 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/PrettyPrint.fs"},"region":{"startLine":439}}}],"partialFingerprints":{"codehealthFindingId/v1":"a83469ba90af2d6bedaa98bd4d69c8eeb741f10d6d8ac421c3e1f5ba220fe567"}},{"ruleId":"D2","level":"warning","message":{"text":"DotNetTarget.GetAnalyzerDiagnostics (cognitive 51): DotNetTarget.GetAnalyzerDiagnostics has cognitive complexity 51 (threshold 15). Drivers by points: if/else 15 (33 pts), match/switch 4 (13 pts), boolean chains 5 (nesting depth added 27). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Targets/DotNet/Oly.Compiler.CIL.Importer/DotNetTarget.fs"},"region":{"startLine":788}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ea3f6209424e238037594257140466d71acbc0fd0d882c5bcb97d9458777a89"}},{"ruleId":"D2","level":"warning","message":{"text":"Symbols.getTypeSymbol (cognitive 50): Symbols.getTypeSymbol has cognitive complexity 50 (threshold 15). Drivers by points: if/else 14 (25 pts), match/switch 11 (24 pts), boolean chains 1 (nesting depth added 24). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/PublicAPI/PublicSymbols.fs"},"region":{"startLine":1627}}}],"partialFingerprints":{"codehealthFindingId/v1":"23a5ee304b2be8989a8162a6ee146a675351bfa5a8a9935abc151dfaef9a4801"}},{"ruleId":"D2","level":"warning","message":{"text":"ClrCodeGen.GenCall (cognitive 49): ClrCodeGen.GenCall has cognitive complexity 49 (threshold 15). Drivers by points: if/else 11 (28 pts), match/switch 4 (13 pts), boolean chains 8 (nesting depth added 26). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/DotNet/Oly.Emitters.DotNet/Emitter.fs"},"region":{"startLine":1262}}}],"partialFingerprints":{"codehealthFindingId/v1":"24941396bc6ff003996c0fc4215dc9009c585c78c891f78c25bc03676dba85be"}},{"ruleId":"D2","level":"warning","message":{"text":"ILGen.GenExpressionAux (cognitive 48): ILGen.GenExpressionAux has cognitive complexity 48 (threshold 15). Drivers by points: match/switch 11 (21 pts), if/else 11 (18 pts), boolean chains 9 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/ILGen.fs"},"region":{"startLine":1444}}}],"partialFingerprints":{"codehealthFindingId/v1":"3609bc35d9f6d718f31eb554173bba353ea505f4b5217314563ffc04494ddf75"}},{"ruleId":"D2","level":"warning","message":{"text":"Checker.checkConstructorImplementation (cognitive 47): Checker.checkConstructorImplementation has cognitive complexity 47 (threshold 15). Drivers by points: if/else 14 (23 pts), match/switch 7 (20 pts), boolean chains 4 (nesting depth added 22). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Checker.fs"},"region":{"startLine":580}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ccd93153e808e0e7ac88b7ed36b83d6c3bb1304f9b19804c1f0180e71733b7b"}},{"ruleId":"D2","level":"warning","message":{"text":"Checker.checkReceiverOfExpression (cognitive 47): Checker.checkReceiverOfExpression has cognitive complexity 47 (threshold 15). Drivers by points: if/else 15 (31 pts), match/switch 7 (10 pts), boolean chains 6 (nesting depth added 19). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Checker.fs"},"region":{"startLine":863}}}],"partialFingerprints":{"codehealthFindingId/v1":"828cbfff6072e4f0d05f2e5e1616a39448802e3951ca3cbfaf0d90b4aa013b91"}},{"ruleId":"D2","level":"warning","message":{"text":"NameResolution.bindIdentifierAsMemberValue (cognitive 46): NameResolution.bindIdentifierAsMemberValue has cognitive complexity 46 (threshold 15). Drivers by points: if/else 15 (29 pts), match/switch 6 (15 pts), boolean chains 2 (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/NameResolution.fs"},"region":{"startLine":1231}}}],"partialFingerprints":{"codehealthFindingId/v1":"2433b2f4e25260da3d6979ab4173f6adbea4bf71edce346f29d0071970c1535d"}},{"ruleId":"D2","level":"warning","message":{"text":"Dump.dumpExpression (cognitive 45): Dump.dumpExpression has cognitive complexity 45 (threshold 15). Drivers by points: if/else 16 (33 pts), match/switch 6 (12 pts) (nesting depth added 23). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Dump.fs"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"0592f4e27b4e4e899ef7ef734fe9dd7a57efed02360b380864545f3b16fba22b"}},{"ruleId":"D2","level":"warning","message":{"text":"Pass4.bindTopLevelBinding (cognitive 44): Pass4.bindTopLevelBinding has cognitive complexity 44 (threshold 15). Drivers by points: if/else 10 (25 pts), match/switch 6 (12 pts), boolean chains 7 (nesting depth added 21). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass4.fs"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"38361d3d4ae63846be82c740e2d3e8f7f5d75d316bcda946e10f00c325955ab8"}},{"ruleId":"D2","level":"warning","message":{"text":"SymbolOperations.createFunctionValueSemantic (cognitive 44): SymbolOperations.createFunctionValueSemantic has cognitive complexity 44 (threshold 15). Drivers by points: if/else 17 (23 pts), boolean chains 15, match/switch 4 (6 pts) (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/SymbolOperations.fs"},"region":{"startLine":2213}}}],"partialFingerprints":{"codehealthFindingId/v1":"a54c168633667912a8729350a3cfec2d7bf27d8414e1b83f94f85f3bd1460d66"}},{"ruleId":"D2","level":"warning","message":{"text":"Helpers.tryImportFieldDefinitionAsOlyILFieldDefinition (cognitive 44): Helpers.tryImportFieldDefinitionAsOlyILFieldDefinition has cognitive complexity 44 (threshold 15). Drivers by points: if/else 16 (38 pts), match/switch 1 (5 pts), boolean chains 1 (nesting depth added 26). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Targets/DotNet/Oly.Compiler.CIL.Importer/Importer.fs"},"region":{"startLine":1000}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c5c183dffae8d1e91a85acc1dd9b1f8283c8269eeebfaa9327e8b5d072b35c1"}},{"ruleId":"D2","level":"warning","message":{"text":"SymbolOperations.EntitySymbol.Hierarchy (cognitive 43): SymbolOperations.EntitySymbol.Hierarchy has cognitive complexity 43 (threshold 15). Drivers by points: if/else 11 (31 pts), loops 4 (8 pts), boolean chains 4 (nesting depth added 24). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/SymbolOperations.fs"},"region":{"startLine":2935}}}],"partialFingerprints":{"codehealthFindingId/v1":"1eae4e2db5160cad18ccf79caceac9259fd3d043dee90345a81831bbde1637e6"}},{"ruleId":"D2","level":"warning","message":{"text":"ClrPdbBuilder.BuildSequencePoints (cognitive 43): ClrPdbBuilder.BuildSequencePoints has cognitive complexity 43 (threshold 15). Drivers by points: if/else 16 (36 pts), boolean chains 5, loops 1 (2 pts) (nesting depth added 21). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/DotNet/DotNet.Metadata/MetadataBuilder.fs"},"region":{"startLine":337}}}],"partialFingerprints":{"codehealthFindingId/v1":"a727f3e84ec1b400745f623241dfbd9a19e2e9b9d0f05d93cff57b2128fc442f"}},{"ruleId":"D2","level":"warning","message":{"text":"Checker.checkImplementation (cognitive 42): Checker.checkImplementation has cognitive complexity 42 (threshold 15). Drivers by points: if/else 19 (24 pts), match/switch 4 (11 pts), boolean chains 7 (nesting depth added 12). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Checker.fs"},"region":{"startLine":450}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5efba13e12b9250ebfc3841ec0460ce46a581ab14fa03ae78bd3605140e3e60"}},{"ruleId":"D2","level":"warning","message":{"text":"Pass4.bindLocalExpressionAuxAux (cognitive 41): Pass4.bindLocalExpressionAuxAux has cognitive complexity 41 (threshold 15). Drivers by points: match/switch 11 (31 pts), if/else 4 (6 pts), boolean chains 4 (nesting depth added 22). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass4.fs"},"region":{"startLine":1649}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f8c8a57e211ebf4097a75b4e55c83f91785386913a4c4e0233f550933a5c0df"}},{"ruleId":"D2","level":"warning","message":{"text":"Checker.checkTypeConstructorDepthWithType (cognitive 41): Checker.checkTypeConstructorDepthWithType has cognitive complexity 41 (threshold 15). Drivers by points: match/switch 11 (31 pts), if/else 4 (10 pts) (nesting depth added 26). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Checker.fs"},"region":{"startLine":345}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a486b86ed72e0136d236a6d2bc625696596ccd1a6a6dd194ef754f29b66f843"}},{"ruleId":"D2","level":"warning","message":{"text":"OlySyntaxDiffs.OlySyntaxTree.AreOpenDeclarationsEqual.Static (cognitive 41): OlySyntaxDiffs.OlySyntaxTree.AreOpenDeclarationsEqual.Static has cognitive complexity 41 (threshold 15). Drivers by points: match/switch 10 (24 pts), boolean chains 11, if/else 4 (6 pts) (nesting depth added 16). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler.Syntax/SyntaxTreeImplementation.fs"},"region":{"startLine":1751}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcc8e6a79e96671c584475eb4eb37c2fe2f85f657d30b1d2d247ae7bcc78eb60"}},{"ruleId":"D2","level":"warning","message":{"text":"ClrCodeGen.GenExpressionAux (cognitive 41): ClrCodeGen.GenExpressionAux has cognitive complexity 41 (threshold 15). Drivers by points: if/else 14 (23 pts), match/switch 8 (15 pts), boolean chains 3 (nesting depth added 16). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/DotNet/Oly.Emitters.DotNet/Emitter.fs"},"region":{"startLine":1550}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6ae74db930307d6e55082d7ece471ac77de4cc480af7c54e228b644ff803961"}},{"ruleId":"D2","level":"warning","message":{"text":"Pass4.bindPatternByResolutionItem (cognitive 40): Pass4.bindPatternByResolutionItem has cognitive complexity 40 (threshold 15). Drivers by points: if/else 11 (25 pts), match/switch 6 (15 pts) (nesting depth added 23). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass4.fs"},"region":{"startLine":1956}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf6bd3a74e580181223047c88497912643b77d145e9af38e9235603a7efb6e9f"}},{"ruleId":"D2","level":"warning","message":{"text":"NameResolution.resolveFormalValue (cognitive 40): NameResolution.resolveFormalValue has cognitive complexity 40 (threshold 15). Drivers by points: if/else 12 (25 pts), match/switch 4 (8 pts), boolean chains 7 (nesting depth added 17). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/NameResolution.fs"},"region":{"startLine":821}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf34f1d6622f227e41fee59282c6beb615409b8d105faeba4d815e77afdccae1"}},{"ruleId":"D2","level":"warning","message":{"text":"Iterator.VisitExpression (cognitive 39): Iterator.VisitExpression has cognitive complexity 39 (threshold 15). Drivers by points: match/switch 11 (29 pts), if/else 5 (10 pts) (nesting depth added 23). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/BoundTreeExtensions.fs"},"region":{"startLine":339}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d80a75c948de09b40abf5c2a9ce22f3dfe770a89d086d7b62c9347442000871"}},{"ruleId":"D2","level":"warning","message":{"text":"Attributes.bindAttributes (cognitive 38): Attributes.bindAttributes has cognitive complexity 38 (threshold 15). Drivers by points: match/switch 8 (33 pts), if/else 2 (5 pts) (nesting depth added 28). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Attributes.fs"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"f30feccaf7667b05912a9e210be0bdcfdf6381abcfed4fcc820185a51d636977"}},{"ruleId":"D2","level":"warning","message":{"text":"Helpers.hasSideEffectAux (cognitive 38): Helpers.hasSideEffectAux has cognitive complexity 38 (threshold 15). Drivers by points: if/else 8 (20 pts), match/switch 5 (16 pts), boolean chains 2 (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Oly.Runtime/Optimizations/optenv.fs"},"region":{"startLine":161}}}],"partialFingerprints":{"codehealthFindingId/v1":"e53b41ccd4e94fdaca3e3c5bf9526875596d598ac998bf435a79d36d2994ecc2"}},{"ruleId":"D2","level":"warning","message":{"text":"TextDocumentSyncHandler.OmniSharp.Extensions.LanguageServer.Protocol.Document.IDocumentSymbolHandler.Handle (cognitive 38): TextDocumentSyncHandler.OmniSharp.Extensions.LanguageServer.Protocol.Document.IDocumentSymbolHandler.Handle has cognitive complexity 38 (threshold 15). Drivers by points: match/switch 7 (25 pts), if/else 4 (8 pts), loops 4, boolean chains 1 (nesting depth added 22). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LanguageServer/Oly.LanguageServer/LanguageServer.fs"},"region":{"startLine":1533}}}],"partialFingerprints":{"codehealthFindingId/v1":"199f7c1e94101d5d07ea0609163a0d6b4b955b3909944f30afce7b676ab4b677"}},{"ruleId":"D2","level":"warning","message":{"text":"Solver.solveConstraint (cognitive 37): Solver.solveConstraint has cognitive complexity 37 (threshold 15). Drivers by points: if/else 17 (34 pts), match/switch 1 (2 pts), boolean chains 1 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Solver.fs"},"region":{"startLine":447}}}],"partialFingerprints":{"codehealthFindingId/v1":"c01f9f7ee3c2c4bd06f45215b0a3ee5a5698d1088f8205cd97577e6be055a7f3"}},{"ruleId":"D2","level":"warning","message":{"text":"OlyRuntimeClrEmitter.Oly.Runtime.CodeGen.IOlyRuntimeEmitter\u003COly.Emitters.DotNet.ClrTypeInfo, Oly.Emitters.DotNet.ClrMethodInfo, Oly.Emitters.DotNet.ClrFieldInfo\u003E.EmitFieldDefinition (cognitive 37): OlyRuntimeClrEmitter.Oly.Runtime.CodeGen.IOlyRuntimeEmitter\u003COly.Emitters.DotNet.ClrTypeInfo, Oly.Emitters.DotNet.ClrMethodInfo, Oly.Emitters.DotNet.ClrFieldInfo\u003E.EmitFieldDefinition has cognitive complexity 37 (threshold 15). Drivers by points: if/else 18 (27 pts), match/switch 4 (6 pts), boolean chains 4 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/DotNet/Oly.Emitters.DotNet/Emitter.fs"},"region":{"startLine":2601}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f1b26bbc2cd0b7bfe11e934826c75630aea3c18325938ea706881715f2a95c9"}},{"ruleId":"D2","level":"warning","message":{"text":"TextDocumentSyncHandler.OmniSharp.Extensions.LanguageServer.Protocol.Document.IHoverHandler.Handle (cognitive 37): TextDocumentSyncHandler.OmniSharp.Extensions.LanguageServer.Protocol.Document.IHoverHandler.Handle has cognitive complexity 37 (threshold 15). Drivers by points: if/else 11 (20 pts), match/switch 5 (17 pts) (nesting depth added 21). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LanguageServer/Oly.LanguageServer/LanguageServer.fs"},"region":{"startLine":1854}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a83b17071412b464b3484306136d83d69dc1c8e9b6f8d2eaf6692a8ae9577c6"}},{"ruleId":"D2","level":"warning","message":{"text":"LexerModule.handlePeek (cognitive 36): LexerModule.handlePeek has cognitive complexity 36 (threshold 15). Drivers by points: match/switch 8 (24 pts), if/else 2 (11 pts), boolean chains 1 (nesting depth added 25). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler.Syntax/Internal/Lexer.fs"},"region":{"startLine":1125}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd50a9ca66b807ccb401c7532bb22715cd182b9735f1373f2460f48e9cfcfd3b"}},{"ruleId":"D2","level":"warning","message":{"text":"SymbolOperations.filterMostSpecificFunctions (cognitive 35): SymbolOperations.filterMostSpecificFunctions has cognitive complexity 35 (threshold 15). Drivers by points: if/else 14 (31 pts), match/switch 1 (3 pts), boolean chains 1 (nesting depth added 19). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/SymbolOperations.fs"},"region":{"startLine":2041}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a3674957c342a87b210f2b11bd6ffb758b26b0280b5cfc2f19d328577eaaee7"}},{"ruleId":"D2","level":"warning","message":{"text":"ClrTypeDefinitionBuilder.Build (cognitive 35): ClrTypeDefinitionBuilder.Build has cognitive complexity 35 (threshold 15). Drivers by points: if/else 13 (17 pts), match/switch 6 (9 pts), loops 5, error handling 2 (4 pts) (nesting depth added 9). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/DotNet/DotNet.Metadata/MetadataBuilder.fs"},"region":{"startLine":3146}}}],"partialFingerprints":{"codehealthFindingId/v1":"62615dbe45f1f50555951bec138a8c44ca1ecf5ec802c7dbd784383a70656774"}},{"ruleId":"D2","level":"warning","message":{"text":"AssertionPropagation.optimizeAssertionPropagateExpression (cognitive 34): AssertionPropagation.optimizeAssertionPropagateExpression has cognitive complexity 34 (threshold 15). Drivers by points: match/switch 6 (20 pts), if/else 4 (14 pts) (nesting depth added 24). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Oly.Runtime/Optimizations/AssertionPropagation.fs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"3eca49995aa956d267bc477abbef55df8f4eb46819e39ecb2c975d26de34b2b0"}},{"ruleId":"D2","level":"warning","message":{"text":"EarlyAttributes.bindEarlyAttribute (cognitive 33): EarlyAttributes.bindEarlyAttribute has cognitive complexity 33 (threshold 15). Drivers by points: if/else 5 (17 pts), match/switch 6 (13 pts), boolean chains 3 (nesting depth added 19). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/EarlyAttributes.fs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b94c5433e00a11e6236556456bbd6dd09721c3fcd44d3d745c488759330e366"}},{"ruleId":"D2","level":"warning","message":{"text":"EarlyAttributes.tryAddIntrinsicPrimitivesForEntity (cognitive 33): EarlyAttributes.tryAddIntrinsicPrimitivesForEntity has cognitive complexity 33 (threshold 15). Drivers by points: match/switch 6 (17 pts), if/else 6 (16 pts) (nesting depth added 21). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/EarlyAttributes.fs"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3b2828693d04a41718a9474700b1e7c1c35c388590b75c1e1825c00a36d482c"}},{"ruleId":"D2","level":"warning","message":{"text":"SymbolQuery.canAccessValue (cognitive 33): SymbolQuery.canAccessValue has cognitive complexity 33 (threshold 15). Drivers by points: if/else 10 (18 pts), match/switch 4 (15 pts) (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/SymbolQuery.fs"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"71583d7b7034a5b278f432d096130f2e0d2c480965cdb87c667cca096ca3d34b"}},{"ruleId":"D2","level":"warning","message":{"text":"TextDocumentSyncHandler.OmniSharp.Extensions.LanguageServer.Protocol.Document.ICodeLensHandler.Handle (cognitive 33): TextDocumentSyncHandler.OmniSharp.Extensions.LanguageServer.Protocol.Document.ICodeLensHandler.Handle has cognitive complexity 33 (threshold 15). Drivers by points: match/switch 9 (28 pts), if/else 2 (5 pts) (nesting depth added 22). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LanguageServer/Oly.LanguageServer/LanguageServer.fs"},"region":{"startLine":1786}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ec0040dde2e6c1b1094d88db082ba298d555ee3d3df29343de86d20a9147963"}},{"ruleId":"D2","level":"warning","message":{"text":"BinderEnvironment.AddUnqualifiedType (cognitive 32): BinderEnvironment.AddUnqualifiedType has cognitive complexity 32 (threshold 15). Drivers by points: if/else 8 (16 pts), match/switch 4 (14 pts), boolean chains 2 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Environment.fs"},"region":{"startLine":245}}}],"partialFingerprints":{"codehealthFindingId/v1":"76c9f984f3bd6a61423162ed5fa91006444d7746f1772e93c6dab66d2484a59b"}},{"ruleId":"D2","level":"warning","message":{"text":"Substitution.substituteValue (cognitive 32): Substitution.substituteValue has cognitive complexity 32 (threshold 15). Drivers by points: if/else 11 (23 pts), match/switch 2 (5 pts), loops 1 (4 pts) (nesting depth added 18). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Substitution.fs"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"307c17b0fcd95dc36b6c405fde75b76082a654c61504c98f299f7a8e7a4f722d"}},{"ruleId":"D2","level":"warning","message":{"text":"SpirvModuleBuilder.CreateVariableType (cognitive 32): SpirvModuleBuilder.CreateVariableType has cognitive complexity 32 (threshold 15). Drivers by points: if/else 12 (18 pts), match/switch 8 (14 pts) (nesting depth added 12). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/Spirv/Oly.Emitters.Spirv/SpirvModuleBuilder.fs"},"region":{"startLine":1045}}}],"partialFingerprints":{"codehealthFindingId/v1":"8449dec483d97171dabe0541d13397cddb69045ce90ddc24eac4bd0b459369af"}},{"ruleId":"D2","level":"warning","message":{"text":"Pass4.bindLocalValueDeclaration (cognitive 30): Pass4.bindLocalValueDeclaration has cognitive complexity 30 (threshold 15). Drivers by points: if/else 7 (14 pts), match/switch 6 (14 pts), boolean chains 2 (nesting depth added 15). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass4.fs"},"region":{"startLine":1416}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9cb2b8c6ac198ba968a1389ba98fdff2141273a4bc562f75db7f4237807a145"}},{"ruleId":"D2","level":"warning","message":{"text":"Attributes.bindAttributeExpressionAux (cognitive 30): Attributes.bindAttributeExpressionAux has cognitive complexity 30 (threshold 15). Drivers by points: if/else 7 (15 pts), match/switch 6 (13 pts), boolean chains 2 (nesting depth added 15). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Attributes.fs"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"05796f40d031de4dd7a0e420cc83fcdfc1505b9991d1c7959651f7b005d02214"}},{"ruleId":"D2","level":"warning","message":{"text":"FunctionOverloading.filterFunctionsForOverloadingPhase4 (cognitive 30): FunctionOverloading.filterFunctionsForOverloadingPhase4 has cognitive complexity 30 (threshold 15). Drivers by points: match/switch 5 (15 pts), if/else 8 (11 pts), boolean chains 4 (nesting depth added 13). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/FunctionOverloading.fs"},"region":{"startLine":226}}}],"partialFingerprints":{"codehealthFindingId/v1":"69243b55b1309f3dff46184e72ff392965937c2641562ada742b8f215971c3a0"}},{"ruleId":"D2","level":"warning","message":{"text":"SymbolOperations.solveHigherInferenceVariable (cognitive 30): SymbolOperations.solveHigherInferenceVariable has cognitive complexity 30 (threshold 15). Drivers by points: if/else 14 (26 pts), match/switch 1 (4 pts) (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/SymbolOperations.fs"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ca06783e6e325563dcfdba6c22341082f4ee2c9ef195eddd1915c87025fb127"}},{"ruleId":"D2","level":"warning","message":{"text":"Checker.createGeneralizedFunctionTypeParameters (cognitive 29): Checker.createGeneralizedFunctionTypeParameters has cognitive complexity 29 (threshold 15). Drivers by points: match/switch 10 (19 pts), if/else 7 (9 pts), boolean chains 1 (nesting depth added 11). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Checker.fs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"00cc24e3cccc14d42ef59c44fa64c3f8a3d35e6c37d910def5943fee07da8aae"}},{"ruleId":"D2","level":"warning","message":{"text":"BoundTreeExtensions.subsumesShapeMembersWith (cognitive 29): BoundTreeExtensions.subsumesShapeMembersWith has cognitive complexity 29 (threshold 15). Drivers by points: if/else 14 (23 pts), boolean chains 6 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/BoundTreeExtensions.fs"},"region":{"startLine":869}}}],"partialFingerprints":{"codehealthFindingId/v1":"e15ba0c06536c7a8bb2fcccd1e6431443914f122152449b400a343a6070b1c85"}},{"ruleId":"D2","level":"warning","message":{"text":"SymbolQuery.canAccessEntity (cognitive 29): SymbolQuery.canAccessEntity has cognitive complexity 29 (threshold 15). Drivers by points: if/else 9 (17 pts), match/switch 3 (12 pts) (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/SymbolQuery.fs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7da36d011252bb236c2083383993e24b3c592e899a2958f4c5abc1d255847e8"}},{"ruleId":"D2","level":"warning","message":{"text":"SymbolOperations.freshenValueAux (cognitive 29): SymbolOperations.freshenValueAux has cognitive complexity 29 (threshold 15). Drivers by points: if/else 9 (17 pts), match/switch 3 (11 pts), boolean chains 1 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/SymbolOperations.fs"},"region":{"startLine":2844}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ad5242c9227fe0dc106d5c4dd3dc414437cdf05e5956e5e1dc2e44eb85d7bdb"}},{"ruleId":"D2","level":"warning","message":{"text":"LocalNormalization.handleExpressionAuxNormalizeLocals (cognitive 29): LocalNormalization.handleExpressionAuxNormalizeLocals has cognitive complexity 29 (threshold 15). Drivers by points: if/else 10 (18 pts), match/switch 4 (7 pts), boolean chains 4 (nesting depth added 11). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Oly.Runtime/LocalNormalization.fs"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"228ea01239920d8bdb8cbcc79851a4df90f381f1e23ad79866e24988dbf08db1"}},{"ruleId":"D2","level":"warning","message":{"text":"MetadataHelpers.encodeType (cognitive 29): MetadataHelpers.encodeType has cognitive complexity 29 (threshold 15). Drivers by points: if/else 22 (26 pts), match/switch 2 (3 pts) (nesting depth added 5). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/DotNet/DotNet.Metadata/MetadataBuilder.fs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"97de2f949c7b5752dd57d9c2cc843474a02d5e91a17a3d91cd080e12fc7b1ff7"}},{"ruleId":"D2","level":"warning","message":{"text":"Solver.solveWitnessesByTypeParameter (cognitive 28): Solver.solveWitnessesByTypeParameter has cognitive complexity 28 (threshold 15). Drivers by points: if/else 12 (24 pts), boolean chains 2, match/switch 2 (nesting depth added 12). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Solver.fs"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"af46c07333c9a2755fbf439fbbccf44054e1243d17ea0d24323647a681236d89"}},{"ruleId":"D2","level":"warning","message":{"text":"Iterator.VisitExpression (cognitive 28): Iterator.VisitExpression has cognitive complexity 28 (threshold 15). Drivers by points: match/switch 5 (15 pts), if/else 5 (11 pts), boolean chains 2 (nesting depth added 16). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/BoundTreeExtensions.fs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"41fa79cf3ce8c8ec383165fa730943516f70883d2579f87e08560b92a4371508"}},{"ruleId":"D2","level":"warning","message":{"text":"SymbolOperations.areShapesEqualWith (cognitive 28): SymbolOperations.areShapesEqualWith has cognitive complexity 28 (threshold 15). Drivers by points: if/else 12 (23 pts), boolean chains 5 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/SymbolOperations.fs"},"region":{"startLine":1001}}}],"partialFingerprints":{"codehealthFindingId/v1":"21037fa042f2ab2f902344dfc9b13a2952e04062f19c9c68456dade10a999ee4"}},{"ruleId":"D2","level":"warning","message":{"text":"AssertionPropagation.assertionPropagateExpressionAux (cognitive 28): AssertionPropagation.assertionPropagateExpressionAux has cognitive complexity 28 (threshold 15). Drivers by points: if/else 11 (19 pts), match/switch 3 (5 pts), boolean chains 4 (nesting depth added 10). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Oly.Runtime/Optimizations/AssertionPropagation.fs"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e653ff87db60f3a73d56170f4cbf7a5530d49b1fbfe0bda83e8ce44040d2a41"}},{"ruleId":"D2","level":"warning","message":{"text":"OlySymbolUseInfo.TryGetAliasedType (cognitive 27): OlySymbolUseInfo.TryGetAliasedType has cognitive complexity 27 (threshold 15). Drivers by points: match/switch 4 (17 pts), if/else 6 (10 pts) (nesting depth added 17). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/PublicAPI/PublicSymbols.fs"},"region":{"startLine":1079}}}],"partialFingerprints":{"codehealthFindingId/v1":"5514a1a02ba53ff60e201d23cc1f5c3b96c2fe97f8b148e0356ac82fe64643d2"}},{"ruleId":"D2","level":"warning","message":{"text":"BoundTreeVisitor.VisitExpression (cognitive 27): BoundTreeVisitor.VisitExpression has cognitive complexity 27 (threshold 15). Drivers by points: match/switch 5 (15 pts), loops 3 (9 pts), if/else 3 (nesting depth added 16). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/BoundTreeVisitor.fs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5be54c2103db4a22c34b7b1d49fa2d9e040712611c9e60ce1ab11ddae62b2ff"}},{"ruleId":"D2","level":"warning","message":{"text":"NameResolution.bindConstraintClause (cognitive 26): NameResolution.bindConstraintClause has cognitive complexity 26 (threshold 15). Drivers by points: match/switch 6 (15 pts), if/else 5 (10 pts), boolean chains 1 (nesting depth added 14). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/NameResolution.fs"},"region":{"startLine":2180}}}],"partialFingerprints":{"codehealthFindingId/v1":"93fa6da0cd9379e68b93020e408e66fdcbe7c61d81bd9892a2730d709f15f203"}},{"ruleId":"D2","level":"warning","message":{"text":"SymbolOperations.freshenTypeAux (cognitive 26): SymbolOperations.freshenTypeAux has cognitive complexity 26 (threshold 15). Drivers by points: match/switch 10 (25 pts), if/else 1 (nesting depth added 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/SymbolOperations.fs"},"region":{"startLine":2735}}}],"partialFingerprints":{"codehealthFindingId/v1":"1420298810991371570067a2bc883045b9897e0500137007f2884859e1f2871b"}},{"ruleId":"D2","level":"warning","message":{"text":"RuntimeType.Substitute (cognitive 26): RuntimeType.Substitute has cognitive complexity 26 (threshold 15). Drivers by points: if/else 9 (21 pts), match/switch 2 (5 pts) (nesting depth added 15). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Oly.Runtime/InternalCodeGenTypes.fs"},"region":{"startLine":1151}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c098a4a423b4cdce444f9790c31633ba1b243c1c27eb00996c51e44bdba33c0"}},{"ruleId":"D2","level":"warning","message":{"text":"Extensions.ClrTypeDefinitionBuilder.CreateMethodDefinitionBuilderEx (cognitive 26): Extensions.ClrTypeDefinitionBuilder.CreateMethodDefinitionBuilderEx has cognitive complexity 26 (threshold 15). Drivers by points: if/else 18 (19 pts), boolean chains 7 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/DotNet/Oly.Emitters.DotNet/Extensions.fs"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"6617317f570336d8d308d150fda3d86d19ace2bd2edc343f81ddf1bd44cf4619"}},{"ruleId":"D2","level":"warning","message":{"text":"TextDocumentSyncHandler.OmniSharp.Extensions.LanguageServer.Protocol.Document.ISignatureHelpHandler.Handle (cognitive 26): TextDocumentSyncHandler.OmniSharp.Extensions.LanguageServer.Protocol.Document.ISignatureHelpHandler.Handle has cognitive complexity 26 (threshold 15). Drivers by points: if/else 10 (20 pts), match/switch 2 (5 pts), boolean chains 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LanguageServer/Oly.LanguageServer/LanguageServer.fs"},"region":{"startLine":1460}}}],"partialFingerprints":{"codehealthFindingId/v1":"40f1131504033dc215a72ccb22e35318ae637908b8c6dc1caec9e8e6e539c25a"}},{"ruleId":"D2","level":"warning","message":{"text":"TextDocumentSyncHandler.OmniSharp.Extensions.JsonRpc.IJsonRpcRequestHandler\u003CLanguageServer.OlyGetIRRequest, System.String\u003E.Handle (cognitive 26): TextDocumentSyncHandler.OmniSharp.Extensions.JsonRpc.IJsonRpcRequestHandler\u003CLanguageServer.OlyGetIRRequest, System.String\u003E.Handle has cognitive complexity 26 (threshold 15). Drivers by points: match/switch 7 (23 pts), error handling 1 (3 pts) (nesting depth added 18). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LanguageServer/Oly.LanguageServer/LanguageServer.fs"},"region":{"startLine":2257}}}],"partialFingerprints":{"codehealthFindingId/v1":"97b6e30d123943aa7bae5fefadc0cfc235ad8bf1365cc37eadabde7a6d9239b7"}},{"ruleId":"D2","level":"warning","message":{"text":"Pass0.bindTypeDeclaration (cognitive 25): Pass0.bindTypeDeclaration has cognitive complexity 25 (threshold 15). Drivers by points: if/else 10 (13 pts), match/switch 8 (10 pts), boolean chains 2 (nesting depth added 5). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass0.fs"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e6ee21d2235a737e526d1cf3e567a9f45aaa5293341146fd7433b88d672baa6"}},{"ruleId":"D2","level":"warning","message":{"text":"Substitution.substituteLiteral (cognitive 25): Substitution.substituteLiteral has cognitive complexity 25 (threshold 15). Drivers by points: if/else 10 (19 pts), match/switch 2 (5 pts), boolean chains 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Substitution.fs"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"b930b319c3f5218d594e4cbfa7c4af2a4740c3a60a11e99164f5123ede7f4a59"}},{"ruleId":"D2","level":"warning","message":{"text":"CompilerImports.retargetType (cognitive 25): CompilerImports.retargetType has cognitive complexity 25 (threshold 15). Drivers by points: if/else 14 (24 pts), match/switch 1 (nesting depth added 10). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/CompilerImports.fs"},"region":{"startLine":564}}}],"partialFingerprints":{"codehealthFindingId/v1":"1adf42d5b24ccb9a969f6b6f53bca3f034b6eaf99d5420af1da6f991880aa2aa"}},{"ruleId":"D2","level":"warning","message":{"text":"Pass4.bindMemberValueRightSideExpression (cognitive 24): Pass4.bindMemberValueRightSideExpression has cognitive complexity 24 (threshold 15). Drivers by points: if/else 8 (11 pts), match/switch 5 (10 pts), boolean chains 3 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass4.fs"},"region":{"startLine":654}}}],"partialFingerprints":{"codehealthFindingId/v1":"7656f0a30fabb1d00de42d1d1d4a1573c89e1c6c0a2633388f2a0ec94c4acd8b"}},{"ruleId":"D2","level":"warning","message":{"text":"Checker.checkLetBindingDeclarationAndAutoGeneralize (cognitive 24): Checker.checkLetBindingDeclarationAndAutoGeneralize has cognitive complexity 24 (threshold 15). Drivers by points: match/switch 6 (11 pts), if/else 6 (10 pts), loops 1 (2 pts), boolean chains 1 (nesting depth added 10). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Checker.fs"},"region":{"startLine":733}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ef12ac3eb810ec90dddfa0f50a4ece5cc361055127b821adf84fc898f6232d8"}},{"ruleId":"D2","level":"warning","message":{"text":"Solver.inferTypeArgumentFromTypeParameterConstraints (cognitive 24): Solver.inferTypeArgumentFromTypeParameterConstraints has cognitive complexity 24 (threshold 15). Drivers by points: if/else 7 (19 pts), match/switch 2 (4 pts), boolean chains 1 (nesting depth added 14). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Solver.fs"},"region":{"startLine":509}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3f70d4270fca3c367314db942a3563ecce8927486427575eb79e09952cc62a0"}},{"ruleId":"D2","level":"warning","message":{"text":"BoundTreeExtensions.forEachConstraintBySyntaxConstraintClause (cognitive 24): BoundTreeExtensions.forEachConstraintBySyntaxConstraintClause has cognitive complexity 24 (threshold 15). Drivers by points: match/switch 7 (24 pts) (nesting depth added 17). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/BoundTreeExtensions.fs"},"region":{"startLine":829}}}],"partialFingerprints":{"codehealthFindingId/v1":"80ab0ba88e6ec3b913e37829a54264a8b8e72591de69d1f59039bfcaa79153e4"}},{"ruleId":"D2","level":"warning","message":{"text":"Symbols.applyType (cognitive 24): Symbols.applyType has cognitive complexity 24 (threshold 15). Drivers by points: match/switch 3 (13 pts), if/else 6 (11 pts) (nesting depth added 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/Symbols.fs"},"region":{"startLine":467}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5113e43ffe00974f916c2f4c24067fb2b372335412b8f911772ce274b613249"}},{"ruleId":"D2","level":"warning","message":{"text":"Symbols.stripTypeEquations_InferenceVariable (cognitive 24): Symbols.stripTypeEquations_InferenceVariable has cognitive complexity 24 (threshold 15). Drivers by points: match/switch 4 (14 pts), if/else 4 (9 pts), boolean chains 1 (nesting depth added 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/Symbols.fs"},"region":{"startLine":1464}}}],"partialFingerprints":{"codehealthFindingId/v1":"465f2e7d6d17b47decf339d9e6b906ab5895a2ae4bf8efd51499369e8d96b629"}},{"ruleId":"D2","level":"warning","message":{"text":"OlyPath.ContainsDirectoryOrFile (cognitive 24): OlyPath.ContainsDirectoryOrFile has cognitive complexity 24 (threshold 15). Drivers by points: if/else 12 (20 pts), boolean chains 3, match/switch 1 (nesting depth added 8). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Core/Oly.Core/Path.fs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"d847922368c4453ada8b5a4a387f8e9bf65422fd823dbf8b1fdb61845c15982e"}},{"ruleId":"D2","level":"warning","message":{"text":"Program.computePublicNode (cognitive 24): Program.computePublicNode has cognitive complexity 24 (threshold 15). Drivers by points: if/else 8 (17 pts), loops 3 (7 pts) (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler.SyntaxGenerator/Program.fs"},"region":{"startLine":255}}}],"partialFingerprints":{"codehealthFindingId/v1":"56758f946d2e98b7d302da36626bc068bcdffdd639e27b356bdfd28df49b7f33"}},{"ruleId":"D2","level":"warning","message":{"text":"Pass4.bindPattern (cognitive 23): Pass4.bindPattern has cognitive complexity 23 (threshold 15). Drivers by points: if/else 6 (14 pts), match/switch 4 (9 pts) (nesting depth added 13). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass4.fs"},"region":{"startLine":2133}}}],"partialFingerprints":{"codehealthFindingId/v1":"50b6f904c2d5042740d08128a0eac78f6df52ec6d4170802e388b8a587672cbc"}},{"ruleId":"D2","level":"warning","message":{"text":"NameResolution.bindLiteral (cognitive 23): NameResolution.bindLiteral has cognitive complexity 23 (threshold 15). Drivers by points: if/else 9 (12 pts), match/switch 4 (7 pts), error handling 2 (4 pts) (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/NameResolution.fs"},"region":{"startLine":2645}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b07fe23657012549bbae572e8cb2477c6720e781abd845ca587eecb71a9c72e"}},{"ruleId":"D2","level":"warning","message":{"text":"SymbolOperations.filterMostSpecificProperties (cognitive 23): SymbolOperations.filterMostSpecificProperties has cognitive complexity 23 (threshold 15). Drivers by points: if/else 10 (18 pts), match/switch 1 (3 pts), boolean chains 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/SymbolOperations.fs"},"region":{"startLine":2094}}}],"partialFingerprints":{"codehealthFindingId/v1":"82c0b1a407b20b38060b7648a5408f172f03bdb40ee7644107d48defce95b084"}},{"ruleId":"D2","level":"warning","message":{"text":"OlyRuntimeClrEmitter.Oly.Runtime.CodeGen.IOlyRuntimeEmitter\u003COly.Emitters.DotNet.ClrTypeInfo, Oly.Emitters.DotNet.ClrMethodInfo, Oly.Emitters.DotNet.ClrFieldInfo\u003E.EmitTypeDefinition (cognitive 23): OlyRuntimeClrEmitter.Oly.Runtime.CodeGen.IOlyRuntimeEmitter\u003COly.Emitters.DotNet.ClrTypeInfo, Oly.Emitters.DotNet.ClrMethodInfo, Oly.Emitters.DotNet.ClrFieldInfo\u003E.EmitTypeDefinition has cognitive complexity 23 (threshold 15). Drivers by points: if/else 12 (16 pts), match/switch 2 (5 pts), boolean chains 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/DotNet/Oly.Emitters.DotNet/Emitter.fs"},"region":{"startLine":2544}}}],"partialFingerprints":{"codehealthFindingId/v1":"762c3b38dcae6db595402dbe7876cd63569ac04a25d467ef4de0b0bce0ff0684"}},{"ruleId":"D2","level":"warning","message":{"text":"OlyTargetOutputOnly\u00604.BuildProjectAsync (cognitive 23): OlyTargetOutputOnly\u00604.BuildProjectAsync has cognitive complexity 23 (threshold 15). Drivers by points: match/switch 4 (14 pts), if/else 6 (9 pts) (nesting depth added 13). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Targets/Oly.Runtime.Target.Core/Core.fs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb1ddf27037a7fabbc7d751774c40c1ef1cd2db0f1dc0df5111cea512a5712b8"}},{"ruleId":"D2","level":"warning","message":{"text":"SpirvLowering.TryPostOrderLowerOperationExpression (cognitive 23): SpirvLowering.TryPostOrderLowerOperationExpression has cognitive complexity 23 (threshold 15). Drivers by points: match/switch 6 (15 pts), if/else 2 (8 pts) (nesting depth added 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/Spirv/Oly.Emitters.Spirv/SpirvLowering.fs"},"region":{"startLine":490}}}],"partialFingerprints":{"codehealthFindingId/v1":"adc964adaaca370b76ac9517de25e06f35ad785b7f4490b217cdc5de5b24ad58"}},{"ruleId":"D2","level":"warning","message":{"text":"CompilationPhases.checkDuplications (cognitive 22): CompilationPhases.checkDuplications has cognitive complexity 22 (threshold 15). Drivers by points: if/else 10 (17 pts), match/switch 2 (3 pts), boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/PublicAPI/PublicCompilation.fs"},"region":{"startLine":392}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ff5338edb1af96563abb4024378ab8c4b63ed8aaa6621057be709ed0d831610"}},{"ruleId":"D2","level":"warning","message":{"text":"ILGen.emitILTypeAux (cognitive 22): ILGen.emitILTypeAux has cognitive complexity 22 (threshold 15). Drivers by points: if/else 8 (11 pts), match/switch 6 (11 pts) (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/ILGen.fs"},"region":{"startLine":362}}}],"partialFingerprints":{"codehealthFindingId/v1":"47b6a9dc855de05b1eac6202808d6679dab77a13a54198f5f77f6e7a89054465"}},{"ruleId":"D2","level":"warning","message":{"text":"PostInferenceAnalysis.analyzeTypeEntityAccessibility (cognitive 22): PostInferenceAnalysis.analyzeTypeEntityAccessibility has cognitive complexity 22 (threshold 15). Drivers by points: if/else 7 (13 pts), match/switch 3 (8 pts), boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/PostInferenceAnalysis.fs"},"region":{"startLine":306}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5fa73c896a31f6a0ae6d1a14e1a42a5521aad3aa5797d5b3ac2a1f3d7b682d3"}},{"ruleId":"D2","level":"warning","message":{"text":"Pass2.createInstanceFunctionParameters (cognitive 22): Pass2.createInstanceFunctionParameters has cognitive complexity 22 (threshold 15). Drivers by points: if/else 11 (17 pts), boolean chains 4, match/switch 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass2.fs"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"67f47b089042d0dc4063e5c14979fddbbbef184f3e5466199281e24ad00417a6"}},{"ruleId":"D2","level":"warning","message":{"text":"Pass0.bindTypeDeclarationBody (cognitive 22): Pass0.bindTypeDeclarationBody has cognitive complexity 22 (threshold 15). Drivers by points: if/else 6 (10 pts), match/switch 4 (10 pts), boolean chains 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass0.fs"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"7be9cba24968f3450e99da621d2b9019df751166ebf8633c184c87a27444c841"}},{"ruleId":"D2","level":"warning","message":{"text":"ImplicitRules.tryImplicitArguments (cognitive 22): ImplicitRules.tryImplicitArguments has cognitive complexity 22 (threshold 15). Drivers by points: if/else 8 (15 pts), match/switch 1 (4 pts), loops 1 (2 pts), boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/ImplicitRules.fs"},"region":{"startLine":254}}}],"partialFingerprints":{"codehealthFindingId/v1":"13de31a87b2586f3de9ea7b07b1f998205e61793c81a2883d17e06b235106d78"}},{"ruleId":"D2","level":"warning","message":{"text":"Substitution.substituteForAutoGeneralization (cognitive 22): Substitution.substituteForAutoGeneralization has cognitive complexity 22 (threshold 15). Drivers by points: if/else 10 (15 pts), match/switch 3 (5 pts), boolean chains 2 (nesting depth added 7). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Substitution.fs"},"region":{"startLine":269}}}],"partialFingerprints":{"codehealthFindingId/v1":"93b3c53fc0da0b7ab70b3befb60d44d74f962fe34487c2dfb8dc205be6797142"}},{"ruleId":"D2","level":"warning","message":{"text":"BoundTreePatterns.|LoadFunctionPtrOfLambdaWrappedFunctionCall|_| (cognitive 22): BoundTreePatterns.|LoadFunctionPtrOfLambdaWrappedFunctionCall|_| has cognitive complexity 22 (threshold 15). Drivers by points: match/switch 5 (15 pts), if/else 2 (6 pts), boolean chains 1 (nesting depth added 14). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/BoundTreePatterns.fs"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f9e20ece6bea4e7ef309727d3ef73a3faed7f7c74a1d425e5867af34f80559b"}},{"ruleId":"D2","level":"warning","message":{"text":"SymbolQuery.filterFunctions (cognitive 22): SymbolQuery.filterFunctions has cognitive complexity 22 (threshold 15). Drivers by points: if/else 10 (15 pts), match/switch 2 (5 pts), boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/SymbolQuery.fs"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"93046c4a3fc14c9e76f6410e13651ac5dfe025df1fda0109c3fc0784ca4bcd85"}},{"ruleId":"D2","level":"warning","message":{"text":"SymbolOperations.IFunctionSymbol.IsOverriding (cognitive 22): SymbolOperations.IFunctionSymbol.IsOverriding has cognitive complexity 22 (threshold 15). Drivers by points: if/else 8 (17 pts), boolean chains 3, match/switch 1 (2 pts) (nesting depth added 10). To reduce it, flatten the nesting: this score is depth rather than breadth \u2014 most of its points come from checks stacked inside one another, so the work sits several levels in. Invert each enclosing check into an early exit (a return, or the language\u0027s equivalent) so the happy path stays at one level, and where a level cannot be exited early, lift the block it encloses into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/SymbolOperations.fs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"f33fa608478d3cedceaa38c162477a109ddceee31280b09a33adee392c2afcac"}},{"ruleId":"D2","level":"warning","message":{"text":"BinderEnvironment.AddTypeExtension (cognitive 21): BinderEnvironment.AddTypeExtension has cognitive complexity 21 (threshold 15). Drivers by points: match/switch 4 (11 pts), if/else 7 (10 pts) (nesting depth added 10). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Environment.fs"},"region":{"startLine":639}}}],"partialFingerprints":{"codehealthFindingId/v1":"0763b1e98a72f86c5a9f144b827054d687c94c23550f2f90889f76d25cd24ba1"}},{"ruleId":"D2","level":"warning","message":{"text":"FunctionOverloading.filterFunctionsForOverloadingPhase3 (cognitive 21): FunctionOverloading.filterFunctionsForOverloadingPhase3 has cognitive complexity 21 (threshold 15). Drivers by points: match/switch 4 (11 pts), if/else 6 (8 pts), boolean chains 2 (nesting depth added 9). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/FunctionOverloading.fs"},"region":{"startLine":294}}}],"partialFingerprints":{"codehealthFindingId/v1":"124a0c135a532ad700d938ee194ebf1270affdf28e14bb7cb11fbf621a3d6484"}},{"ruleId":"D2","level":"warning","message":{"text":"ImplicitRules.tryMorphArgumentImplicit (cognitive 21): ImplicitRules.tryMorphArgumentImplicit has cognitive complexity 21 (threshold 15). Drivers by points: match/switch 3 (10 pts), if/else 5 (7 pts), boolean chains 4 (nesting depth added 9). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/ImplicitRules.fs"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"59e5e70649843181ab199bc49911778dbfa0ec040e293c6c0d6cf9961159074e"}},{"ruleId":"D2","level":"warning","message":{"text":"PrettyPrint.printValueName (cognitive 21): PrettyPrint.printValueName has cognitive complexity 21 (threshold 15). Drivers by points: match/switch 4 (13 pts), if/else 5 (7 pts), boolean chains 1 (nesting depth added 11). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/PrettyPrint.fs"},"region":{"startLine":298}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fa691685763f8ea659dfcee395bb127da6a80e2cd61afc7f18a1d8adb7fe599"}},{"ruleId":"D2","level":"warning","message":{"text":"PrettyPrint.printMember (cognitive 21): PrettyPrint.printMember has cognitive complexity 21 (threshold 15). Drivers by points: if/else 9 (12 pts), match/switch 3 (8 pts), boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/PrettyPrint.fs"},"region":{"startLine":541}}}],"partialFingerprints":{"codehealthFindingId/v1":"1292ba4ab9230405c3e38df9f96746ce0da3bfd22cc74a77b96d686af5e8a46d"}},{"ruleId":"D2","level":"warning","message":{"text":"Symbols.tryActualType (cognitive 21): Symbols.tryActualType has cognitive complexity 21 (threshold 15). Drivers by points: match/switch 4 (11 pts), if/else 5 (9 pts), boolean chains 1 (nesting depth added 11). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/Symbols.fs"},"region":{"startLine":1189}}}],"partialFingerprints":{"codehealthFindingId/v1":"31bbd7d43ab9f44b8a10d08d143c19ffdf610b8861bdd3726d01977bdb616147"}},{"ruleId":"D2","level":"warning","message":{"text":"Helpers.hasReadOnlyAttribute (cognitive 21): Helpers.hasReadOnlyAttribute has cognitive complexity 21 (threshold 15). Drivers by points: if/else 8 (15 pts), match/switch 2 (4 pts), boolean chains 2 (nesting depth added 9). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident. This shape REPEATS in the file: one other method here (Helpers.hasIsByRefLikeAttribute) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Targets/DotNet/Oly.Compiler.CIL.Importer/Importer.fs"},"region":{"startLine":906}}}],"partialFingerprints":{"codehealthFindingId/v1":"433842f9865e60697f473d04d3f30b9d9119c7d94d1516c8f742602bbb7142f7"}},{"ruleId":"D2","level":"warning","message":{"text":"Helpers.hasIsByRefLikeAttribute (cognitive 21): Helpers.hasIsByRefLikeAttribute has cognitive complexity 21 (threshold 15). Drivers by points: if/else 8 (15 pts), match/switch 2 (4 pts), boolean chains 2 (nesting depth added 9). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident. This shape REPEATS in the file: one other method here (Helpers.hasReadOnlyAttribute) has the same decision points, in the same order, at the same nesting depths \u2014 so this is one pattern written twice rather than two separate problems. Splitting this body alone leaves the other exactly as it is. Where these are variations on one operation, the change that clears both is the shared one: lift the common shape into a single routine the variants call, parameterised by whatever genuinely differs between them, and keep in each method only the part that is not shared."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Targets/DotNet/Oly.Compiler.CIL.Importer/Importer.fs"},"region":{"startLine":953}}}],"partialFingerprints":{"codehealthFindingId/v1":"40463a4602aaff6ee4a5adbb6805d13e31ef62e9f502b566fcbf6900d5fd0833"}},{"ruleId":"D2","level":"warning","message":{"text":"ClrCodeGen.getPrimitiveTypeCode (cognitive 21): ClrCodeGen.getPrimitiveTypeCode has cognitive complexity 21 (threshold 15). Drivers by points: if/else 20 (21 pts) (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/DotNet/Oly.Emitters.DotNet/Emitter.fs"},"region":{"startLine":406}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9a6f4f1e6b3656ac1872a0ac32f48e8e4be2ed1f4720a7ce58f3ca2b88278e1"}},{"ruleId":"D2","level":"warning","message":{"text":"InterpreterFunction.HandleCast (cognitive 21): InterpreterFunction.HandleCast has cognitive complexity 21 (threshold 15). Drivers by points: match/switch 11 (21 pts) (nesting depth added 10). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/Interpreter/Oly.Emitters.Interpreter/Emitter.fs"},"region":{"startLine":756}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e0e47f39120aed3ed7e0fdcff274aff610c9dcf74f25ed30805341eab53a535"}},{"ruleId":"D2","level":"warning","message":{"text":"TextDocumentSyncHandler.OmniSharp.Extensions.LanguageServer.Protocol.Document.ICompletionHandler.Handle (cognitive 21): TextDocumentSyncHandler.OmniSharp.Extensions.LanguageServer.Protocol.Document.ICompletionHandler.Handle has cognitive complexity 21 (threshold 15). Drivers by points: if/else 10 (19 pts), error handling 1, match/switch 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LanguageServer/Oly.LanguageServer/LanguageServer.fs"},"region":{"startLine":1960}}}],"partialFingerprints":{"codehealthFindingId/v1":"c30b07f997d66002cf480508767f1a3041b792e600695881d67fb2f40e0a5a22"}},{"ruleId":"D2","level":"warning","message":{"text":"ILGen.GenFieldAsILFieldDefinition (cognitive 20): ILGen.GenFieldAsILFieldDefinition has cognitive complexity 20 (threshold 15). Drivers by points: if/else 9 (16 pts), match/switch 2 (3 pts), boolean chains 1 (nesting depth added 8). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/ILGen.fs"},"region":{"startLine":644}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbe8768d11b65dc7fbd6b9ac7ceb6f36d1c93e14d8e193adf9843443b76f53b8"}},{"ruleId":"D2","level":"warning","message":{"text":"ILGen.GenLetExpression (cognitive 20): ILGen.GenLetExpression has cognitive complexity 20 (threshold 15). Drivers by points: match/switch 5 (12 pts), if/else 3 (6 pts), boolean chains 2 (nesting depth added 10). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/ILGen.fs"},"region":{"startLine":2203}}}],"partialFingerprints":{"codehealthFindingId/v1":"638371d01a9da51df452bd071a4b82842400bcb7c376c96164c6c7731e942275"}},{"ruleId":"D2","level":"warning","message":{"text":"Pass4.bindItemAsExpression (cognitive 20): Pass4.bindItemAsExpression has cognitive complexity 20 (threshold 15). Drivers by points: match/switch 7 (14 pts), if/else 3 (6 pts) (nesting depth added 10). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass4.fs"},"region":{"startLine":391}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba3499662a1b58602d349d3eb78ab0dff0dcbbf24fc0d02513416889d1884b28"}},{"ruleId":"D2","level":"warning","message":{"text":"NameResolution.tryBindIdentifierAsValueForExpression (cognitive 20): NameResolution.tryBindIdentifierAsValueForExpression has cognitive complexity 20 (threshold 15). Drivers by points: if/else 5 (10 pts), match/switch 4 (10 pts) (nesting depth added 11). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/NameResolution.fs"},"region":{"startLine":1348}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6758ab5d73e6448956a240f095c9d3aaff0ea2447708391d058fa86a5026a18"}},{"ruleId":"D2","level":"warning","message":{"text":"NameResolution.bindTypeArguments (cognitive 20): NameResolution.bindTypeArguments has cognitive complexity 20 (threshold 15). Drivers by points: if/else 12 (19 pts), boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/NameResolution.fs"},"region":{"startLine":1910}}}],"partialFingerprints":{"codehealthFindingId/v1":"513a2d2c238f958055cb779745d6de951dd802e9934febb98d788d574c13754c"}},{"ruleId":"D2","level":"warning","message":{"text":"Checker.checkExpressionType (cognitive 20): Checker.checkExpressionType has cognitive complexity 20 (threshold 15). Drivers by points: if/else 9 (15 pts), match/switch 1 (3 pts), boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Checker.fs"},"region":{"startLine":827}}}],"partialFingerprints":{"codehealthFindingId/v1":"14f30219c107229b8c6f8486487ee3c3c97c2e94e39569a550ba2c8980b1a30f"}},{"ruleId":"D2","level":"warning","message":{"text":"Checker.checkParameter (cognitive 20): Checker.checkParameter has cognitive complexity 20 (threshold 15). Drivers by points: if/else 5 (15 pts), match/switch 2 (4 pts), boolean chains 1 (nesting depth added 12). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Checker.fs"},"region":{"startLine":1111}}}],"partialFingerprints":{"codehealthFindingId/v1":"0573234b954a9847b6b9cc0a52d85344a5fc95f9ea88829e4d9abf7597c86aa8"}},{"ruleId":"D2","level":"warning","message":{"text":"BoundExpression.RewriteReturningTargetExpression (cognitive 20): BoundExpression.RewriteReturningTargetExpression has cognitive complexity 20 (threshold 15). Drivers by points: if/else 10 (16 pts), match/switch 2 (3 pts), boolean chains 1 (nesting depth added 7). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/BoundTree.fs"},"region":{"startLine":622}}}],"partialFingerprints":{"codehealthFindingId/v1":"eda05b6cef806f6939980cd566c6584b046113f8dbe2fff894052cd7087a316c"}},{"ruleId":"D2","level":"warning","message":{"text":"Symbols.stripTypeEquations_Tuple (cognitive 20): Symbols.stripTypeEquations_Tuple has cognitive complexity 20 (threshold 15). Drivers by points: match/switch 3 (10 pts), if/else 6 (9 pts), boolean chains 1 (nesting depth added 10). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/Symbols.fs"},"region":{"startLine":1593}}}],"partialFingerprints":{"codehealthFindingId/v1":"63c7df71e49cad568423508e9a510403e296bd1ae165be3f549d59c0125e69f2"}},{"ruleId":"D2","level":"warning","message":{"text":"OlyAttributeTypeProvider.System.Reflection.Metadata.ICustomAttributeTypeProvider\u003COly.Metadata.OlyILType\u003E.IsSystemType (cognitive 20): OlyAttributeTypeProvider.System.Reflection.Metadata.ICustomAttributeTypeProvider\u003COly.Metadata.OlyILType\u003E.IsSystemType has cognitive complexity 20 (threshold 15). Drivers by points: if/else 6 (11 pts), match/switch 3 (9 pts) (nesting depth added 11). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Targets/DotNet/Oly.Compiler.CIL.Importer/Importer.fs"},"region":{"startLine":567}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ea3f27fd708840f8796209421659d595a5ff958e5876dbd9ed2f57e1596398c"}},{"ruleId":"D2","level":"warning","message":{"text":"OlyRuntimeClrEmitter.Oly.Runtime.CodeGen.IOlyRuntimeEmitter\u003COly.Emitters.DotNet.ClrTypeInfo, Oly.Emitters.DotNet.ClrMethodInfo, Oly.Emitters.DotNet.ClrFieldInfo\u003E.EmitProperty (cognitive 20): OlyRuntimeClrEmitter.Oly.Runtime.CodeGen.IOlyRuntimeEmitter\u003COly.Emitters.DotNet.ClrTypeInfo, Oly.Emitters.DotNet.ClrMethodInfo, Oly.Emitters.DotNet.ClrFieldInfo\u003E.EmitProperty has cognitive complexity 20 (threshold 15). Drivers by points: if/else 5 (14 pts), match/switch 3 (6 pts) (nesting depth added 12). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/DotNet/Oly.Emitters.DotNet/Emitter.fs"},"region":{"startLine":2721}}}],"partialFingerprints":{"codehealthFindingId/v1":"019ceaf661a4cc0c69140bf423416ffeedcc16a68656bef3fd551248e2a9d3b1"}},{"ruleId":"D2","level":"warning","message":{"text":"ClrMethodDefinitionBuilder.Build (cognitive 20): ClrMethodDefinitionBuilder.Build has cognitive complexity 20 (threshold 15). Drivers by points: if/else 12 (15 pts), loops 3, match/switch 1 (2 pts) (nesting depth added 4). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/DotNet/DotNet.Metadata/MetadataBuilder.fs"},"region":{"startLine":2915}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d9e8ddc9e63f40c710c8b3380a4c66affa36fd79f11964ee553eae3d09b94e4"}},{"ruleId":"D2","level":"warning","message":{"text":"Normalization.NormalizeAndCheck (cognitive 20): Normalization.NormalizeAndCheck has cognitive complexity 20 (threshold 15). Drivers by points: if/else 10 (17 pts), boolean chains 2, match/switch 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/Spirv/Oly.Emitters.Spirv/SpirvModuleBuilder.fs"},"region":{"startLine":1262}}}],"partialFingerprints":{"codehealthFindingId/v1":"24c6daaecc1863d0c26c99bac428defdaceb8cad55e3226e9a9c640659fa84a4"}},{"ruleId":"D2","level":"warning","message":{"text":"SpirvType.GetDefinitionInstructions (cognitive 20): SpirvType.GetDefinitionInstructions has cognitive complexity 20 (threshold 15). Drivers by points: loops 4 (9 pts), match/switch 3 (8 pts), if/else 2 (3 pts) (nesting depth added 11). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/Spirv/Oly.Emitters.Spirv/SpirvModuleBuilder.fs"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac58a921f2ea39c5db864a402d9725acfca28b9f219b1ed605dc4844add58a41"}},{"ruleId":"D2","level":"warning","message":{"text":"OlyTypeSymbol.TryGetPackedSizeInBytes (cognitive 19): OlyTypeSymbol.TryGetPackedSizeInBytes has cognitive complexity 19 (threshold 15). Drivers by points: if/else 5 (10 pts), match/switch 4 (8 pts), boolean chains 1 (nesting depth added 9). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/PublicAPI/PublicSymbols.fs"},"region":{"startLine":420}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6652cb02ab7b0025c87fa8daed83d3deaa51575c44ed9862092543246e826f6"}},{"ruleId":"D2","level":"warning","message":{"text":"PostInferenceAnalysis.analyzeAddressOf (cognitive 19): PostInferenceAnalysis.analyzeAddressOf has cognitive complexity 19 (threshold 15). Drivers by points: if/else 9 (13 pts), match/switch 4 (5 pts), boolean chains 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/PostInferenceAnalysis.fs"},"region":{"startLine":806}}}],"partialFingerprints":{"codehealthFindingId/v1":"1bc20ec84538f5fae0cea25183c2baa0a4bcb1a9a3ced663c9d6f36dd73a4ea3"}},{"ruleId":"D2","level":"warning","message":{"text":"Pass4.tryGetCallParameterlessBaseCtorExpression (cognitive 19): Pass4.tryGetCallParameterlessBaseCtorExpression has cognitive complexity 19 (threshold 15). Drivers by points: match/switch 3 (9 pts), if/else 5 (8 pts), boolean chains 2 (nesting depth added 9). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass4.fs"},"region":{"startLine":1579}}}],"partialFingerprints":{"codehealthFindingId/v1":"d748369d8ed90aa9457b9ae0007364b049bb1c0c8190e28fe34098cf7a2336ea"}},{"ruleId":"D2","level":"warning","message":{"text":"SymbolQuery.queryHierarchicalValuesOfEntity (cognitive 19): SymbolQuery.queryHierarchicalValuesOfEntity has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10 (15 pts), boolean chains 4 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/SymbolQuery.fs"},"region":{"startLine":247}}}],"partialFingerprints":{"codehealthFindingId/v1":"aafefc19473afff05677fd53625ea1ebc8726793820bfdbe02df4bfb3b36011a"}},{"ruleId":"D2","level":"warning","message":{"text":"SymbolQuery.queryFreeTypeParametersFromType (cognitive 19): SymbolQuery.queryFreeTypeParametersFromType has cognitive complexity 19 (threshold 15). Drivers by points: loops 3 (9 pts), if/else 4 (8 pts), match/switch 1 (2 pts) (nesting depth added 11). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/SymbolQuery.fs"},"region":{"startLine":843}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5e7452c623afd184940c44875d1252defcb58d0bbccd8ca60e0ee55d5e9173d"}},{"ruleId":"D2","level":"warning","message":{"text":"OlySyntaxTreeExtensions.OlySyntaxNode.FindTokens (cognitive 19): OlySyntaxTreeExtensions.OlySyntaxNode.FindTokens has cognitive complexity 19 (threshold 15). Drivers by points: if/else 7 (15 pts), boolean chains 2, match/switch 1 (2 pts) (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler.Syntax/SyntaxTreeImplementation.fs"},"region":{"startLine":1257}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2d96f5038e578fdbbe35c83a14c0ffa823e25d29ef5ecd7269dfadc8f098428"}},{"ruleId":"D2","level":"warning","message":{"text":"OlySyntaxTreeExtensions.OlySyntaxNode.TryGetBindingDeclaration (cognitive 19): OlySyntaxTreeExtensions.OlySyntaxNode.TryGetBindingDeclaration has cognitive complexity 19 (threshold 15). Drivers by points: match/switch 8 (19 pts) (nesting depth added 11). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler.Syntax/SyntaxTreeImplementation.fs"},"region":{"startLine":1564}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcd3f439777a7d915f6cd76ab3fbac984bfe0207b4c5d60c51b7b43a2aad451b"}},{"ruleId":"D2","level":"warning","message":{"text":"OlySyntaxTreeView.register (cognitive 19): OlySyntaxTreeView.register has cognitive complexity 19 (threshold 15). Drivers by points: if/else 9 (18 pts), boolean chains 1 (nesting depth added 9). Most of this is not in the body itself: 0 of the 19 points are its own statements and the rest belongs to 3 function literals inside it that branch (lines 190, 217, 197). The decisions are inside those literals, which nothing outside this body can call, review or test on its own, so splitting the enclosing body is not the move available here. To reduce it, lift the literals\u0027 work into a named function or method at the enclosing scope and have each literal call it, then reduce whichever part then reads as the largest."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"vscode/src/OlySyntaxTreeView.ts"},"region":{"startLine":189}}}],"partialFingerprints":{"codehealthFindingId/v1":"0882cd9dd8d094ac0942381e3188b72098dd997a230de334f9bcdac9acba28ca"}},{"ruleId":"D2","level":"warning","message":{"text":"OlyBoundSubModel.IsUnqualified (cognitive 18): OlyBoundSubModel.IsUnqualified has cognitive complexity 18 (threshold 15). Drivers by points: match/switch 5 (15 pts), if/else 2 (3 pts) (nesting depth added 11). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/PublicAPI/PublicSymbols.fs"},"region":{"startLine":1241}}}],"partialFingerprints":{"codehealthFindingId/v1":"992bfc9aacc0e1261414c93c6d25573891322e1f2b148242b0ad17179ed52e6d"}},{"ruleId":"D2","level":"warning","message":{"text":"Pass4.bindInitializer (cognitive 18): Pass4.bindInitializer has cognitive complexity 18 (threshold 15). Drivers by points: if/else 6 (9 pts), match/switch 5 (9 pts) (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass4.fs"},"region":{"startLine":1047}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fdc354aa04e54b3a063a847c86df37f508d1326bc597d2757b24a656ebcfb7d"}},{"ruleId":"D2","level":"warning","message":{"text":"Pass3.ForEachBinding (cognitive 18): Pass3.ForEachBinding has cognitive complexity 18 (threshold 15). Drivers by points: match/switch 7 (18 pts) (nesting depth added 11). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass3.fs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cb54a6c51a796725d19c25ed32100be6e9dea8ab79bfb703dfcd67df3e3d03e"}},{"ruleId":"D2","level":"warning","message":{"text":"NameResolution.bindValueAsCallExpression (cognitive 18): NameResolution.bindValueAsCallExpression has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12 (14 pts), match/switch 2 (3 pts), boolean chains 1 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/NameResolution.fs"},"region":{"startLine":663}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1fbed61c32249cd9248fdd3f35b02d32848388a11faa1b248b060a9a332bc4d"}},{"ruleId":"D2","level":"warning","message":{"text":"Scoping.scopeInEntityAux (cognitive 18): Scoping.scopeInEntityAux has cognitive complexity 18 (threshold 15). Drivers by points: if/else 11 (15 pts), match/switch 1 (2 pts), boolean chains 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Scoping.fs"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a7a4295beef9684bbbbaebbd4e0b0a40e73b124ae7e6dc77a11935e9a05f9b7"}},{"ruleId":"D2","level":"warning","message":{"text":"BinderEnvironment.SetUnqualifiedType (cognitive 18): BinderEnvironment.SetUnqualifiedType has cognitive complexity 18 (threshold 15). Drivers by points: if/else 6 (13 pts), match/switch 2 (4 pts), boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Environment.fs"},"region":{"startLine":310}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ab6d7f4e87cc792386da19a714cb9d7157b68d8a30a3a421d6e6cce296b8889"}},{"ruleId":"D2","level":"warning","message":{"text":"CompilerImports.importTypeSymbol (cognitive 18): CompilerImports.importTypeSymbol has cognitive complexity 18 (threshold 15). Drivers by points: match/switch 5 (9 pts), if/else 5 (8 pts), boolean chains 1 (nesting depth added 7). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/CompilerImports.fs"},"region":{"startLine":950}}}],"partialFingerprints":{"codehealthFindingId/v1":"652387dff7e910c657c1985e0f2dac8e6ebf14cb1e53f6dad68c01b67b32e315"}},{"ruleId":"D2","level":"warning","message":{"text":"OlyToken.TryNextToken (cognitive 18): OlyToken.TryNextToken has cognitive complexity 18 (threshold 15). Drivers by points: if/else 4 (9 pts), match/switch 3 (7 pts), boolean chains 2 (nesting depth added 9). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler.Syntax/SyntaxTreeImplementation.fs"},"region":{"startLine":378}}}],"partialFingerprints":{"codehealthFindingId/v1":"41b17016b9c342e14c4892cf5af102257514e8093c4ba961451f51fe811eb88e"}},{"ruleId":"D2","level":"warning","message":{"text":"LexerModule.parseConditionalDirective (cognitive 18): LexerModule.parseConditionalDirective has cognitive complexity 18 (threshold 15). Drivers by points: if/else 8 (16 pts), match/switch 1 (2 pts) (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler.Syntax/Internal/Lexer.fs"},"region":{"startLine":761}}}],"partialFingerprints":{"codehealthFindingId/v1":"9485ce853945b59017fb4072ea3a527eba6d86e51acf52b28c2d1c2130cb2eeb"}},{"ruleId":"D2","level":"warning","message":{"text":"AssertionPropagation.tryGetAssertionKeyAndValue (cognitive 18): AssertionPropagation.tryGetAssertionKeyAndValue has cognitive complexity 18 (threshold 15). Drivers by points: match/switch 6 (17 pts), boolean chains 1 (nesting depth added 11). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Oly.Runtime/Optimizations/AssertionPropagation.fs"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b90199cb624ca7838dc3725aceb957ba73152aed59eff4d9ef035221a58eb30"}},{"ruleId":"D2","level":"warning","message":{"text":"ILGen.GenValueExpression (cognitive 17): ILGen.GenValueExpression has cognitive complexity 17 (threshold 15). Drivers by points: match/switch 6 (15 pts), boolean chains 1, if/else 1 (nesting depth added 9). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/ILGen.fs"},"region":{"startLine":1764}}}],"partialFingerprints":{"codehealthFindingId/v1":"11be2ea1d37a2b5f6ea296d2ccc5d55a0bee70b71dfbcc4789913b3da2e1d0db"}},{"ruleId":"D2","level":"warning","message":{"text":"PostInferenceAnalysis.analyzeTypeAux (cognitive 17): PostInferenceAnalysis.analyzeTypeAux has cognitive complexity 17 (threshold 15). Drivers by points: match/switch 6 (13 pts), if/else 2 (4 pts) (nesting depth added 9). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/PostInferenceAnalysis.fs"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"2926457253460ee5619ce0c6f8d4df976b55e984349d9ac4cbecea354aee7098"}},{"ruleId":"D2","level":"warning","message":{"text":"Pass4.bindParenthesisExpression (cognitive 17): Pass4.bindParenthesisExpression has cognitive complexity 17 (threshold 15). Drivers by points: match/switch 6 (13 pts), if/else 3, boolean chains 1 (nesting depth added 7). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass4.fs"},"region":{"startLine":478}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6fa5164045156521813ec41c6835e66f632baa3c10bfa73e2952bbe3c82ed22"}},{"ruleId":"D2","level":"warning","message":{"text":"Pass4.bindElseIfOrElseExpression (cognitive 17): Pass4.bindElseIfOrElseExpression has cognitive complexity 17 (threshold 15). Drivers by points: match/switch 5 (11 pts), if/else 4 (6 pts) (nesting depth added 8). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass4.fs"},"region":{"startLine":1144}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac2ff98e2840d25ef0ec09132c74f72ee45e23446102d52139953d0bafb6012f"}},{"ruleId":"D2","level":"warning","message":{"text":"Pass2.bindTopLevelBinding (cognitive 17): Pass2.bindTopLevelBinding has cognitive complexity 17 (threshold 15). Drivers by points: match/switch 5 (12 pts), if/else 2 (5 pts) (nesting depth added 10). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass2.fs"},"region":{"startLine":1102}}}],"partialFingerprints":{"codehealthFindingId/v1":"19f954f5d28fde983c0fdfba81e9e6de982147d75fbbdb1b2ae291eecb09a31a"}},{"ruleId":"D2","level":"warning","message":{"text":"NameResolution.bindIdentifierWithReceiverNamespaceAsFormalItem (cognitive 17): NameResolution.bindIdentifierWithReceiverNamespaceAsFormalItem has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9 (14 pts), match/switch 1 (2 pts), boolean chains 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/NameResolution.fs"},"region":{"startLine":386}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4780687039eca1420d24210823a9ebf12563e67b910c67a5b14db86455f348a"}},{"ruleId":"D2","level":"warning","message":{"text":"BoundTreeExtensions.BoundTree.ForEachForTooling (cognitive 17): BoundTreeExtensions.BoundTree.ForEachForTooling has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10, match/switch 2 (4 pts), loops 1 (3 pts) (nesting depth added 4). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/BoundTreeExtensions.fs"},"region":{"startLine":539}}}],"partialFingerprints":{"codehealthFindingId/v1":"6111d7a4e41dc04ac48901f85d765236a366cfac5a18e8d6a6c0b3da213fa73d"}},{"ruleId":"D2","level":"warning","message":{"text":"CompilerImports.importEntityFlags (cognitive 17): CompilerImports.importEntityFlags has cognitive complexity 17 (threshold 15). Drivers by points: if/else 17. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/CompilerImports.fs"},"region":{"startLine":886}}}],"partialFingerprints":{"codehealthFindingId/v1":"26f8181e356d9c04ca99ac57c5b6d814dc83ec6e565b08b5fa66cd4bfc27736e"}},{"ruleId":"D2","level":"warning","message":{"text":"SymbolOperations.subsumesTypeWith (cognitive 17): SymbolOperations.subsumesTypeWith has cognitive complexity 17 (threshold 15). Drivers by points: match/switch 3 (8 pts), if/else 4 (7 pts), boolean chains 2 (nesting depth added 8). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/SymbolOperations.fs"},"region":{"startLine":1872}}}],"partialFingerprints":{"codehealthFindingId/v1":"17a5fece82f540cba1746c1faac7ec85713feeef586ab094b8fb9dcc79e578f4"}},{"ruleId":"D2","level":"warning","message":{"text":"Symbols.assertNoForAllTypes (cognitive 17): Symbols.assertNoForAllTypes has cognitive complexity 17 (threshold 15). Drivers by points: if/else 5 (9 pts), match/switch 3 (5 pts), boolean chains 3 (nesting depth added 6). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/Symbols.fs"},"region":{"startLine":6415}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c06b9adbae6d2cb2051206092101977f18922e97ffde6cec13bacd0d2e8201d"}},{"ruleId":"D2","level":"warning","message":{"text":"OlyToken.TryPreviousToken (cognitive 17): OlyToken.TryPreviousToken has cognitive complexity 17 (threshold 15). Drivers by points: match/switch 4 (10 pts), if/else 2 (5 pts), boolean chains 2 (nesting depth added 9). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler.Syntax/SyntaxTreeImplementation.fs"},"region":{"startLine":347}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6ff50174c312d0fbc3e055237af9bb20faf4e5ffcaa6b0f0e851d588157a9c6"}},{"ruleId":"D2","level":"warning","message":{"text":"LexerModule.scanNumericLiteralAux (cognitive 17): LexerModule.scanNumericLiteralAux has cognitive complexity 17 (threshold 15). Drivers by points: match/switch 6 (11 pts), boolean chains 6 (nesting depth added 5). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler.Syntax/Internal/Lexer.fs"},"region":{"startLine":227}}}],"partialFingerprints":{"codehealthFindingId/v1":"8008f3fbc1f52bfe7050cf0b807cf1597daf3d6f23fb0256ec638a596d3fbd4f"}},{"ruleId":"D2","level":"warning","message":{"text":"LocalNormalization.handleLinearExpression (cognitive 17): LocalNormalization.handleLinearExpression has cognitive complexity 17 (threshold 15). Drivers by points: match/switch 5 (9 pts), if/else 4 (6 pts), boolean chains 2 (nesting depth added 6). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Oly.Runtime/LocalNormalization.fs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"b465651dfa0ebcd0cb1670cd9bb8b7b9b7501d189084df62f54628a9bfdb760b"}},{"ruleId":"D2","level":"warning","message":{"text":"DotNet.getBuildInfo (cognitive 17): DotNet.getBuildInfo has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7 (13 pts), boolean chains 2, error handling 1 (2 pts) (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Targets/DotNet/Oly.Compiler.CIL.Importer/DotNetTarget.fs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d07dd802b2f6f8698ee0025c7eb849f2fdbdf26cef1c489f48f19c04c559f27"}},{"ruleId":"D2","level":"warning","message":{"text":"Helpers.decodeTypedArg (cognitive 17): Helpers.decodeTypedArg has cognitive complexity 17 (threshold 15). Drivers by points: if/else 8 (13 pts), match/switch 2 (4 pts) (nesting depth added 7). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Targets/DotNet/Oly.Compiler.CIL.Importer/Importer.fs"},"region":{"startLine":1334}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4d3bbdcad5c09b61644b2b95576350f7a979d0d5b7eeb45c0efbf3ce7c88a16"}},{"ruleId":"D2","level":"warning","message":{"text":"ClrCodeGen.isByRefLike (cognitive 17): ClrCodeGen.isByRefLike has cognitive complexity 17 (threshold 15). Drivers by points: match/switch 4 (12 pts), if/else 4 (5 pts) (nesting depth added 9). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/DotNet/Oly.Emitters.DotNet/Emitter.fs"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bf9b595c2af6a68df143e82c98ab270e9ce8ffe573d51bcafe39feb57a93384"}},{"ruleId":"D2","level":"warning","message":{"text":"MetadataHelpers.encodeReturnType (cognitive 17): MetadataHelpers.encodeReturnType has cognitive complexity 17 (threshold 15). Drivers by points: match/switch 4 (12 pts), if/else 4 (5 pts) (nesting depth added 9). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/DotNet/DotNet.Metadata/MetadataBuilder.fs"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9fde1358f530d92d4ecc338b23872fa8ef733576b51b195e188d5919c73947c"}},{"ruleId":"D2","level":"warning","message":{"text":"SpirvModuleBuilder.CreateVariable (cognitive 17): SpirvModuleBuilder.CreateVariable has cognitive complexity 17 (threshold 15). Drivers by points: match/switch 3 (12 pts), if/else 3, loops 1 (2 pts) (nesting depth added 10). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/Spirv/Oly.Emitters.Spirv/SpirvModuleBuilder.fs"},"region":{"startLine":1155}}}],"partialFingerprints":{"codehealthFindingId/v1":"9bf2f41341402b8187daaf0940dc33872019eefac38e3e24eb2a2326fd3ec3e4"}},{"ruleId":"D2","level":"warning","message":{"text":"OlySyntaxTreeView.findOlySyntaxNodeTokenViewModelByPosition (cognitive 17): OlySyntaxTreeView.findOlySyntaxNodeTokenViewModelByPosition has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7 (13 pts), boolean chains 2, loops 1 (2 pts) (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"vscode/src/OlySyntaxTreeView.ts"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"2176849921e6695830280bbdd3e1340a2ab0ae0f538eb9adbbd355bfc5771bc8"}},{"ruleId":"D2","level":"warning","message":{"text":"OlyBoundModel.TryGetWhitespaceSubModel (cognitive 16): OlyBoundModel.TryGetWhitespaceSubModel has cognitive complexity 16 (threshold 15). Drivers by points: match/switch 3 (9 pts), if/else 3 (7 pts) (nesting depth added 10). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/PublicAPI/PublicSymbols.fs"},"region":{"startLine":2610}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a6642eed3f540a9311812e0902db6404aab8804f99d7d6d2eb3c3e776691a0e"}},{"ruleId":"D2","level":"warning","message":{"text":"PostInferenceAnalysis.analyzeTraitConstraintTypeInVirtualImplementation (cognitive 16): PostInferenceAnalysis.analyzeTraitConstraintTypeInVirtualImplementation has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (9 pts), match/switch 2 (7 pts) (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/PostInferenceAnalysis.fs"},"region":{"startLine":861}}}],"partialFingerprints":{"codehealthFindingId/v1":"27c1497893a475713e7f802351e1b79acb8862c1a7822f86800a91f7874d0c3f"}},{"ruleId":"D2","level":"warning","message":{"text":"Pass2.bindTypeDeclarationCases (cognitive 16): Pass2.bindTypeDeclarationCases has cognitive complexity 16 (threshold 15). Drivers by points: match/switch 3 (8 pts), if/else 4 (7 pts), boolean chains 1 (nesting depth added 8). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass2.fs"},"region":{"startLine":1312}}}],"partialFingerprints":{"codehealthFindingId/v1":"8df9e73f7dc7307a2487243f55ce16630dae797db82fb9712957f9d6773be9ff"}},{"ruleId":"D2","level":"warning","message":{"text":"ImplicitRules.ImplicitArgumentsForFunction (cognitive 16): ImplicitRules.ImplicitArgumentsForFunction has cognitive complexity 16 (threshold 15). Drivers by points: if/else 6 (8 pts), match/switch 2 (6 pts), boolean chains 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/ImplicitRules.fs"},"region":{"startLine":321}}}],"partialFingerprints":{"codehealthFindingId/v1":"02de7f55d4bdc92a0e392e472570315db5c9e93546ddb33c2c3e9fbe2ac1f06c"}},{"ruleId":"D2","level":"warning","message":{"text":"SymbolOperations.TypeSymbol.Hierarchy (cognitive 16): SymbolOperations.TypeSymbol.Hierarchy has cognitive complexity 16 (threshold 15). Drivers by points: match/switch 3 (7 pts), if/else 1 (5 pts), loops 1 (3 pts), boolean chains 1 (nesting depth added 10). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/SymbolOperations.fs"},"region":{"startLine":3022}}}],"partialFingerprints":{"codehealthFindingId/v1":"83e6a4b18007e14cd3785d9c7c511531a396ac79e84dc9d0727b3d3e20940389"}},{"ruleId":"D2","level":"warning","message":{"text":"Symbols.actualType (cognitive 16): Symbols.actualType has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7 (12 pts), match/switch 2 (3 pts), boolean chains 1 (nesting depth added 6). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/Symbols.fs"},"region":{"startLine":534}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd5bacdfc1a910e2d6963cbcf9735b44a98c7f17c16d03b5f252483b5c2fcc95"}},{"ruleId":"D2","level":"warning","message":{"text":"VariableSolutionSymbol.SetSolution (cognitive 16): VariableSolutionSymbol.SetSolution has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7 (15 pts), match/switch 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/Symbols.fs"},"region":{"startLine":3393}}}],"partialFingerprints":{"codehealthFindingId/v1":"86c78ea2d2916b90f1460996c4ae131e877b1a012b51d646c5d7af7092cc6beb"}},{"ruleId":"D2","level":"warning","message":{"text":"OlySyntaxTreeExtensions.OlySyntaxTree.TryFindNode (cognitive 16): OlySyntaxTreeExtensions.OlySyntaxTree.TryFindNode has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8 (14 pts), boolean chains 1, match/switch 1 (nesting depth added 6). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler.Syntax/SyntaxTreeImplementation.fs"},"region":{"startLine":1676}}}],"partialFingerprints":{"codehealthFindingId/v1":"588d63130efc38245f3efa5b67929b215313a3f8c4c16dbb5370b8010eec4fbb"}},{"ruleId":"D2","level":"warning","message":{"text":"LexerModule.scanStringLiteral (cognitive 16): LexerModule.scanStringLiteral has cognitive complexity 16 (threshold 15). Drivers by points: if/else 5 (8 pts), match/switch 4 (7 pts), boolean chains 1 (nesting depth added 6). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler.Syntax/Internal/Lexer.fs"},"region":{"startLine":577}}}],"partialFingerprints":{"codehealthFindingId/v1":"40e6186e435017e2253cb5b478493c0c57b9ac3c5ab8c7bee0b4a6893782450a"}},{"ruleId":"D2","level":"warning","message":{"text":"SyntaxSeparatorList\u00601.Oly.Compiler.Syntax.Internal.ISyntaxSeparatorList.TryFindIndexByRelativePosition (cognitive 16): SyntaxSeparatorList\u00601.Oly.Compiler.Syntax.Internal.ISyntaxSeparatorList.TryFindIndexByRelativePosition has cognitive complexity 16 (threshold 15). Drivers by points: if/else 4 (10 pts), match/switch 3 (6 pts) (nesting depth added 9). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler.Syntax/Internal/ISyntaxNode.fs"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba66b0ab9bb205f5c32a4489c4109545e6687b60054cdfdfee43c66617038017"}},{"ruleId":"D2","level":"warning","message":{"text":"Dump.DumpOperation (cognitive 16): Dump.DumpOperation has cognitive complexity 16 (threshold 15). Drivers by points: match/switch 7 (16 pts) (nesting depth added 9). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Oly.Runtime/OlyIR.fs"},"region":{"startLine":1208}}}],"partialFingerprints":{"codehealthFindingId/v1":"5da391ff65c71b8fdfa38bae6737b4020fb90b66f6d1788b92817b55c32908db"}},{"ruleId":"D2","level":"warning","message":{"text":"Oly.CleanProject (cognitive 16): Oly.CleanProject has cognitive complexity 16 (threshold 15). Drivers by points: if/else 6 (12 pts), error handling 1 (3 pts), boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/CLI/olylib/Library.fs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb0fae509556ed8d31a450ec16c79ea87dc7705a270736f62683f0c50ddbdc12"}},{"ruleId":"D2","level":"warning","message":{"text":"SpirvLowering.LowerLinearExpression (cognitive 16): SpirvLowering.LowerLinearExpression has cognitive complexity 16 (threshold 15). Drivers by points: if/else 6 (10 pts), boolean chains 3, match/switch 2 (3 pts) (nesting depth added 5). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/Spirv/Oly.Emitters.Spirv/SpirvLowering.fs"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb48261afe15690f66dc83880475324684a9240acf3512c31326431f7687dc85"}},{"ruleId":"D2","level":"warning","message":{"text":"TextDocumentSyncHandler.OmniSharp.Extensions.LanguageServer.Protocol.Document.IDocumentOnTypeFormattingHandler.Handle (cognitive 16): TextDocumentSyncHandler.OmniSharp.Extensions.LanguageServer.Protocol.Document.IDocumentOnTypeFormattingHandler.Handle has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7 (12 pts), boolean chains 3, match/switch 1 (nesting depth added 5). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LanguageServer/Oly.LanguageServer/LanguageServer.fs"},"region":{"startLine":1259}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c5124a3f1c0c2a73b2c1594b181d2067fed84a4fd59ab1734c61570f188190b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Symbols/Symbols.fs: FileTooLong \u2014 4743 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 70 functions. The bar is 500 significant lines; this is 4243 over it, 9.49\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/Symbols.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f83686f7d718a52aa50a793df657290bab2a4e9880d2753a9a46ef5a8a00d68a"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: DotNet.Metadata/MetadataBuilder.fs: FileTooLong \u2014 2548 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 2048 over it, 5.10\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/DotNet/DotNet.Metadata/MetadataBuilder.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4eb094d2f1524eeb34ef3c875cfe2a92d7085418eaec11b7cf1101b8327d72d9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Oly.Emitters.DotNet/Emitter.fs: FileTooLong \u2014 2478 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 45 functions. The bar is 500 significant lines; this is 1978 over it, 4.96\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/DotNet/Oly.Emitters.DotNet/Emitter.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"213ad399a185dc2cadbe0bc4fb994c59bff57768ba673d64d9ff3da29ef21ac7"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Symbols/SymbolOperations.fs: FileTooLong \u2014 2422 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 125 functions. The bar is 500 significant lines; this is 1922 over it, 4.84\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/SymbolOperations.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2723a55bdd7fc3d7a6f3220b476c4ec25585ab493d84f2c7f419eca8345a5b87"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Binder/NameResolution.fs: FileTooLong \u2014 2347 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 59 functions. The bar is 500 significant lines; this is 1847 over it, 4.69\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/NameResolution.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5fde9bc51cfacfc3390796693576606c2ba9bb096c0e5aadee1c0bee58aedf6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: PublicAPI/PublicSymbols.fs: FileTooLong \u2014 2205 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 1705 over it, 4.41\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/PublicAPI/PublicSymbols.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"15bda852a4db1e12a9c5107dd497a12944bd8c9ad0cc59d43b7c2defdca4d427"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Oly.Compiler/ILGen.fs: FileTooLong \u2014 1983 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 65 functions. The bar is 500 significant lines; this is 1483 over it, 3.97\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/ILGen.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a4fff85cf8de0a142bf25949a297121ca9d158e584bf625683d4a24580130dd"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Oly.Compiler/CompilerImports.fs: FileTooLong \u2014 1948 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 34 functions. The bar is 500 significant lines; this is 1448 over it, 3.90\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/CompilerImports.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"652ea4aa16aedd4efbb062fb20350abb7281f52e463caef4df4ec4b61f0d916c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Oly.LanguageServer/LanguageServer.fs: FileTooLong \u2014 1906 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 31 functions. The bar is 500 significant lines; this is 1406 over it, 3.81\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LanguageServer/Oly.LanguageServer/LanguageServer.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"038be20358ed92a333a815c8b784c94c4cbb0a4ab4422482c215c48d0a68d7fc"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Oly.Compiler.CIL.Importer/Importer.fs: FileTooLong \u2014 1785 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 1285 over it, 3.57\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Targets/DotNet/Oly.Compiler.CIL.Importer/Importer.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1d408e90e338e6f4ad9287d0db554ebd1222b0304bb749385991ea45f952c69"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Oly.Emitters.Interpreter/Emitter.fs: FileTooLong \u2014 1761 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 1261 over it, 3.52\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/Interpreter/Oly.Emitters.Interpreter/Emitter.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1f9ee89b456f96f184e41eaa8191febf9ebd32b94a63dc0974f1160fdb34a1b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Binder/Pass4.fs: FileTooLong \u2014 1749 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 46 functions. The bar is 500 significant lines; this is 1249 over it, 3.50\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass4.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0540a47b16ea64ee97026b39d6cc9f30f15ed546cf8c472abf3651b5451bb7e5"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Oly.Runtime/InternalCodeGenTypes.fs: FileTooLong \u2014 1705 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 1205 over it, 3.41\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Oly.Runtime/InternalCodeGenTypes.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a9a834be30203a61aad02c65e0aebc3090081de993ee7aff776d8ac5ed87629"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Oly.Compiler.Syntax/SyntaxTreeImplementation.fs: FileTooLong \u2014 1588 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 39 functions. The bar is 500 significant lines; this is 1088 over it, 3.18\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler.Syntax/SyntaxTreeImplementation.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"21d585a8c97242168e47f0efa72b3a7fb690410b7f3a5676f55f88851b688a68"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: extension.activate: FunctionTooLong \u2014 activate runs 305 significant lines (blank, comment-only and punctuation-only lines excluded) in one body. The bar is 100 significant lines; this is 205 over it, 3.05\u00D7 the bar. This is length, not branching: a long straight-line body scores low on complexity and is still read whole to change any part of it, so the complexity numbers beside this row neither confirm nor excuse it. To reduce it, extract each cohesive step of the body \u2014 the runs of statements that work on the same values and would earn the same name \u2014 into its own named unit, and have this one call them in order."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"vscode/src/extension.ts"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7493310e5f03870e98d2d52aa7b1e081b4f5253f47f9f484dec34dfd1a53241"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Binder/Pass2.fs: FileTooLong \u2014 1201 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 701 over it, 2.40\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass2.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"89eb3d5ba75aceeb1746d906259c067f2e33222a157b40f72402c88b71902b26"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Oly.Metadata/OlyIL.fs: FileTooLong \u2014 1193 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 693 over it, 2.39\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Metadata/Oly.Metadata/OlyIL.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"eef4108b817559f7a0a66889b287483173da039a0d99ae4ff7610885c4031428"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Oly.Runtime/OlyIR.fs: FileTooLong \u2014 1127 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 627 over it, 2.25\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Oly.Runtime/OlyIR.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8573c7970d5d502fe37af16e8985e4a6b0112c5740089fa363699dc14223760"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Oly.Emitters.Spirv/SpirvModuleBuilder.fs: FileTooLong \u2014 1099 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 599 over it, 2.20\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/Spirv/Oly.Emitters.Spirv/SpirvModuleBuilder.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c199af48de15a3da5856f17c77c2ef6784d8b710ba5c56c465673c88a1fd19bd"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Oly.Compiler/BoundTree.fs: FileTooLong \u2014 1088 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 588 over it, 2.18\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/BoundTree.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0dcc68a0e5d278de35f8afd64bf34a0bc0a3d30027562f7a2f4732a81e998c4e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Internal/Lexer.fs: FileTooLong \u2014 1065 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 42 functions. The bar is 500 significant lines; this is 565 over it, 2.13\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler.Syntax/Internal/Lexer.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b4c77c90d7a8d47e73872d85c3a0096f6a4deafa6a075e242b064d7f817e932"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Oly.Compiler.Workspace/OlyWorkspaceExtensions.fs: FileTooLong \u2014 1062 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 562 over it, 2.12\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler.Workspace/OlyWorkspaceExtensions.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"73226d737783ae171f032f8effeeb7c5c7237306615da0dcc00029fa87a818ae"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Binder/PostInferenceAnalysis.fs: FileTooLong \u2014 1056 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 49 functions. The bar is 500 significant lines; this is 556 over it, 2.11\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/PostInferenceAnalysis.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b9aef61e179bab3e26db77ab273bc2de6558039df16e5790c88ddf444acfa0f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TextDocumentSyncHandler: TooManyMethods \u2014 63 methods. The bar is 30 methods; this is 33 over it, 2.10\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/LanguageServer/Oly.LanguageServer/LanguageServer.fs"},"region":{"startLine":980}}}],"partialFingerprints":{"codehealthFindingId/v1":"a23b46e52a8e903f52f6289df11f9e07e84cd7b523efac797e9bd0221e62e8bf"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Oly.Compiler/Checker.fs: FileTooLong \u2014 914 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 414 over it, 1.83\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Checker.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2aaa394a122328f45362a6aa607d3964a8d0b8878200ee77c0e4948239f1781d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Oly.Compiler/BoundTreeExtensions.fs: FileTooLong \u2014 775 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 32 functions. The bar is 500 significant lines; this is 275 over it, 1.55\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/BoundTreeExtensions.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d564ae0e4a4dd95ba98df68c154493a06edbfb21c5dc2ef6a6a34ae07f2e9c44"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ClrAssemblyBuilder: TooManyMethods \u2014 46 methods. The bar is 30 methods; this is 16 over it, 1.53\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/DotNet/DotNet.Metadata/MetadataBuilder.fs"},"region":{"startLine":447}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe36523e36bac81a71645ab100d74f7fc7fc8a3314b3f58fae94feb52e531128"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: OlyRuntimeClrEmitter: TooManyMethods \u2014 45 methods. The bar is 30 methods; this is 15 over it, 1.50\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/DotNet/Oly.Emitters.DotNet/Emitter.fs"},"region":{"startLine":1795}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca8d08158415a3b6f4e09f0b7b4bb325168b2b17bee02547a7c54c99ad891786"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: InterpreterRuntimeEmitter: TooManyMethods \u2014 44 methods. The bar is 30 methods; this is 14 over it, 1.47\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/Interpreter/Oly.Emitters.Interpreter/Emitter.fs"},"region":{"startLine":1815}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ccfda3f17bbc9ed65b9d4d1ab07e00a182ebf8bdf1930fe6580341b7b21f0c0"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SpirvEmitter: TooManyMethods \u2014 44 methods. The bar is 30 methods; this is 14 over it, 1.47\u00D7 the bar. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/Spirv/Oly.Emitters.Spirv/SpirvEmitter.fs"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"b868162afba8d1b168c1cdda90a7321d5a44295671e010ca2d2ba5bf10d3acab"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: Program: TooManyFunctions \u2014 42 functions. The bar is 30 functions; this is 12 over it, 1.40\u00D7 the bar. The counted members are a module\u0027s functions \u2014 a module holds no instance state, so there is no shared data to group them by and no type to move them onto. To reduce it, extract each cohesive family of functions into a new module of its own and have this one delegate to it, so no single module carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Emitters/Spirv/Spirv.ApiGenerator/Program.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"98eb0b9c0f0e63f9aba30faa0d72ac6ec70a2bc632904f24a401c4f18d436416"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Oly.Compiler.Syntax/SyntaxTree.fs: FileTooLong \u2014 699 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 199 over it, 1.40\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler.Syntax/SyntaxTree.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb9b6d0806236b35c66931b566e6e16c21ad5596ff074eca2b6e160fc63ccf53"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Oly.Compiler.CIL.Importer/DotNetTarget.fs: FileTooLong \u2014 692 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 192 over it, 1.38\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Targets/DotNet/Oly.Compiler.CIL.Importer/DotNetTarget.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"367a70036568f576ff6fde7694d3d9c70dcf1e36004b1bb76857e73fe17959c1"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Symbols/SymbolQuery.fs: FileTooLong \u2014 690 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 32 functions. The bar is 500 significant lines; this is 190 over it, 1.38\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/SymbolQuery.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8257cfa840bd577a9b1e5ceb1429f502ca394f421303d8925efc1baa51a8b679"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: PublicAPI/PublicCompilation.fs: FileTooLong \u2014 641 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 141 over it, 1.28\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/PublicAPI/PublicCompilation.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d54b18df06658eecbc66377e42ed8400fe005fbcd8bc46baa46041109473532e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Oly.Compiler/Substitution.fs: FileTooLong \u2014 636 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 136 over it, 1.27\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Substitution.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"764be8c2103579a4fbd9330bf1366beac0611706ba49788e0579159360fb9533"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Binder/Environment.fs: FileTooLong \u2014 635 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 135 over it, 1.27\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Environment.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0954b6b1262ab5e394f2da4d926b567b09b1c168ce06d89b26a8159fe3f006fa"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Internal/Token.fs: FileTooLong \u2014 612 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 112 over it, 1.22\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler.Syntax/Internal/Token.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d94416aa3853f5badf59e8562f4174bd0880e0f2cdc5140b00681857ee2a7274"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Oly.Core/ImArray.fs: FileTooLong \u2014 569 significant lines (blank, comment-only and punctuation-only lines excluded), declaring 67 functions. The bar is 500 significant lines; this is 69 over it, 1.14\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Core/Oly.Core/ImArray.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1122b946f8edabdd407e151b26263e36341a023850414a8df380b2f8fa477ec6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Symbols/WellKnownFunctions.fs: FileTooLong \u2014 548 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 48 over it, 1.10\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/WellKnownFunctions.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a8755885cbcd03723589e4e0cba348ec87c537bf1c9ddb62c874ad047e9c398"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Oly.Compiler/Solver.fs: FileTooLong \u2014 528 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 28 over it, 1.06\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Solver.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"51f12dba14fcc4016320673758b0a0e92408ce19b96b14f71d21453b49ec7736"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Binder/Pass3.fs: FileTooLong \u2014 512 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 12 over it, 1.02\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass3.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8a81ff229c50f6bcf6d3a56bd5563395e2ed8ee2d5daf66821e9c4ad222b8eb"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: Oly.Compiler/PrettyPrint.fs: FileTooLong \u2014 505 significant lines (blank, comment-only and punctuation-only lines excluded). The bar is 500 significant lines; this is 5 over it, 1.01\u00D7 the bar. To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/PrettyPrint.fs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a364dfc4136590de1cd834d522f4e5659e274cbb324d2730e1ae85146281da35"}},{"ruleId":"D12","level":"warning","message":{"text":"Deprecated: xunit: xunit 2.9.3 \u2014 Legacy \u2014 the publisher\u0027s replacement is \u0060xunit.v3\u0060; that is the next major line under a new package id, so the move is a breaking rename rather than a version bump \u2014 budget for API changes in the code that uses it, not only the reference swap."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d37c8c0e8046c9e8358e976373216abfb78e9fdef63ed53d3edcaa7d2238edcd"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Compiler/Oly.Compiler/ILGen.fs: src/Compiler/Oly.Compiler/ILGen.fs changed 15 times in last 90 days, max cyclomatic complexity 102 in ILGen.GenCallExpression at line 1843. 1 of those changes was a fix/bug commit, and the other 14 changed it for other reasons \u2014 this file is under both repair and feature pressure. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-06-29..2026-09-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-29 03:52:53 -07:00\u0027 --until=\u00272026-09-27 03:52:53 -07:00\u0027 --full-history --no-merges -- src/Compiler/Oly.Compiler/ILGen.fs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/ILGen.fs"},"region":{"startLine":1843}}}],"partialFingerprints":{"codehealthFindingId/v1":"25cb5874f321215f9f805c9e80ffcbbfcca4ceffc2d543e59387047a7e9f1c26"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Runtime/Targets/DotNet/Oly.Compiler.CIL.Importer/Importer.fs: src/Runtime/Targets/DotNet/Oly.Compiler.CIL.Importer/Importer.fs changed 17 times in last 90 days, max cyclomatic complexity 81 in Helpers.importTypeDefinitionAsOlyILEntityDefinition at line 1512. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-06-29..2026-09-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-29 03:52:53 -07:00\u0027 --until=\u00272026-09-27 03:52:53 -07:00\u0027 --full-history --no-merges -- src/Runtime/Targets/DotNet/Oly.Compiler.CIL.Importer/Importer.fs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Targets/DotNet/Oly.Compiler.CIL.Importer/Importer.fs"},"region":{"startLine":1512}}}],"partialFingerprints":{"codehealthFindingId/v1":"610295bee425e6352cea8fcc3b052eaa3e487605db44bd8600f4cca6ce50213f"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Compiler/Oly.Compiler/CompilerImports.fs: src/Compiler/Oly.Compiler/CompilerImports.fs changed 15 times in last 90 days, max cyclomatic complexity 48 in CompilerImports.importTypeSymbol at line 950. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-06-29..2026-09-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-29 03:52:53 -07:00\u0027 --until=\u00272026-09-27 03:52:53 -07:00\u0027 --full-history --no-merges -- src/Compiler/Oly.Compiler/CompilerImports.fs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/CompilerImports.fs"},"region":{"startLine":950}}}],"partialFingerprints":{"codehealthFindingId/v1":"77adf52ecd393fe75314c9453062a85dd1da5f89de04ee1a750f121072dca56d"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Compiler/Oly.Compiler/Symbols/SymbolOperations.fs: src/Compiler/Oly.Compiler/Symbols/SymbolOperations.fs changed 5 times in last 90 days, max cyclomatic complexity 104 in SymbolOperations.UnifyTypes at line 404. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-06-29..2026-09-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-29 03:52:53 -07:00\u0027 --until=\u00272026-09-27 03:52:53 -07:00\u0027 --full-history --no-merges -- src/Compiler/Oly.Compiler/Symbols/SymbolOperations.fs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/SymbolOperations.fs"},"region":{"startLine":404}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bcef12dd74518d8d813eb9afa020dd2539596dd1a05b304607955a9477007a4"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Compiler/Oly.Compiler/Symbols/Symbols.fs: src/Compiler/Oly.Compiler/Symbols/Symbols.fs changed 9 times in last 90 days, max cyclomatic complexity 43 in WellKnownFunction.TryFromName at line 2152. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-06-29..2026-09-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-29 03:52:53 -07:00\u0027 --until=\u00272026-09-27 03:52:53 -07:00\u0027 --full-history --no-merges -- src/Compiler/Oly.Compiler/Symbols/Symbols.fs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Symbols/Symbols.fs"},"region":{"startLine":2152}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a91a7f416096adc9b5dd155f542a9729febf7b9800cf5fd5330bbbaf9a23327"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Compiler/Oly.Compiler/Binder/Pass2.fs: src/Compiler/Oly.Compiler/Binder/Pass2.fs changed 4 times in last 90 days, max cyclomatic complexity 96 in Pass2.bindBindingDeclarationCoreAux at line 302. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-06-29..2026-09-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-29 03:52:53 -07:00\u0027 --until=\u00272026-09-27 03:52:53 -07:00\u0027 --full-history --no-merges -- src/Compiler/Oly.Compiler/Binder/Pass2.fs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass2.fs"},"region":{"startLine":302}}}],"partialFingerprints":{"codehealthFindingId/v1":"f157d35e7e67a827967c5bd5a9b6bad366439c67a8ce37edfa1ef70d4fc62b90"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Compiler/Oly.Compiler/Binder/Pass3.fs: src/Compiler/Oly.Compiler/Binder/Pass3.fs changed 4 times in last 90 days, max cyclomatic complexity 92 in Pass3.bindTypeDeclarationBody at line 206. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-06-29..2026-09-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-29 03:52:53 -07:00\u0027 --until=\u00272026-09-27 03:52:53 -07:00\u0027 --full-history --no-merges -- src/Compiler/Oly.Compiler/Binder/Pass3.fs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass3.fs"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"a301c598f41880b53f3315b805135f00500415fd44b5002849ba15c496879346"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Runtime/Oly.Runtime/InternalCodeGenTypes.fs: src/Runtime/Oly.Runtime/InternalCodeGenTypes.fs changed 8 times in last 90 days, max cyclomatic complexity 32 in RuntimeType.System.IEquatable\u003COly.Runtime.CodeGen.InternalTypes.RuntimeType\u003E.Equals at line 1317. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-06-29..2026-09-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-29 03:52:53 -07:00\u0027 --until=\u00272026-09-27 03:52:53 -07:00\u0027 --full-history --no-merges -- src/Runtime/Oly.Runtime/InternalCodeGenTypes.fs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Runtime/Oly.Runtime/InternalCodeGenTypes.fs"},"region":{"startLine":1317}}}],"partialFingerprints":{"codehealthFindingId/v1":"91ca7ab9141bf4edd2c5260497d74c9685b923a22015bad533007d2a1953d5c1"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Compiler/Oly.Compiler/PublicAPI/PublicSymbols.fs: src/Compiler/Oly.Compiler/PublicAPI/PublicSymbols.fs changed 2 times in last 90 days, max cyclomatic complexity 74 in OlyBoundModel.GetImmediateSymbols at line 2288. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-06-29..2026-09-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-29 03:52:53 -07:00\u0027 --until=\u00272026-09-27 03:52:53 -07:00\u0027 --full-history --no-merges -- src/Compiler/Oly.Compiler/PublicAPI/PublicSymbols.fs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/PublicAPI/PublicSymbols.fs"},"region":{"startLine":2288}}}],"partialFingerprints":{"codehealthFindingId/v1":"786679b465250534310a19f1dcd339ed1bc06e0e90aec074742c79931a635f2c"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Compiler/Oly.Compiler/Binder/Pass0.fs: src/Compiler/Oly.Compiler/Binder/Pass0.fs changed 5 times in last 90 days, max cyclomatic complexity 29 in Pass0.bindTypeDeclaration at line 78. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-06-29..2026-09-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-29 03:52:53 -07:00\u0027 --until=\u00272026-09-27 03:52:53 -07:00\u0027 --full-history --no-merges -- src/Compiler/Oly.Compiler/Binder/Pass0.fs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Binder/Pass0.fs"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"31813e0f88de547bb57b9e8eb732790481d64a97b13131039e2c34d1532b4add"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: vscode/src/extension.ts: vscode/src/extension.ts changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 69 in extension.activate at line 57. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-06-29..2026-09-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-29 03:52:53 -07:00\u0027 --until=\u00272026-09-27 03:52:53 -07:00\u0027 --full-history --no-merges -- vscode/src/extension.ts\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"vscode/src/extension.ts"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5b091f61d38cc655ba8dfcbb76c865884485481a129b77082d0dab86e84e30d"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: src/Compiler/Oly.Compiler/Checker.fs: src/Compiler/Oly.Compiler/Checker.fs changed 2 times in last 90 days, max cyclomatic complexity 37 in Checker.checkReceiverOfExpression at line 863. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-06-29..2026-09-27, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-29 03:52:53 -07:00\u0027 --until=\u00272026-09-27 03:52:53 -07:00\u0027 --full-history --no-merges -- src/Compiler/Oly.Compiler/Checker.fs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Compiler/Oly.Compiler/Checker.fs"},"region":{"startLine":863}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a0acc2fd57601e785978901414ca2a8ecdea7519dcfd0766afd30e53a72ffee"}},{"ruleId":"D20","level":"note","message":{"text":"No ADRs found: No ADRs found. No recognised ADR directory (\u0060docs/adr/\u0060, \u0060docs/decisions/\u0060, \u0060adr/\u0060, \u0060docs/rfcs/\u0060, an \u0060ADR0001/\u0060 folder, or their siblings) exists anywhere in this tree. What was searched, so you can tell an empty log from a search that missed one: every directory under the tree (build output, dependencies and VCS metadata excepted), for a document that is either any non-index page inside a recognised ADR directory, whatever its name and however deeply nested (\u0060docs/adr/use-postgres.md\u0060, \u0060docs/adr/2024/0001-x.md\u0060); or a file anywhere whose name is ADR-shaped (\u00600001-use-postgres.md\u0060, \u0060adr-012-caching.md\u0060); or, when neither turned anything up, a document carrying the decision-record signature (an \u0022Architecture Decision Record\u0022 heading, or Status / Context / Decision / Consequences as section headings). A decision log that clears none of these \u2014 unnumbered files outside any recognised directory, without those headings \u2014 is not seen by this check and this row is then wrong. If that is your case, say so rather than renaming anything; otherwise, consider recording architectural decisions in \u0060docs/adr/\u0060."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d2bea044ff79d7d275f5a91a6e2f548586178eaf480274c33960ad020c854631"}},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6afba6f6b1280763301c87b4a8f7bb8707e12f9b0570665d03cfa52ec49ce4c8"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"bdc00ea49c06462ea381360740063b7c0846ba0688d891cdcb736536f9d04e85"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"71aa5ebdd916aee053a96ee4058a3a64436af024cb0f909170d2b66e887ed41b"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"f1f468369d291add8adba200a2f684fe6a61f8e64a713bd913dba162143759c5"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d40ca5f6448da5ab58da77f158ca164f9f772997ce1c9e783cfd31deca6343f9"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"bf2bac68a3114ca74c6522471f3159eda4fd08414f80ed7c83e046e67ddb45c0"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"50a035a50aa41f5c2726e91947e9bd8f0814382aee72c2308bd9e401037a531a"},"properties":{"dependency":{"package":"System.Security.Cryptography.Xml","version":"9.0.0","advisory":"[GHSA redacted]","aliases":["[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"production","file":"src/Benchmarks/Oly.Benchmarks/Oly.Benchmarks.fsproj"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5ea8a832c7c62c11462376ac7c6efa57fbd0af1c078c18979e37d26ad0d38cbd"},"properties":{"dependency":{"package":"js-yaml","version":"4.3.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"16addd0d4a789bf2d67ddbe2f627dbf32214f4df6ca078d73a6cef803b7ce795"},"properties":{"dependency":{"package":"brace-expansion","version":"2.1.2","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"83e63832d29513873edadaff38baff972e3cdd716f8064551a0f8221d5676487"},"properties":{"dependency":{"package":"brace-expansion","version":"5.0.7","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"87f9f6365535a515673b477f974447004b3423b8583882d7f864b0accb52465e"},"properties":{"dependency":{"package":"serialize-javascript","version":"6.0.2","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a23c1027d26be786e8c2eb0f1b6c56154544130c2f49d7ec3a03eb1e067a7d77"},"properties":{"dependency":{"package":"brace-expansion","version":"1.1.13","advisory":"[GHSA redacted]","aliases":["[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[CVE redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]","[GHSA redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D30","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e62d7f697b00a6e4362f94619e92ff15f16dc15919c5a0eded13c9bf0987b6b8"},"properties":{"dependency":{"package":"diff","version":"7.0.0","advisory":"[GHSA redacted]","aliases":["[CVE redacted]"],"reachability":{"kind":"not-imported"}}}},{"ruleId":"D36","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"9658270ba49f37ed04e99ab1263b6393cd42aed8bdfb7aafd9fa1070f5491895"}},{"ruleId":"D36","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ace515990e7ee0f17b5c17e44dd168a5bdecf90804a3a3dd845cf05540978013"}},{"ruleId":"AX8","level":"error","message":{"text":"Production project references a test project: Oly.Targets.Spirv.Tests \u2192 Oly.Compiler.Tests: \u0060Oly.Targets.Spirv.Tests\u0060 (production) references the test project \u0060Oly.Compiler.Tests\u0060. Production must never depend on test code \u2014 it pulls a unit-test framework and test fixtures into the shipped product and inverts the only correct direction (tests depend on production, never the reverse). Move any shared helper into a production support library, or invert the reference."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"0aa7ae49ec61f83d7522db8b09f4ad885b29e978b904e9ff5a967bc072ddc82b"}},{"ruleId":"AX8","level":"error","message":{"text":"Production project references a test project: Oly.Targets.Spirv.Tests \u2192 Spirv.Tests: \u0060Oly.Targets.Spirv.Tests\u0060 (production) references the test project \u0060Spirv.Tests\u0060. Production must never depend on test code \u2014 it pulls a unit-test framework and test fixtures into the shipped product and inverts the only correct direction (tests depend on production, never the reverse). Move any shared helper into a production support library, or invert the reference."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d7cef8f50476a5886b29cd5a3547cf15de5a08db9a024303ad1d6742cab2aa0c"}},{"ruleId":"M2","level":"note","message":{"text":"No ADRs: No Architecture Decision Records found \u2014 no conventional ADR directory, no numbered \u0060NNNN-title\u0060 documents in any markup this check reads, and nothing ADR-shaped by content. Design rationale recorded elsewhere (a design-notes tree, a mailing list, pull-request discussion) is not visible to this check and is not re-findable per decision, so a future maintainer cannot ask why one choice was made and get an answer."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"670b3d6e36a756d63097d0dfbf90afd5fc761308800b9354894a07c3f4e4aa14"}},{"ruleId":"M2","level":"note","message":{"text":"No architecture diagram/doc: No C4/Structurizr/PlantUML/Mermaid/Graphviz/D2 diagram, no drawn diagram named for the architecture, no file named \u0060architecture\u0060 or \u0060design\u0060 in any markup this check reads, and nothing in the README, docs or contributor guides that announces the shape \u2014 no \u0060## Architecture\u0060 heading, no \u0022architecture overview\u0022/\u0022high-level design\u0022 phrasing, no \u0022the architecture is \u2026\u0022 introduction, no guided code tour. A shape laid out in prose that never names itself as the architecture is not visible to this check, and neither is one kept outside the repository, so this row reports the absence of a re-findable shape document \u2014 not evidence that nobody wrote the shape down."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"0c190e7c159d1850ee706c3ac4486e151e8a4fe169de4bf61436b9f399654f06"}},{"ruleId":"M4","level":"note","message":{"text":"README/code drift: README claims VSCode extension is built and run via F5 but the evidence shows no vscode directory or .vscode/* \u2014 searched for: \u0060vscode directory\u0060, \u0060VSCode extension\u0060. Each was matched case- and separator-insensitively against file and directory NAMES anywhere in the tree, and against the CONTENTS of manifest files (package.json, *.csproj, *.props, *.slnx, *.yml, Dockerfile); the README\u0027s own prose never counts, so a claim is never refuted by merely being made. Nothing outside that search was read \u2014 a footprint living only in a submodule, in a file type not listed here, or under a name none of those terms matches is not seen, and this row is then wrong."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"343bbbd51ceb8de7a9ff88d79f7c797abf9b5921f8727b67b4d0f4f8a22c5e49"}},{"ruleId":"P3","level":"note","message":{"text":"No SAST: No static application security testing detected. For this repository\u0027s stack, add \u0060semgrep --config=auto\u0060 plus gitleaks for committed secrets (F# is not a CodeQL language and has no language-specific SAST engine) as a CI step. What was searched, so you can tell an absence from a miss: the 2084 CI workflow file(s) in this repository, and the scanner and linter configuration checked in beside them. A scan that runs outside CI, one configured in your forge\u0027s web UI rather than in a committed file, or a tool whose name is none of those this check carries, is not seen \u2014 if that is your case the row is wrong, and saying so is more useful than adding a second scanner."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"6e54424179c892f03ef2fd003130ac4bd43f39bbf3b1ca0a0143e25acb80ec87"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2 locations): vscode/src/OlySolutionExplorerView.ts:86 \u00B7 vscode/src/OlySyntaxTreeView.ts:55 \u2014 the 2 copies sit in sibling files in one directory, so check first whether one of them (or an existing module there) already owns this behaviour and the others should call it; otherwise extract it into one module in that directory and have each site call it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"vscode/src/OlySolutionExplorerView.ts"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"be440f506ae60df02a5d0a1e95b565c7708bf2da15be77c66fa90ffb707be6ec"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2 locations): vscode/src/OlySolutionExplorerView.ts:109 \u00B7 vscode/src/OlySyntaxTreeView.ts:121 \u2014 the 2 copies are spread across 2 files, and the CITED SPAN is not a self-contained block \u2014 it runs from inside one construct into the next (the tail of a branch plus the head of the following one, a run of switch arms, the end of a declaration plus the list that follows it) rather than covering a whole unit. So do not lift these lines literally: no call can be substituted for a half-open construct. Extract the enclosing repeated UNIT instead \u2014 the whole function, component or branch these lines sit in \u2014 and where the repetition IS the construct (a run of switch arms, a stack of near-identical declarations) replace it with one table or registry looked up by key rather than a helper each arm calls. The copies still drift apart the first time only one of them is edited, which is why this is reported."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"vscode/src/OlySolutionExplorerView.ts"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"306e21e4bc7056181d29e2b1818da13096f43b358364f0cb0162f9a7d519a48c"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2 locations): vscode/src/OlySolutionExplorerView.ts:131 \u00B7 vscode/src/OlySyntaxTreeView.ts:143 \u2014 the 2 copies are spread across 2 files, and the CITED SPAN is not a self-contained block \u2014 it runs from inside one construct into the next (the tail of a branch plus the head of the following one, a run of switch arms, the end of a declaration plus the list that follows it) rather than covering a whole unit. So do not lift these lines literally: no call can be substituted for a half-open construct. Extract the enclosing repeated UNIT instead \u2014 the whole function, component or branch these lines sit in \u2014 and where the repetition IS the construct (a run of switch arms, a stack of near-identical declarations) replace it with one table or registry looked up by key rather than a helper each arm calls. The copies still drift apart the first time only one of them is edited, which is why this is reported."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"vscode/src/OlySolutionExplorerView.ts"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa2e9ba79b8c465e13125d7b99d57ead039cee890f07f20885efd03c8192ec33"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block with local edits (9 matched lines \u00D7 2 locations): vscode/src/OlySolutionExplorerView.ts:198 \u00B7 vscode/src/OlySolutionExplorerView.ts:213 \u2014 the two spans are one implementation copied and then locally edited \u2014 74 tokens are still identical, in the same order in both spans, with only local edits between them. The copies have already begun to drift, which is this row\u0027s finding: an edit made to one and not the other changes behaviour silently. Diff the two spans first to learn what genuinely differs, then extract the shared core into one module both sites use, passing the differences in as parameters \u2014 or, if one copy exists only because the other could not be imported from its context, make one of them the single source the other is generated or re-exported from. If one copy is no longer reachable, delete it rather than letting it shadow the live one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"vscode/src/OlySolutionExplorerView.ts"},"region":{"startLine":198}}}],"partialFingerprints":{"codehealthFindingId/v1":"271ba31e9c28a8b0c9943d3a2b4d3221ef4eed015f4b99e18ae4a85445a47d8d"}},{"ruleId":"R10","level":"warning","message":{"text":"Duplicated block with local edits (8 matched lines \u00D7 2 locations): vscode/src/OlySyntaxTreeView.ts:160 \u00B7 vscode/src/OlySyntaxTreeView.ts:197 \u2014 the two spans are one implementation copied and then locally edited \u2014 63 tokens are still identical, in the same order in both spans, with only local edits between them. The copies have already begun to drift, which is this row\u0027s finding: an edit made to one and not the other changes behaviour silently. Diff the two spans first to learn what genuinely differs, then extract the shared core into one module both sites use, passing the differences in as parameters \u2014 or, if one copy exists only because the other could not be imported from its context, make one of them the single source the other is generated or re-exported from. If one copy is no longer reachable, delete it rather than letting it shadow the live one."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"vscode/src/OlySyntaxTreeView.ts"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"85409dd24e3b6e7f324f27be5408931825f1f6330300dc62c832762dc9a5b015"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function refreshProjectStatusBarItemTooltip (cyclomatic 15, cognitive 19): refreshProjectStatusBarItemTooltip has cyclomatic complexity 15 and cognitive complexity 19; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"vscode/src/extension.ts"},"region":{"startLine":275}}}],"partialFingerprints":{"codehealthFindingId/v1":"52caf02c98b8d8b5aa04d4589c055592a3fb479f0c54f84e44a573cc2766fa61"}},{"ruleId":"R2","level":"warning","message":{"text":"Complex function findOlySyntaxNodeTokenViewModelByPosition (cyclomatic 13, cognitive 17): findOlySyntaxNodeTokenViewModelByPosition has cyclomatic complexity 13 and cognitive complexity 17; this row is raised above a cyclomatic bar of 10. The two numbers answer different questions and the gap between them is what decides whether to act: cyclomatic counts the independent arms through the body, cognitive counts what it costs to hold them in your head, so nesting and mixed boolean chains raise it while a flat run of independent arms does not. Cognitive is at or above cyclomatic here, so the branching is nested or entangled rather than laid out side by side \u2014 extracting each decision into its own named function is the change that pays. Measured by this repository\u0027s own parse of the file, so a body assembled at runtime, or generated, is counted as written rather than as it executes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"vscode/src/OlySyntaxTreeView.ts"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"50061e08117f1fbdc922cd7e2e8884fa1be06a34f84e000be2194c1d97660142"}},{"ruleId":"R3","level":"warning","message":{"text":"Large Files: 1 file(s) over 400 lines (counted as significant lines \u2014 blank lines excluded \u2014 over production source only, tests excluded), largest first: vscode/src/extension.ts (463)."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"cecee31b569df4f07e06db732f1ca037af27b5afef9023da51f9673d931a142f"}},{"ruleId":"R8","level":"error","message":{"text":"Unlisted import \u0027vscode-languageserver-protocol\u0027: Imported but not declared in any reachable package.json \u2014 installs work only by hoisting accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"vscode/src/extension.ts"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ac89f90ed9dcc4e65a9a4538605c06096d149f5342f0c8bd6f3df00f1988962"}},{"ruleId":"R9","level":"error","message":{"text":"Import cycle (2 files): vscode/src/OlySolutionExplorerView.ts \u2192 vscode/src/extension.ts \u2192 vscode/src/OlySolutionExplorerView.ts (one verified cycle inside a mutually-dependent group of 3 files)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"vscode/src/OlySolutionExplorerView.ts"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5bb278ed9f032e845bb370ba255079902f3fa28ce7b294f757538003894a6d9"}},{"ruleId":"SC1","level":"warning","message":{"text":"NuGet dependencies are not locked: No packages.lock.json and no central package management \u2014 restores aren\u0027t reproducible or pinned (SSDF PW.4.4). Enable \u003CRestorePackagesWithLockFile\u003Etrue\u003C/RestorePackagesWithLockFile\u003E (commit the lockfile) or adopt Directory.Packages.props. Advisory \u2014 never scored."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"0a97b4f69ccac509400ece7eedefb06d3ede0522cd4d8bcb5c068bea719545a6"}},{"ruleId":"X5","level":"note","message":{"text":"Nullable reference types not enabled everywhere: 0/1 NRT-eligible project(s) enable \u003CNullable\u003Eenable\u003C/Nullable\u003E (projects targeting a pre-C#-8 framework are excluded \u2014 NRTs aren\u0027t available there). NRTs catch a whole class of null-deref bugs at compile time."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"80b24de9378624a0ce4846d60457395befcaec8e109ea81d289a370c9f7bfd5d"}}],"taxonomies":[{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d","organization":"MITRE","informationUri":"https://cwe.mitre.org/","isComprehensive":false,"shortDescription":{"text":"The MITRE Common Weakness Enumeration (CWE)."},"taxa":[{"id":"CWE-1357","guid":"e4d2e772-757e-0a5c-bd7d-77052949d866","name":"Reliance on Insufficiently Trustworthy Component","shortDescription":{"text":"Reliance on Insufficiently Trustworthy Component"},"helpUri":"https://cwe.mitre.org/data/definitions/1357.html"},{"id":"CWE-1395","guid":"800e09e7-c11a-8654-9fa6-86f398995fed","name":"Dependency on Vulnerable Third-Party Component","shortDescription":{"text":"Dependency on Vulnerable Third-Party Component"},"helpUri":"https://cwe.mitre.org/data/definitions/1395.html"},{"id":"CWE-259","guid":"ae9ad959-fbb6-9d5e-892d-3dca66da0b69","name":"Use of Hard-coded Password","shortDescription":{"text":"Use of Hard-coded Password"},"helpUri":"https://cwe.mitre.org/data/definitions/259.html"},{"id":"CWE-353","guid":"09d7e902-d4ee-f05d-ae6c-0a1554d0c18f","name":"CWE-353","shortDescription":{"text":"CWE-353"},"helpUri":"https://cwe.mitre.org/data/definitions/353.html"},{"id":"CWE-494","guid":"b8a65e0d-e459-4a55-a931-fc1136482375","name":"Download of Code Without Integrity Check","shortDescription":{"text":"Download of Code Without Integrity Check"},"helpUri":"https://cwe.mitre.org/data/definitions/494.html"},{"id":"CWE-506","guid":"401d6455-56e3-0552-9a39-f77461673e3f","name":"CWE-506","shortDescription":{"text":"CWE-506"},"helpUri":"https://cwe.mitre.org/data/definitions/506.html"},{"id":"CWE-77","guid":"332c8ade-6612-9f56-a06b-d8d90b1a8750","name":"Command Injection","shortDescription":{"text":"Command Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/77.html"},{"id":"CWE-78","guid":"2e31ceaf-c7ae-2e5e-9661-cfb1362789cf","name":"OS Command Injection","shortDescription":{"text":"OS Command Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/78.html"},{"id":"CWE-79","guid":"fd45580b-e8c4-fc5e-8c2f-aa8fab0b4dbf","name":"Cross-site Scripting (XSS)","shortDescription":{"text":"Cross-site Scripting (XSS)"},"helpUri":"https://cwe.mitre.org/data/definitions/79.html"},{"id":"CWE-798","guid":"5e8f057d-fee3-995a-a0cb-9fc5b0d174d1","name":"Use of Hard-coded Credentials","shortDescription":{"text":"Use of Hard-coded Credentials"},"helpUri":"https://cwe.mitre.org/data/definitions/798.html"},{"id":"CWE-89","guid":"6d08fdad-37eb-c150-bbf0-d7d946863407","name":"SQL Injection","shortDescription":{"text":"SQL Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/89.html"},{"id":"CWE-937","guid":"16f316ae-415c-b354-a59b-1f7905f756e9","name":"Using Components with Known Vulnerabilities","shortDescription":{"text":"Using Components with Known Vulnerabilities"},"helpUri":"https://cwe.mitre.org/data/definitions/937.html"},{"id":"CWE-94","guid":"75e7f50c-6c2f-dd52-bf40-bf6c52b861fd","name":"Code Injection","shortDescription":{"text":"Code Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/94.html"}]}],"properties":{"codehealthPublication":{"public":true,"notice":"This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings \u2014 which rule fired, in which file, on which line, and how to fix it \u2014 are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.","securityFindingsRedacted":15,"secretScannerRunsExcluded":0}},"redactionTokens":["A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."]}]}