{"$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":"D4","name":"Code Duplication","shortDescription":{"text":"Code Duplication"},"helpUri":"https://codehealth.canine.dev/dimensions/D4"},{"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":"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":"D15","name":"Churn \u00D7 Complexity Hotspots","shortDescription":{"text":"Churn \u00D7 Complexity Hotspots"},"helpUri":"https://codehealth.canine.dev/dimensions/D15"},{"id":"D16","name":"Bus Factor","shortDescription":{"text":"Bus Factor"},"helpUri":"https://codehealth.canine.dev/dimensions/D16"},{"id":"D17","name":"Explicit Debt","shortDescription":{"text":"Explicit Debt"},"helpUri":"https://codehealth.canine.dev/dimensions/D17"},{"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":"D26","name":"Project Cohesion","shortDescription":{"text":"Project Cohesion"},"helpUri":"https://codehealth.canine.dev/dimensions/D26"},{"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":"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":"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":"AX8","name":"Test isolation","shortDescription":{"text":"Test isolation"},"helpUri":"https://codehealth.canine.dev/dimensions/AX8"},{"id":"AX9","name":"CQS / query purity","shortDescription":{"text":"CQS / query purity"},"helpUri":"https://codehealth.canine.dev/dimensions/AX9"},{"id":"ES1","name":"Fold determinism","shortDescription":{"text":"Fold determinism"},"helpUri":"https://codehealth.canine.dev/dimensions/ES1"},{"id":"ES2","name":"Immutable events","shortDescription":{"text":"Immutable events"},"helpUri":"https://codehealth.canine.dev/dimensions/ES2"},{"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":"P12","name":"CI test-gate honesty","shortDescription":{"text":"CI test-gate honesty"},"helpUri":"https://codehealth.canine.dev/dimensions/P12"},{"id":"P2","name":"Observability","shortDescription":{"text":"Observability"},"helpUri":"https://codehealth.canine.dev/dimensions/P2"},{"id":"P3","name":"Security \u0026 performance tooling","shortDescription":{"text":"Security \u0026 performance tooling"},"helpUri":"https://codehealth.canine.dev/dimensions/P3"},{"id":"P6","name":"Release Hygiene","shortDescription":{"text":"Release Hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/P6"},{"id":"PF3","name":"Async \u0026 latency hygiene","shortDescription":{"text":"Async \u0026 latency hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/PF3"},{"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":"Rpc::decode (cyclomatic 161): Rpc::decode has cyclomatic complexity 161 (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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":48859}}}],"partialFingerprints":{"codehealthFindingId/v1":"309ccd1cd7a46418fe74a06d1d304da87935d79c1a8dc0a22d33bfb7240dfea5"}},{"ruleId":"D1","level":"warning","message":{"text":"CtrlMsg::decode (cyclomatic 99): CtrlMsg::decode has cyclomatic complexity 99 (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":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":11170}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7e4a23c43b96d32fdad187dca94bcd00568c1669691629cf27d5e4fbac61954"}},{"ruleId":"D1","level":"warning","message":{"text":"embassy_stm32::rcc::h::init (cyclomatic 83): embassy_stm32::rcc::h::init has cyclomatic complexity 83 (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: embassy_stm32::rcc::h::flash_setup (cyclomatic 93) 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 function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/h.rs"},"region":{"startLine":328}}}],"partialFingerprints":{"codehealthFindingId/v1":"eef266aab7bc11cd08b3d26b28c2b2da0bcf5934b6ae40342cd268f2aefcd88d"}},{"ruleId":"D1","level":"warning","message":{"text":"embassy_stm32::rcc::u5::init (cyclomatic 64): embassy_stm32::rcc::u5::init has cyclomatic complexity 64 (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":"embassy-stm32/src/rcc/u5.rs"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"01b59a55d9d9732c320735fdd6e796334899bb38279b36a694edcc0f81894e14"}},{"ruleId":"D1","level":"warning","message":{"text":"embassy_stm32::rcc::n6::init_osc (cyclomatic 56): embassy_stm32::rcc::n6::init_osc has cyclomatic complexity 56 (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":"embassy-stm32/src/rcc/n6.rs"},"region":{"startLine":890}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1ba2c2c75ced433e1aa50afb47457b7a6ac4442d1da93cce50d1c771cf34026"}},{"ruleId":"D1","level":"warning","message":{"text":"embassy_stm32::rcc::l::init (cyclomatic 55): embassy_stm32::rcc::l::init has cyclomatic complexity 55 (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":"embassy-stm32/src/rcc/l.rs"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"e63afc1cc43fb7d64c1c574b629f3e00c2f34227d022ce830c317de6acf7901e"}},{"ruleId":"D1","level":"warning","message":{"text":"embassy_nrf::init (cyclomatic 52): embassy_nrf::init has cyclomatic complexity 52 (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":"embassy-nrf/src/lib.rs"},"region":{"startLine":801}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb3fb5aca8f65fdd1c176f1236f5aeaffa831e0531d8195b5fdd42c943a1625f"}},{"ruleId":"D1","level":"warning","message":{"text":"r#wifi_init_config::decode (cyclomatic 51): r#wifi_init_config::decode has cyclomatic complexity 51 (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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":584}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee43b9cbc4adebf18b1e45a8baa655fefb226284432d6d3bf6552c5e4aed3555"}},{"ruleId":"D1","level":"warning","message":{"text":"embassy_stm32::rcc::u3::init (cyclomatic 50): embassy_stm32::rcc::u3::init has cyclomatic complexity 50 (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":"embassy-stm32/src/rcc/u3.rs"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c428bc22e80507d8b8ba04c4606b2bef30b98a3b19c0b90476c6547fea2ff7a"}},{"ruleId":"D1","level":"warning","message":{"text":"embassy_stm32::rcc::init_rcc (cyclomatic 49): embassy_stm32::rcc::init_rcc has cyclomatic complexity 49 (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":"embassy-stm32/src/rcc/mod.rs"},"region":{"startLine":667}}}],"partialFingerprints":{"codehealthFindingId/v1":"013b24b20792a90728119d73e5266f7f6cae410a49c9ce0043a860edb75c908e"}},{"ruleId":"D1","level":"warning","message":{"text":"ClockOperator::configure_osc32k_clocks (cyclomatic 48): ClockOperator::configure_osc32k_clocks 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":"embassy-mcxa/src/clocks/operator.rs"},"region":{"startLine":449}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3057288586aeab68841714e8864088029bd967f277aba0266290cdad8263d6f"}},{"ruleId":"D1","level":"warning","message":{"text":"embassy_rp::clocks::init (cyclomatic 45): embassy_rp::clocks::init has cyclomatic complexity 45 (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":"embassy-rp/src/clocks.rs"},"region":{"startLine":979}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4dda2898ad0a805864a11f27f04b228bbb638e4305e9f5b96781d0deb54454d"}},{"ruleId":"D1","level":"warning","message":{"text":"Psram::init_psram (cyclomatic 43): Psram::init_psram has cyclomatic complexity 43 (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":"embassy-rp/src/psram.rs"},"region":{"startLine":445}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9c6fdef5a45c0f3cc1e97c3ae01f312040a77598fb9f74c1787402bf3547dff"}},{"ruleId":"D1","level":"warning","message":{"text":"r#wifi_pkt_rx_ctrl::decode (cyclomatic 41): r#wifi_pkt_rx_ctrl::decode has cyclomatic complexity 41 (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: Rpc::encode (cyclomatic 42) 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 function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":7198}}}],"partialFingerprints":{"codehealthFindingId/v1":"449a2aa276d702eb23baaf4a4a1700e0f0360cca091fa671dec85048b139dab3"}},{"ruleId":"D1","level":"warning","message":{"text":"embassy_stm32::rcc::f247::init (cyclomatic 41): embassy_stm32::rcc::f247::init 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":"embassy-stm32/src/rcc/f247.rs"},"region":{"startLine":163}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d67162264c9efc189c5d2f35f30800173ec025f653fb851979eabbf16fd5001"}},{"ruleId":"D1","level":"warning","message":{"text":"embassy_stm32::rcc::n6::init_clocks (cyclomatic 41): embassy_stm32::rcc::n6::init_clocks 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":"embassy-stm32/src/rcc/n6.rs"},"region":{"startLine":282}}}],"partialFingerprints":{"codehealthFindingId/v1":"629f40431d63e08097d69a56d21b5f5408cd194880b54d8ef79234401f6ef8d1"}},{"ruleId":"D1","level":"warning","message":{"text":"embassy_stm32::rcc::wba::init (cyclomatic 41): embassy_stm32::rcc::wba::init 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":"embassy-stm32/src/rcc/wba.rs"},"region":{"startLine":264}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e704495624c1a1e622618d03e90a960d06655bae976f6d1342e5991a52a74d6"}},{"ruleId":"D1","level":"warning","message":{"text":"embassy_usb_synopsys_otg::host::on_host_interrupt (cyclomatic 41): embassy_usb_synopsys_otg::host::on_host_interrupt has cyclomatic complexity 41 (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":"embassy-usb-synopsys-otg/src/host.rs"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"142c66f8e14decec27da848ac29296335f948e298842dbde230483c14df1d361"}},{"ruleId":"D1","level":"warning","message":{"text":"embassy_stm32::rcc::f013::init (cyclomatic 39): embassy_stm32::rcc::f013::init has cyclomatic complexity 39 (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":"embassy-stm32/src/rcc/f013.rs"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"122e05e6feb2af66830a46f89c58a36615314690982ead451151ab764e336fd5"}},{"ruleId":"D1","level":"warning","message":{"text":"Channel::configure (cyclomatic 36): Channel::configure has cyclomatic complexity 36 (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":"embassy-stm32/src/dma/dma_bdma.rs"},"region":{"startLine":501}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9c8a7a4cca9073bcec76b48e164dfd3070c77eae17717ca92bcbe6104747eb9"}},{"ruleId":"D1","level":"warning","message":{"text":"r#wifi_ap_config::decode (cyclomatic 35): r#wifi_ap_config::decode 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. This is NOT this file\u0027s highest cyclomatic complexity: Rpc::encode (cyclomatic 42) 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 function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":4521}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbcd01cb8c5aca1313c8f6c2fd175a428417b2c07e0b586dd67a5752efee8234"}},{"ruleId":"D1","level":"warning","message":{"text":"Runner::rx (cyclomatic 34): Runner::rx 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":"cyw43/src/runner.rs"},"region":{"startLine":1057}}}],"partialFingerprints":{"codehealthFindingId/v1":"93be7acab36cd8cc2c1774d4c1ac0088a9b06951403cda11c9bb52f009c1f768"}},{"ruleId":"D1","level":"warning","message":{"text":"Comp::configure_raw (cyclomatic 34): Comp::configure_raw has cyclomatic complexity 34 (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":"embassy-stm32/src/comp.rs"},"region":{"startLine":500}}}],"partialFingerprints":{"codehealthFindingId/v1":"5192ec27d731217dbc4c88e1caaa4fe73b1006546a8079bcb0bd799b2bcf764f"}},{"ruleId":"D1","level":"warning","message":{"text":"LsConfig::init (cyclomatic 33): LsConfig::init has cyclomatic complexity 33 (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":"embassy-stm32/src/rcc/bd.rs"},"region":{"startLine":154}}}],"partialFingerprints":{"codehealthFindingId/v1":"09d8a7a6f094f1b0946ad689144ac72a133d0c2521ce5ae30c88c35d82d1b36d"}},{"ruleId":"D1","level":"warning","message":{"text":"ReportDescriptor::parse (cyclomatic 33): ReportDescriptor::parse 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":"embassy-usb-host/src/class/hid_report.rs"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"847d9a3bb4014784f20b1b03fc0901706d7d04401ea339d98f20521aae4a0a44"}},{"ruleId":"D1","level":"warning","message":{"text":"embassy_crypto_test::p384::arith (cyclomatic 32): embassy_crypto_test::p384::arith has cyclomatic complexity 32 (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 shape REPEATS in the file: one other method here (embassy_crypto_test::p256::arith) 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":"embassy-crypto-test/src/lib.rs"},"region":{"startLine":1035}}}],"partialFingerprints":{"codehealthFindingId/v1":"bab10f6b6f6211ee0c513b222b027d5ca468dd8fa5a9e8b22954a8d2c5bfbfae"}},{"ruleId":"D1","level":"warning","message":{"text":"embassy_crypto_test::p256::arith (cyclomatic 32): embassy_crypto_test::p256::arith has cyclomatic complexity 32 (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 shape REPEATS in the file: one other method here (embassy_crypto_test::p384::arith) 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":"embassy-crypto-test/src/lib.rs"},"region":{"startLine":1035}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c252a76b4cc9528b1a41a62d6b70e99e6bbb2d9a1fdb88c82ee4b5de29faf8a"}},{"ruleId":"D1","level":"warning","message":{"text":"ClockOperator::configure_spll (cyclomatic 31): ClockOperator::configure_spll has cyclomatic complexity 31 (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":"embassy-mcxa/src/clocks/operator.rs"},"region":{"startLine":807}}}],"partialFingerprints":{"codehealthFindingId/v1":"2629cd1eb358e6f8a02c500c8d3c7cf42dd097499c6e6347609000406d8244fe"}},{"ruleId":"D1","level":"warning","message":{"text":"embassy_stm32::rcc::g4::init (cyclomatic 30): embassy_stm32::rcc::g4::init 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":"embassy-stm32/src/rcc/g4.rs"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"72bbd4c111f6c02a715ce7372e097b6807a2585e94103bb4ef74ce2548ee02a9"}},{"ruleId":"D1","level":"warning","message":{"text":"r#wifi_sta_config::decode (cyclomatic 29): r#wifi_sta_config::decode has cyclomatic complexity 29 (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: Rpc::encode (cyclomatic 42) 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 function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":5646}}}],"partialFingerprints":{"codehealthFindingId/v1":"8edd0dc3413b092a14eff74d1db7a0f5a11e085c38f6d64073d8ef1ccf6ba8ca"}},{"ruleId":"D1","level":"warning","message":{"text":"I2c::read_frame (cyclomatic 29): I2c::read_frame has cyclomatic complexity 29 (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":"embassy-stm32/src/i2c/v1.rs"},"region":{"startLine":722}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9e265bcefaba0f094d514ade23cb2301d6f59024358a8314bd5204959167947"}},{"ruleId":"D1","level":"warning","message":{"text":"embassy_stm32::rcc::g0::init (cyclomatic 28): embassy_stm32::rcc::g0::init has cyclomatic complexity 28 (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":"embassy-stm32/src/rcc/g0.rs"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"986ff615e9a8a59056be7398a4e4cbf5a2622374a5be739d43a5e172595c2fc6"}},{"ruleId":"D1","level":"warning","message":{"text":"embassy_executor_macros::macros::task::run (cyclomatic 27): embassy_executor_macros::macros::task::run has cyclomatic complexity 27 (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":"embassy-executor-macros/src/macros/task.rs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"23df56e8750e2eb1049a78114e54c56cffaed627784539eeb1ca17e2b1623325"}},{"ruleId":"D1","level":"warning","message":{"text":"ClockOperator::configure_voltages (cyclomatic 27): ClockOperator::configure_voltages has cyclomatic complexity 27 (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":"embassy-mcxa/src/clocks/operator.rs"},"region":{"startLine":1300}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0fbc0a9929386db77815019f93e852e1d157ff4d22ac51b7f638fd636da0920"}},{"ruleId":"D1","level":"warning","message":{"text":"CtrlEvent::decode (cyclomatic 27): CtrlEvent::decode 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":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":12335}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8443b04daa89775099032770aca18f011929e60a7c81cd7046262b8135be81e"}},{"ruleId":"D1","level":"warning","message":{"text":"embassy_stm32::rcc::c5::init (cyclomatic 27): embassy_stm32::rcc::c5::init has cyclomatic complexity 27 (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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/c5.rs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1ee0f5b6e3363f8a8d1b73ae9e96c800b795b87d52464be5ac83e2520e2b048"}},{"ruleId":"D1","level":"warning","message":{"text":"embassy_stm32::usart::buffered::on_interrupt (cyclomatic 26): embassy_stm32::usart::buffered::on_interrupt 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":"embassy-stm32/src/usart/buffered.rs"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4eb0b65c96f424972efab8765c53740e77efa5adb877ba1a825e6e29c06ae7f"}},{"ruleId":"D1","level":"warning","message":{"text":"embassy_stm32::usart::configure (cyclomatic 26): embassy_stm32::usart::configure 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":"embassy-stm32/src/usart/mod.rs"},"region":{"startLine":2601}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c4a1209b5a3c97e6d83fecde4a87c6937f8d755976da42d8e0cf573931d7708"}},{"ruleId":"D1","level":"warning","message":{"text":"r#wifi_init_config::encode (cyclomatic 25): r#wifi_init_config::encode has cyclomatic complexity 25 (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 shape REPEATS in the file: one other method here (r#wifi_init_config::compute_size) 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. This is NOT this file\u0027s highest cyclomatic complexity: Rpc::encode (cyclomatic 42) 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 function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":1040}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8097bd6bf119dda0e05cd544df72f959f4c920f0390a8d083fa94a5df7ef4d8"}},{"ruleId":"D1","level":"warning","message":{"text":"r#wifi_init_config::compute_size (cyclomatic 25): r#wifi_init_config::compute_size has cyclomatic complexity 25 (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 shape REPEATS in the file: one other method here (r#wifi_init_config::encode) 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. This is NOT this file\u0027s highest cyclomatic complexity: Rpc::encode (cyclomatic 42) 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 function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":1215}}}],"partialFingerprints":{"codehealthFindingId/v1":"c93e1c02d968da6d43a0c82439c62bb0f6fc9547d46fe3cdcd68806bba2b2f47"}},{"ruleId":"D1","level":"warning","message":{"text":"RpcEvent::decode (cyclomatic 25): RpcEvent::decode 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. This is NOT this file\u0027s highest cyclomatic complexity: Rpc::encode (cyclomatic 42) 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 function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":50582}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a6a11315a569cab2cdc4a64b9f5070b8d4fa07f1f502cb0f677f5efb32d4181"}},{"ruleId":"D1","level":"warning","message":{"text":"embassy_usb_synopsys_otg::on_interrupt (cyclomatic 25): embassy_usb_synopsys_otg::on_interrupt 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":"embassy-usb-synopsys-otg/src/lib.rs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"a952918133757791579e40d8e693ac6c3649c735fc74fc0f6495a26c775c6539"}},{"ruleId":"D1","level":"warning","message":{"text":"BufferedInterruptHandler::on_interrupt (cyclomatic 24): BufferedInterruptHandler::on_interrupt 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":"embassy-mcxa/src/lpuart/buffered.rs"},"region":{"startLine":539}}}],"partialFingerprints":{"codehealthFindingId/v1":"12c5a768a5dadd6accf59ff8055bf347475da04a8c2899f3da5d2d86807dbce6"}},{"ruleId":"D1","level":"warning","message":{"text":"I2c::write_frame (cyclomatic 24): I2c::write_frame 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":"embassy-stm32/src/i2c/v1.rs"},"region":{"startLine":488}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c6fe65337488ce561462bf3736008f99b4e53df67f80a58d1c75dacdc45bd60"}},{"ruleId":"D1","level":"warning","message":{"text":"Regs::init (cyclomatic 23): Regs::init has cyclomatic complexity 23 (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":"embassy-stm32/src/adc/v3.rs"},"region":{"startLine":173}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e5552e5681b40222f4c73c3d7a4620f760b2baed52f84a12ce25f17f8339972"}},{"ruleId":"D1","level":"warning","message":{"text":"StateMachine::set_config (cyclomatic 23): StateMachine::set_config has cyclomatic complexity 23 (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":"embassy-rp/src/pio/mod.rs"},"region":{"startLine":790}}}],"partialFingerprints":{"codehealthFindingId/v1":"72c0a2adbc51b9e5a39616bbcd29df6f1056a15e42a1659eb23f13dee7256525"}},{"ruleId":"D1","level":"warning","message":{"text":"Jpeg::decode (cyclomatic 23): Jpeg::decode 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":"embassy-stm32/src/jpeg.rs"},"region":{"startLine":379}}}],"partialFingerprints":{"codehealthFindingId/v1":"19f912e83643bb1603d38d49cf8cc757a7ca247380a5837d6dcea4a343d47847"}},{"ruleId":"D1","level":"warning","message":{"text":"embassy_stm32::rcc::f247::init_pll (cyclomatic 23): embassy_stm32::rcc::f247::init_pll has cyclomatic complexity 23 (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":"embassy-stm32/src/rcc/f247.rs"},"region":{"startLine":431}}}],"partialFingerprints":{"codehealthFindingId/v1":"41398c78567984fc815bb0003b41daa2a33fe6ce201d336c480941e3f8d11db4"}},{"ruleId":"D1","level":"warning","message":{"text":"Inner::handle_control_out (cyclomatic 23): Inner::handle_control_out has cyclomatic complexity 23 (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":"embassy-usb/src/lib.rs"},"region":{"startLine":472}}}],"partialFingerprints":{"codehealthFindingId/v1":"a57d79a642f92dcea7f7e6fbc12a40c8ae7b32d617e065c50f1858ca190830e3"}},{"ruleId":"D1","level":"warning","message":{"text":"embassy_executor_macros::macros::main::run (cyclomatic 22): embassy_executor_macros::macros::main::run 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":"embassy-executor-macros/src/macros/main.rs"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"621749fd56fe66d1a7a380e141fde2e85b4166e097accbd8f472f9365f38b40d"}},{"ruleId":"D1","level":"warning","message":{"text":"r#esp_app_desc::decode (cyclomatic 22): r#esp_app_desc::decode 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. This is NOT this file\u0027s highest cyclomatic complexity: Rpc::encode (cyclomatic 42) 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 function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":14514}}}],"partialFingerprints":{"codehealthFindingId/v1":"65a2e45a72660d85ece8f04fe9401c970cd899b805edbce376acb9edb568a784"}},{"ruleId":"D1","level":"warning","message":{"text":"Channel::configure (cyclomatic 22): Channel::configure 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":"embassy-stm32/src/dma/gpdma/mod.rs"},"region":{"startLine":629}}}],"partialFingerprints":{"codehealthFindingId/v1":"20ff537c05d38b8ea8ece73cccc5483aeaef1e67b42dc69d1f6012967eeca8b2"}},{"ruleId":"D1","level":"warning","message":{"text":"Jpeg::decode_blocking (cyclomatic 22): Jpeg::decode_blocking 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":"embassy-stm32/src/jpeg.rs"},"region":{"startLine":617}}}],"partialFingerprints":{"codehealthFindingId/v1":"03ec15bb53ea5f1e167f35c4c0cfde5c3f83fae86609099e8867d4dd4b78ba33"}},{"ruleId":"D1","level":"warning","message":{"text":"SimplePwm::set_frequency (cyclomatic 21): SimplePwm::set_frequency 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":"embassy-mspm0/src/tim/simple_pwm.rs"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f74adb5500b79a05c6bdf5bbb0bd7579568a846422c578bb6b118175b46f2a2"}},{"ruleId":"D1","level":"warning","message":{"text":"Runner::run (cyclomatic 21): Runner::run 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":"embassy-net-adin1110/src/lib.rs"},"region":{"startLine":354}}}],"partialFingerprints":{"codehealthFindingId/v1":"b00dedca6a1c7c898ab40e89dbe77ca711bbdc9d913f68f4c3d3659a08e396ff"}},{"ruleId":"D1","level":"warning","message":{"text":"Rpc_Req_ExtCoex::decode (cyclomatic 21): Rpc_Req_ExtCoex::decode 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. This is NOT this file\u0027s highest cyclomatic complexity: Rpc::encode (cyclomatic 42) 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 function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":39856}}}],"partialFingerprints":{"codehealthFindingId/v1":"9db4cc9759b9a2cd53dba5c9ab2c48e466348b7e68d6442b2e30cf1195f0dcf9"}},{"ruleId":"D1","level":"warning","message":{"text":"I2c::write_dma_internal (cyclomatic 21): I2c::write_dma_internal has cyclomatic complexity 21 (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":"embassy-stm32/src/i2c/v2.rs"},"region":{"startLine":925}}}],"partialFingerprints":{"codehealthFindingId/v1":"d104d08a5628521b68d0679ee272e941f6ab269c04ef611b780444a59f1f8689"}},{"ruleId":"D1","level":"warning","message":{"text":"StorageDevice::acquire (cyclomatic 21): StorageDevice::acquire 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":"embassy-stm32/src/sdmmc/sd.rs"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c863f3248566f9fa9c860d565f33a22b81c9684009b31be0d8d49a5fa38f519"}},{"ruleId":"D1","level":"warning","message":{"text":"UartRx::inner_read_run (cyclomatic 21): UartRx::inner_read_run has cyclomatic complexity 21 (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":"embassy-stm32/src/usart/mod.rs"},"region":{"startLine":1093}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb07675ef5713fbb3c4839e073989717d59f4514580dd15c2e36b711b84f48f3"}},{"ruleId":"D1","level":"warning","message":{"text":"OtgHost::wait_for_device_event (cyclomatic 21): OtgHost::wait_for_device_event 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":"embassy-usb-synopsys-otg/src/host.rs"},"region":{"startLine":685}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2fca3ba695a24640022d03feb947292472dfb8e6beaf014f4afc62c8bd65839"}},{"ruleId":"D1","level":"warning","message":{"text":"embassy_mspm0::uart::buffered::on_interrupt (cyclomatic 20): embassy_mspm0::uart::buffered::on_interrupt 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":"embassy-mspm0/src/uart/buffered.rs"},"region":{"startLine":1017}}}],"partialFingerprints":{"codehealthFindingId/v1":"36468175f2eb99fc2ae3326d8b0d8c8c3f297f9544b8a67e3d4529fe7be1a584"}},{"ruleId":"D1","level":"warning","message":{"text":"r#wifi_pkt_rx_ctrl::encode (cyclomatic 20): r#wifi_pkt_rx_ctrl::encode 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 shape REPEATS in the file: one other method here (r#wifi_pkt_rx_ctrl::compute_size) 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. This is NOT this file\u0027s highest cyclomatic complexity: Rpc::encode (cyclomatic 42) 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 function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":7564}}}],"partialFingerprints":{"codehealthFindingId/v1":"e153f51a31a9c810abc6c4bf6523721d0a6f87585ac64301081dd491f066f713"}},{"ruleId":"D1","level":"warning","message":{"text":"r#wifi_pkt_rx_ctrl::compute_size (cyclomatic 20): r#wifi_pkt_rx_ctrl::compute_size 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 shape REPEATS in the file: one other method here (r#wifi_pkt_rx_ctrl::encode) 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. This is NOT this file\u0027s highest cyclomatic complexity: Rpc::encode (cyclomatic 42) 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 function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":7704}}}],"partialFingerprints":{"codehealthFindingId/v1":"de99926c03918a20b3ec666ecaba7d2f9fb05f67e41975f31dc3d2b9848c96e2"}},{"ruleId":"D1","level":"warning","message":{"text":"Rpc_Resp_GetCoprocessorFwVersion::decode (cyclomatic 20): Rpc_Resp_GetCoprocessorFwVersion::decode 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: Rpc::encode (cyclomatic 42) 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 function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":31275}}}],"partialFingerprints":{"codehealthFindingId/v1":"69bcb41793906dfe2a726a4d121b970c0e73e22fab9214b01aef65b48bfe4f7d"}},{"ruleId":"D1","level":"warning","message":{"text":"embassy_stm32::rcc::l::pll::init_pll (cyclomatic 20): embassy_stm32::rcc::l::pll::init_pll 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":"embassy-stm32/src/rcc/l.rs"},"region":{"startLine":708}}}],"partialFingerprints":{"codehealthFindingId/v1":"d24b33e515f118537150193abfe3ef1da952c0816d358045ebdab69540c38bbf"}},{"ruleId":"D1","level":"warning","message":{"text":"embassy_stm32::rcc::c0::init (cyclomatic 20): embassy_stm32::rcc::c0::init 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":"embassy-stm32/src/rcc/c0.rs"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b2f35e78bc53efff63e5df3454bb50be476d8de8232bbae1e38553bc80c3413"}},{"ruleId":"D1","level":"warning","message":{"text":"embassy_stm32::low_power::platform::exit_stop (cyclomatic 20): embassy_stm32::low_power::platform::exit_stop 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":"embassy-stm32/src/low_power.rs"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f0f8f386bfb14f6182e0a845478c71a290d88d4e411d9e76595041160c5a97b"}},{"ruleId":"D1","level":"warning","message":{"text":"HCI::process_event (cyclomatic 20): HCI::process_event 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":"embassy-stm32-wpan/src/bluetooth/mod.rs"},"region":{"startLine":674}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c41c2735003bc37c8a9ebaa2cd5ee5c1f7e5c5e4fcc04e40bb445369c6288ec"}},{"ruleId":"D1","level":"warning","message":{"text":"I3c::listen (cyclomatic 19): I3c::listen 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":"embassy-mcxa/src/i3c/target.rs"},"region":{"startLine":1276}}}],"partialFingerprints":{"codehealthFindingId/v1":"52b724f492d6b4032b24ae40efdb77ccb0e21a493441cbe2bc92ba29c76a1b76"}},{"ruleId":"D1","level":"warning","message":{"text":"CtrlMsg_Resp_GetSoftAPConfig::decode (cyclomatic 19): CtrlMsg_Resp_GetSoftAPConfig::decode 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: CtrlMsg::encode (cyclomatic 27) 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 function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":2753}}}],"partialFingerprints":{"codehealthFindingId/v1":"db5da457ace715f9df630299b4350cef62c4903e9149d1050678b3d8c5e4ba77"}},{"ruleId":"D1","level":"warning","message":{"text":"CtrlMsg_Resp_GetDhcpDnsStatus::decode (cyclomatic 19): CtrlMsg_Resp_GetDhcpDnsStatus::decode 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: CtrlMsg::encode (cyclomatic 27) 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 function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":8080}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed31fc0ce48449858669394f6b489e0beab2432f67f0dcb616a476f21405ce75"}},{"ruleId":"D1","level":"warning","message":{"text":"CtrlMsg_Event_SetDhcpDnsStatus::decode (cyclomatic 19): CtrlMsg_Event_SetDhcpDnsStatus::decode 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: CtrlMsg::encode (cyclomatic 27) 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 function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":10181}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d9789bcec13315391b78ca8b36a9aad33980855eabc66f317fb9c1cac9949cd"}},{"ruleId":"D1","level":"warning","message":{"text":"r#wifi_ap_config::encode (cyclomatic 19): r#wifi_ap_config::encode 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. This shape REPEATS in the file: one other method here (r#wifi_ap_config::compute_size) 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. This is NOT this file\u0027s highest cyclomatic complexity: Rpc::encode (cyclomatic 42) 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 function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":4866}}}],"partialFingerprints":{"codehealthFindingId/v1":"199f7cd5081fad7acccb0cd5979fd7961cb0ab7828ca881b510710d36328aa1e"}},{"ruleId":"D1","level":"warning","message":{"text":"r#wifi_ap_config::compute_size (cyclomatic 19): r#wifi_ap_config::compute_size 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. This shape REPEATS in the file: one other method here (r#wifi_ap_config::encode) 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. This is NOT this file\u0027s highest cyclomatic complexity: Rpc::encode (cyclomatic 42) 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 function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":4997}}}],"partialFingerprints":{"codehealthFindingId/v1":"838396697fb40dadd102d9a1994ff76e67c7dea680fc7074afb4045abaafe298"}},{"ruleId":"D1","level":"warning","message":{"text":"Rpc_Resp_GetDhcpDnsStatus::decode (cyclomatic 19): Rpc_Resp_GetDhcpDnsStatus::decode 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 shape REPEATS in the file: one other method here (Rpc_Event_DhcpDnsStatus::decode) 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. This is NOT this file\u0027s highest cyclomatic complexity: Rpc::encode (cyclomatic 42) 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 function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":32534}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b88bb3cbf8c11ac9961f13247b7aa9c9328ba5706876ef6820e02dfa1fe299a"}},{"ruleId":"D1","level":"warning","message":{"text":"Rpc_Event_DhcpDnsStatus::decode (cyclomatic 19): Rpc_Event_DhcpDnsStatus::decode 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 shape REPEATS in the file: one other method here (Rpc_Resp_GetDhcpDnsStatus::decode) 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. This is NOT this file\u0027s highest cyclomatic complexity: Rpc::encode (cyclomatic 42) 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 function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":40507}}}],"partialFingerprints":{"codehealthFindingId/v1":"470d0382a467103e6e4b1826131b803b58a7505ea7a7ea644ead3830c5e36d84"}},{"ruleId":"D1","level":"warning","message":{"text":"ParsedAdvData::parse (cyclomatic 19): ParsedAdvData::parse 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":"embassy-stm32-wpan/src/bluetooth/gap/scanner.rs"},"region":{"startLine":290}}}],"partialFingerprints":{"codehealthFindingId/v1":"e76aadc0306a4e10d0649ae2d3bcb18e36a7e23fdc874edb3c44c92480306a34"}},{"ruleId":"D1","level":"warning","message":{"text":"MainClkConfig::set_clock_source_and_rate (cyclomatic 18): MainClkConfig::set_clock_source_and_rate 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":"embassy-imxrt/src/clocks.rs"},"region":{"startLine":990}}}],"partialFingerprints":{"codehealthFindingId/v1":"51dff4c7f4800e387424065ca7e50ba2a281c959e4d459ce4e4ebe8e75a2dc51"}},{"ruleId":"D1","level":"warning","message":{"text":"InterruptHandler::on_interrupt (cyclomatic 18): InterruptHandler::on_interrupt 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":"embassy-mcxa/src/i3c/target.rs"},"region":{"startLine":1437}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa9b659b10731362ba457dc243e95f9a18c4f2e62ca31c8167c42f23a6ae12ee"}},{"ruleId":"D1","level":"warning","message":{"text":"StateInner::poll (cyclomatic 18): StateInner::poll 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":"embassy-net-nrf91/src/lib.rs"},"region":{"startLine":349}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9351f1aa7b8572361ef86f823da870cdbad003aba2cd9d8686f562a23aa268e"}},{"ruleId":"D1","level":"warning","message":{"text":"Regs::configure_sequence (cyclomatic 18): Regs::configure_sequence 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":"embassy-stm32/src/adc/v3.rs"},"region":{"startLine":375}}}],"partialFingerprints":{"codehealthFindingId/v1":"c22b45abaa0d4882ef8418236b755abd494d3776513ea711e3e9e2b2f80c771a"}},{"ruleId":"D1","level":"warning","message":{"text":"Twim::setup_operations (cyclomatic 18): Twim::setup_operations 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":"embassy-nrf/src/twim.rs"},"region":{"startLine":520}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf2d8244a547cf07da92a52c7e8a1d5847adcdf1978ed0072b7342be2be6b237"}},{"ruleId":"D1","level":"warning","message":{"text":"BufferedInterruptHandler::on_interrupt (cyclomatic 18): BufferedInterruptHandler::on_interrupt 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":"embassy-rp/src/uart/buffered.rs"},"region":{"startLine":689}}}],"partialFingerprints":{"codehealthFindingId/v1":"db2abec15ec2bbc958579bdafc469b10134ea577ec1b5e370ff963865c63c5e6"}},{"ruleId":"D1","level":"warning","message":{"text":"UartRx::read_to_break_with_count (cyclomatic 18): UartRx::read_to_break_with_count 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":"embassy-rp/src/uart/mod.rs"},"region":{"startLine":607}}}],"partialFingerprints":{"codehealthFindingId/v1":"565542fe266c67fc0b56b6d5e8e72f554b2988d04210d6fa60b672a115b02ce0"}},{"ruleId":"D1","level":"warning","message":{"text":"InterruptHandler::on_interrupt (cyclomatic 18): InterruptHandler::on_interrupt has cyclomatic complexity 18 (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":"embassy-rp/src/usb/host.rs"},"region":{"startLine":1845}}}],"partialFingerprints":{"codehealthFindingId/v1":"c97142f877a6a31c51a2d7cf7a8b30bfe1a27c2b2c8e6740e86a3b82a193e09f"}},{"ruleId":"D1","level":"warning","message":{"text":"I2c::write_bytes (cyclomatic 18): I2c::write_bytes 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":"embassy-stm32/src/i2c/v1.rs"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"54693674ee2f9815578e13d309306ea5c483d3cc1ccd3a293faeb782dc2120f0"}},{"ruleId":"D1","level":"warning","message":{"text":"I2c::blocking_write_vectored (cyclomatic 18): I2c::blocking_write_vectored 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":"embassy-stm32/src/i2c/v2.rs"},"region":{"startLine":834}}}],"partialFingerprints":{"codehealthFindingId/v1":"050e5e76c9df9e173463303347deab95fd7d81ac5e7335f39fb0e0bd80a0c3fc"}},{"ruleId":"D1","level":"warning","message":{"text":"embassy_stm32::dma::dma_bdma::on_irq (cyclomatic 18): embassy_stm32::dma::dma_bdma::on_irq 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":"embassy-stm32/src/dma/dma_bdma.rs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e374fe588aabeb285e6237640db50425c3dd992aa7dcd302c2fc6fbcd10a0b0"}},{"ruleId":"D1","level":"warning","message":{"text":"embassy_stm32::rcc::u5::init_pll (cyclomatic 18): embassy_stm32::rcc::u5::init_pll 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":"embassy-stm32/src/rcc/u5.rs"},"region":{"startLine":610}}}],"partialFingerprints":{"codehealthFindingId/v1":"295b1a0e1ce453dbb93da4d0fbbc6d68aaf16110c22bfea7ee3f29d89678241c"}},{"ruleId":"D1","level":"warning","message":{"text":"Inner::handle_control_in (cyclomatic 18): Inner::handle_control_in 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":"embassy-usb/src/lib.rs"},"region":{"startLine":598}}}],"partialFingerprints":{"codehealthFindingId/v1":"09fc0a2d9831caf1c6e75a1f30abd23e7222673baeaef02a25a6feaacfcdbeb6"}},{"ruleId":"D1","level":"warning","message":{"text":"AudioCollectionBuilder::on_other (cyclomatic 18): AudioCollectionBuilder::on_other 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: TerminalType::from (cyclomatic 38) 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 function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb-host/src/class/uac/descriptors.rs"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ba5cdac3b9e46722e8e42ecd7fd5e9547981415a98b6ebfcff8ed64128cfad5"}},{"ruleId":"D1","level":"warning","message":{"text":"FormatInterrupt::format (cyclomatic 17): FormatInterrupt::format has cyclomatic complexity 17 (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 shape REPEATS in the file: one other method here (FormatInterrupt::fmt) 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. This is NOT this file\u0027s highest cyclomatic complexity: EStatus::from (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 function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cyw43/src/consts.rs"},"region":{"startLine":370}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9c436a06555afc11b1183c06b11495bfe25e954834b9824156734ade69a5343"}},{"ruleId":"D1","level":"warning","message":{"text":"FormatInterrupt::fmt (cyclomatic 17): FormatInterrupt::fmt has cyclomatic complexity 17 (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 shape REPEATS in the file: one other method here (FormatInterrupt::format) 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. This is NOT this file\u0027s highest cyclomatic complexity: EStatus::from (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 function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cyw43/src/consts.rs"},"region":{"startLine":404}}}],"partialFingerprints":{"codehealthFindingId/v1":"653641d92e04e785c83a38bc9a3ff58945046e4f3f043d36edd3c6bfee427d29"}},{"ruleId":"D1","level":"warning","message":{"text":"ClockOperator::configure_firc_clocks (cyclomatic 17): ClockOperator::configure_firc_clocks has cyclomatic complexity 17 (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":"embassy-mcxa/src/clocks/operator.rs"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"79323211bb6b1a5ecb36e87b047da09104a6961b34e32e559ccb13356b6f972b"}},{"ruleId":"D1","level":"warning","message":{"text":"CtrlMsg_Req_StartSoftAP::decode (cyclomatic 17): CtrlMsg_Req_StartSoftAP::decode 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. This is NOT this file\u0027s highest cyclomatic complexity: CtrlMsg::encode (cyclomatic 27) 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 function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":3254}}}],"partialFingerprints":{"codehealthFindingId/v1":"7cc4eee5c66b9820ee007ab3ab9ff777cdeba2128751e016735fdfa619bd7767"}},{"ruleId":"D1","level":"warning","message":{"text":"CtrlMsg_Req_SetDhcpDnsStatus::decode (cyclomatic 17): CtrlMsg_Req_SetDhcpDnsStatus::decode 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. This is NOT this file\u0027s highest cyclomatic complexity: CtrlMsg::encode (cyclomatic 27) 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 function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":7403}}}],"partialFingerprints":{"codehealthFindingId/v1":"210f3bd50e0c654c5735812815de007ec88e194a0a0905ffe74ec5bbd53edec2"}},{"ruleId":"D1","level":"warning","message":{"text":"r#wifi_sta_config::encode (cyclomatic 17): r#wifi_sta_config::encode has cyclomatic complexity 17 (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 shape REPEATS in the file: one other method here (r#wifi_sta_config::compute_size) 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. This is NOT this file\u0027s highest cyclomatic complexity: Rpc::encode (cyclomatic 42) 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 function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":5946}}}],"partialFingerprints":{"codehealthFindingId/v1":"45ffff24f4cf16e5d6e2d149b4a8bd2419c30e2c5d7c5dace82ebde098396b93"}},{"ruleId":"D1","level":"warning","message":{"text":"r#wifi_sta_config::compute_size (cyclomatic 17): r#wifi_sta_config::compute_size has cyclomatic complexity 17 (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 shape REPEATS in the file: one other method here (r#wifi_sta_config::encode) 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. This is NOT this file\u0027s highest cyclomatic complexity: Rpc::encode (cyclomatic 42) 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 function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":6063}}}],"partialFingerprints":{"codehealthFindingId/v1":"f202394727c22360d9600e7ad5c0e9c2691db7c21e7f106f559b999a06e699dc"}},{"ruleId":"D1","level":"warning","message":{"text":"r#wifi_csi_config::decode (cyclomatic 17): r#wifi_csi_config::decode 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. This shape REPEATS in the file: one other method here (r#wifi_ftm_report_entry::decode) 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. This is NOT this file\u0027s highest cyclomatic complexity: Rpc::encode (cyclomatic 42) 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 function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":8314}}}],"partialFingerprints":{"codehealthFindingId/v1":"03aeba917bc390f3f86f8b935328b4d13ad38d024187ed980d04ea949804e863"}},{"ruleId":"D1","level":"warning","message":{"text":"r#wifi_ftm_report_entry::decode (cyclomatic 17): r#wifi_ftm_report_entry::decode 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. This shape REPEATS in the file: one other method here (r#wifi_csi_config::decode) 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. This is NOT this file\u0027s highest cyclomatic complexity: Rpc::encode (cyclomatic 42) 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 function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":11973}}}],"partialFingerprints":{"codehealthFindingId/v1":"64ef725bf68e1b5ab57e50adcf93f5dba79f57170311d8fe74dc5aecc1578d32"}},{"ruleId":"D1","level":"warning","message":{"text":"Rpc_Req_SetDhcpDnsStatus::decode (cyclomatic 17): Rpc_Req_SetDhcpDnsStatus::decode 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. This is NOT this file\u0027s highest cyclomatic complexity: Rpc::encode (cyclomatic 42) 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 function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":31801}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c1d2eec00b63d145bf2e7dabb14cb09a2cb89f3e60feb214685abe70dd86759"}},{"ruleId":"D1","level":"warning","message":{"text":"InterruptHandler::on_interrupt (cyclomatic 17): InterruptHandler::on_interrupt 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":"embassy-nrf/src/buffered_uarte/v1.rs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"6222e329aee479dcd7b2ab457c2739ebf82050706373c185a43c8cb34e35196a"}},{"ruleId":"D1","level":"warning","message":{"text":"I2c::blocking_read_timeout (cyclomatic 17): I2c::blocking_read_timeout has cyclomatic complexity 17 (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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i2c/v1.rs"},"region":{"startLine":293}}}],"partialFingerprints":{"codehealthFindingId/v1":"10e68b2774c87d235f42a5c5a72aa291e29574342891bc1c49e3aad8013b3cef"}},{"ruleId":"D1","level":"warning","message":{"text":"Lcd::new (cyclomatic 17): Lcd::new has cyclomatic complexity 17 (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":"embassy-stm32/src/lcd.rs"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"5240d0cbb6f1c9ce29ade80fe9256cba9108d976179d8e58f1272b38ff869f27"}},{"ruleId":"D1","level":"warning","message":{"text":"Runner::init (cyclomatic 16): Runner::init 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":"cyw43/src/runner.rs"},"region":{"startLine":486}}}],"partialFingerprints":{"codehealthFindingId/v1":"99fc10dc06af3b3f2847e5ba961b9988206e37516d6ddb631f1ae108278f1539"}},{"ruleId":"D1","level":"warning","message":{"text":"MainPllClkConfig::set_clock_rate (cyclomatic 16): MainPllClkConfig::set_clock_rate 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":"embassy-imxrt/src/clocks.rs"},"region":{"startLine":713}}}],"partialFingerprints":{"codehealthFindingId/v1":"a16f888c19293bb6c4c01e954482b396343bbd02e02de7c21a5ad655bed6b98f"}},{"ruleId":"D1","level":"warning","message":{"text":"ClockOperator::configure_main_clk (cyclomatic 16): ClockOperator::configure_main_clk 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":"embassy-mcxa/src/clocks/operator.rs"},"region":{"startLine":1190}}}],"partialFingerprints":{"codehealthFindingId/v1":"9afc2ac25cecc79ec91a29c47c46f85e80eb721e39aebc0418eddd599e8ac98d"}},{"ruleId":"D1","level":"warning","message":{"text":"I3c::async_wait_for_ibi (cyclomatic 16): I3c::async_wait_for_ibi has cyclomatic complexity 16 (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":"embassy-mcxa/src/i3c/controller.rs"},"region":{"startLine":1604}}}],"partialFingerprints":{"codehealthFindingId/v1":"01a3fc8910f337ce9b50f671ac166a5fb1871e993b8f2119da43545ae00afe84"}},{"ruleId":"D1","level":"warning","message":{"text":"CtrlMsg_Resp_GetFwVersion::decode (cyclomatic 16): CtrlMsg_Resp_GetFwVersion::decode has cyclomatic complexity 16 (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: CtrlMsg::encode (cyclomatic 27) 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 function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":6503}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8b5ebd90f22fd2b3ee9c4548677c9bd8e1a8cf6dca352b52a2e483aa11d2755"}},{"ruleId":"D1","level":"warning","message":{"text":"r#wifi_event_ftm_report::decode (cyclomatic 16): r#wifi_event_ftm_report::decode has cyclomatic complexity 16 (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: Rpc::encode (cyclomatic 42) 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 function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":12380}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a4feeb04adcd01343d2805b6939f52e3369e61821c262952c578e2021d0c4f4"}},{"ruleId":"D1","level":"warning","message":{"text":"Symmetric::aes_payload_raw (cyclomatic 16): Symmetric::aes_payload_raw has cyclomatic complexity 16 (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":"embassy-nrf/src/crypto/symmetric/aes.rs"},"region":{"startLine":677}}}],"partialFingerprints":{"codehealthFindingId/v1":"dcac40fe0190c618f0de069492aae75945a8d4535936bd89058da6538218c9d4"}},{"ruleId":"D1","level":"warning","message":{"text":"Regs::configure_sequence (cyclomatic 16): Regs::configure_sequence has cyclomatic complexity 16 (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":"embassy-stm32/src/adc/v1.rs"},"region":{"startLine":296}}}],"partialFingerprints":{"codehealthFindingId/v1":"bcc02cb8f26eaf0a4d4e17c4b6e819c75e0664aadf94ade075e5d6b03d48220b"}},{"ruleId":"D1","level":"warning","message":{"text":"Regs::configure_sequence (cyclomatic 16): Regs::configure_sequence has cyclomatic complexity 16 (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":"embassy-stm32/src/adc/v2.rs"},"region":{"startLine":397}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2eff7c37df90033d2c4a55765f2145f931f63a14533fe46fdba2c80bc719c67"}},{"ruleId":"D1","level":"warning","message":{"text":"Jpeg::encode_blocking (cyclomatic 16): Jpeg::encode_blocking has cyclomatic complexity 16 (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":"embassy-stm32/src/jpeg.rs"},"region":{"startLine":525}}}],"partialFingerprints":{"codehealthFindingId/v1":"24f6ff3b4372a275964ff14ee0dc4bb081371913a2d06b6ce03f6b009e7ea009"}},{"ruleId":"D1","level":"warning","message":{"text":"embassy_stm32::rcc::h::init_pll (cyclomatic 16): embassy_stm32::rcc::h::init_pll 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: embassy_stm32::rcc::h::flash_setup (cyclomatic 93) 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 function is counted neither in this dimension\u0027s figures nor in its score."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/h.rs"},"region":{"startLine":961}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba4547d3dd1092bde53e18d4c5783e0fa06dc7bdc21b9cc848426153b0a443f6"}},{"ruleId":"D1","level":"warning","message":{"text":"embassy_stm32_wpan::bluetooth::gap_init::init_gap_and_hal (cyclomatic 16): embassy_stm32_wpan::bluetooth::gap_init::init_gap_and_hal has cyclomatic complexity 16 (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":"embassy-stm32-wpan/src/bluetooth/gap_init.rs"},"region":{"startLine":269}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b9b14a004d771741a80fca0b0dde4c99fe40522bb595ec95c84aefa8538efb1"}},{"ruleId":"D1","level":"warning","message":{"text":"Inner::handle_get_descriptor (cyclomatic 16): Inner::handle_get_descriptor has cyclomatic complexity 16 (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":"embassy-usb/src/lib.rs"},"region":{"startLine":695}}}],"partialFingerprints":{"codehealthFindingId/v1":"7540926439164fc7f1c813747a48e6a059b17f19f20dcbe7f667bb09a3b9f961"}},{"ruleId":"D1","level":"warning","message":{"text":"embassy_usb_host::class::msc::run_cycle (cyclomatic 16): embassy_usb_host::class::msc::run_cycle 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":"embassy-usb-host/src/class/msc.rs"},"region":{"startLine":474}}}],"partialFingerprints":{"codehealthFindingId/v1":"28be6a01cb354e9faab798b431e3fb54870d954e241c08d3bd15697f992e8615"}},{"ruleId":"D1","level":"warning","message":{"text":"Driver::alloc_endpoint (cyclomatic 16): Driver::alloc_endpoint has cyclomatic complexity 16 (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":"embassy-usb-synopsys-otg/src/lib.rs"},"region":{"startLine":558}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e4f783cd04cb988f85ee7ced7d9d85eeecb8e89d2b6f7c21de43879e5e25327"}},{"ruleId":"D2","level":"warning","message":{"text":"Rpc::decode (cognitive 468): Rpc::decode has cognitive complexity 468 (threshold 15). Drivers by points: if/else 79 (351 pts), loops 39 (115 pts), match/switch 1 (2 pts) (nesting depth added 349). 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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":48859}}}],"partialFingerprints":{"codehealthFindingId/v1":"847f3530dd21b935d5722b3a305883e12e17de323472f196cd48dc66aeaaf127"}},{"ruleId":"D2","level":"warning","message":{"text":"CtrlMsg::decode (cognitive 279): CtrlMsg::decode has cognitive complexity 279 (threshold 15). Drivers by points: if/else 48 (210 pts), loops 23 (67 pts), match/switch 1 (2 pts) (nesting depth added 207). 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":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":11170}}}],"partialFingerprints":{"codehealthFindingId/v1":"43b5ba5dad25d372c4df401707a7cd196481d8f7414999d833c77cfde5721992"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_stm32::rcc::n6::init_osc (cognitive 86): embassy_stm32::rcc::n6::init_osc has cognitive complexity 86 (threshold 15). Drivers by points: loops 14 (31 pts), if/else 21 (29 pts), boolean chains 21, match/switch 3 (5 pts) (nesting depth added 27). 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":"embassy-stm32/src/rcc/n6.rs"},"region":{"startLine":890}}}],"partialFingerprints":{"codehealthFindingId/v1":"58a0a164f26c74df4620d4ec152d43a29b14dcaed483f56b1de818d26eb9f3ab"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_usb_synopsys_otg::host::on_host_interrupt (cognitive 85): embassy_usb_synopsys_otg::host::on_host_interrupt has cognitive complexity 85 (threshold 15). Drivers by points: if/else 28 (55 pts), loops 7 (22 pts), match/switch 2 (6 pts), boolean chains 2 (nesting depth added 46). 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":"embassy-usb-synopsys-otg/src/host.rs"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ab45d5d01424bcfd700be1cce7ddf758d6dce8a87f2b37ca83deea7be2f9d3c"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_stm32::rcc::h::init (cognitive 77): embassy_stm32::rcc::h::init has cognitive complexity 77 (threshold 15). Drivers by points: loops 24 (37 pts), match/switch 19 (22 pts), if/else 11 (16 pts), boolean chains 2 (nesting depth added 21). 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":"embassy-stm32/src/rcc/h.rs"},"region":{"startLine":328}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1d2290865e3093b04fa556dda0f975106880846937e9bbac5c50758b9a366b5"}},{"ruleId":"D2","level":"warning","message":{"text":"r#wifi_init_config::decode (cognitive 75): r#wifi_init_config::decode has cognitive complexity 75 (threshold 15). Drivers by points: if/else 24 (72 pts), match/switch 1 (2 pts), loops 1 (nesting depth added 49). 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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":584}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9e0229bf680d8f0ee8cdd4e7e00cd0cb636922c00bbe0e3b0d45d6949e9aa96"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_stm32::rcc::u3::init (cognitive 71): embassy_stm32::rcc::u3::init has cognitive complexity 71 (threshold 15). Drivers by points: if/else 21 (31 pts), loops 12 (19 pts), match/switch 12 (19 pts), boolean chains 2 (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":"embassy-stm32/src/rcc/u3.rs"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"25cddce746a62039c16d347840cf81bbf4172fe9d73449c90b2d0c890c413498"}},{"ruleId":"D2","level":"warning","message":{"text":"Runner::run (cognitive 66): Runner::run has cognitive complexity 66 (threshold 15). Drivers by points: if/else 15 (45 pts), match/switch 4 (17 pts), loops 2 (4 pts) (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":"embassy-net-adin1110/src/lib.rs"},"region":{"startLine":354}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1a2ef6d8e574b20369b5c603dc56a79b425f5fb374a2bcae8536a0af4f199e7"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_stm32::rcc::u5::init (cognitive 64): embassy_stm32::rcc::u5::init has cognitive complexity 64 (threshold 15). Drivers by points: match/switch 16 (26 pts), if/else 17 (24 pts), loops 11 (12 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":"embassy-stm32/src/rcc/u5.rs"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d69f39f864153d778a863e7221a0add0d834dd078f359987bb125ef24164bc5"}},{"ruleId":"D2","level":"warning","message":{"text":"CtrlEvent::decode (cognitive 63): CtrlEvent::decode has cognitive complexity 63 (threshold 15). Drivers by points: if/else 12 (48 pts), loops 5 (13 pts), match/switch 1 (2 pts) (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":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":12335}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9a3abf781ac910f9eb4f620356e22f38c75a49275c5c412e63f9966542f108b"}},{"ruleId":"D2","level":"warning","message":{"text":"I2c::read_frame (cognitive 62): I2c::read_frame has cognitive complexity 62 (threshold 15). Drivers by points: if/else 21 (40 pts), match/switch 7 (15 pts), boolean chains 7 (nesting depth added 27). 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":"embassy-stm32/src/i2c/v1.rs"},"region":{"startLine":722}}}],"partialFingerprints":{"codehealthFindingId/v1":"18b3f8e91d79f37b6690c431c76006168ffaed6d17dd77818ff49d6f37609bd7"}},{"ruleId":"D2","level":"warning","message":{"text":"ReportDescriptor::parse (cognitive 62): ReportDescriptor::parse has cognitive complexity 62 (threshold 15). Drivers by points: if/else 17 (51 pts), loops 2 (6 pts), boolean chains 3, match/switch 1 (2 pts) (nesting depth added 39). 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":"embassy-usb-host/src/class/hid_report.rs"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe6a794f595c656f7c5f623e79f5c65901ab90afed39de78adfac0c214c6770f"}},{"ruleId":"D2","level":"warning","message":{"text":"r#wifi_pkt_rx_ctrl::decode (cognitive 60): r#wifi_pkt_rx_ctrl::decode has cognitive complexity 60 (threshold 15). Drivers by points: if/else 19 (57 pts), match/switch 1 (2 pts), loops 1 (nesting depth added 39). 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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":7198}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d4ceadfbf86d8c3a83c502380cc711e888bbe4be616b277f445b10c769ee9ad"}},{"ruleId":"D2","level":"warning","message":{"text":"RpcEvent::decode (cognitive 60): RpcEvent::decode has cognitive complexity 60 (threshold 15). Drivers by points: if/else 11 (45 pts), loops 5 (13 pts), match/switch 1 (2 pts) (nesting depth added 43). 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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":50582}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f80335f09e08c267508d9cd1ec44adeae8910e4841d3dec443c6cdbb84f397f"}},{"ruleId":"D2","level":"warning","message":{"text":"Runner::rx (cognitive 59): Runner::rx has cognitive complexity 59 (threshold 15). Drivers by points: if/else 22 (49 pts), match/switch 4 (8 pts), boolean chains 2 (nesting depth added 31). 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":"cyw43/src/runner.rs"},"region":{"startLine":1057}}}],"partialFingerprints":{"codehealthFindingId/v1":"3119f1431ac478bdfdf75ef18af7c5b4a2534dd7664e815b07b626fbcc847a8e"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_nrf::init (cognitive 59): embassy_nrf::init has cognitive complexity 59 (threshold 15). Drivers by points: if/else 32 (41 pts), loops 5 (8 pts), match/switch 7, boolean chains 3 (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":"embassy-nrf/src/lib.rs"},"region":{"startLine":801}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ac9e9f25f2b258a3b5a8ed8823a8f38431e80bcb767bd150fd61109f62eae05"}},{"ruleId":"D2","level":"warning","message":{"text":"Psram::init_psram (cognitive 54): Psram::init_psram has cognitive complexity 54 (threshold 15). Drivers by points: match/switch 12 (29 pts), if/else 15 (24 pts), boolean chains 1 (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":"embassy-rp/src/psram.rs"},"region":{"startLine":445}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f2f44f316e650e3c82075db230b58c5497f3c841ca79247b9e239c78a66daf0"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_usb_synopsys_otg::on_interrupt (cognitive 52): embassy_usb_synopsys_otg::on_interrupt has cognitive complexity 52 (threshold 15). Drivers by points: if/else 14 (33 pts), loops 6 (15 pts), boolean chains 2, match/switch 1 (2 pts) (nesting depth added 29). 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":"embassy-usb-synopsys-otg/src/lib.rs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"d627e9a8d0abd10234a58b081d4b1d43aab041c413e35702cf963108cabd3cc4"}},{"ruleId":"D2","level":"warning","message":{"text":"I2c::write_frame (cognitive 50): I2c::write_frame has cognitive complexity 50 (threshold 15). Drivers by points: if/else 17 (34 pts), match/switch 7 (13 pts), boolean chains 3 (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":"embassy-stm32/src/i2c/v1.rs"},"region":{"startLine":488}}}],"partialFingerprints":{"codehealthFindingId/v1":"d038a8d203f3ef248c7bba2f8a4a7e5e22a18cf0ea91384c4119b5e1ac3fded7"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_rp::clocks::init (cognitive 48): embassy_rp::clocks::init has cognitive complexity 48 (threshold 15). Drivers by points: match/switch 13 (24 pts), if/else 11 (12 pts), loops 10 (12 pts) (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":"embassy-rp/src/clocks.rs"},"region":{"startLine":979}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5f48aa0055defd5bbffde1dc9250ac4e2b2e624353e7537dbb00ec9c64ff6cd"}},{"ruleId":"D2","level":"warning","message":{"text":"r#wifi_ap_config::decode (cognitive 45): r#wifi_ap_config::decode has cognitive complexity 45 (threshold 15). Drivers by points: if/else 14 (42 pts), match/switch 1 (2 pts), loops 1 (nesting depth added 29). 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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":4521}}}],"partialFingerprints":{"codehealthFindingId/v1":"6eb0e6ea336732810c826fbf107a7a72de7c8fff047dbc50727da593919291a9"}},{"ruleId":"D2","level":"warning","message":{"text":"LsConfig::init (cognitive 45): LsConfig::init has cognitive complexity 45 (threshold 15). Drivers by points: if/else 14 (19 pts), loops 8 (16 pts), match/switch 5 (6 pts), boolean chains 4 (nesting depth added 14). 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":"embassy-stm32/src/rcc/bd.rs"},"region":{"startLine":154}}}],"partialFingerprints":{"codehealthFindingId/v1":"06ac0105f7335aef1e66b5af2af5018dd4379d9fc6a0be5446e812e20090e899"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_stm32::usart::buffered::on_interrupt (cognitive 44): embassy_stm32::usart::buffered::on_interrupt has cognitive complexity 44 (threshold 15). Drivers by points: if/else 22 (35 pts), loops 2 (5 pts), boolean chains 4 (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":"embassy-stm32/src/usart/buffered.rs"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"f08df8e215717020220470181b5ebd6550d6d534dcee4c6b2559afbbf57ea04d"}},{"ruleId":"D2","level":"warning","message":{"text":"OtgHost::wait_for_device_event (cognitive 43): OtgHost::wait_for_device_event has cognitive complexity 43 (threshold 15). Drivers by points: if/else 12 (28 pts), match/switch 3 (8 pts), loops 3 (7 pts) (nesting depth added 25). 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":"embassy-usb-synopsys-otg/src/host.rs"},"region":{"startLine":685}}}],"partialFingerprints":{"codehealthFindingId/v1":"55e56c28ab1b6798bfe1138f14956114cfeee2b0f2698b55ac8658edbbac1156"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_stm32::rcc::init_rcc (cognitive 40): embassy_stm32::rcc::init_rcc has cognitive complexity 40 (threshold 15). Drivers by points: if/else 16 (32 pts), match/switch 8 (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":"embassy-stm32/src/rcc/mod.rs"},"region":{"startLine":667}}}],"partialFingerprints":{"codehealthFindingId/v1":"f57b0f13cce043dee2833dee2a0f9fae3118c717c69941241cd3481d620dfb3b"}},{"ruleId":"D2","level":"warning","message":{"text":"ClockOperator::configure_spll (cognitive 39): ClockOperator::configure_spll has cognitive complexity 39 (threshold 15). Drivers by points: if/else 25 (31 pts), loops 2 (3 pts), match/switch 3, boolean chains 2 (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":"embassy-mcxa/src/clocks/operator.rs"},"region":{"startLine":807}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c020256d950df4562a3693664b8d9525f16e962b243193f2b92af27278e2424"}},{"ruleId":"D2","level":"warning","message":{"text":"BufferedInterruptHandler::on_interrupt (cognitive 39): BufferedInterruptHandler::on_interrupt has cognitive complexity 39 (threshold 15). Drivers by points: if/else 19 (29 pts), boolean chains 5, loops 2 (5 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":"embassy-mcxa/src/lpuart/buffered.rs"},"region":{"startLine":539}}}],"partialFingerprints":{"codehealthFindingId/v1":"268e9af2b3387fb5af2809f4d26e83be5e8886ae4d87619f7aa2419fcfd42e87"}},{"ruleId":"D2","level":"warning","message":{"text":"StateInner::poll (cognitive 38): StateInner::poll has cognitive complexity 38 (threshold 15). Drivers by points: if/else 11 (24 pts), loops 3 (10 pts), match/switch 1 (3 pts), boolean chains 1 (nesting depth added 22). 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":"embassy-net-nrf91/src/lib.rs"},"region":{"startLine":349}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc0a9fc79410a390ae464521911c8b0feeb2a20589540e2380d2c39f7305da79"}},{"ruleId":"D2","level":"warning","message":{"text":"HCI::process_event (cognitive 38): HCI::process_event has cognitive complexity 38 (threshold 15). Drivers by points: if/else 16 (35 pts), match/switch 2 (3 pts) (nesting depth added 20). 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":"embassy-stm32-wpan/src/bluetooth/mod.rs"},"region":{"startLine":674}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e055dea577980b235b834e4d1e02a53756316d31ac0225d0a52caa488517eb2"}},{"ruleId":"D2","level":"warning","message":{"text":"I2c::execute_read_group (cognitive 37): I2c::execute_read_group has cognitive complexity 37 (threshold 15). Drivers by points: if/else 13 (27 pts), loops 3 (8 pts), boolean chains 2 (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":"embassy-stm32/src/i2c/v2.rs"},"region":{"startLine":742}}}],"partialFingerprints":{"codehealthFindingId/v1":"cdb2e4fdac7b2589ab7ef9244b1e6686acc0019577bcb5d9a5e90520db0863e9"}},{"ruleId":"D2","level":"warning","message":{"text":"I2c::blocking_write_vectored (cognitive 37): I2c::blocking_write_vectored has cognitive complexity 37 (threshold 15). Drivers by points: if/else 10 (26 pts), loops 3 (6 pts), boolean chains 5 (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":"embassy-stm32/src/i2c/v2.rs"},"region":{"startLine":834}}}],"partialFingerprints":{"codehealthFindingId/v1":"e12f6b8187640942911fc5294906aef42b1eea19814a27eeb7e61bc7326c5db2"}},{"ruleId":"D2","level":"warning","message":{"text":"StorageDevice::acquire (cognitive 37): StorageDevice::acquire has cognitive complexity 37 (threshold 15). Drivers by points: if/else 17 (30 pts), boolean chains 4, match/switch 2, loops 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":"embassy-stm32/src/sdmmc/sd.rs"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"00e8c6f7da10dc82c33c2cf0d7fb89319810b4c5d67a30924ea6942ccdb47d33"}},{"ruleId":"D2","level":"warning","message":{"text":"Inner::handle_control_out (cognitive 37): Inner::handle_control_out has cognitive complexity 37 (threshold 15). Drivers by points: loops 6 (19 pts), if/else 4 (11 pts), match/switch 4 (7 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":"embassy-usb/src/lib.rs"},"region":{"startLine":472}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0a196b92223c29523eb02ba46a95e786e291972fd54ab9a458f5f9997e4f9f0"}},{"ruleId":"D2","level":"warning","message":{"text":"Channel::configure (cognitive 36): Channel::configure has cognitive complexity 36 (threshold 15). Drivers by points: if/else 9 (16 pts), match/switch 9 (14 pts), loops 2 (4 pts), boolean chains 2 (nesting depth added 14). 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":"embassy-stm32/src/dma/dma_bdma.rs"},"region":{"startLine":501}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6a6df5950290e8853f66cf281f52e08709b9a9730618b8618b5912f61d1f072"}},{"ruleId":"D2","level":"warning","message":{"text":"Jpeg::decode (cognitive 36): Jpeg::decode has cognitive complexity 36 (threshold 15). Drivers by points: if/else 16 (24 pts), boolean chains 6, loops 3 (5 pts), match/switch 1 (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":"embassy-stm32/src/jpeg.rs"},"region":{"startLine":379}}}],"partialFingerprints":{"codehealthFindingId/v1":"82bb3cb52a23dcd3cd4c9842f40cfe28f9368af94ec38b031ea9e8d1736323e4"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_stm32::rcc::f013::init (cognitive 36): embassy_stm32::rcc::f013::init has cognitive complexity 36 (threshold 15). Drivers by points: match/switch 12 (14 pts), loops 8 (12 pts), if/else 8 (10 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":"embassy-stm32/src/rcc/f013.rs"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"fff9732681aec4a003db7905082711afff8cd75597197c0c6447db16d3d4ed10"}},{"ruleId":"D2","level":"warning","message":{"text":"HubHandler::wait_for_event (cognitive 36): HubHandler::wait_for_event has cognitive complexity 36 (threshold 15). Drivers by points: if/else 10 (29 pts), match/switch 1 (4 pts), loops 2 (3 pts) (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":"embassy-usb-host/src/class/hub.rs"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb6b942e8e715f0e961a6a1790216e16e148e0845c8565d0bc58873e6dee4905"}},{"ruleId":"D2","level":"warning","message":{"text":"InterruptHandler::on_interrupt (cognitive 35): InterruptHandler::on_interrupt has cognitive complexity 35 (threshold 15). Drivers by points: if/else 14 (32 pts), boolean chains 3 (nesting depth added 18). 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":"embassy-nrf/src/buffered_uarte/v1.rs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"4056265eec7c76c365b639d6f665f972b701442f09cf99f3f998291ead81f78e"}},{"ruleId":"D2","level":"warning","message":{"text":"AudioCollectionBuilder::on_other (cognitive 35): AudioCollectionBuilder::on_other has cognitive complexity 35 (threshold 15). Drivers by points: if/else 12 (31 pts), match/switch 2 (4 pts) (nesting depth added 21). 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":"embassy-usb-host/src/class/uac/descriptors.rs"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed2a284a190046b69eb4cada5db01985e09696ddafd1e9cb5def79a281fdcd3c"}},{"ruleId":"D2","level":"warning","message":{"text":"Runner::check_status (cognitive 34): Runner::check_status has cognitive complexity 34 (threshold 15). Drivers by points: if/else 11 (30 pts), match/switch 1 (2 pts), boolean chains 1, loops 1 (nesting depth added 20). 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":"cyw43/src/runner.rs"},"region":{"startLine":987}}}],"partialFingerprints":{"codehealthFindingId/v1":"09ad6ab4561660c2efd6c222d23ef4242131f83ac9249db7b565721eacb51771"}},{"ruleId":"D2","level":"warning","message":{"text":"SimplePwm::set_frequency (cognitive 34): SimplePwm::set_frequency has cognitive complexity 34 (threshold 15). Drivers by points: if/else 11 (24 pts), loops 3 (4 pts), match/switch 3 (4 pts), boolean chains 2 (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":"embassy-mspm0/src/tim/simple_pwm.rs"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"70ac21ea7813377c8cd4b42d344a0f389f4613c5eec1942a4054a16a66c32b73"}},{"ruleId":"D2","level":"warning","message":{"text":"ParsedAdvData::parse (cognitive 34): ParsedAdvData::parse has cognitive complexity 34 (threshold 15). Drivers by points: if/else 8 (24 pts), loops 3 (7 pts), match/switch 1 (2 pts), boolean chains 1 (nesting depth added 21). 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":"embassy-stm32-wpan/src/bluetooth/gap/scanner.rs"},"region":{"startLine":290}}}],"partialFingerprints":{"codehealthFindingId/v1":"75aef97f8f7ba7d8cddef4ff718a3e43dc07cb43ae6ad16b6c1ed05febbdaac7"}},{"ruleId":"D2","level":"warning","message":{"text":"r#wifi_sta_config::decode (cognitive 33): r#wifi_sta_config::decode has cognitive complexity 33 (threshold 15). Drivers by points: if/else 10 (30 pts), match/switch 1 (2 pts), loops 1 (nesting depth added 21). 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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":5646}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd4db8b4ec5858861d3dda19a339f865661f4f93605a07fa642e3eccbb5c791c"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_crypto_test::p384::arith (cognitive 32): embassy_crypto_test::p384::arith has cognitive complexity 32 (threshold 15). Drivers by points: if/else 21, boolean chains 11. 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. This shape REPEATS in the file: one other method here (embassy_crypto_test::p256::arith) 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":"embassy-crypto-test/src/lib.rs"},"region":{"startLine":1035}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c6bd8986394f51569673a0767ca1d5ceeb2318c0c58d0a82bae3bc453d159e2"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_crypto_test::p256::arith (cognitive 32): embassy_crypto_test::p256::arith has cognitive complexity 32 (threshold 15). Drivers by points: if/else 21, boolean chains 11. 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. This shape REPEATS in the file: one other method here (embassy_crypto_test::p384::arith) 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":"embassy-crypto-test/src/lib.rs"},"region":{"startLine":1035}}}],"partialFingerprints":{"codehealthFindingId/v1":"4af55a07a2cf0d32a4e3530001adf5a38997a54b1dbd17380b31c68d4223491f"}},{"ruleId":"D2","level":"warning","message":{"text":"I3c::listen (cognitive 32): I3c::listen has cognitive complexity 32 (threshold 15). Drivers by points: if/else 13 (27 pts), boolean chains 4, loops 1 (nesting depth added 14). 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":"embassy-mcxa/src/i3c/target.rs"},"region":{"startLine":1276}}}],"partialFingerprints":{"codehealthFindingId/v1":"53264fcf70a120041c54e2e62c07fca20a60effb5dc9dbd97ecabe7a5ca22eb3"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_rp::clocks::find_pll_params (cognitive 32): embassy_rp::clocks::find_pll_params has cognitive complexity 32 (threshold 15). Drivers by points: if/else 6 (17 pts), loops 6 (12 pts), boolean chains 3 (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":"embassy-rp/src/clocks.rs"},"region":{"startLine":905}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf3a0a11b10dc6f5b6cc0c93f9a3e3e2c89bb3e13f1b9def7e9566f55986b661"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_stm32::rcc::l::init (cognitive 32): embassy_stm32::rcc::l::init has cognitive complexity 32 (threshold 15). Drivers by points: loops 11 (12 pts), match/switch 10, if/else 9, boolean chains 1 (nesting depth added 1). 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":"embassy-stm32/src/rcc/l.rs"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"0afeb9ab88bd31343c8e649d3ec7eb464d13d251308d796b3670b101ba7ab4d2"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_stm32_wpan::wba::linklayer_plat::BLECB_Indication (cognitive 32): embassy_stm32_wpan::wba::linklayer_plat::BLECB_Indication has cognitive complexity 32 (threshold 15). Drivers by points: if/else 19 (29 pts), boolean chains 3 (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":"embassy-stm32-wpan/src/wba/linklayer_plat.rs"},"region":{"startLine":1728}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e436c781e627943c4761076218293bf757af9e6e85d4611934f94ec2bf323c4"}},{"ruleId":"D2","level":"warning","message":{"text":"MainClkConfig::set_clock_source_and_rate (cognitive 31): MainClkConfig::set_clock_source_and_rate has cognitive complexity 31 (threshold 15). Drivers by points: if/else 11 (19 pts), match/switch 3 (9 pts), boolean chains 3 (nesting depth added 14). 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":"embassy-imxrt/src/clocks.rs"},"region":{"startLine":990}}}],"partialFingerprints":{"codehealthFindingId/v1":"2fe58e4e2af3c66656696350d7f6a6e5e2386b279a6af16b8fd7f7312ff1973f"}},{"ruleId":"D2","level":"warning","message":{"text":"I2c::blocking_read_timeout (cognitive 31): I2c::blocking_read_timeout has cognitive complexity 31 (threshold 15). Drivers by points: loops 7 (18 pts), if/else 6 (9 pts), boolean chains 2, match/switch 1 (2 pts) (nesting depth added 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i2c/v1.rs"},"region":{"startLine":293}}}],"partialFingerprints":{"codehealthFindingId/v1":"e89b4467def7e1adcdd8eae38afc7213c8b78a090efa11bb6aef62cbb43813f4"}},{"ruleId":"D2","level":"warning","message":{"text":"Jpeg::decode_blocking (cognitive 31): Jpeg::decode_blocking has cognitive complexity 31 (threshold 15). Drivers by points: if/else 14 (19 pts), boolean chains 6, loops 3 (5 pts), 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":"embassy-stm32/src/jpeg.rs"},"region":{"startLine":617}}}],"partialFingerprints":{"codehealthFindingId/v1":"26a4a1e3f775ecccd14b3e3f3c3d153cb50c94caccf66b1338629b4f53b06bee"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_executor_macros::macros::task::run (cognitive 30): embassy_executor_macros::macros::task::run has cognitive complexity 30 (threshold 15). Drivers by points: match/switch 9 (15 pts), if/else 11, boolean chains 2, loops 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":"embassy-executor-macros/src/macros/task.rs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"86288fa6bd4502199c27a3221d31a0dd249e7d2e66c8c14ec1abb92a9547d293"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_mspm0::uart::buffered::on_interrupt (cognitive 30): embassy_mspm0::uart::buffered::on_interrupt has cognitive complexity 30 (threshold 15). Drivers by points: if/else 16 (25 pts), loops 2 (4 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":"embassy-mspm0/src/uart/buffered.rs"},"region":{"startLine":1017}}}],"partialFingerprints":{"codehealthFindingId/v1":"da595d8807b1a730e9e89787d2754cebeb37064ce08510e5e8697056d2984f18"}},{"ruleId":"D2","level":"warning","message":{"text":"Rpc_Req_ExtCoex::decode (cognitive 30): Rpc_Req_ExtCoex::decode has cognitive complexity 30 (threshold 15). Drivers by points: if/else 9 (27 pts), match/switch 1 (2 pts), loops 1 (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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":39856}}}],"partialFingerprints":{"codehealthFindingId/v1":"f114b2f51ceaac105b0d08099a87b77aef32fe804ab906496fb3d28032a9a58d"}},{"ruleId":"D2","level":"warning","message":{"text":"Regs::configure_sequence (cognitive 30): Regs::configure_sequence has cognitive complexity 30 (threshold 15). Drivers by points: if/else 14 (20 pts), loops 2 (4 pts), boolean chains 3, match/switch 1 (3 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":"embassy-stm32/src/adc/v3.rs"},"region":{"startLine":375}}}],"partialFingerprints":{"codehealthFindingId/v1":"44b5a97309d3b4e6751d78f40c1cbb6c409b0a03e3c821c0744173d6ddc98011"}},{"ruleId":"D2","level":"warning","message":{"text":"I2c::write_bytes (cognitive 30): I2c::write_bytes has cognitive complexity 30 (threshold 15). Drivers by points: if/else 9 (15 pts), loops 5 (9 pts), boolean chains 3, match/switch 1 (3 pts) (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":"embassy-stm32/src/i2c/v1.rs"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"697b11c0a164c71492bb43d9c03ad51abaef755acc6357bc85b8a5f2ed558941"}},{"ruleId":"D2","level":"warning","message":{"text":"I2c::execute_read_group_async (cognitive 30): I2c::execute_read_group_async has cognitive complexity 30 (threshold 15). Drivers by points: if/else 14 (27 pts), boolean chains 2, loops 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":"embassy-stm32/src/i2c/v2.rs"},"region":{"startLine":1384}}}],"partialFingerprints":{"codehealthFindingId/v1":"adfc6d6706437165129dcd01abd3336adbda0c463bfe4da14ecb8b2988208dd7"}},{"ruleId":"D2","level":"warning","message":{"text":"I3c::async_read_internal (cognitive 29): I3c::async_read_internal has cognitive complexity 29 (threshold 15). Drivers by points: if/else 15 (27 pts), boolean chains 1, loops 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":"embassy-mcxa/src/i3c/controller.rs"},"region":{"startLine":1101}}}],"partialFingerprints":{"codehealthFindingId/v1":"386fec37ef322e2f92ef150a7ed5f72dc5296c91ecf6fd64e02bccaef52221e7"}},{"ruleId":"D2","level":"warning","message":{"text":"Runner::run (cognitive 29): Runner::run has cognitive complexity 29 (threshold 15). Drivers by points: if/else 5 (15 pts), match/switch 3 (10 pts), loops 2 (3 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":"embassy-net-adin1110/src/lib.rs"},"region":{"startLine":522}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd273e25f2ab569815354d963f5afe3ba95c26bdde63207261fafd9b85d7e6a1"}},{"ruleId":"D2","level":"warning","message":{"text":"Regs::configure_sequence (cognitive 29): Regs::configure_sequence has cognitive complexity 29 (threshold 15). Drivers by points: if/else 12 (21 pts), loops 4 (5 pts), match/switch 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":"embassy-stm32/src/adc/v2.rs"},"region":{"startLine":397}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbd76e468f1a77cca2b03f102a34f8909541fa732becf587f1c6dd73441b9224"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_stm32::rcc::c5::init (cognitive 29): embassy_stm32::rcc::c5::init has cognitive complexity 29 (threshold 15). Drivers by points: loops 11 (17 pts), match/switch 5 (7 pts), if/else 4, boolean chains 1 (nesting depth added 8). 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":"embassy-stm32/src/rcc/c5.rs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ca5b0a623d000e8026bac5f7032280dfba51ef135ee6782a62f10d8911c0ac9"}},{"ruleId":"D2","level":"warning","message":{"text":"Control::control_in (cognitive 29): Control::control_in has cognitive complexity 29 (threshold 15). Drivers by points: if/else 9 (18 pts), match/switch 5 (11 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":"embassy-usb/src/class/hid.rs"},"region":{"startLine":565}}}],"partialFingerprints":{"codehealthFindingId/v1":"c67dce2e9ecf8c5cc56520665601dcfe7941b0d39b03d7226163068c0cef6d96"}},{"ruleId":"D2","level":"warning","message":{"text":"Twim::setup_operations (cognitive 28): Twim::setup_operations has cognitive complexity 28 (threshold 15). Drivers by points: if/else 15 (26 pts), boolean chains 1, match/switch 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":"embassy-nrf/src/twim.rs"},"region":{"startLine":520}}}],"partialFingerprints":{"codehealthFindingId/v1":"d24eb5f6d3a1db7fd279e30398aeda3a4a1da3383f8c5d16e11e6db7b839615d"}},{"ruleId":"D2","level":"warning","message":{"text":"BufferedInterruptHandler::on_interrupt (cognitive 28): BufferedInterruptHandler::on_interrupt has cognitive complexity 28 (threshold 15). Drivers by points: if/else 14 (23 pts), loops 2 (4 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":"embassy-rp/src/uart/buffered.rs"},"region":{"startLine":689}}}],"partialFingerprints":{"codehealthFindingId/v1":"485663fd015ba12684917d3447fe088e8444976cbcee266bb1c87c87626f248d"}},{"ruleId":"D2","level":"warning","message":{"text":"Ospi::configure_octospim_data_group (cognitive 28): Ospi::configure_octospim_data_group has cognitive complexity 28 (threshold 15). Drivers by points: if/else 14 (28 pts) (nesting depth added 14). 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":"embassy-stm32/src/ospi/mod.rs"},"region":{"startLine":419}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc106c7a78e20f8a88e721eaedacd72aac77c38b2f07f72901b5a5c7e29bb594"}},{"ruleId":"D2","level":"warning","message":{"text":"ClockOperator::configure_osc32k_clocks (cognitive 27): ClockOperator::configure_osc32k_clocks has cognitive complexity 27 (threshold 15). Drivers by points: if/else 9 (12 pts), match/switch 5 (8 pts), loops 4 (7 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":"embassy-mcxa/src/clocks/operator.rs"},"region":{"startLine":449}}}],"partialFingerprints":{"codehealthFindingId/v1":"aba2a860ef895554bff342c6244c5ded0d74091a99a6cd7fdb714cc07319bbdd"}},{"ruleId":"D2","level":"warning","message":{"text":"r#wifi_config::decode (cognitive 27): r#wifi_config::decode has cognitive complexity 27 (threshold 15). Drivers by points: if/else 4 (18 pts), loops 3 (7 pts), match/switch 1 (2 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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":6234}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c73e1ce7cca1d8178785bb69d1c642a14a0f01241b2974ffaed0c71e94cf32d"}},{"ruleId":"D2","level":"warning","message":{"text":"Rpc_Resp_GetCoprocessorFwVersion::decode (cognitive 27): Rpc_Resp_GetCoprocessorFwVersion::decode has cognitive complexity 27 (threshold 15). Drivers by points: if/else 8 (24 pts), match/switch 1 (2 pts), loops 1 (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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":31275}}}],"partialFingerprints":{"codehealthFindingId/v1":"20e1998c3877cff4d6835ef3276ba28192d051745db47a62b9ad956e70b42246"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_stm32::dma::dma_bdma::on_irq (cognitive 27): embassy_stm32::dma::dma_bdma::on_irq has cognitive complexity 27 (threshold 15). Drivers by points: if/else 11 (22 pts), boolean chains 4, match/switch 1 (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":"embassy-stm32/src/dma/dma_bdma.rs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"b717d923c4c3030e9e394eecc6a80b7c45277b9ff645966821c225364ebc9443"}},{"ruleId":"D2","level":"warning","message":{"text":"MainPllClkConfig::set_clock_rate (cognitive 26): MainPllClkConfig::set_clock_rate has cognitive complexity 26 (threshold 15). Drivers by points: match/switch 4 (12 pts), if/else 5 (10 pts), loops 1 (3 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":"embassy-imxrt/src/clocks.rs"},"region":{"startLine":713}}}],"partialFingerprints":{"codehealthFindingId/v1":"848efe984303ea896c4639e27ef33a9d38ffdffc10de1f6d7f8dfcdfef4f482f"}},{"ruleId":"D2","level":"warning","message":{"text":"StateMachine::set_config (cognitive 26): StateMachine::set_config has cognitive complexity 26 (threshold 15). Drivers by points: if/else 9 (11 pts), boolean chains 7, loops 4 (6 pts), match/switch 2 (nesting depth added 4). 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":"embassy-rp/src/pio/mod.rs"},"region":{"startLine":790}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb2a5ac7d578fbcf1fde4b1cf8c97acf32bc50230ca59db074a9a6ac29755872"}},{"ruleId":"D2","level":"warning","message":{"text":"UartRx::read_to_break_with_count (cognitive 26): UartRx::read_to_break_with_count has cognitive complexity 26 (threshold 15). Drivers by points: if/else 9 (15 pts), match/switch 4 (8 pts), boolean chains 2, loops 1 (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":"embassy-rp/src/uart/mod.rs"},"region":{"startLine":607}}}],"partialFingerprints":{"codehealthFindingId/v1":"008265b4bd80f44f8afba5069d9566ecb66f1e812ef160503aa33980f743652f"}},{"ruleId":"D2","level":"warning","message":{"text":"AesDriver::apply_keystream (cognitive 26): AesDriver::apply_keystream has cognitive complexity 26 (threshold 15). Drivers by points: if/else 8 (14 pts), loops 4 (12 pts) (nesting depth added 14). 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. This shape REPEATS in the file: one other method here (AesDriver::apply_keystream) 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":"embassy-stm32/src/crypto_driver.rs"},"region":{"startLine":830}}}],"partialFingerprints":{"codehealthFindingId/v1":"881ce198ddab7a1542df6ee1954f6bae2dfb44be2e4a0e3f62ef2fc2f21ee2ef"}},{"ruleId":"D2","level":"warning","message":{"text":"AesDriver::apply_keystream (cognitive 26): AesDriver::apply_keystream has cognitive complexity 26 (threshold 15). Drivers by points: if/else 8 (14 pts), loops 4 (12 pts) (nesting depth added 14). 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. This shape REPEATS in the file: one other method here (AesDriver::apply_keystream) 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":"embassy-stm32/src/crypto_driver.rs"},"region":{"startLine":919}}}],"partialFingerprints":{"codehealthFindingId/v1":"c86a3bf92b57a3e0ac6e08c6ff049794ea7f399122792f8d0842a41be4bf3e3a"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_stm32::rcc::wba::init (cognitive 26): embassy_stm32::rcc::wba::init has cognitive complexity 26 (threshold 15). Drivers by points: match/switch 12 (17 pts), loops 5 (6 pts), if/else 3 (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":"embassy-stm32/src/rcc/wba.rs"},"region":{"startLine":264}}}],"partialFingerprints":{"codehealthFindingId/v1":"7866d65a472c2abfaa0ff59f02e5a4ffd12a325c2c8449b1708193970da000e2"}},{"ruleId":"D2","level":"warning","message":{"text":"Bus::configure_endpoints (cognitive 26): Bus::configure_endpoints has cognitive complexity 26 (threshold 15). Drivers by points: if/else 10 (22 pts), loops 4 (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":"embassy-usb-synopsys-otg/src/lib.rs"},"region":{"startLine":1139}}}],"partialFingerprints":{"codehealthFindingId/v1":"44ef61cb270f72aa809af16e096fdd96b718456b9098501cd355dd0d923b65af"}},{"ruleId":"D2","level":"warning","message":{"text":"StateInner::handle_data (cognitive 25): StateInner::handle_data has cognitive complexity 25 (threshold 15). Drivers by points: if/else 6 (17 pts), match/switch 4 (8 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":"embassy-net-nrf91/src/lib.rs"},"region":{"startLine":630}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad2ec2b511da8d54051e4aba5f59f40236d37e1009e2ee1a8d6a5bc9607fbe4f"}},{"ruleId":"D2","level":"warning","message":{"text":"Runner::run (cognitive 25): Runner::run has cognitive complexity 25 (threshold 15). Drivers by points: match/switch 7 (20 pts), if/else 1 (4 pts), loops 1 (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":"embassy-net-ppp/src/lib.rs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d64976ad8e91959d9e932cfb6cce76661f2d8b6aa088d78c2471f4120acb61d"}},{"ruleId":"D2","level":"warning","message":{"text":"Uart::init (cognitive 25): Uart::init has cognitive complexity 25 (threshold 15). Drivers by points: if/else 18 (25 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":"embassy-rp/src/uart/mod.rs"},"region":{"startLine":933}}}],"partialFingerprints":{"codehealthFindingId/v1":"809dd7618d070b10f2d9d783b81813f8cda781e7a6f033f5866c2fefecfc0653"}},{"ruleId":"D2","level":"warning","message":{"text":"I2c::write_dma_internal (cognitive 25): I2c::write_dma_internal has cognitive complexity 25 (threshold 15). Drivers by points: if/else 15 (17 pts), boolean chains 6, loops 1 (2 pts) (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":"embassy-stm32/src/i2c/v2.rs"},"region":{"startLine":925}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3eecfa32d5f5e5c9628e8ad73c903e42755975167c93e059f71e11aedb5c6fa"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_stm32::rcc::l::pll::init_pll (cognitive 25): embassy_stm32::rcc::l::pll::init_pll has cognitive complexity 25 (threshold 15). Drivers by points: if/else 14 (23 pts), match/switch 2 (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":"embassy-stm32/src/rcc/l.rs"},"region":{"startLine":708}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd5317dd355b687c956ae440238f54790e0889243b27f38ef0a63cd8b42adb81"}},{"ruleId":"D2","level":"warning","message":{"text":"Inner::handle_control_in (cognitive 25): Inner::handle_control_in has cognitive complexity 25 (threshold 15). Drivers by points: if/else 6 (14 pts), match/switch 5 (10 pts), boolean chains 1 (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":"embassy-usb/src/lib.rs"},"region":{"startLine":598}}}],"partialFingerprints":{"codehealthFindingId/v1":"03e86a450be02da7e7800d5a7bd10326f3824128c5ae2d5700bba11aca3eb3a1"}},{"ruleId":"D2","level":"warning","message":{"text":"Inner::handle_get_descriptor (cognitive 25): Inner::handle_get_descriptor has cognitive complexity 25 (threshold 15). Drivers by points: if/else 5 (12 pts), loops 3 (9 pts), match/switch 2 (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":"embassy-usb/src/lib.rs"},"region":{"startLine":695}}}],"partialFingerprints":{"codehealthFindingId/v1":"76e74521c247d6666a7792a926f3bd56a2e890c56b38cc3ad0c1a4cdf9ecef1f"}},{"ruleId":"D2","level":"warning","message":{"text":"I3c::async_wait_for_ibi (cognitive 24): I3c::async_wait_for_ibi has cognitive complexity 24 (threshold 15). Drivers by points: if/else 6 (12 pts), loops 3 (7 pts), boolean chains 4, match/switch 1 (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":"embassy-mcxa/src/i3c/controller.rs"},"region":{"startLine":1604}}}],"partialFingerprints":{"codehealthFindingId/v1":"315f56bff98322c2fe794b7848cc7cec29070e961a840cf4830e61727c5bc5f5"}},{"ruleId":"D2","level":"warning","message":{"text":"InterruptHandler::on_interrupt (cognitive 24): InterruptHandler::on_interrupt has cognitive complexity 24 (threshold 15). Drivers by points: if/else 13 (19 pts), boolean chains 5 (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":"embassy-mcxa/src/i3c/target.rs"},"region":{"startLine":1437}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a8b8fd4bb9295cfb37875d63477ce32dd08d028e6a763a1a041d03548fb5654"}},{"ruleId":"D2","level":"warning","message":{"text":"Spi::blocking_transfer (cognitive 24): Spi::blocking_transfer has cognitive complexity 24 (threshold 15). Drivers by points: loops 9 (20 pts), if/else 3, boolean chains 1 (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":"embassy-mcxa/src/spi/controller.rs"},"region":{"startLine":303}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc72dc89688a6f0d0e870656b60c74c2ccb301462008bc5207abbc430383c3f6"}},{"ruleId":"D2","level":"warning","message":{"text":"CtrlMsg_Resp_GetSoftAPConfig::decode (cognitive 24): CtrlMsg_Resp_GetSoftAPConfig::decode has cognitive complexity 24 (threshold 15). Drivers by points: if/else 7 (21 pts), match/switch 1 (2 pts), loops 1 (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":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":2753}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0fcb266f134fce9db47449536df3a0a216734b09d0f43cba5cb2452d8640b79"}},{"ruleId":"D2","level":"warning","message":{"text":"r#wifi_init_config::encode (cognitive 24): r#wifi_init_config::encode has cognitive complexity 24 (threshold 15). Drivers by points: if/else 24. 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. This shape REPEATS in the file: one other method here (r#wifi_init_config::compute_size) 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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":1040}}}],"partialFingerprints":{"codehealthFindingId/v1":"4eaae319b4cd23ff41e31ded4c71dc15fd020473627020f1da4768c5ad20d780"}},{"ruleId":"D2","level":"warning","message":{"text":"r#wifi_init_config::compute_size (cognitive 24): r#wifi_init_config::compute_size has cognitive complexity 24 (threshold 15). Drivers by points: if/else 24. 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. This shape REPEATS in the file: one other method here (r#wifi_init_config::encode) 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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":1215}}}],"partialFingerprints":{"codehealthFindingId/v1":"5eb38db6bfb892b7449a5bcffd746572468772b7740c1e751171736c20f627bd"}},{"ruleId":"D2","level":"warning","message":{"text":"r#wifi_csi_config::decode (cognitive 24): r#wifi_csi_config::decode has cognitive complexity 24 (threshold 15). Drivers by points: if/else 7 (21 pts), match/switch 1 (2 pts), loops 1 (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. This shape REPEATS in the file: one other method here (r#wifi_ftm_report_entry::decode) 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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":8314}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3bd29562ba1bd09e6cf0fff24972ec6b4ae44f0a5cb0d3f4c506a7be177c32e"}},{"ruleId":"D2","level":"warning","message":{"text":"r#wifi_ftm_report_entry::decode (cognitive 24): r#wifi_ftm_report_entry::decode has cognitive complexity 24 (threshold 15). Drivers by points: if/else 7 (21 pts), match/switch 1 (2 pts), loops 1 (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. This shape REPEATS in the file: one other method here (r#wifi_csi_config::decode) 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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":11973}}}],"partialFingerprints":{"codehealthFindingId/v1":"473f1d802fa3bcfda2f2c37e95d49490be920fed971edafeb461ef363fb0b58b"}},{"ruleId":"D2","level":"warning","message":{"text":"InterruptHandler::on_interrupt (cognitive 24): InterruptHandler::on_interrupt has cognitive complexity 24 (threshold 15). Drivers by points: if/else 11 (24 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":"embassy-nrf/src/buffered_uarte/v2.rs"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"036317ce7b26b99098019752ac3617f1f1fd238926217dcef781f87dff41d0cb"}},{"ruleId":"D2","level":"warning","message":{"text":"Hash::update (cognitive 24): Hash::update has cognitive complexity 24 (threshold 15). Drivers by points: if/else 11 (16 pts), loops 4 (6 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":"embassy-stm32/src/hash/mod.rs"},"region":{"startLine":848}}}],"partialFingerprints":{"codehealthFindingId/v1":"12141f518d5325e1f558200de6b5156ec98d4c4249ff1ff5b4a206dcafb94ab7"}},{"ruleId":"D2","level":"warning","message":{"text":"I2c::write_dma_internal_slave (cognitive 24): I2c::write_dma_internal_slave has cognitive complexity 24 (threshold 15). Drivers by points: if/else 16 (23 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":"embassy-stm32/src/i2c/v2.rs"},"region":{"startLine":2238}}}],"partialFingerprints":{"codehealthFindingId/v1":"41a86dfa161372d8129268ddcff78b2c20427f119d27810b6a674d4cabab8bdd"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_stm32::rcc::f247::init_pll (cognitive 24): embassy_stm32::rcc::f247::init_pll has cognitive complexity 24 (threshold 15). Drivers by points: if/else 14 (18 pts), match/switch 5 (6 pts) (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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/f247.rs"},"region":{"startLine":431}}}],"partialFingerprints":{"codehealthFindingId/v1":"013302f717a16fab087115a5e311c1f2cfc06243322e15408a56d266393ad691"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_stm32::init_hw (cognitive 24): embassy_stm32::init_hw has cognitive complexity 24 (threshold 15). Drivers by points: if/else 22, loops 1 (2 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":"embassy-stm32/src/lib.rs"},"region":{"startLine":792}}}],"partialFingerprints":{"codehealthFindingId/v1":"db66014f37ff4275354bca42bddbf67b0500f97a63a76cb4d52074929e64166c"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_stm32::rcc::n6::init_clocks (cognitive 24): embassy_stm32::rcc::n6::init_clocks has cognitive complexity 24 (threshold 15). Drivers by points: if/else 12 (14 pts), match/switch 6, loops 3, boolean chains 1 (nesting depth added 2). 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/n6.rs"},"region":{"startLine":282}}}],"partialFingerprints":{"codehealthFindingId/v1":"5def05d5ac3a4dc55f1e640d610deb4cf2e6d5ad3d837df69d1287bc96825ed8"}},{"ruleId":"D2","level":"warning","message":{"text":"ClockOperator::configure_firc_clocks (cognitive 23): ClockOperator::configure_firc_clocks has cognitive complexity 23 (threshold 15). Drivers by points: if/else 12 (15 pts), loops 3 (5 pts), boolean chains 2, match/switch 1 (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":"embassy-mcxa/src/clocks/operator.rs"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"d495133338ef7d93dc09097f2e4bcc6cb1284983d11f332c8309d6075d532ef0"}},{"ruleId":"D2","level":"warning","message":{"text":"Executor::run (cognitive 23): Executor::run has cognitive complexity 23 (threshold 15). Drivers by points: if/else 7 (17 pts), loops 3 (5 pts), match/switch 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":"embassy-mcxa/src/executor.rs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"26099e55ed7fa55fb267753b95d60afb1efb7025161ab4e029bf23d2d8aef4f5"}},{"ruleId":"D2","level":"warning","message":{"text":"Rng::fill_bytes (cognitive 23): Rng::fill_bytes has cognitive complexity 23 (threshold 15). Drivers by points: if/else 8 (16 pts), loops 2 (4 pts), boolean chains 3 (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":"embassy-stm32/src/rng.rs"},"region":{"startLine":445}}}],"partialFingerprints":{"codehealthFindingId/v1":"197df06d4d1f3fb6a9d364c1df6469146f9571ae4cd45b340e48ca29eb7d0e8c"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_stm32::aes::common::op_aad (cognitive 23): embassy_stm32::aes::common::op_aad has cognitive complexity 23 (threshold 15). Drivers by points: loops 5 (12 pts), if/else 7 (9 pts), boolean chains 2 (nesting depth added 9). 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":"embassy-stm32/src/aes/common.rs"},"region":{"startLine":336}}}],"partialFingerprints":{"codehealthFindingId/v1":"0603541d2f36fdfca0990690aa0aa959e8f14a5b3dc43dba708f746bb4c441eb"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_stm32::usart::configure (cognitive 23): embassy_stm32::usart::configure has cognitive complexity 23 (threshold 15). Drivers by points: if/else 15 (18 pts), boolean chains 3, match/switch 2 (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":"embassy-stm32/src/usart/mod.rs"},"region":{"startLine":2601}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4ec68a1dd40adc8d3022c06b7d6407e3b70dd89b546667ac44ce155e1d17ef1"}},{"ruleId":"D2","level":"warning","message":{"text":"Driver::alloc_endpoint (cognitive 23): Driver::alloc_endpoint has cognitive complexity 23 (threshold 15). Drivers by points: if/else 13 (16 pts), match/switch 3 (5 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":"embassy-usb-synopsys-otg/src/lib.rs"},"region":{"startLine":558}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d096b0bd42cb2065fe29beb322f46757552cf2a68e20fb44462ea10cfa585c2"}},{"ruleId":"D2","level":"warning","message":{"text":"Bus::endpoint_set_enabled (cognitive 23): Bus::endpoint_set_enabled has cognitive complexity 23 (threshold 15). Drivers by points: if/else 8 (17 pts), boolean chains 5, match/switch 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":"embassy-usb-synopsys-otg/src/lib.rs"},"region":{"startLine":1472}}}],"partialFingerprints":{"codehealthFindingId/v1":"e72a2ba78da96838f366334e918b993f05cb33e8af8dfa5d8d7ef986e47659c3"}},{"ruleId":"D2","level":"warning","message":{"text":"Regs::configure_sequence (cognitive 22): Regs::configure_sequence has cognitive complexity 22 (threshold 15). Drivers by points: if/else 11 (13 pts), match/switch 2 (6 pts), loops 3 (nesting depth added 6). 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":"embassy-stm32/src/adc/v1.rs"},"region":{"startLine":296}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6611bf69465c3599ae3a976148266922e165520024e960ba3220a682b2b3bc5"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_nrf::gpiote::handle_gpiote_interrupt (cognitive 22): embassy_nrf::gpiote::handle_gpiote_interrupt has cognitive complexity 22 (threshold 15). Drivers by points: loops 5 (11 pts), if/else 3 (7 pts), match/switch 1 (4 pts) (nesting depth added 13). 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":"embassy-nrf/src/gpiote.rs"},"region":{"startLine":197}}}],"partialFingerprints":{"codehealthFindingId/v1":"b13250b3634b71e15317aaf9d8940d33c851a57e104cd6c4d7cf2a167265c21e"}},{"ruleId":"D2","level":"warning","message":{"text":"InterruptHandler::on_interrupt (cognitive 22): InterruptHandler::on_interrupt has cognitive complexity 22 (threshold 15). Drivers by points: if/else 15 (18 pts), loops 1 (2 pts), match/switch 1 (2 pts) (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":"embassy-rp/src/usb/host.rs"},"region":{"startLine":1845}}}],"partialFingerprints":{"codehealthFindingId/v1":"b57c5b52ba2a8c8f80a85cb0619d13db8d781435e3939e88480da6f005b9cb8c"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_stm32::spi::transfer_words (cognitive 22): embassy_stm32::spi::transfer_words has cognitive complexity 22 (threshold 15). Drivers by points: if/else 9 (16 pts), boolean chains 4, loops 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":"embassy-stm32/src/spi/mod.rs"},"region":{"startLine":2179}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b7c77bb2d6618d65928a35dac97191f8d9e0a9bb8dda88221009e285f9cd50b"}},{"ruleId":"D2","level":"warning","message":{"text":"BtRunner::upload_bluetooth_firmware (cognitive 21): BtRunner::upload_bluetooth_firmware has cognitive complexity 21 (threshold 15). Drivers by points: loops 5 (13 pts), if/else 5 (8 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":"cyw43/src/bluetooth.rs"},"region":{"startLine":229}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c00d1ac27d3392086504a2afa2de03f236c02fb3e44473af7239045d35fcd7e"}},{"ruleId":"D2","level":"warning","message":{"text":"Runner::handle_irq (cognitive 21): Runner::handle_irq has cognitive complexity 21 (threshold 15). Drivers by points: if/else 9 (20 pts), match/switch 1 (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":"cyw43/src/runner.rs"},"region":{"startLine":891}}}],"partialFingerprints":{"codehealthFindingId/v1":"99b525d2805ce4fb1c9315cbe41fa3fdc9d9e3838fbd5923f9e534eb2e42e38a"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_executor_macros::macros::main::run (cognitive 21): embassy_executor_macros::macros::main::run has cognitive complexity 21 (threshold 15). Drivers by points: match/switch 9 (11 pts), if/else 9, loops 1 (nesting depth added 2). 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":"embassy-executor-macros/src/macros/main.rs"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"00231014ed96392252e4dff7de1758ab32b7a8d9e6642ae75062ef5e957f1cd7"}},{"ruleId":"D2","level":"warning","message":{"text":"CtrlMsg_Req_StartSoftAP::decode (cognitive 21): CtrlMsg_Req_StartSoftAP::decode has cognitive complexity 21 (threshold 15). Drivers by points: if/else 6 (18 pts), match/switch 1 (2 pts), loops 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":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":3254}}}],"partialFingerprints":{"codehealthFindingId/v1":"00b87511cde4e4703b244849000fc0c7e0772ef09041a3729fb7cd9657cdedc1"}},{"ruleId":"D2","level":"warning","message":{"text":"CtrlMsg_Resp_GetFwVersion::decode (cognitive 21): CtrlMsg_Resp_GetFwVersion::decode has cognitive complexity 21 (threshold 15). Drivers by points: if/else 6 (18 pts), match/switch 1 (2 pts), loops 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":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":6503}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5f50884751ea4f1c7ce286641478dd904aea375b7a88ab863f18bea5ddcf0b1"}},{"ruleId":"D2","level":"warning","message":{"text":"CtrlMsg_Resp_GetDhcpDnsStatus::decode (cognitive 21): CtrlMsg_Resp_GetDhcpDnsStatus::decode has cognitive complexity 21 (threshold 15). Drivers by points: if/else 6 (18 pts), match/switch 1 (2 pts), loops 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":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":8080}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7c15ff4e914e7b3548cc88af9f795c0ab62f44aa4e599bfa2e60737b5136c71"}},{"ruleId":"D2","level":"warning","message":{"text":"CtrlMsg_Event_SetDhcpDnsStatus::decode (cognitive 21): CtrlMsg_Event_SetDhcpDnsStatus::decode has cognitive complexity 21 (threshold 15). Drivers by points: if/else 6 (18 pts), match/switch 1 (2 pts), loops 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":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":10181}}}],"partialFingerprints":{"codehealthFindingId/v1":"58b8c332dc23ec4ff2f2bb73ed82d34c8c7be1a5ad54030faf35edb921f9d08f"}},{"ruleId":"D2","level":"warning","message":{"text":"r#wifi_event_ftm_report::decode (cognitive 21): r#wifi_event_ftm_report::decode has cognitive complexity 21 (threshold 15). Drivers by points: if/else 6 (18 pts), match/switch 1 (2 pts), loops 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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":12380}}}],"partialFingerprints":{"codehealthFindingId/v1":"4dd009ceaefeb177912ea97745cc275b2fedf52e49296cd16d9d0c605011c519"}},{"ruleId":"D2","level":"warning","message":{"text":"r#wifi_itwt_setup_config::decode (cognitive 21): r#wifi_itwt_setup_config::decode has cognitive complexity 21 (threshold 15). Drivers by points: if/else 6 (18 pts), match/switch 1 (2 pts), loops 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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":13794}}}],"partialFingerprints":{"codehealthFindingId/v1":"1db3505381a076265e548cf7cd82dc38c564935ea595d0232281fc5311ddb073"}},{"ruleId":"D2","level":"warning","message":{"text":"Rpc_Resp_GetDhcpDnsStatus::decode (cognitive 21): Rpc_Resp_GetDhcpDnsStatus::decode has cognitive complexity 21 (threshold 15). Drivers by points: if/else 6 (18 pts), match/switch 1 (2 pts), loops 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. This shape REPEATS in the file: one other method here (Rpc_Event_DhcpDnsStatus::decode) 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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":32534}}}],"partialFingerprints":{"codehealthFindingId/v1":"578cd247142ae5fae16af6ab7b61fc037fecd211c871c59ec3a4c03857cf14ff"}},{"ruleId":"D2","level":"warning","message":{"text":"Rpc_Event_DhcpDnsStatus::decode (cognitive 21): Rpc_Event_DhcpDnsStatus::decode has cognitive complexity 21 (threshold 15). Drivers by points: if/else 6 (18 pts), match/switch 1 (2 pts), loops 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. This shape REPEATS in the file: one other method here (Rpc_Resp_GetDhcpDnsStatus::decode) 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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":40507}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e2a8fa76a724f2b5b287a51785fd671d6db2d8d05e4ce151d76d64450d568ea"}},{"ruleId":"D2","level":"warning","message":{"text":"Backend::process_serial_data (cognitive 21): Backend::process_serial_data has cognitive complexity 21 (threshold 15). Drivers by points: if/else 6 (16 pts), match/switch 3 (5 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":"embassy-net-esp-hosted/src/rpc/mod.rs"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3a6c45bdc9185c01677ae464ee3553d87979236fcd8854dc30bd9c18bb2ab76"}},{"ruleId":"D2","level":"warning","message":{"text":"Symmetric::aes_payload_raw (cognitive 21): Symmetric::aes_payload_raw has cognitive complexity 21 (threshold 15). Drivers by points: if/else 8 (17 pts), match/switch 2 (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":"embassy-nrf/src/crypto/symmetric/aes.rs"},"region":{"startLine":677}}}],"partialFingerprints":{"codehealthFindingId/v1":"97d4e36fa67f781720e33d99b6fcc1b9056bd8ae313c39d2db55dfb8ef95f8ca"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_nrf::crypto::pka::ecc_mul (cognitive 21): embassy_nrf::crypto::pka::ecc_mul has cognitive complexity 21 (threshold 15). Drivers by points: if/else 13 (20 pts), loops 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":"embassy-nrf/src/crypto/pka/mod.rs"},"region":{"startLine":610}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d034bbce37b018c6e44e1e86ba10038f801793a331b34a5e5cd850bde69c21c"}},{"ruleId":"D2","level":"warning","message":{"text":"Hash::start (cognitive 21): Hash::start has cognitive complexity 21 (threshold 15). Drivers by points: if/else 10 (11 pts), loops 3 (8 pts), boolean chains 2 (nesting depth added 6). 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":"embassy-stm32/src/hash/mod.rs"},"region":{"startLine":372}}}],"partialFingerprints":{"codehealthFindingId/v1":"a75d4ebbbc63eaf0753d5ce1829b72edf5cf37431f266c6ba37cf964e276a65a"}},{"ruleId":"D2","level":"warning","message":{"text":"I2c::execute_write_group (cognitive 21): I2c::execute_write_group has cognitive complexity 21 (threshold 15). Drivers by points: if/else 8 (13 pts), loops 3 (8 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":"embassy-stm32/src/i2c/v2.rs"},"region":{"startLine":666}}}],"partialFingerprints":{"codehealthFindingId/v1":"d84dca55a4a3f44790d4487db1482de3decf0f616aee60e7e559f0873fc57182"}},{"ruleId":"D2","level":"warning","message":{"text":"Jpeg::encode_blocking (cognitive 21): Jpeg::encode_blocking has cognitive complexity 21 (threshold 15). Drivers by points: if/else 8 (12 pts), boolean chains 5, loops 2 (4 pts) (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":"embassy-stm32/src/jpeg.rs"},"region":{"startLine":525}}}],"partialFingerprints":{"codehealthFindingId/v1":"92865d4f3bb39620e69d0415cd894721a99d0be14b523d95cca719f99ce3e86a"}},{"ruleId":"D2","level":"warning","message":{"text":"UartRx::inner_read_run (cognitive 21): UartRx::inner_read_run has cognitive complexity 21 (threshold 15). Drivers by points: if/else 15 (17 pts), boolean chains 3, match/switch 1 (nesting depth added 2). 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."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usart/mod.rs"},"region":{"startLine":1093}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a73fa0b2546364f85458729d33c8ee05839000799fb2864f5ec91cbb3f60cd9"}},{"ruleId":"D2","level":"warning","message":{"text":"Bus::endpoint_set_enabled (cognitive 21): Bus::endpoint_set_enabled has cognitive complexity 21 (threshold 15). Drivers by points: match/switch 4 (11 pts), if/else 2 (6 pts), loops 2 (4 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":"embassy-stm32/src/usb/usb.rs"},"region":{"startLine":693}}}],"partialFingerprints":{"codehealthFindingId/v1":"daff927b1a08c3718f0eef073973fd905f19e8e2ea84c226b5ab22473b241ab1"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_stm32::flash::h5::blocking_wait_ready (cognitive 21): embassy_stm32::flash::h5::blocking_wait_ready has cognitive complexity 21 (threshold 15). Drivers by points: if/else 7 (20 pts), loops 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":"embassy-stm32/src/flash/h5.rs"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"4459177975f66e7419216c97d545f26cbaf9100f5ec0e49365a8eef1b92efe56"}},{"ruleId":"D2","level":"warning","message":{"text":"DfuState::control_out (cognitive 21): DfuState::control_out has cognitive complexity 21 (threshold 15). Drivers by points: if/else 6 (11 pts), match/switch 4 (10 pts) (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":"embassy-usb/src/class/dfu/dfu_mode.rs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"98314f42d426a7a896d9a159c1c3e05bbda1996fe8fb65c0ca9f9aa10bf89f75"}},{"ruleId":"D2","level":"warning","message":{"text":"ClockOperator::configure_voltages (cognitive 20): ClockOperator::configure_voltages has cognitive complexity 20 (threshold 15). Drivers by points: if/else 6 (7 pts), match/switch 7, loops 3 (5 pts), boolean chains 1 (nesting depth added 3). 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":"embassy-mcxa/src/clocks/operator.rs"},"region":{"startLine":1300}}}],"partialFingerprints":{"codehealthFindingId/v1":"af3d59d5efe71d0c2c20d26cde11b5d111312cff7eac036e2c01c55da5218339"}},{"ruleId":"D2","level":"warning","message":{"text":"I3c::calculate_baud_rate_params (cognitive 20): I3c::calculate_baud_rate_params has cognitive complexity 20 (threshold 15). Drivers by points: if/else 14 (19 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":"embassy-mcxa/src/i3c/controller.rs"},"region":{"startLine":406}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c2305095dd2fb5c1afc832cc4034393d3b021490ecb6b6ea14a30e34f272bba"}},{"ruleId":"D2","level":"warning","message":{"text":"Rpc_Event_StaItwtSuspend::decode (cognitive 20): Rpc_Event_StaItwtSuspend::decode has cognitive complexity 20 (threshold 15). Drivers by points: if/else 6 (17 pts), match/switch 1 (2 pts), loops 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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":41504}}}],"partialFingerprints":{"codehealthFindingId/v1":"705fb1b054db95bae52e1d2a509cfbc87356978aaff726de2ffa2d8126c48c3c"}},{"ruleId":"D2","level":"warning","message":{"text":"I2c::read_dma_internal (cognitive 20): I2c::read_dma_internal has cognitive complexity 20 (threshold 15). Drivers by points: if/else 12 (15 pts), loops 2 (4 pts), boolean chains 1 (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":"embassy-stm32/src/i2c/v2.rs"},"region":{"startLine":1061}}}],"partialFingerprints":{"codehealthFindingId/v1":"637325641ffddf9c2e6f178484cc41a1b6ea51d8a39a6ccee4cf0de3ed6a35b0"}},{"ruleId":"D2","level":"warning","message":{"text":"PlanarSink::push (cognitive 20): PlanarSink::push has cognitive complexity 20 (threshold 15). Drivers by points: if/else 6 (17 pts), loops 1 (2 pts), match/switch 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":"embassy-stm32/src/jpeg.rs"},"region":{"startLine":858}}}],"partialFingerprints":{"codehealthFindingId/v1":"48a5f330537dce3712e47fb1873e56538fb866f7bfff46503044cba5c36d1e7b"}},{"ruleId":"D2","level":"warning","message":{"text":"Xspi::configure_command (cognitive 20): Xspi::configure_command has cognitive complexity 20 (threshold 15). Drivers by points: if/else 14 (18 pts), boolean chains 2 (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":"embassy-stm32/src/xspi/mod.rs"},"region":{"startLine":486}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a00068ecb216cdfb3db6fa34c2008a384e8eae2259141bbde6ca2b11e59b16a"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_stm32::rcc::g4::init (cognitive 20): embassy_stm32::rcc::g4::init has cognitive complexity 20 (threshold 15). Drivers by points: loops 7 (8 pts), match/switch 6 (7 pts), if/else 5 (nesting depth added 2). 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":"embassy-stm32/src/rcc/g4.rs"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"45690bc0111e3dc23622010180cd8a9262ddaf2274cf3c85cc8c72f1f01b8552"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_stm32::flash::l::wait_ready_blocking (cognitive 20): embassy_stm32::flash::l::wait_ready_blocking has cognitive complexity 20 (threshold 15). Drivers by points: if/else 13 (19 pts), loops 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":"embassy-stm32/src/flash/l.rs"},"region":{"startLine":347}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9ecf54750a697e344073655915c1017207f1b2111a99cc621e02136183e6ce0"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_stm32_wpan::bluetooth::gap_init::init_gap_and_hal (cognitive 20): embassy_stm32_wpan::bluetooth::gap_init::init_gap_and_hal has cognitive complexity 20 (threshold 15). Drivers by points: if/else 16 (19 pts), match/switch 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":"embassy-stm32-wpan/src/bluetooth/gap_init.rs"},"region":{"startLine":269}}}],"partialFingerprints":{"codehealthFindingId/v1":"0acf05248bbe58c434f7e555ca1bacf206723d23568477456c13682a8a9e9bc8"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_usb_host::class::cdc_acm::find_cdc_acm (cognitive 20): embassy_usb_host::class::cdc_acm::find_cdc_acm has cognitive complexity 20 (threshold 15). Drivers by points: if/else 7 (15 pts), loops 2 (4 pts), boolean chains 1 (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":"embassy-usb-host/src/class/cdc_acm.rs"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"8dc222941a6a045e5303ee1815cb30e5030aa4c56dc382cd4959e9ddceec289f"}},{"ruleId":"D2","level":"warning","message":{"text":"StreamingHasher::finalize (cognitive 19): StreamingHasher::finalize has cognitive complexity 19 (threshold 15). Drivers by points: if/else 15 (18 pts), loops 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":"embassy-mcxa/src/sgi/hash.rs"},"region":{"startLine":483}}}],"partialFingerprints":{"codehealthFindingId/v1":"38df972ecc74af7364c9e6e19089d80d3cfffaadfd4c16ad09cce2b2e95a7582"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_mspm0::uart::set_baudrate_inner (cognitive 19): embassy_mspm0::uart::set_baudrate_inner has cognitive complexity 19 (threshold 15). Drivers by points: if/else 6 (13 pts), boolean chains 3, loops 2 (3 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":"embassy-mspm0/src/uart/mod.rs"},"region":{"startLine":883}}}],"partialFingerprints":{"codehealthFindingId/v1":"c50a71c2b8adffce8b7795afc181fa812aed1bf02cf3b4d915d0e4e2720a6796"}},{"ruleId":"D2","level":"warning","message":{"text":"r#wifi_pkt_rx_ctrl::encode (cognitive 19): r#wifi_pkt_rx_ctrl::encode has cognitive complexity 19 (threshold 15). Drivers by points: if/else 19. 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. This shape REPEATS in the file: one other method here (r#wifi_pkt_rx_ctrl::compute_size) 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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":7564}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6d2f6baaa070575730eea762be14d0be978241add03ce46a353b07c26b3d756"}},{"ruleId":"D2","level":"warning","message":{"text":"r#wifi_pkt_rx_ctrl::compute_size (cognitive 19): r#wifi_pkt_rx_ctrl::compute_size has cognitive complexity 19 (threshold 15). Drivers by points: if/else 19. 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. This shape REPEATS in the file: one other method here (r#wifi_pkt_rx_ctrl::encode) 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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":7704}}}],"partialFingerprints":{"codehealthFindingId/v1":"7831ba35fe2d0d0049a6a2919dd6b9ad32697bcee3d5d4f67b4c1356034df6fe"}},{"ruleId":"D2","level":"warning","message":{"text":"IT0InterruptHandler::on_interrupt (cognitive 19): IT0InterruptHandler::on_interrupt has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10 (17 pts), boolean chains 1, 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":"embassy-stm32/src/can/fdcan.rs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e244b26c904c02f0e5e57506ca2531991ff9cf0b0943e85cae4bf837dd77764"}},{"ruleId":"D2","level":"warning","message":{"text":"Channel::configure (cognitive 19): Channel::configure has cognitive complexity 19 (threshold 15). Drivers by points: if/else 5 (7 pts), match/switch 6, boolean chains 4, loops 1 (2 pts) (nesting depth added 3). 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":"embassy-stm32/src/dma/gpdma/mod.rs"},"region":{"startLine":629}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c2ecaa8238c54708f88ca3c1eeff2cb21840074e976b8ca13a9ab37a36e2c4d"}},{"ruleId":"D2","level":"warning","message":{"text":"I2c::execute_slave_transmit_transfer (cognitive 19): I2c::execute_slave_transmit_transfer has cognitive complexity 19 (threshold 15). Drivers by points: if/else 6 (9 pts), match/switch 3 (8 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":"embassy-stm32/src/i2c/v1.rs"},"region":{"startLine":1870}}}],"partialFingerprints":{"codehealthFindingId/v1":"60329d42915e86718a577d6d966c64d13633fd585cc01c438cb902a47e85dd34"}},{"ruleId":"D2","level":"warning","message":{"text":"I2c::write_internal (cognitive 19): I2c::write_internal has cognitive complexity 19 (threshold 15). Drivers by points: if/else 8 (15 pts), loops 2 (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":"embassy-stm32/src/i2c/v2.rs"},"region":{"startLine":507}}}],"partialFingerprints":{"codehealthFindingId/v1":"7cf35ee85b65e49087fa3cba2dca7da806b35571b60dc1ae56b6644dcb1a9ff9"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_stm32::rcc::g0::init (cognitive 19): embassy_stm32::rcc::g0::init has cognitive complexity 19 (threshold 15). Drivers by points: loops 7 (8 pts), match/switch 6 (7 pts), if/else 4 (nesting depth added 2). 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":"embassy-stm32/src/rcc/g0.rs"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"3901c3737c20ac3b300d3573237bdfcffa025df78371b47a0adabe79a97e9ae4"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_stm32::rcc::c0::init (cognitive 19): embassy_stm32::rcc::c0::init has cognitive complexity 19 (threshold 15). Drivers by points: loops 7 (9 pts), match/switch 5 (6 pts), if/else 4 (nesting depth added 3). 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":"embassy-stm32/src/rcc/c0.rs"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"3abddb68382b527057977ffc26a7495654c5f8a1b5b9553295c5de99aee86a24"}},{"ruleId":"D2","level":"warning","message":{"text":"Runner::run (cognitive 19): Runner::run has cognitive complexity 19 (threshold 15). Drivers by points: if/else 5 (11 pts), match/switch 2 (5 pts), loops 3 (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":"embassy-stm32-wpan/src/net/runner.rs"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"4cac63ce24ba326ccad688dcb4ba3242548ec599a7438c3bdbd13c570270a540"}},{"ruleId":"D2","level":"warning","message":{"text":"AudioSourceControlHandler::handle_control_in (cognitive 19): AudioSourceControlHandler::handle_control_in has cognitive complexity 19 (threshold 15). Drivers by points: if/else 7 (13 pts), match/switch 2 (4 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":"embassy-usb/src/class/uac1/source.rs"},"region":{"startLine":398}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a96bb39a9dc9992a83f7fa28c5788691f4195e718f85d79158daab9b8faeb30"}},{"ruleId":"D2","level":"warning","message":{"text":"AudioSourceControlHandler::handle_ep_out (cognitive 19): AudioSourceControlHandler::handle_ep_out has cognitive complexity 19 (threshold 15). Drivers by points: if/else 6 (15 pts), match/switch 2 (4 pts) (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":"embassy-usb/src/class/uac1/source.rs"},"region":{"startLine":567}}}],"partialFingerprints":{"codehealthFindingId/v1":"2eec1ae6de5b2892defd36ea35625ac47af3f70660434b75bd2c6770022ab101"}},{"ruleId":"D2","level":"warning","message":{"text":"AudioCollectionBuilder::on_interface (cognitive 19): AudioCollectionBuilder::on_interface has cognitive complexity 19 (threshold 15). Drivers by points: if/else 9 (15 pts), match/switch 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":"embassy-usb-host/src/class/uac/descriptors.rs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"7402179dd59a5bef6e14a8b81c03a1d4efc91f0a32a81aa2586d38e02757a69b"}},{"ruleId":"D2","level":"warning","message":{"text":"Bus::poll (cognitive 19): Bus::poll has cognitive complexity 19 (threshold 15). Drivers by points: if/else 11 (16 pts), boolean chains 3 (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":"embassy-usb-synopsys-otg/src/lib.rs"},"region":{"startLine":1290}}}],"partialFingerprints":{"codehealthFindingId/v1":"991620ed7e01b3dfa938a61067a3cb830ff9ab5595233c5137b6751cb3406c73"}},{"ruleId":"D2","level":"warning","message":{"text":"Runner::init (cognitive 18): Runner::init has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9 (10 pts), match/switch 6, boolean chains 2 (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":"cyw43/src/runner.rs"},"region":{"startLine":486}}}],"partialFingerprints":{"codehealthFindingId/v1":"d04ec6ed2efb7b4031a36a22d0719a6ac5b38f1619160750e2bea7dcb2e0152c"}},{"ruleId":"D2","level":"warning","message":{"text":"DmaChannel::setup_transfers (cognitive 18): DmaChannel::setup_transfers has cognitive complexity 18 (threshold 15). Drivers by points: if/else 16 (18 pts) (nesting depth added 2). 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":"embassy-mcxa/src/dma.rs"},"region":{"startLine":815}}}],"partialFingerprints":{"codehealthFindingId/v1":"753c20c72325c72793802c5ec741005ef454845a4e77a41b8a5888aa4ffc0c1c"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_net_adin1110::new_tc6 (cognitive 18): embassy_net_adin1110::new_tc6 has cognitive complexity 18 (threshold 15). Drivers by points: if/else 8 (11 pts), loops 4 (5 pts), match/switch 1 (2 pts) (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":"embassy-net-adin1110/src/lib.rs"},"region":{"startLine":862}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8211068867d55ec56b1496a45bfff207c0412a48a8ff908b792d610d16f6097"}},{"ruleId":"D2","level":"warning","message":{"text":"Runner::run (cognitive 18): Runner::run has cognitive complexity 18 (threshold 15). Drivers by points: if/else 7 (15 pts), match/switch 1 (2 pts), loops 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":"embassy-net-esp-hosted/src/lib.rs"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea115f71ba19e43a42d352446a1895beb5a7d8e671b4a978f7f7ac3e0d2f5264"}},{"ruleId":"D2","level":"warning","message":{"text":"CtrlMsg_Resp_GetAPConfig::decode (cognitive 18): CtrlMsg_Resp_GetAPConfig::decode has cognitive complexity 18 (threshold 15). Drivers by points: if/else 5 (15 pts), match/switch 1 (2 pts), loops 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":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":1691}}}],"partialFingerprints":{"codehealthFindingId/v1":"1921678c7d9623e00e4a9c4b3bdb0f86ca5319c8414aa7a4b37e010468c729d8"}},{"ruleId":"D2","level":"warning","message":{"text":"CtrlMsg_Req_SetDhcpDnsStatus::decode (cognitive 18): CtrlMsg_Req_SetDhcpDnsStatus::decode has cognitive complexity 18 (threshold 15). Drivers by points: if/else 5 (15 pts), match/switch 1 (2 pts), loops 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":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":7403}}}],"partialFingerprints":{"codehealthFindingId/v1":"25009942ae3738a0e9b4339eea7d20b9b6b426b8cf9a10778ba279c07523bc9b"}},{"ruleId":"D2","level":"warning","message":{"text":"CtrlMsg_Event_StationConnectedToAP::decode (cognitive 18): CtrlMsg_Event_StationConnectedToAP::decode has cognitive complexity 18 (threshold 15). Drivers by points: if/else 5 (15 pts), match/switch 1 (2 pts), loops 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":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":9132}}}],"partialFingerprints":{"codehealthFindingId/v1":"52b5199bac5764e4e37157b606657bab37e7a888061cbc02677506887d63cc3a"}},{"ruleId":"D2","level":"warning","message":{"text":"r#wifi_ap_config::encode (cognitive 18): r#wifi_ap_config::encode has cognitive complexity 18 (threshold 15). Drivers by points: if/else 18. 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. This shape REPEATS in the file: one other method here (r#wifi_ap_config::compute_size) 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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":4866}}}],"partialFingerprints":{"codehealthFindingId/v1":"4aef2d0106f5ab7bda7edbeee7bdf6af02f32a92cefa1a990a61449424586583"}},{"ruleId":"D2","level":"warning","message":{"text":"r#wifi_ap_config::compute_size (cognitive 18): r#wifi_ap_config::compute_size has cognitive complexity 18 (threshold 15). Drivers by points: if/else 18. 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. This shape REPEATS in the file: one other method here (r#wifi_ap_config::encode) 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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":4997}}}],"partialFingerprints":{"codehealthFindingId/v1":"e64e091d9e21631b09d5cf08b0436095a66a8a03710d845aeab37adc649c9052"}},{"ruleId":"D2","level":"warning","message":{"text":"r#wifi_ant_config::decode (cognitive 18): r#wifi_ant_config::decode has cognitive complexity 18 (threshold 15). Drivers by points: if/else 5 (15 pts), match/switch 1 (2 pts), loops 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. This shape REPEATS in the file: one other method here (Rpc_GpioConfig::decode) 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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":9359}}}],"partialFingerprints":{"codehealthFindingId/v1":"1574886b9703b42f8275d1974b4fbd33ae804155f5014596399f6708b72103d6"}},{"ruleId":"D2","level":"warning","message":{"text":"r#esp_app_desc::decode (cognitive 18): r#esp_app_desc::decode has cognitive complexity 18 (threshold 15). Drivers by points: if/else 5 (15 pts), match/switch 1 (2 pts), loops 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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":14514}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e52710dc7922ce93e0fb8f7ad02897071bc107659d0665b4263ce2c7caeb3c3"}},{"ruleId":"D2","level":"warning","message":{"text":"Rpc_Req_SetDhcpDnsStatus::decode (cognitive 18): Rpc_Req_SetDhcpDnsStatus::decode has cognitive complexity 18 (threshold 15). Drivers by points: if/else 5 (15 pts), match/switch 1 (2 pts), loops 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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":31801}}}],"partialFingerprints":{"codehealthFindingId/v1":"78d17cfa108a42195168d62611c0702ae68864d96dae08c3f265638f247168a0"}},{"ruleId":"D2","level":"warning","message":{"text":"Rpc_Resp_MemMonitor::decode (cognitive 18): Rpc_Resp_MemMonitor::decode has cognitive complexity 18 (threshold 15). Drivers by points: if/else 5 (15 pts), match/switch 1 (2 pts), loops 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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":35725}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcfeccc3d98353b8e0293e1a34b3878523f05839083c4c6f79c932ad04365e65"}},{"ruleId":"D2","level":"warning","message":{"text":"Rpc_GpioConfig::decode (cognitive 18): Rpc_GpioConfig::decode has cognitive complexity 18 (threshold 15). Drivers by points: if/else 5 (15 pts), match/switch 1 (2 pts), loops 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. This shape REPEATS in the file: one other method here (r#wifi_ant_config::decode) 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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":37792}}}],"partialFingerprints":{"codehealthFindingId/v1":"3febdd29c2595df261592b60e18bc6deb5c3c74a26f1bae97bd14571dd7a5ce7"}},{"ruleId":"D2","level":"warning","message":{"text":"Regs::init (cognitive 18): Regs::init has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9 (10 pts), match/switch 3 (4 pts), boolean chains 2, loops 2 (nesting depth added 2). 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":"embassy-stm32/src/adc/v3.rs"},"region":{"startLine":173}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf7caf3cea36b86634fbe8d9d700b4756393f17576a77df5f90b1fa1689df454"}},{"ruleId":"D2","level":"warning","message":{"text":"I2c::read_dma_internal_slave (cognitive 18): I2c::read_dma_internal_slave has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12 (16 pts), boolean chains 2 (nesting depth added 4). 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":"embassy-stm32/src/i2c/v2.rs"},"region":{"startLine":2066}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9c3295c1896d38486a79f17b85d42502ec800d2e457a5e8590b8b5242064b93"}},{"ruleId":"D2","level":"warning","message":{"text":"Timings::new (cognitive 18): Timings::new has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12 (18 pts) (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":"embassy-stm32/src/i2c/v1.rs"},"region":{"startLine":2111}}}],"partialFingerprints":{"codehealthFindingId/v1":"18382462a7a0bc3a0bdc464c0c061e2f7ede5fc157da3c56fd0857c991ad6832"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_stm32::flash::c5::blocking_wait_ready (cognitive 18): embassy_stm32::flash::c5::blocking_wait_ready has cognitive complexity 18 (threshold 15). Drivers by points: if/else 6 (17 pts), loops 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":"embassy-stm32/src/flash/c5.rs"},"region":{"startLine":259}}}],"partialFingerprints":{"codehealthFindingId/v1":"16ca30d2eaf7b579345b7d6989029c3f8cbb32fde13ccd978f00ac20252e9f37"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_usb_host::class::vcp::cp210x::find_cp210x (cognitive 18): embassy_usb_host::class::vcp::cp210x::find_cp210x has cognitive complexity 18 (threshold 15). Drivers by points: if/else 6 (14 pts), loops 2 (3 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":"embassy-usb-host/src/class/vcp/cp210x.rs"},"region":{"startLine":498}}}],"partialFingerprints":{"codehealthFindingId/v1":"b29316209289165984c3aabfcc260f8d2d00bcffe038a47ba86b410e8799e2f3"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_usb_host::class::gip::find_gip (cognitive 18): embassy_usb_host::class::gip::find_gip has cognitive complexity 18 (threshold 15). Drivers by points: if/else 6 (14 pts), loops 2 (3 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":"embassy-usb-host/src/class/gip.rs"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ca93e2699f069c5ed8338f1ae56a7027575ac967efc574b8a79373a09711467"}},{"ruleId":"D2","level":"warning","message":{"text":"I2c::blocking_respond_to_read (cognitive 17): I2c::blocking_respond_to_read has cognitive complexity 17 (threshold 15). Drivers by points: if/else 5 (9 pts), boolean chains 4, loops 3 (4 pts) (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":"embassy-mcxa/src/i2c/target.rs"},"region":{"startLine":572}}}],"partialFingerprints":{"codehealthFindingId/v1":"383edfe4e987e2c9327e6d24f8ed9faed96e188a375c6c0b56304afe565566b2"}},{"ruleId":"D2","level":"warning","message":{"text":"I2c::write_dma_chunk (cognitive 17): I2c::write_dma_chunk has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12 (13 pts), boolean chains 4 (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":"embassy-mcxa/src/i2c/target.rs"},"region":{"startLine":889}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b4e404370429e32627d24ab31f956fb972578385794f1e5b7482baab0086d72"}},{"ruleId":"D2","level":"warning","message":{"text":"I3c::daa (cognitive 17): I3c::daa has cognitive complexity 17 (threshold 15). Drivers by points: loops 4 (8 pts), if/else 5 (7 pts), boolean chains 2 (nesting depth added 6). 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":"embassy-mcxa/src/i3c/controller.rs"},"region":{"startLine":743}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d5239d55a34ce08452cb087e32b298440067bee8f86d91778b1b580f3684155"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_mcxa::clocks::sleep::restart_active_only_clocks (cognitive 17): embassy_mcxa::clocks::sleep::restart_active_only_clocks has cognitive complexity 17 (threshold 15). Drivers by points: loops 4 (8 pts), if/else 5, boolean chains 4 (nesting depth added 4). 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":"embassy-mcxa/src/clocks/sleep.rs"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e79a398177034e635efdaebfd284344017423dfc2af69813d4a14d6e25a7cc4"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_mcxa::lpuart::bbq::handler (cognitive 17): embassy_mcxa::lpuart::bbq::handler has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7 (13 pts), boolean chains 4 (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":"embassy-mcxa/src/lpuart/bbq.rs"},"region":{"startLine":1725}}}],"partialFingerprints":{"codehealthFindingId/v1":"67acb8fd83b4e2b1964046db074b2cf51a3b90b279044e548b1e62ca562651d8"}},{"ruleId":"D2","level":"warning","message":{"text":"Tc6::process_rx_chunk (cognitive 17): Tc6::process_rx_chunk has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9 (14 pts), match/switch 2 (3 pts) (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":"embassy-net-adin1110/src/protocol/tc6.rs"},"region":{"startLine":367}}}],"partialFingerprints":{"codehealthFindingId/v1":"5033a53e02feb196cbad03b04e277a19c7d432a1ab81ce69aeb9a6acd2174d84"}},{"ruleId":"D2","level":"warning","message":{"text":"Tc6::send_frame_on_port (cognitive 17): Tc6::send_frame_on_port has cognitive complexity 17 (threshold 15). Drivers by points: if/else 5 (12 pts), loops 3 (5 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":"embassy-net-adin1110/src/protocol/tc6.rs"},"region":{"startLine":486}}}],"partialFingerprints":{"codehealthFindingId/v1":"993d9dc53fd2e0223ded4e838aea9b35a6457b22bcc88a2a99b63fdf0d288300"}},{"ruleId":"D2","level":"warning","message":{"text":"Allocator::allocate (cognitive 17): Allocator::allocate has cognitive complexity 17 (threshold 15). Drivers by points: if/else 6 (12 pts), match/switch 2 (4 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":"embassy-nrf/src/usb/mod.rs"},"region":{"startLine":755}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8c9e956094b2e8f7712f8b5573f3f04fecaa717ec03823bef1499d54578cf98"}},{"ruleId":"D2","level":"warning","message":{"text":"Hash::finish (cognitive 17): Hash::finish has cognitive complexity 17 (threshold 15). Drivers by points: if/else 8, loops 5 (7 pts), boolean chains 2 (nesting depth added 2). 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":"embassy-stm32/src/hash/mod.rs"},"region":{"startLine":945}}}],"partialFingerprints":{"codehealthFindingId/v1":"e747cfcb16cf5c06ea6d59d76f6b09f6f8356db2ef9fc4fcdb94b869a250bcaa"}},{"ruleId":"D2","level":"warning","message":{"text":"I2c::execute_slave_receive_transfer (cognitive 17): I2c::execute_slave_receive_transfer has cognitive complexity 17 (threshold 15). Drivers by points: match/switch 4 (9 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":"embassy-stm32/src/i2c/v1.rs"},"region":{"startLine":1767}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a471cb69aceca96fe1b86bb6508c1e36dd25bda93d4a2ba7d2584e8242919d6"}},{"ruleId":"D2","level":"warning","message":{"text":"I2c::read_dma_group_internal (cognitive 17): I2c::read_dma_group_internal has cognitive complexity 17 (threshold 15). Drivers by points: if/else 11 (14 pts), loops 1 (2 pts), boolean chains 1 (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":"embassy-stm32/src/i2c/v2.rs"},"region":{"startLine":1470}}}],"partialFingerprints":{"codehealthFindingId/v1":"c642de1578e15e0b6bd1c1679c2f78e081b46b1773eb4f3bc06d64acbdb7109e"}},{"ruleId":"D2","level":"warning","message":{"text":"I2c::slave_read_internal (cognitive 17): I2c::slave_read_internal has cognitive complexity 17 (threshold 15). Drivers by points: if/else 8 (10 pts), loops 2 (3 pts), match/switch 1 (3 pts), boolean chains 1 (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":"embassy-stm32/src/i2c/v2.rs"},"region":{"startLine":1724}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3c35910a7b53218c1e495e78ef7a15ef931d08f438668b899ae0ab8fcf17189"}},{"ruleId":"D2","level":"warning","message":{"text":"Saes::payload_blocking (cognitive 17): Saes::payload_blocking has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10 (14 pts), boolean chains 2, loops 1 (nesting depth added 4). 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":"embassy-stm32/src/saes/mod.rs"},"region":{"startLine":684}}}],"partialFingerprints":{"codehealthFindingId/v1":"7daa460395f2cf60e4a9a41c423e11871cb9d32ec23c0f463654eedce0040747"}},{"ruleId":"D2","level":"warning","message":{"text":"RingBufferedUartRx::wait_for_data_or_idle (cognitive 17): RingBufferedUartRx::wait_for_data_or_idle has cognitive complexity 17 (threshold 15). Drivers by points: if/else 5 (9 pts), match/switch 2 (4 pts), boolean chains 3, loops 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":"embassy-stm32/src/usart/ringbuffered.rs"},"region":{"startLine":284}}}],"partialFingerprints":{"codehealthFindingId/v1":"806a7a55de9871316d2dd4395b4ec95a180977b91c9c3fd8e939661a32e9d231"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_stm32::rcc::f247::init (cognitive 17): embassy_stm32::rcc::f247::init has cognitive complexity 17 (threshold 15). Drivers by points: loops 7 (8 pts), match/switch 5 (6 pts), if/else 3 (nesting depth added 2). 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":"embassy-stm32/src/rcc/f247.rs"},"region":{"startLine":163}}}],"partialFingerprints":{"codehealthFindingId/v1":"aeecf560364d415fdc599de3623d27960c702004d053c810e8a31a99e26d7f23"}},{"ruleId":"D2","level":"warning","message":{"text":"Sequencer::select_next_task (cognitive 17): Sequencer::select_next_task has cognitive complexity 17 (threshold 15). Drivers by points: if/else 8 (15 pts), boolean chains 1, loops 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":"embassy-stm32-wpan/src/wba/util_seq.rs"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"e73bc4785e6f5fe111d079738afabb61cba430dd7637a4c4d002f1dd34d4b191"}},{"ruleId":"D2","level":"warning","message":{"text":"UacHandler::output (cognitive 17): UacHandler::output has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10 (14 pts), match/switch 2, loops 1 (nesting depth added 4). 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":"embassy-usb-host/src/class/uac/mod.rs"},"region":{"startLine":227}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd3b9e41a621aef1461ae76184033d3879b2473dfbdc46c01a25df1d335c4757"}},{"ruleId":"D2","level":"warning","message":{"text":"FormatInterrupt::format (cognitive 16): FormatInterrupt::format has cognitive complexity 16 (threshold 15). Drivers by points: if/else 16. 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. This shape REPEATS in the file: one other method here (FormatInterrupt::fmt) 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":"cyw43/src/consts.rs"},"region":{"startLine":370}}}],"partialFingerprints":{"codehealthFindingId/v1":"5753e7fe593651ce9f3e3dba8ea56fc5b8f21d55414098d3fd484628c549894a"}},{"ruleId":"D2","level":"warning","message":{"text":"FormatInterrupt::fmt (cognitive 16): FormatInterrupt::fmt has cognitive complexity 16 (threshold 15). Drivers by points: if/else 16. 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. This shape REPEATS in the file: one other method here (FormatInterrupt::format) 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":"cyw43/src/consts.rs"},"region":{"startLine":404}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbbc9856a1b5fbf186adeac46cd26985e951eed1c53ca06b00deb94bbea11ce8"}},{"ruleId":"D2","level":"warning","message":{"text":"Runner::run (cognitive 16): Runner::run has cognitive complexity 16 (threshold 15). Drivers by points: match/switch 3 (9 pts), if/else 3 (6 pts), loops 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":"cyw43/src/runner.rs"},"region":{"startLine":764}}}],"partialFingerprints":{"codehealthFindingId/v1":"d22db3c534efd476d586d27cbc025b4edf44e59e3b4e9a5092d5802216197ed0"}},{"ruleId":"D2","level":"warning","message":{"text":"RtcClkConfig::set_clock_rate (cognitive 16): RtcClkConfig::set_clock_rate has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8 (14 pts), match/switch 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":"embassy-imxrt/src/clocks.rs"},"region":{"startLine":1170}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e7b6bce440bcdb4d110959768e05c4549534de9e26ed8447c6c96bde1927f43"}},{"ruleId":"D2","level":"warning","message":{"text":"I2c::set_configuration (cognitive 16): I2c::set_configuration has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8 (13 pts), boolean chains 2, 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":"embassy-mcxa/src/i2c/target.rs"},"region":{"startLine":354}}}],"partialFingerprints":{"codehealthFindingId/v1":"19de2726ce7cda0bbcaffd0971533e8086e03c7aecb9c9cbb198158e1a2d8835"}},{"ruleId":"D2","level":"warning","message":{"text":"I2c::async_respond_to_read_internal (cognitive 16): I2c::async_respond_to_read_internal has cognitive complexity 16 (threshold 15). Drivers by points: if/else 5 (11 pts), boolean chains 2, match/switch 1 (2 pts), loops 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":"embassy-mcxa/src/i2c/target.rs"},"region":{"startLine":1247}}}],"partialFingerprints":{"codehealthFindingId/v1":"428323918f034d9be78bcc0532599fe9a69c99640e94a3cdee4b4b09990e10c0"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_mcxa::flexcan::classic::init (cognitive 16): embassy_mcxa::flexcan::classic::init has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7 (9 pts), boolean chains 4, match/switch 2 (3 pts) (nesting depth added 3). 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":"embassy-mcxa/src/flexcan/classic/mod.rs"},"region":{"startLine":662}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7ab961f9fa3492f9f3e8a0af980e74563505b8b7f4bd24d1ddf4c298dbcd126"}},{"ruleId":"D2","level":"warning","message":{"text":"r#wifi_sta_config::encode (cognitive 16): r#wifi_sta_config::encode has cognitive complexity 16 (threshold 15). Drivers by points: if/else 16. 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. This shape REPEATS in the file: one other method here (r#wifi_sta_config::compute_size) 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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":5946}}}],"partialFingerprints":{"codehealthFindingId/v1":"07537f1e916af3bff2c405754f667b9c089b3ec6ccef1e7a35dbf97329b4948d"}},{"ruleId":"D2","level":"warning","message":{"text":"r#wifi_sta_config::compute_size (cognitive 16): r#wifi_sta_config::compute_size has cognitive complexity 16 (threshold 15). Drivers by points: if/else 16. 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. This shape REPEATS in the file: one other method here (r#wifi_sta_config::encode) 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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":6063}}}],"partialFingerprints":{"codehealthFindingId/v1":"e67c3c13d83e1a32ada9d377409c5754aa11044c54f1e4b119467e12e6ebbdbc"}},{"ruleId":"D2","level":"warning","message":{"text":"ChaChaPolyContext::run (cognitive 16): ChaChaPolyContext::run has cognitive complexity 16 (threshold 15). Drivers by points: if/else 16. 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":"embassy-nrf/src/crypto/symmetric/chacha_cracen.rs"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"476bc4c14fda762a0623ea64bc8f2f63b72022d747aa3bb5d95713cc86826257"}},{"ruleId":"D2","level":"warning","message":{"text":"Bus::endpoint_set_enabled (cognitive 16): Bus::endpoint_set_enabled has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9 (15 pts), 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":"embassy-nrf/src/usb/mod.rs"},"region":{"startLine":320}}}],"partialFingerprints":{"codehealthFindingId/v1":"47ee8948f90983289bd4e6659c298fc6da1b53ac8083abceec11d0c128ee5052"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_nrf::crypto::symmetric::aes_cracen::gcm_run (cognitive 16): embassy_nrf::crypto::symmetric::aes_cracen::gcm_run has cognitive complexity 16 (threshold 15). Drivers by points: if/else 16. 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":"embassy-nrf/src/crypto/symmetric/aes_cracen.rs"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd8cfbe1d3e5287ea87cda1baa1e40bfec8e707e8cd7a64594f76bc694db97bb"}},{"ruleId":"D2","level":"warning","message":{"text":"I2cSlave::poll_listen (cognitive 16): I2cSlave::poll_listen has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11 (12 pts), boolean chains 4 (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":"embassy-rp/src/i2c_slave.rs"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d4dc6b369679bbeadcd7c7fea9471e3cef5a658aa7ebdb8a6f25a118f115645"}},{"ruleId":"D2","level":"warning","message":{"text":"Driver::alloc_endpoint (cognitive 16): Driver::alloc_endpoint has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7 (10 pts), boolean chains 3, match/switch 3 (nesting depth added 3). 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":"embassy-rp/src/usb/device.rs"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea9eabe6c1c45bc4165e87b6d621fdc718b6cddb51188b689c3c320f4fd39703"}},{"ruleId":"D2","level":"warning","message":{"text":"Cordic32::blocking_calc (cognitive 16): Cordic32::blocking_calc has cognitive complexity 16 (threshold 15). Drivers by points: if/else 5 (11 pts), loops 2 (4 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":"embassy-stm32/src/cordic/mod.rs"},"region":{"startLine":271}}}],"partialFingerprints":{"codehealthFindingId/v1":"0640415cf3d1d523ac95fd0800a5c712b964d7042a0cb869814d4cde92c0f82a"}},{"ruleId":"D2","level":"warning","message":{"text":"Ospi::configure_octospim_control_group (cognitive 16): Ospi::configure_octospim_control_group has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12 (16 pts) (nesting depth added 4). 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":"embassy-stm32/src/ospi/mod.rs"},"region":{"startLine":476}}}],"partialFingerprints":{"codehealthFindingId/v1":"01a7b8210a5705b89f47b48fb3f9b66db2b2bc9eb98e09541c3c1012b729e183"}},{"ruleId":"D2","level":"warning","message":{"text":"Spi::get_current_config (cognitive 16): Spi::get_current_config has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12 (13 pts), match/switch 1 (2 pts), boolean chains 1 (nesting depth added 2). 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":"embassy-stm32/src/spi/mod.rs"},"region":{"startLine":680}}}],"partialFingerprints":{"codehealthFindingId/v1":"52f803762d387023f256a8ea6cb0817d240a95974b939a61f443b6affd1290f4"}},{"ruleId":"D2","level":"warning","message":{"text":"Bus::endpoint_set_stalled (cognitive 16): Bus::endpoint_set_stalled has cognitive complexity 16 (threshold 15). Drivers by points: match/switch 5 (12 pts), loops 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":"embassy-stm32/src/usb/usb.rs"},"region":{"startLine":639}}}],"partialFingerprints":{"codehealthFindingId/v1":"36997c426e5f036a56612f7f8fe4dcb68dae84147048bd60b643d27a7f64f848"}},{"ruleId":"D2","level":"warning","message":{"text":"Endpoint::write (cognitive 16): Endpoint::write has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12 (15 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":"embassy-stm32/src/usb/usb.rs"},"region":{"startLine":985}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6d97f7e18250af50c9344dfd7f300f88636a14c5f90cec1164e366a6aecfe55"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_stm32_wpan::bluetooth::gatt::events::client_events_from_vendor_event (cognitive 16): embassy_stm32_wpan::bluetooth::gatt::events::client_events_from_vendor_event has cognitive complexity 16 (threshold 15). Drivers by points: loops 4 (10 pts), if/else 1 (3 pts), match/switch 2 (3 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":"embassy-stm32-wpan/src/bluetooth/gatt/events.rs"},"region":{"startLine":414}}}],"partialFingerprints":{"codehealthFindingId/v1":"9edc958b8ef324b23211a477e500f49fc4e336799e684dfff137ad9d443782ac"}},{"ruleId":"D2","level":"warning","message":{"text":"Inner::handle_bus_event (cognitive 16): Inner::handle_bus_event has cognitive complexity 16 (threshold 15). Drivers by points: loops 7 (15 pts), 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":"embassy-usb/src/lib.rs"},"region":{"startLine":416}}}],"partialFingerprints":{"codehealthFindingId/v1":"55df79b4b7bf281507d01cce8f43e886a88cfb8c8b5b5175b126d58ea71edf55"}},{"ruleId":"D2","level":"warning","message":{"text":"embassy_usb_host::class::ccid::find_ccid (cognitive 16): embassy_usb_host::class::ccid::find_ccid has cognitive complexity 16 (threshold 15). Drivers by points: if/else 5 (11 pts), loops 2 (3 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":"embassy-usb-host/src/class/ccid.rs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"187ddf33945037a5e08a9ee67956cd3cf6a1feab1cd1033b8aff8591e467bb24"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: mcu/mod.rs: FileTooLong \u2014 33170 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 32670 over it, 66.34\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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8146482fc2c956053eff0e1cc2ec637cd250020aadde116fbd880cb795387ea"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: fg/mod.rs: FileTooLong \u2014 8334 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 7834 over it, 16.67\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":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"68b98a1e44320f871dd87c3eefc9167adc176ae723d70a26d286249d7fbe07cc"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/otg_v1.rs: FileTooLong \u2014 4152 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 3652 over it, 8.30\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":"embassy-usb-synopsys-otg/src/otg_v1.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"77a1424adb9d47145620814a515475b923f26178452d94fe5e3c28432f6203cb"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: Peripherals: TooManyFields \u2014 227 stored fields beside 3 methods. The bar is 30 stored fields; this is 197 over it, 7.57\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/chips/nrf54l05_app.rs"},"region":{"startLine":203}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b8b05841eed63e1a28c94828497d470027e3e677af7e523a08a2edc0d48481b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: Peripherals: TooManyFields \u2014 227 stored fields beside 3 methods. The bar is 30 stored fields; this is 197 over it, 7.57\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/chips/nrf54l10_app.rs"},"region":{"startLine":203}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1636f6f1d0cf707c216d48feae5e4165a333716b026a9802fd63d8bed637eff"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: Peripherals: TooManyFields \u2014 227 stored fields beside 3 methods. The bar is 30 stored fields; this is 197 over it, 7.57\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/chips/nrf54l15_app.rs"},"region":{"startLine":203}}}],"partialFingerprints":{"codehealthFindingId/v1":"25d8b2e004044ea83799ca10768a6c984316eed6b969264acb0b04d9ff4f9842"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Timer: TooManyMethods \u2014 150 methods. The bar is 30 methods; this is 120 over it, 5.00\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":"embassy-stm32/src/timer/low_level.rs"},"region":{"startLine":452}}}],"partialFingerprints":{"codehealthFindingId/v1":"5334379ad699ce886cb9f1223e8b8a3c6d0b1e7c9eb2a6816d2cffa7e9d45716"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: Peripherals: TooManyFields \u2014 133 stored fields beside 3 methods. The bar is 30 stored fields; this is 103 over it, 4.43\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/chips/nrf52840.rs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"5583768f16d57f4dde43123563c26b0aedb918d38ff123cddeb1f849694f0630"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: Peripherals: TooManyFields \u2014 129 stored fields beside 3 methods. The bar is 30 stored fields; this is 99 over it, 4.30\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/chips/nrf52833.rs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0937341d9ecbda058dc2fe1cd1a5731755c32a9ab48247b74597941c74644b9"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: Peripherals: TooManyFields \u2014 128 stored fields beside 3 methods. The bar is 30 stored fields; this is 98 over it, 4.27\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/chips/nrf5340_app.rs"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"efbbba6df77d892b7d211c0e38e82f305fc788d02935a2c8671a81a06015e081"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: usart/mod.rs: FileTooLong \u2014 1955 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 1455 over it, 3.91\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":"embassy-stm32/src/usart/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1560cfe2989fd015cb3d8e450a069e268d4767f450d27f6f2501519b49439e55"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: Peripherals: TooManyFields \u2014 115 stored fields beside 3 methods. The bar is 30 stored fields; this is 85 over it, 3.83\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/chips/nrf5340_net.rs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"21a9b500c552b055d9fadef5225f707c36526943dc837873c2c7784e9c709da1"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: embassy_stm32::rcc::h::init: FunctionTooLong \u2014 embassy_stm32::rcc::h::init runs 381 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 281 over it, 3.81\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":"embassy-stm32/src/rcc/h.rs"},"region":{"startLine":328}}}],"partialFingerprints":{"codehealthFindingId/v1":"08fe82b9230551a1422a5077d8d72bef528493564648b1164eca7c680bd7f484"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: Peripherals: TooManyFields \u2014 109 stored fields beside 3 methods. The bar is 30 stored fields; this is 79 over it, 3.63\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/chips/nrf52832.rs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"aab5b62b7861b241a755761364897223b2be966b5822e572b481b019e2aa9287"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: Peripherals: TooManyFields \u2014 102 stored fields. The bar is 30 stored fields; this is 72 over it, 3.40\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/lib.rs"},"region":{"startLine":320}}}],"partialFingerprints":{"codehealthFindingId/v1":"795b3e02c89d61ad8df0c3221c55b35f49abf2532eb6904ec81954bce17a08dc"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Pka: TooManyMethods \u2014 101 methods. The bar is 30 methods; this is 71 over it, 3.37\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":"embassy-stm32/src/pka/mod.rs"},"region":{"startLine":837}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ce78f2785f716e8662d701add2782e5fe8270d5b86aef91374c340dca6b1da2"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Rpc.decode: MethodTooLong \u2014 decode runs 336 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 236 over it, 3.36\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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":48859}}}],"partialFingerprints":{"codehealthFindingId/v1":"542aef46ba58956ed93e117850682093f7fb2a76fab07c40630c68ac92fc527a"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Ospi: ClassTooLong \u2014 1338 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 35 methods, 7 blocks, lines 245-2220. The bar is 400 significant lines; this is 938 over it, 3.35\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":"embassy-stm32/src/ospi/mod.rs"},"region":{"startLine":245}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f128cdb5383df23ca86672e2a615616ec45c46bcb1895e0a0888b630cc42e7c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: I2c: TooManyMethods \u2014 100 methods, declared across 3 files: i2c/v1.rs (55), i2c/v2.rs (39), i2c/mod.rs (6). The bar is 30 methods; this is 70 over it, 3.33\u00D7 the bar. That list is where to read them, not a suggestion to split the file: the members belong to the type wherever they are declared, so moving them between files leaves the count unchanged. 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":"embassy-stm32/src/i2c/mod.rs"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"fad41d97a3e8d0721ae78563690b3f3973302e3090245c42ddc3f151f8ba5f6a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: Peripherals: TooManyFields \u2014 100 stored fields beside 3 methods. The bar is 30 stored fields; this is 70 over it, 3.33\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/chips/nrf52820.rs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbe9c953badc270bf63d5b21bc594e88b0a7e53e38c2437b9697188dda66f182"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: pka/mod.rs: FileTooLong \u2014 1648 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 71% of them inside a single declaration: Pka (8 blocks, 837-2950). The bar is 500 significant lines; this is 1148 over it, 3.30\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/pka/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e0060e2c924b0002eefd9a4959c2dcea71680a10a12430c60ec29345d86f34b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: Peripherals: TooManyFields \u2014 97 stored fields beside 3 methods. The bar is 30 stored fields; this is 67 over it, 3.23\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/chips/nrf52810.rs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba30a8e6a3e683c5fb06c955ad3d4e6a40f3cba5129192f33776762b40ad7bb8"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: Peripherals: TooManyFields \u2014 97 stored fields beside 3 methods. The bar is 30 stored fields; this is 67 over it, 3.23\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/chips/nrf52811.rs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8b4f1d873f1986202a8aec4d17b20c2c180792cd6ce98cf383822b84fb7c738"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Xspi: ClassTooLong \u2014 1286 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 32 methods, 7 blocks, lines 170-1992. The bar is 400 significant lines; this is 886 over it, 3.22\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":"embassy-stm32/src/xspi/mod.rs"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"02efdb2bf7d8e1ddfd5a19c128fdd7fe2a945577f694dec5116f39e17c651579"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: r#wifi_init_config: TooManyMethods \u2014 96 methods. The bar is 30 methods; this is 66 over it, 3.20\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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d1f85d341bfb3805dd77eed727de3fc6058bf507fa835770a811098b419a1cb"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: Peripherals: TooManyFields \u2014 95 stored fields beside 3 methods. The bar is 30 stored fields; this is 65 over it, 3.17\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/chips/nrf52805.rs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"9cb85418b1b6e10706cd164986c4cd7a83825f49798c51718585a1291bcc155d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: i2c/v2.rs: FileTooLong \u2014 1564 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 92% of them inside a single declaration: I2c (8 blocks, 112-2540). The bar is 500 significant lines; this is 1064 over it, 3.13\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i2c/v2.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"19199869815dae84d243ee14eed75bc5b08d12285ec1a025a6e72cb4b93d7fe3"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: embassy_nrf::init: FunctionTooLong \u2014 embassy_nrf::init runs 312 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 212 over it, 3.12\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":"embassy-nrf/src/lib.rs"},"region":{"startLine":801}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6235d507d7ecd4e40fb9a27d9f88df8a05e58a1b456fd119dbcf7c56cb52b80"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: ospi/mod.rs: FileTooLong \u2014 1546 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 87% of them inside a single declaration: Ospi (7 blocks, 245-2220). The bar is 500 significant lines; this is 1046 over it, 3.09\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/ospi/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0624a237d20ab3051df8382faf6f86306c77a5129c88d57a63ba4a2d387eab27"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: spi/mod.rs: FileTooLong \u2014 1536 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 62% of them inside a single declaration: Spi (13 blocks, 333-2481). The bar is 500 significant lines; this is 1036 over it, 3.07\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/spi/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"53c1b10951bf1da706394bc3c0f8249d34dd150f9e2d9530844e2a3f719c5b5f"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Pka: ClassTooLong \u2014 1175 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 101 methods, 8 blocks, lines 837-2950. The bar is 400 significant lines; this is 775 over it, 2.94\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":"embassy-stm32/src/pka/mod.rs"},"region":{"startLine":837}}}],"partialFingerprints":{"codehealthFindingId/v1":"38fc827f4662cea9c9667501cc34534b5df2fddd0d7bc6b7a05af620a439a804"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: Peripherals: TooManyFields \u2014 88 stored fields beside 3 methods. The bar is 30 stored fields; this is 58 over it, 2.93\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/chips/nrf9120.rs"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"e18aad5d16e5614a83bfe140a12d8cf597506be5815165e137f3b138058d6a69"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: Peripherals: TooManyFields \u2014 88 stored fields beside 3 methods. The bar is 30 stored fields; this is 58 over it, 2.93\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/chips/nrf9160.rs"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"577e8db1836d10e4c646dbfaac939bf18942be9ecec02701a4315707a02e783b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: xspi/mod.rs: FileTooLong \u2014 1450 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 89% of them inside a single declaration: Xspi (7 blocks, 170-1992). The bar is 500 significant lines; this is 950 over it, 2.90\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/xspi/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2643af1624a962e6eb80b8ddf6057fb704f5028192ec0c745f5aa0051f50a6af"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: sdmmc/mod.rs: FileTooLong \u2014 1445 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 75% of them inside a single declaration: Sdmmc (10 blocks, 457-2242). The bar is 500 significant lines; this is 945 over it, 2.89\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/sdmmc/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"971a1ebea28b391ee24c36f9117733fa5f2a238450e9a4e149e12070fd0ad036"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: Counters: TooManyFields \u2014 84 stored fields beside 1 method. The bar is 30 stored fields; this is 54 over it, 2.80\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/perf_counters.rs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e5466c6581df5746e5827cc0fb42556d877808c00be25c96a1aed6d1e68bc11"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: Report: TooManyFields \u2014 84 stored fields. The bar is 30 stored fields; this is 54 over it, 2.80\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/perf_counters.rs"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"71afc61da9222d435822e6a73a7e43cf81b34b33f5f419205f83dc99ef2751aa"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Sdmmc: ClassTooLong \u2014 1088 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 43 methods, 10 blocks, lines 457-2242. The bar is 400 significant lines; this is 688 over it, 2.72\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":"embassy-stm32/src/sdmmc/mod.rs"},"region":{"startLine":457}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a7995ace73040ec054a3c6a44f51c3fad6019bd93483c5d6c08ee91788d4e63"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Rpc: ClassTooLong \u2014 1068 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 12 methods, 4 blocks, lines 48780-50426. The bar is 400 significant lines; this is 668 over it, 2.67\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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":48780}}}],"partialFingerprints":{"codehealthFindingId/v1":"cadd3401fab2cfef1363e69fc4d31465086c45b1b84aa4097ee2b1c3449f59e8"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: embassy_stm32::rcc::l::init: FunctionTooLong \u2014 embassy_stm32::rcc::l::init runs 256 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 156 over it, 2.56\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":"embassy-stm32/src/rcc/l.rs"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"649a5b2aa6606cbf1c87f0ff121c45863bfe5964290f903f639fc23241a5e281"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: r#wifi_ap_config: TooManyMethods \u2014 76 methods. The bar is 30 methods; this is 46 over it, 2.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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":4021}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e2507ddef54745df9c8e4fa0201a9fd255f45ff4371f7ff988efe8e20b7921b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: r#wifi_pkt_rx_ctrl: TooManyMethods \u2014 76 methods. The bar is 30 methods; this is 46 over it, 2.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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":6721}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3dcac6eb00bed41b792c2d064647b6ee14fef886b8f4188ec3e76f0ce2b9910"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ComplementaryPwm: TooManyMethods \u2014 74 methods. The bar is 30 methods; this is 44 over it, 2.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":"embassy-stm32/src/timer/complementary_pwm.rs"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe0a4e255bff92b4d5e2d06fe4092196a7941eda131dd77626a0f1ab5f15bf06"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: Peripherals: TooManyFields \u2014 72 stored fields beside 3 methods. The bar is 30 stored fields; this is 42 over it, 2.40\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/lib.rs"},"region":{"startLine":232}}}],"partialFingerprints":{"codehealthFindingId/v1":"e89ade0a066c0b8aee88394476844207af84ab2720d8af878e4b7b0e32fa637a"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Spi: ClassTooLong \u2014 959 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 35 methods, 13 blocks, lines 333-2481. The bar is 400 significant lines; this is 559 over it, 2.40\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":"embassy-stm32/src/spi/mod.rs"},"region":{"startLine":333}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e3ddbd5f458421d8eb3e323191a28eab2743c2875a908c4486a2805a608b08c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: Peripherals: TooManyFields \u2014 70 stored fields beside 3 methods. The bar is 30 stored fields; this is 40 over it, 2.33\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/chips/nrf51.rs"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"1146d2531d4dfe0249c02731b357168f84034868c1735aad289ea89e1316800e"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: embassy_stm32::rcc::u5::init: FunctionTooLong \u2014 embassy_stm32::rcc::u5::init runs 233 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 133 over it, 2.33\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":"embassy-stm32/src/rcc/u5.rs"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c196eb18cd367458e7c372794c2b20d31f9e2097619a3ad575c372f25102afb"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: i2c/v1.rs: FileTooLong \u2014 1154 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 92% of them inside a single declaration: I2c (7 blocks, 46-2180). The bar is 500 significant lines; this is 654 over it, 2.31\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i2c/v1.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"32b3f8e452b3e1a0a5d493e9c505438e7c8edc18a596da6a27ad8661d2fab08e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: usb/host.rs: FileTooLong \u2014 1144 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 644 over it, 2.29\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":"embassy-rp/src/usb/host.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bb20b8af45c5fbf424f091046db69b78ad1e64500fde0d88d8a423772239b3d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: r#wifi_sta_config: TooManyMethods \u2014 68 methods. The bar is 30 methods; this is 38 over it, 2.27\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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":5175}}}],"partialFingerprints":{"codehealthFindingId/v1":"718f7e7d09bca26106184ea72b745d33d8891c648a130742830ece408ea4363e"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ClockOperator.configure_spll: MethodTooLong \u2014 configure_spll runs 224 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 124 over it, 2.24\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":"embassy-mcxa/src/clocks/operator.rs"},"region":{"startLine":807}}}],"partialFingerprints":{"codehealthFindingId/v1":"07e3a6ca78a4dad27553691259950127a0094fb0a4939098c7e19af4711e8a1b"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: embassy_rp::clocks::init: FunctionTooLong \u2014 embassy_rp::clocks::init runs 221 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 121 over it, 2.21\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":"embassy-rp/src/clocks.rs"},"region":{"startLine":979}}}],"partialFingerprints":{"codehealthFindingId/v1":"af38dd9c7cea2f8c994f6ce4c4609a44beaee2ff929edde3088189ebd065adb0"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 1103 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 603 over it, 2.21\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":"embassy-usb-synopsys-otg/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bff24f5ef174a454c55a46a40a0672fa86f719822151abff6e310d949712740b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Otg: TooManyMethods \u2014 66 methods. The bar is 30 methods; this is 36 over it, 2.20\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":"embassy-usb-synopsys-otg/src/otg_v1.rs"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"979695af3d57a71174491b1c6b76302c6be09a2925f44fdd48a2a81470a59a1f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/dma.rs: FileTooLong \u2014 1087 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 587 over it, 2.17\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":"embassy-mcxa/src/dma.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ec2a78ad6280ec8258ef0465f889c9241d8db24dce335bdf20a1daf588ea6b1"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: I3c: ClassTooLong \u2014 860 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 37 methods, 17 blocks, lines 322-2019. The bar is 400 significant lines; this is 460 over it, 2.15\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":"embassy-mcxa/src/i3c/controller.rs"},"region":{"startLine":322}}}],"partialFingerprints":{"codehealthFindingId/v1":"4468b3f718b48f7cf50571f82126dac7f4bc875fe15fdeb16f358fac70369ecc"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: rcc/n6.rs: FileTooLong \u2014 1075 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 575 over it, 2.15\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":"embassy-stm32/src/rcc/n6.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab7e7b126b93b00cd388afbf172ddd46047ad399ec4521c26e3a99473cbeb60a"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Channel.configure: MethodTooLong \u2014 configure runs 215 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 115 over it, 2.15\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":"embassy-stm32/src/dma/dma_bdma.rs"},"region":{"startLine":501}}}],"partialFingerprints":{"codehealthFindingId/v1":"820724fd826452bf4193c943d823fd82530ae69e0665a62e953991e4e7e1b2d9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: i3c/controller.rs: FileTooLong \u2014 1071 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 80% of them inside a single declaration: I3c (17 blocks, 322-2019). The bar is 500 significant lines; this is 571 over it, 2.14\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/i3c/controller.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"af2e4027c6d2d71aae53f6e44009e291adef8a33cd2741ecaa1672c171b06fc9"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: CtrlMsg.decode: MethodTooLong \u2014 decode runs 214 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 114 over it, 2.14\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":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":11170}}}],"partialFingerprints":{"codehealthFindingId/v1":"f60874ffb8aebac6138e2ecc883cb7fb69f0aa0a941ffff9686afbc492478a24"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/flexspi.rs: FileTooLong \u2014 1058 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 558 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":"embassy-mcxa/src/flexspi.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a8965987a9c50c6725f9985de21162168b3248fc040d3097e353dac3a213d2d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 1056 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), declaring 58 free 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":"embassy-crypto-test/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fce5fe584060d93ae0d3dadefd4f8d5881f38c3d38dd95ca3d1083b152244211"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: cryp/mod.rs: FileTooLong \u2014 1051 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 63% of them inside a single declaration: Cryp (6 blocks, 615-1666). The bar is 500 significant lines; this is 551 over it, 2.10\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/cryp/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c6436470cac59b18b40bb1faf5fd380bc77f5dce643e174446436bc95fe3e14"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/clocks.rs: FileTooLong \u2014 1031 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 531 over it, 2.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":"embassy-rp/src/clocks.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cba4f1d88ef61c90e59586b7eedc9aa5e1a13ee20b77ac26a59a585572f4ac2c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: dma/dma_bdma.rs: FileTooLong \u2014 1030 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 530 over it, 2.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":"embassy-stm32/src/dma/dma_bdma.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2fc9cf1882558f4adc59a483142852f8aeb4098ee5a749b8dea860183c802b5"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: embassy_stm32::rcc::f013::init: FunctionTooLong \u2014 embassy_stm32::rcc::f013::init runs 205 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 105 over it, 2.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":"embassy-stm32/src/rcc/f013.rs"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"3450385d1f7651017c6c9b374d47bd26e8b3ff1669a8a14f37768fa67667c464"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Runner: ClassTooLong \u2014 805 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 19 methods, 2 blocks, lines 120-1388. The bar is 400 significant lines; this is 405 over it, 2.01\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":"cyw43/src/runner.rs"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"f670f6c545a862b48f6c36c9df975efdbfebd62abdd73c81623b348f0fb0eba5"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: ClockOperator: ClassTooLong \u2014 801 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 14 methods, 2 blocks, lines 37-1583. The bar is 400 significant lines; this is 401 over it, 2.00\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":"embassy-mcxa/src/clocks/operator.rs"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fefd866b276197926345a3aa17414729d64542921afce00253f8a6d4ac69f30"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: NeoChrom: TooManyMethods \u2014 60 methods. The bar is 30 methods; this is 30 over it, 2.00\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":"embassy-stm32-neochrom/src/driver.rs"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"936560ec67520909bcb69e9b9270549cb5a9109ce6217cd0730c633345cb466d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: pio/mod.rs: FileTooLong \u2014 993 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 493 over it, 1.99\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":"embassy-rp/src/pio/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b06509af14636a95834d068ff3132d13f8b003d278ce4f4173d44035300deac"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: NeoChrom: ClassTooLong \u2014 782 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 60 methods, 2 blocks, lines 74-1115. The bar is 400 significant lines; this is 382 over it, 1.96\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":"embassy-stm32-neochrom/src/driver.rs"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"df04bf120333acad1d8e414c106681d9f14075f84869b37a3a7ece4c380b4e0e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/clocks.rs: FileTooLong \u2014 962 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 462 over it, 1.92\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":"embassy-imxrt/src/clocks.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9436845376aef81c35fda8ebebaec58406b7c86e395c7ea5ed8417457af2bf4d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: uac/descriptors.rs: FileTooLong \u2014 945 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 445 over it, 1.89\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":"embassy-usb-host/src/class/uac/descriptors.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9576716ef7ce153331c2b13786d4675e5671ef238e5b61b487907eeefc935066"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: embassy_stm32::init_hw: FunctionTooLong \u2014 embassy_stm32::init_hw runs 189 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 89 over it, 1.89\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":"embassy-stm32/src/lib.rs"},"region":{"startLine":792}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc7b6946f6330e0c81a8d3c296068b61d8b8b52ffe69ae981db09e1c885a4f9d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/jpeg.rs: FileTooLong \u2014 936 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 436 over it, 1.87\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":"embassy-stm32/src/jpeg.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4fa1899479993f94c90d245ec90b6a590845b6a598138d4963eeebd5edfe4f8"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: r#esp_app_desc: TooManyMethods \u2014 56 methods. The bar is 30 methods; this is 26 over it, 1.87\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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":14173}}}],"partialFingerprints":{"codehealthFindingId/v1":"442daa90cf61825807a29a4fa0af0c07959e052db64a8e872b0b4efc14b1437f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Gintmsk: TooManyMethods \u2014 56 methods. The bar is 30 methods; this is 26 over it, 1.87\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":"embassy-usb-synopsys-otg/src/otg_v1.rs"},"region":{"startLine":2330}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ca0c2e7c05ba61e9b708431e0aa7b7fd6883f98a6e5e383ae70d985b0cb70a9"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: Peripherals: TooManyFields \u2014 56 stored fields beside 3 methods. The bar is 30 stored fields; this is 26 over it, 1.87\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-ambiq/src/lib.rs"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"39510cc3d67f8a287674bc8837cf0be0a58614dc400fa22d075f672cf04917b9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: lpuart/bbq.rs: FileTooLong \u2014 931 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 431 over it, 1.86\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":"embassy-mcxa/src/lpuart/bbq.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b865c66cccb12d9f6b9f87b388d0738977f720fa8132150f8112b80f7eeb1bcc"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: clocks/periph_helpers.rs: FileTooLong \u2014 924 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 424 over it, 1.85\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":"embassy-mcxa/src/clocks/periph_helpers.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd4239a01603c0d39293478920ae7aa5daf720701fa1556fb91625e31f7cb923"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: embassy_stm32::rcc::u3::init: FunctionTooLong \u2014 embassy_stm32::rcc::u3::init runs 184 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 84 over it, 1.84\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":"embassy-stm32/src/rcc/u3.rs"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8b88fc22e5608ee74fd73871ad46c41ee5726f54701059ca42e2cd013698f6e"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Spi: ClassTooLong \u2014 733 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 24 methods, 15 blocks, lines 132-1383. The bar is 400 significant lines; this is 333 over it, 1.83\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":"embassy-mcxa/src/spi/controller.rs"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fb5cde3e058ac9075690d773b2961b2d633b772b0de575078f71135af43effb"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DmaChannel: TooManyMethods \u2014 54 methods. The bar is 30 methods; this is 24 over it, 1.80\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":"embassy-mcxa/src/dma.rs"},"region":{"startLine":618}}}],"partialFingerprints":{"codehealthFindingId/v1":"3aaff473a8ef318353feb387bbd5dcd23452f8845fc7abd8e11cab7135ab4393"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Gintsts: TooManyMethods \u2014 54 methods. The bar is 30 methods; this is 24 over it, 1.80\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":"embassy-usb-synopsys-otg/src/otg_v1.rs"},"region":{"startLine":2650}}}],"partialFingerprints":{"codehealthFindingId/v1":"625b26540818a3a5bd015ce69394fd4c1482a28196fdc83a132465159c6d43de"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: embassy_stm32::rcc::n6::init: FunctionTooLong \u2014 embassy_stm32::rcc::n6::init runs 179 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 79 over it, 1.79\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":"embassy-stm32/src/rcc/n6.rs"},"region":{"startLine":1212}}}],"partialFingerprints":{"codehealthFindingId/v1":"1bd26b1df7fa17211d5633749c92fec27053c71d8046c0ed0c5c3fb70cb2c592"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/runner.rs: FileTooLong \u2014 892 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 90% of them inside a single declaration: Runner (2 blocks, 120-1388). The bar is 500 significant lines; this is 392 over it, 1.78\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cyw43/src/runner.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6bc1975ee0f8d7a688ce927f7c41e69a0ba4a8404d5f085c2f9dae9266875f68"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: CtrlMsg: ClassTooLong \u2014 712 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 16 methods, 4 blocks, lines 11067-12172. The bar is 400 significant lines; this is 312 over it, 1.78\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":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":11067}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f847f90040b2d858bd7237f20033efe7038dcfb6521ee2beb3ebafc3e86b506"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: uart/mod.rs: FileTooLong \u2014 879 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 379 over it, 1.76\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":"embassy-rp/src/uart/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ab866e9f9459b538ae38537fe9c5c70bbbaa00fe7c266a119ab424199428c60"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: rcc/h.rs: FileTooLong \u2014 873 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 373 over it, 1.75\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":"embassy-stm32/src/rcc/h.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"536e22649d3cf70058f02458a1a8ea738e6fbdf65ddc860c9400309eea14d723"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/uarte.rs: FileTooLong \u2014 872 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 372 over it, 1.74\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":"embassy-nrf/src/uarte.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"72ea54db3fc502fdd63cce8d58ffa54cc148111e16ba388ab664891c4fa58098"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/crypto_driver.rs: FileTooLong \u2014 872 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 372 over it, 1.74\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":"embassy-stm32/src/crypto_driver.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec34f906917252f21a324462e9dd18b4bc327b92048fda4cd71f8e1c5b109b86"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: embassy_stm32::rcc::n6::init_osc: FunctionTooLong \u2014 embassy_stm32::rcc::n6::init_osc runs 174 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 74 over it, 1.74\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":"embassy-stm32/src/rcc/n6.rs"},"region":{"startLine":890}}}],"partialFingerprints":{"codehealthFindingId/v1":"4efb93225fb2522247eec4708edd747dbdabce7aefdcd63d025ff8f3deaecdab"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: HCI: TooManyMethods \u2014 52 methods. The bar is 30 methods; this is 22 over it, 1.73\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":"embassy-stm32-wpan/src/bluetooth/mod.rs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1c437e87c4a623f0178b9e603e1fc854d5b56bb72d86fb06746b4eb621b9828"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Rpc.encode: MethodTooLong \u2014 encode runs 172 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 72 over it, 1.72\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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":50025}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea9425115f194be6bc9bc7bc6a3718253f7556e6e1ac64a5b62a214e10afaaa0"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: spi/controller.rs: FileTooLong \u2014 845 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 87% of them inside a single declaration: Spi (15 blocks, 132-1383). The bar is 500 significant lines; this is 345 over it, 1.69\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/spi/controller.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"06bfd1a28db417c8d821097cdf5084fb0dee18d13b926e6d7e30acf47890e853"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/driver.rs: FileTooLong \u2014 844 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 93% of them inside a single declaration: NeoChrom (2 blocks, 74-1115). The bar is 500 significant lines; this is 344 over it, 1.69\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32-neochrom/src/driver.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"aeacecdb606e3f7fde916c39591a90c975787f306f41c0201320124cb6542fe2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 843 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 343 over it, 1.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":"embassy-nrf/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b92e6c2fa89b9661f75442277d2c47d3a922f9308e9922fed1e152bde8ddc0ab"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/host.rs: FileTooLong \u2014 836 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 336 over it, 1.67\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":"embassy-usb-synopsys-otg/src/host.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c18c8bdd16196a967a6745d57e6e7506ef5e0ef50910ea5e73ac29e457e58a4"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: i3c/target.rs: FileTooLong \u2014 835 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 335 over it, 1.67\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":"embassy-mcxa/src/i3c/target.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a5147b28e51d36a37664640b1ec86f6164a8d216583d85f7ace1ad68c926841"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TcpSocket: TooManyMethods \u2014 50 methods. The bar is 30 methods; this is 20 over it, 1.67\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":"embassy-net/src/tcp.rs"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6abc0b3bea6363caf54615ac51a07f750ab53fd4cf984196e3ff67516730a3f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: chips/nrf54lm20_app.rs: FileTooLong \u2014 833 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 333 over it, 1.67\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":"embassy-nrf/src/chips/nrf54lm20_app.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"94b136ac75777d5d22335694eff2954bda20da257f70971110ac7e640d8a0346"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Cryp: ClassTooLong \u2014 659 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 20 methods, 6 blocks, lines 615-1666. The bar is 400 significant lines; this is 259 over it, 1.65\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":"embassy-stm32/src/cryp/mod.rs"},"region":{"startLine":615}}}],"partialFingerprints":{"codehealthFindingId/v1":"5dd2e8c738682f38883403076058dbff3d8b82ac4f30d40a7b86a420d77f7975"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: gpdma/mod.rs: FileTooLong \u2014 820 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 320 over it, 1.64\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":"embassy-stm32/src/dma/gpdma/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"75c8fe0674198196c379c54f2f60d1f6e2d3603cfc954139bb111572a7659549"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: clocks/operator.rs: FileTooLong \u2014 819 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 98% of them inside a single declaration: ClockOperator (2 blocks, 37-1583). The bar is 500 significant lines; this is 319 over it, 1.64\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/operator.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8b49f43dc15f821d3e77449052d2f7e53c48f9bd763df8b15113e7cb2082963"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/gpio.rs: FileTooLong \u2014 813 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 313 over it, 1.63\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":"embassy-rp/src/gpio.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"29a4fa5f55b04c3c6fa0ec7c2031486eb5794d833c9d93d89215fed4a0bfef10"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: usb/usb.rs: FileTooLong \u2014 808 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 308 over it, 1.62\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":"embassy-stm32/src/usb/usb.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c23c7f9c4b0bde4e8e1b35c9a2784be6efbac6d8d048981fca5620194dd6938"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFunctions: embassy_nrf::crypto::pka::cryptocell::engine: TooManyFunctions \u2014 48 free functions. The bar is 30 free functions; this is 18 over it, 1.60\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":"embassy-nrf/src/crypto/pka/cryptocell/engine.rs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"4326c13bf8bfdcf05eecc1f8d4d583d5ddabdce70b99edde07e033dabe7436f6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: timer/low_level.rs: FileTooLong \u2014 795 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 74% of them inside a single declaration: Timer (12 blocks, 452-1786). The bar is 500 significant lines; this is 295 over it, 1.59\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/timer/low_level.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c233d350620a95de059bb1a76b5b72903a2aea98681658ec2634e68dada402f3"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: r#wifi_init_config.decode: MethodTooLong \u2014 decode runs 158 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 58 over it, 1.58\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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":584}}}],"partialFingerprints":{"codehealthFindingId/v1":"0df378765fc78a64b766b47bface0a00b3371390802a665ab8c623fb721eca86"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Uart: ClassTooLong \u2014 626 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 38 methods, 9 blocks, lines 448-2859. The bar is 400 significant lines; this is 226 over it, 1.57\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":"embassy-stm32/src/usart/mod.rs"},"region":{"startLine":448}}}],"partialFingerprints":{"codehealthFindingId/v1":"049575e6374d2a6e6fee0e0f96e52c3e6c8b54438df413261abfbf4a793dcb83"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: i2c/target.rs: FileTooLong \u2014 773 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 74% of them inside a single declaration: I2c (13 blocks, 303-1545). The bar is 500 significant lines; this is 273 over it, 1.55\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/i2c/target.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc5759a27ac18904c078dab808d47f27cf19863dddb039934300016745225dbf"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: hash/mod.rs: FileTooLong \u2014 771 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 271 over it, 1.54\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":"embassy-stm32/src/hash/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9fdcf2f3f2417dc3529bc522535ff556ce45a49e96db5387f938c628b631fe3"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: LsConfig.init: MethodTooLong \u2014 init runs 154 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 54 over it, 1.54\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":"embassy-stm32/src/rcc/bd.rs"},"region":{"startLine":154}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b4aa95e0368b35ec370d83a856d253d30d18d845b393490d2eecd139bdc52e5"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: embassy_stm32::rcc::n6::enable_low_power_peripherals: FunctionTooLong \u2014 embassy_stm32::rcc::n6::enable_low_power_peripherals runs 154 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 54 over it, 1.54\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":"embassy-stm32/src/rcc/n6.rs"},"region":{"startLine":468}}}],"partialFingerprints":{"codehealthFindingId/v1":"602d6018c27144e8840581da43e48092545d1bf4240d7529109b756f7c7b38bd"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Runner.init: MethodTooLong \u2014 init runs 151 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 51 over it, 1.51\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":"cyw43/src/runner.rs"},"region":{"startLine":486}}}],"partialFingerprints":{"codehealthFindingId/v1":"7acd561c6c012333b7ed97a5fae711cd8e2366504d021eaf9bf8964cef7cb343"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: embassy_stm32::rcc::f247::init: FunctionTooLong \u2014 embassy_stm32::rcc::f247::init runs 151 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 51 over it, 1.51\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":"embassy-stm32/src/rcc/f247.rs"},"region":{"startLine":163}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d035ca46b873348da391d127be68d5787de7088ce92780bc2867b65835d4fab"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: InnerFlexSpi: 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":"embassy-mcxa/src/flexspi.rs"},"region":{"startLine":560}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba297adba716f94d82b06ff63f95d858742123ba8a2c24a269a7d5ff6bd1c1e0"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Iface: 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":"embassy-net/src/iface/mod.rs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d4ff5eee255ace05efb75bfd8802f7b9444f7a97961db6890b90607e443ba47"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: InnerFlexSpi: ClassTooLong \u2014 592 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 45 methods, 3 blocks, lines 560-1471. The bar is 400 significant lines; this is 192 over it, 1.48\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":"embassy-mcxa/src/flexspi.rs"},"region":{"startLine":560}}}],"partialFingerprints":{"codehealthFindingId/v1":"e24827be2f4b24bbfa7cb13596c4bacd265e4be695e9adfd09214015abb0ae6f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/gpio.rs: FileTooLong \u2014 735 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 235 over it, 1.47\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":"embassy-mcxa/src/gpio.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"55554aa714b4272f1671b0b4931c37c1a7f4832f8303de94a663a8c6f9a37708"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Timer: ClassTooLong \u2014 585 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 150 methods, 12 blocks, lines 452-1786. The bar is 400 significant lines; this is 185 over it, 1.46\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":"embassy-stm32/src/timer/low_level.rs"},"region":{"startLine":452}}}],"partialFingerprints":{"codehealthFindingId/v1":"45e1a6a762f529846c780a558acc27132b81a84ecba54b867aaca6b726046104"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: chips/nrf54l05_app.rs: FileTooLong \u2014 731 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 231 over it, 1.46\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":"embassy-nrf/src/chips/nrf54l05_app.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5746e88585f1410e6edf98bf6812e4636d230ff12cabca284b2ad4be82cabae"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: chips/nrf54l10_app.rs: FileTooLong \u2014 731 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 231 over it, 1.46\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":"embassy-nrf/src/chips/nrf54l10_app.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ae7b98baac5f213cb4f0cdbd7e85de2b6ca7a1f6b87a060d66ec8225282cd16"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: chips/nrf54l15_app.rs: FileTooLong \u2014 731 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 231 over it, 1.46\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":"embassy-nrf/src/chips/nrf54l15_app.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"733205bb128e6b39358a39b84913638b706f05d6777864ba6cccc716484d986a"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/tcp.rs: FileTooLong \u2014 729 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 229 over it, 1.46\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":"embassy-net/src/tcp.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"df6fad160a6b31d640cf5962f22dc56d94e59dc95600151e9edd58481ff3d213"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Ethernet.new_inner: MethodTooLong \u2014 new_inner runs 145 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 45 over it, 1.45\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":"embassy-stm32/src/eth/v2/mod.rs"},"region":{"startLine":356}}}],"partialFingerprints":{"codehealthFindingId/v1":"790c3831d912bf6a6d587cd8cdccc3db0c3f7beaead06e5a6fad5014807e61a2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 720 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 220 over it, 1.44\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":"embassy-net-nrf91/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"501af1cb52edd829d3e3846360f3aa8830306eee744aa4dddaf0ec2e870cbab9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/i2s.rs: FileTooLong \u2014 719 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 219 over it, 1.44\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":"embassy-nrf/src/i2s.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba8a49bf233a50fe9f8496a510299894d4a0f611928a7c0347c2615111217abc"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: flexcomm/uart.rs: FileTooLong \u2014 718 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 218 over it, 1.44\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":"embassy-imxrt/src/flexcomm/uart.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca087a9981a9344c1b22f46eb4b1a964ac4ad9dcd389e12e9933f1f39b0fdbeb"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/i2c.rs: FileTooLong \u2014 717 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 65% of them inside a single declaration: I2c (11 blocks, 149-912). The bar is 500 significant lines; this is 217 over it, 1.43\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-microchip/src/i2c.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c54187187c2bbf93bfb4cb243436911b6b20812e4f7f0315b4249e4cd3336e0"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Crc: TooManyMethods \u2014 43 methods. The bar is 30 methods; this is 13 over it, 1.43\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":"embassy-mcxa/src/crc.rs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2fb510dcc041b768c19723db03273b8ecef03630ee8a95303e4864bbca441a6"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Sdmmc: TooManyMethods \u2014 43 methods. The bar is 30 methods; this is 13 over it, 1.43\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":"embassy-stm32/src/sdmmc/mod.rs"},"region":{"startLine":457}}}],"partialFingerprints":{"codehealthFindingId/v1":"1eef8b4cf779e45550813438d6de7a73d6d85a7c00e441bb3f2400d1511ddf31"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: security/mod.rs: FileTooLong \u2014 716 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 216 over it, 1.43\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":"embassy-stm32-wpan/src/bluetooth/security/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4158ffa21dc33b39faf8aebef062b4795e5ccec45bb8a498bacd8d3a0f323e9b"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: I2c: ClassTooLong \u2014 572 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 20 methods, 13 blocks, lines 303-1545. The bar is 400 significant lines; this is 172 over it, 1.43\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":"embassy-mcxa/src/i2c/target.rs"},"region":{"startLine":303}}}],"partialFingerprints":{"codehealthFindingId/v1":"4aa689953e26f29da1b27cac58d303663c1365233b7b1dffafa9eef9e8728129"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: usart/buffered.rs: FileTooLong \u2014 714 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 214 over it, 1.43\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":"embassy-stm32/src/usart/buffered.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bfb82bc2d3c268dfc1445a70962e9cb3a6c18c2c9810d418ae5efe335f87df5a"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: embassy_executor_macros::macros::task::run: FunctionTooLong \u2014 embassy_executor_macros::macros::task::run runs 142 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 42 over it, 1.42\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":"embassy-executor-macros/src/macros/task.rs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc56d90b8e5f40f495e672656e5ea0240ef2512b0543c19b618781f7e0649e5e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: i2c/controller.rs: FileTooLong \u2014 708 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 78% of them inside a single declaration: I2c (17 blocks, 298-1610). The bar is 500 significant lines; this is 208 over it, 1.42\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/i2c/controller.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e3f6028ea2acc1d4b3a02d8cae6da8c7e9a6b2f7d74320d383c4c28e83a2601"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/gpio.rs: FileTooLong \u2014 704 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 204 over it, 1.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":"embassy-stm32/src/gpio.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d47f25b9680c55b88d9f90d8fc79d5b045fdec6dc46570bb96cd0d4555bac16f"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Qspi: ClassTooLong \u2014 563 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 28 methods, 4 blocks, lines 96-879. The bar is 400 significant lines; this is 163 over it, 1.41\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":"embassy-stm32/src/qspi/mod.rs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e256fc9a8722b78927864672615d5bf65352e2a0fcde7f74c1a6df1d6069d51"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: wba/linklayer_plat.rs: FileTooLong \u2014 703 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), declaring 78 free functions. The bar is 500 significant lines; this is 203 over it, 1.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":"embassy-stm32-wpan/src/wba/linklayer_plat.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c06d4fdaad9eedf6793fd200105e01ef3415ce22e7ef848933311a9ab4346523"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: qspi/mod.rs: FileTooLong \u2014 703 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 80% of them inside a single declaration: Qspi (4 blocks, 96-879). The bar is 500 significant lines; this is 203 over it, 1.41\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/qspi/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b10e399b8c54d1c9995e89251012dd3b8e55828a499abe7af6011c6829224c4b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: class/msc.rs: FileTooLong \u2014 702 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 202 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":"embassy-usb-host/src/class/msc.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4db694945467a5d0afa2edc27355bb20ed473eb0c8808f837bc669042dbd92eb"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Gusbcfg: TooManyMethods \u2014 42 methods. The bar is 30 methods; this is 12 over it, 1.40\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":"embassy-usb-synopsys-otg/src/otg_v1.rs"},"region":{"startLine":3637}}}],"partialFingerprints":{"codehealthFindingId/v1":"a489d18812080ec2fb772ed4b51f8e5a3209c3aeadf1441d3b3dc13597a53037"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Algorithm16.into_config: MethodTooLong \u2014 into_config runs 140 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 40 over it, 1.40\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":"embassy-mcxa/src/crc.rs"},"region":{"startLine":459}}}],"partialFingerprints":{"codehealthFindingId/v1":"84d1f174b9d5c5f315f6ccf6e6cc5bf61f808ebddd6566cbf90b75292d64d294"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Speaker.new: MethodTooLong \u2014 new runs 140 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 40 over it, 1.40\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":"embassy-usb/src/class/uac1/speaker.rs"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"55ca4873fc37859dfbfa2fdbc6e6b640da0448be0ed2a7f7dbf396843519faf9"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: FlexspiMemConfig: TooManyFields \u2014 42 stored fields. The bar is 30 stored fields; this is 12 over it, 1.40\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/rom/flexspi_nor.rs"},"region":{"startLine":231}}}],"partialFingerprints":{"codehealthFindingId/v1":"42be4d97bd6573cc3c68206a9097347e384d3e1c72deff4eb3500c03a7f7d46b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/gpio.rs: FileTooLong \u2014 695 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 195 over it, 1.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":"embassy-microchip/src/gpio.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"34330327378abb066caf50a461fbb73b0986fe11bd964f7a06d780961a2ae738"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: can/fdcan.rs: FileTooLong \u2014 695 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 195 over it, 1.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":"embassy-stm32/src/can/fdcan.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a96a2552bbc08f56ae4a03c475d3165fbc3b931c24e8bbea31fe3e70d451ac59"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: I2c: ClassTooLong \u2014 554 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 32 methods, 17 blocks, lines 298-1610. The bar is 400 significant lines; this is 154 over it, 1.39\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":"embassy-mcxa/src/i2c/controller.rs"},"region":{"startLine":298}}}],"partialFingerprints":{"codehealthFindingId/v1":"53e2f11ca3c31e1da3840edb2f7bba5724dbfbb1623ed364082e64ee7155484c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: dac/mod.rs: FileTooLong \u2014 690 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). 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":"embassy-stm32/src/dac/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e8f6bf633c58bf70bc54c658d0346302c410e4038458706409db9fb6baab27b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: adc/mod.rs: FileTooLong \u2014 689 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 189 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":"embassy-stm32/src/adc/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e90b091601c9d5b6c867cb84a31eae0ea23169251d6a51e7b38b0f9090fee1cd"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: embassy_stm32::rcc::wba::init: FunctionTooLong \u2014 embassy_stm32::rcc::wba::init runs 137 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 37 over it, 1.37\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":"embassy-stm32/src/rcc/wba.rs"},"region":{"startLine":264}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8bb8b4af84127aa6658f769a0d841a36df42bdfaccd7888538ef51fe4e2e477"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyFields: Config: TooManyFields \u2014 41 stored fields beside 1 method. The bar is 30 stored fields; this is 11 over it, 1.37\u00D7 the bar. This is width in DATA, not behaviour: every reader that takes the whole type couples to all of its fields, so a change to any one of them is a change every reader has to be checked against. To reduce it, group the fields that are read together by the same callers into a smaller type of their own, and have this one hold that type as a single member \u2014 each reader then names only the group it uses."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/n6.rs"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"548b17fc04003ec510a86b3a6b62f4c546adfd24f851ad896b64863098cbd6fa"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 678 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 178 over it, 1.36\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":"embassy-stm32/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e1df7dacdb13dcf5f12ba9aec3b20daa8b8cf8eba776260108cbb125cfa9ff7"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Channel: ClassTooLong \u2014 541 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 35 methods, 6 blocks, lines 468-1577. The bar is 400 significant lines; this is 141 over it, 1.35\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":"embassy-rp/src/usb/host.rs"},"region":{"startLine":468}}}],"partialFingerprints":{"codehealthFindingId/v1":"32e6b53f83a97c31b4f6894fa7dd04ce19f0a153e27fbd26e336b755ea2b6d11"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: embassy_usb_synopsys_otg::host::on_host_interrupt: FunctionTooLong \u2014 embassy_usb_synopsys_otg::host::on_host_interrupt runs 135 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 35 over it, 1.35\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":"embassy-usb-synopsys-otg/src/host.rs"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"35626c0f39750903a18adacb6624ee2d9ba8aff1fe49402cf10b6e3f70195ca6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/pwm.rs: FileTooLong \u2014 670 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 170 over it, 1.34\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":"embassy-nrf/src/pwm.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"af673a8ed841c48c45b95b540c70813e1124e407b1211bb808e65fa7ef3cafcc"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CtrlMsg_Resp_GetDhcpDnsStatus: TooManyMethods \u2014 40 methods. The bar is 30 methods; this is 10 over it, 1.33\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":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":7845}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6052911c3ae0926162c107c0161cb9cb7d5653bc1438404350564b8fe33104b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CtrlMsg_Event_SetDhcpDnsStatus: TooManyMethods \u2014 40 methods. The bar is 30 methods; this is 10 over it, 1.33\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":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":9946}}}],"partialFingerprints":{"codehealthFindingId/v1":"3466830bd1a3989dd01739017715b6fecaff1012ad8b9e0467a5bfb4d8c1c378"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Rpc_Resp_GetDhcpDnsStatus: TooManyMethods \u2014 40 methods. The bar is 30 methods; this is 10 over it, 1.33\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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":32299}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff23820f4099af3515c27e70a21ebcdc4d55032cef5645f9dd9f66508113bd55"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Rpc_Event_DhcpDnsStatus: TooManyMethods \u2014 40 methods. The bar is 30 methods; this is 10 over it, 1.33\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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":40272}}}],"partialFingerprints":{"codehealthFindingId/v1":"859fca1e4b855614e7234ad9121c066db6d07be6bc815554ff8a8415b54196ef"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Registers: TooManyMethods \u2014 40 methods. The bar is 30 methods; this is 10 over it, 1.33\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":"embassy-stm32/src/can/fd/peripheral.rs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"0122eafe88f2df648aa7115aff8f6934a293b278b4212233f03372d76f5f4e89"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: usb/otg.rs: FileTooLong \u2014 666 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 166 over it, 1.33\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":"embassy-stm32/src/usb/otg.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a53020a4c71c08837338f70a822210f9b7b9762530fb507552104a613dc23b1"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Runner.rx: MethodTooLong \u2014 rx runs 132 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 32 over it, 1.32\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":"cyw43/src/runner.rs"},"region":{"startLine":1057}}}],"partialFingerprints":{"codehealthFindingId/v1":"54b72e0284fabe636d0416536fd54efddfd7b23aec28dc4bffa4caf947ce84a0"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: embassy_stm32::rcc::g4::init: FunctionTooLong \u2014 embassy_stm32::rcc::g4::init runs 132 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 32 over it, 1.32\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":"embassy-stm32/src/rcc/g4.rs"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"9840533ce7127469b12c1a0d33528f80930c18f5026a32e237d57a7948176c7e"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: embassy_stm32::rcc::n6::init_clocks: FunctionTooLong \u2014 embassy_stm32::rcc::n6::init_clocks runs 132 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 32 over it, 1.32\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":"embassy-stm32/src/rcc/n6.rs"},"region":{"startLine":282}}}],"partialFingerprints":{"codehealthFindingId/v1":"e262af5379e0349d64f8c6439dafbb96719e8af7847986f3f78696f39afbdf72"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: embassy_stm32::usart::configure: FunctionTooLong \u2014 embassy_stm32::usart::configure runs 132 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 32 over it, 1.32\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":"embassy-stm32/src/usart/mod.rs"},"region":{"startLine":2601}}}],"partialFingerprints":{"codehealthFindingId/v1":"6690034384c17d11c036139fb25babed6b62c5c4e75ac18ea1b6f374bebc8de8"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/i2c.rs: FileTooLong \u2014 657 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 66% of them inside a single declaration: I2c (15 blocks, 319-1097). The bar is 500 significant lines; this is 157 over it, 1.31\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/i2c.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b0772d7d0e7f8894e0b13771703ae00f5b6b6f7e03d74332f7176b4ad1b2ad6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/descriptor.rs: FileTooLong \u2014 655 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 155 over it, 1.31\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":"embassy-usb-host/src/descriptor.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"250c8a201a098e6c24f17e90d5a280d10da603ad77325731f8cd77694f84f3e1"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: I2c.read_frame: MethodTooLong \u2014 read_frame runs 131 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 31 over it, 1.31\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":"embassy-stm32/src/i2c/v1.rs"},"region":{"startLine":722}}}],"partialFingerprints":{"codehealthFindingId/v1":"abd07b07423aa2193629d644f33d485b5a76efef063136acd7953e0a710231ca"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: uart/buffered.rs: FileTooLong \u2014 654 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 154 over it, 1.31\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":"embassy-mspm0/src/uart/buffered.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae46868c34c10811a40e45f0be56f3d20fe08b48901a14da62bd688c47742883"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: bxcan/mod.rs: FileTooLong \u2014 653 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 153 over it, 1.31\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":"embassy-stm32/src/can/bxcan/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e40a9f1ec366e8c42e16caf7ddeb903decba96552ddf6db6245d73a7ce675c87"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/driver.rs: FileTooLong \u2014 652 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 152 over it, 1.30\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":"embassy-crypto/src/driver.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca1f9f127339e3b20d06f548f231843ee75a59f8d4b599bd42dc4a0399756ad1"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: hspi/mod.rs: FileTooLong \u2014 648 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 80% of them inside a single declaration: Hspi (7 blocks, 167-990). The bar is 500 significant lines; this is 148 over it, 1.30\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hspi/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"00b1651083ae41cb55c5df9c6936ab2262ea1e69c7d8222b10110d817d0be4b1"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/i2c.rs: FileTooLong \u2014 647 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 67% of them inside a single declaration: I2c (13 blocks, 152-964). The bar is 500 significant lines; this is 147 over it, 1.29\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/i2c.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"363d42114bdfb8c51d0ad2e90bb1d1926112cc962ed74155e845dcc7d77a40b4"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Hspi: ClassTooLong \u2014 516 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 18 methods, 7 blocks, lines 167-990. The bar is 400 significant lines; this is 116 over it, 1.29\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":"embassy-stm32/src/hspi/mod.rs"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe7f90187ac1a7aa61a6200e4afc85c3f47d0ba1806b38371be7c78dc3639531"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Rpc.compute_size: MethodTooLong \u2014 compute_size runs 129 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 29 over it, 1.29\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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":50247}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a28ed71fe18beea7239b6b8a4bf738397d3f83e36a4ca9525f9757c6249920d"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: r#wifi_pkt_rx_ctrl.decode: MethodTooLong \u2014 decode runs 128 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 28 over it, 1.28\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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":7198}}}],"partialFingerprints":{"codehealthFindingId/v1":"890f3c61677740fbafe15c787e13c7e067ddbec98b9154234e30502214c82b53"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Flash: TooManyMethods \u2014 38 methods, declared across 4 files: flash/eeprom.rs (15), flash/edata.rs (10), flash/common.rs (7), flash/asynch.rs (6). The bar is 30 methods; this is 8 over it, 1.27\u00D7 the bar. That list is where to read them, not a suggestion to split the file: the members belong to the type wherever they are declared, so moving them between files leaves the count unchanged. 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":"embassy-stm32/src/flash/common.rs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"e342b073d904f39e30140143bacd8a5a510aff520fdce89935c84befacfb2aa0"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Uart: TooManyMethods \u2014 38 methods. The bar is 30 methods; this is 8 over it, 1.27\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":"embassy-stm32/src/usart/mod.rs"},"region":{"startLine":448}}}],"partialFingerprints":{"codehealthFindingId/v1":"c397540989ea5ce57178cd885258d01abbffd574ae2f29e5893a1e0fced2f1d6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/dcmipp.rs: FileTooLong \u2014 633 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 133 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":"embassy-stm32/src/dcmipp.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"20a828cf0c06b950e6d29f405d3c27ecb19740d7c13ce88d7c65711effc66a9c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/consts.rs: FileTooLong \u2014 628 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 128 over it, 1.26\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":"cyw43/src/consts.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"75aef880d077c792b27fcd16c901329640a4446a5b814a67ab45bba72a40d38b"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: embassy_stm32::rcc::g0::init: FunctionTooLong \u2014 embassy_stm32::rcc::g0::init runs 125 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 25 over it, 1.25\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":"embassy-stm32/src/rcc/g0.rs"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"68c32d8cfb342a43fb30ea886d2e86ad43ea08a3b6b982f90d6e74c7139e7ae2"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: StateMachine.set_config: MethodTooLong \u2014 set_config runs 124 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 24 over it, 1.24\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":"embassy-rp/src/pio/mod.rs"},"region":{"startLine":790}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a8a2f209af7e67836f5e20db747454a4bac6348b0ce5170a5912f137af1263c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/gpio.rs: FileTooLong \u2014 619 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 119 over it, 1.24\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":"embassy-imxrt/src/gpio.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4f94af83bed14d6ed3a748f7b89cbd289f420c50aa173358075b7429ee8f069"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: I3c: TooManyMethods \u2014 37 methods. The bar is 30 methods; this is 7 over it, 1.23\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":"embassy-mcxa/src/i3c/controller.rs"},"region":{"startLine":322}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef6108a50853fd5db1757847f958af6bf128883be4216d281afe8ed067d22ac2"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: StateMachine: TooManyMethods \u2014 37 methods, declared across 2 files: pio/mod.rs (28), pio/instr.rs (9). The bar is 30 methods; this is 7 over it, 1.23\u00D7 the bar. That list is where to read them, not a suggestion to split the file: the members belong to the type wherever they are declared, so moving them between files leaves the count unchanged. 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":"embassy-rp/src/pio/mod.rs"},"region":{"startLine":547}}}],"partialFingerprints":{"codehealthFindingId/v1":"66df36405499b5c284bb2725e11b445ece700e93e1fce4d9512f84ed399cb3c0"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: uart/mod.rs: FileTooLong \u2014 612 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). 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":"embassy-mspm0/src/uart/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2c06866bd7a9862584f516969453dd0f5963d2efcdbbdd4856929619e6af410"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: buffered_uarte/v1.rs: FileTooLong \u2014 610 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 110 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":"embassy-nrf/src/buffered_uarte/v1.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f7a3053601dec72c9776f9059ad6d4dacdf29a43b392a05cb93f3489326002b"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ClockOperator.configure_osc32k_clocks: MethodTooLong \u2014 configure_osc32k_clocks runs 121 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 21 over it, 1.21\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":"embassy-mcxa/src/clocks/operator.rs"},"region":{"startLine":449}}}],"partialFingerprints":{"codehealthFindingId/v1":"67f7ec9161cac6f1717fc9714f61053026ec04a356af7e51076c72997cc4d1bc"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: flexcomm/spi.rs: FileTooLong \u2014 601 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 74% of them inside a single declaration: Spi (11 blocks, 43-1011). The bar is 500 significant lines; this is 101 over it, 1.20\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-imxrt/src/flexcomm/spi.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"55e39fe8f212b5480d65ebbbe63503c4860c7780d3cc1a8e932d39c2a7433c9c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CtrlMsg_Resp_GetSoftAPConfig: TooManyMethods \u2014 36 methods. The bar is 30 methods; this is 6 over it, 1.20\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":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":2541}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f6f6ad4d0eab8bf09d83c798551cfd5706d9e6580c4d0e902a3bbba1a85efc3"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CtrlMsg_Req_SetDhcpDnsStatus: TooManyMethods \u2014 36 methods. The bar is 30 methods; this is 6 over it, 1.20\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":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":7191}}}],"partialFingerprints":{"codehealthFindingId/v1":"2377a8d1098abcb47bbb497d129c50f6a1c8f27c7f155cdfa0a748e089b0873c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: r#wifi_scan_config: TooManyMethods \u2014 36 methods. The bar is 30 methods; this is 6 over it, 1.20\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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":2213}}}],"partialFingerprints":{"codehealthFindingId/v1":"8595c6327fd973787c854d8ddd5605c586bacd26f6a518ad0437dcb01efa4b2e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Rpc_Resp_GetCoprocessorFwVersion: TooManyMethods \u2014 36 methods. The bar is 30 methods; this is 6 over it, 1.20\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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":31061}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ba35d3f7ddc2038180e2eca28af7995e1cdb526b50288353ae0e68a0769f1ae"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Rpc_Req_SetDhcpDnsStatus: TooManyMethods \u2014 36 methods. The bar is 30 methods; this is 6 over it, 1.20\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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":31589}}}],"partialFingerprints":{"codehealthFindingId/v1":"f716755a444d14459422db387815e3cdf602e596f18abffec022696d0b1386f4"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Rpc_Req_ExtCoex: TooManyMethods \u2014 36 methods. The bar is 30 methods; this is 6 over it, 1.20\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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":39644}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e781b00492249b29641670af9e9e339d129bcb9d63baa03af02c49bf6e33d4a"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Xspi.new_inner: MethodTooLong \u2014 new_inner runs 120 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 20 over it, 1.20\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":"embassy-stm32/src/xspi/mod.rs"},"region":{"startLine":307}}}],"partialFingerprints":{"codehealthFindingId/v1":"a317b2066d58542de3f981229b78a8ee92ab3e4dc577635c461f3d23702a39e9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: cryptocell/ecc.rs: FileTooLong \u2014 597 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 97 over it, 1.19\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":"embassy-nrf/src/crypto/pka/cryptocell/ecc.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4092dd6169bf156799ce8669f5064ff381a20c4cee1d4d202c18531c191ee68c"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: HCI.process_event: MethodTooLong \u2014 process_event runs 119 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 19 over it, 1.19\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":"embassy-stm32-wpan/src/bluetooth/mod.rs"},"region":{"startLine":674}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d8713bcb50d4895a8995821faade0ddd86f403405d87e1666e7dd22a7e06bee"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 594 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 94 over it, 1.19\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":"embassy-net-adin1110/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"92e337fe7fe551e6c1916c8e13811c64c8fa3c6443e80469f6305480ac875399"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: uac/mod.rs: FileTooLong \u2014 594 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 60% of them inside a single declaration: UacHandler (2 blocks, 62-655). The bar is 500 significant lines; this is 94 over it, 1.19\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb-host/src/class/uac/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c607ac38dadc7e068e00fb0e3084f1976178fafcc65b41354e1a5f5901d015e7"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: DmaChannel: ClassTooLong \u2014 475 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 54 methods, 4 blocks, lines 618-2398. The bar is 400 significant lines; this is 75 over it, 1.19\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":"embassy-mcxa/src/dma.rs"},"region":{"startLine":618}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b30d2185d004bf0dace48f9dad0974bb601d43b7b4f0dd5c5c22abe46940365"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: I3c: ClassTooLong \u2014 473 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 22 methods, 5 blocks, lines 312-1429. The bar is 400 significant lines; this is 73 over it, 1.18\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":"embassy-mcxa/src/i3c/target.rs"},"region":{"startLine":312}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb4af66b66a8450af8ad3c3f942ce9609c7fd0bc691bd05ec38c3665ca4990cc"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: MidiClass.build: MethodTooLong \u2014 build runs 118 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 18 over it, 1.18\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":"embassy-usb/src/class/midi/mod.rs"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"32feb0ecf4f91ff1298d0741370e47f1d29eb90ec7ba20a942d3d484bb2cc06a"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: adc/v3.rs: FileTooLong \u2014 589 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 67% of them inside a single declaration: Regs (4 blocks, 162-879). The bar is 500 significant lines; this is 89 over it, 1.18\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/adc/v3.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2f4cffc5b96863199c49603f79af789176acec191a9994831cf378739eec12b"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: HCI: ClassTooLong \u2014 470 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 52 methods, 4 blocks, lines 93-1039. The bar is 400 significant lines; this is 70 over it, 1.18\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":"embassy-stm32-wpan/src/bluetooth/mod.rs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"ffef2623b7347cd8ede0495bf3a46680e8f648adeb68c95b0f68018f71628d88"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Channel: TooManyMethods \u2014 35 methods. The bar is 30 methods; this is 5 over it, 1.17\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":"embassy-rp/src/usb/host.rs"},"region":{"startLine":468}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa8963caae8e4291b03972241afe2f339c7b727c3596185af74fab6984c8809a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Ospi: TooManyMethods \u2014 35 methods. The bar is 30 methods; this is 5 over it, 1.17\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":"embassy-stm32/src/ospi/mod.rs"},"region":{"startLine":245}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1981ac0e7cd4e8f992f422a825006950f095e9cd25318be7233c0c085332c20"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Spi: TooManyMethods \u2014 35 methods, declared across 2 files: spi/mod.rs (34), spi/ringbuffered.rs (1). The bar is 30 methods; this is 5 over it, 1.17\u00D7 the bar. That list is where to read them, not a suggestion to split the file: the members belong to the type wherever they are declared, so moving them between files leaves the count unchanged. 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":"embassy-stm32/src/spi/mod.rs"},"region":{"startLine":333}}}],"partialFingerprints":{"codehealthFindingId/v1":"be2efa2758c165aeb35f0187747e046984b2d8647e2915578931da31aa2fcb62"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: I2c: ClassTooLong \u2014 466 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 26 methods, 11 blocks, lines 149-912. The bar is 400 significant lines; this is 66 over it, 1.17\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":"embassy-microchip/src/i2c.rs"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"20306cbf930fcf09bc5c7cd3fc6afe8a4a6d51bce9a63dc7041320a1b22f777b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: usart/lpc55.rs: FileTooLong \u2014 580 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 80 over it, 1.16\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":"embassy-nxp/src/usart/lpc55.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b72c7733155786ea0c8597816bf9b7762b7b8bc6aa9d581b7b54c37ddff7ce8f"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Psram.init_psram: MethodTooLong \u2014 init_psram runs 116 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 16 over it, 1.16\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":"embassy-rp/src/psram.rs"},"region":{"startLine":445}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe1cdb2a8233444a96abc5a0d2d0287e2bb088ceb08151c75a3b5ca48f6dc746"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: TlMbox.init: MethodTooLong \u2014 init runs 116 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 16 over it, 1.16\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":"embassy-stm32-wpan/src/wb/mod.rs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"74dd35c8fa5983661a2b1b98bf1be162606e824ae27e700f51f3d228182726e1"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/gpiote.rs: FileTooLong \u2014 578 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 78 over it, 1.16\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":"embassy-nrf/src/gpiote.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e43feeed45570a46f6e9c9187288c71870b486b58e900dfc37340e5f67033f59"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: sqspi/mod.rs: FileTooLong \u2014 577 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 69% of them inside a single declaration: Sqspi (6 blocks, 326-934). The bar is 500 significant lines; this is 77 over it, 1.15\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/sqspi/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"80380cef7769e7708d737c950d26b111d34486f16091d13d107d602d60c1374e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/lib.rs: FileTooLong \u2014 576 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 76 over it, 1.15\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":"embassy-rp/src/lib.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"44bbf2ee8adee3be773e5530b34fabaddbd01e9b0807af47aa06f5ac6d65ffbf"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ReportDescriptor.parse: MethodTooLong \u2014 parse runs 115 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 15 over it, 1.15\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":"embassy-usb-host/src/class/hid_report.rs"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e9b24847bcee51d3eef0e8d0d6935f4a2bff689099986811bf47625a05b9c18"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/uart.rs: FileTooLong \u2014 570 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 70 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":"embassy-microchip/src/uart.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9dda1fed9d661086dbdbf0bd40c7e25d387ebd6499d09ec41c67f747c6d6d58"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ClockOperator.configure_voltages: MethodTooLong \u2014 configure_voltages runs 114 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 14 over it, 1.14\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":"embassy-mcxa/src/clocks/operator.rs"},"region":{"startLine":1300}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f069f20133fecf7614db2fec9e19679eab8e11a2da9dc4d164ca99513e35e4e"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: I2c.write_frame: MethodTooLong \u2014 write_frame runs 114 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 14 over it, 1.14\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":"embassy-stm32/src/i2c/v1.rs"},"region":{"startLine":488}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b20572aa4efbf9e9e5036f35cb4caaf64d27425ef9d705fef1b62ca21859bb2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/i2s.rs: FileTooLong \u2014 568 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 67% of them inside a single declaration: I2S (2 blocks, 231-821). The bar is 500 significant lines; this is 68 over it, 1.14\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i2s.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"23c0b449a66c1a5daa6cc0eaea8d2fbaed3ce4cf485fb6a25ad55ec3bc73fba3"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CommandSender: TooManyMethods \u2014 34 methods. The bar is 30 methods; this is 4 over it, 1.13\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":"embassy-stm32-wpan/src/bluetooth/hci/command.rs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"cab035a76ec841306b5711d9aa464fd6d2e64f3d23143cd7d4087c82a8ca8048"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Gotgctl: TooManyMethods \u2014 34 methods. The bar is 30 methods; this is 4 over it, 1.13\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":"embassy-usb-synopsys-otg/src/otg_v1.rs"},"region":{"startLine":3137}}}],"partialFingerprints":{"codehealthFindingId/v1":"10e9c086b06574bf8e665f2a7cfe94ceaa269558bfd559b4bcdb1c6aa5ed4ee0"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/gpio.rs: FileTooLong \u2014 565 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 65 over it, 1.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":"embassy-mspm0/src/gpio.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"28d7776dde3132d92d7c694ce8e27489cfb3aa0c4afb0190b5497ad986dc0cdb"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/comp.rs: FileTooLong \u2014 565 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 65 over it, 1.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":"embassy-stm32/src/comp.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"84ba1df2f5be0ca16a214f6825cb283cd3782e48f972dd5e6bcfd949abecb453"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Ospi.new_inner: MethodTooLong \u2014 new_inner runs 113 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 13 over it, 1.13\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":"embassy-stm32/src/ospi/mod.rs"},"region":{"startLine":534}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4fa89b86d335c3f746bf4d8893cf2d082a19d98d5b6aeb328b99efc76827e6f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/saadc.rs: FileTooLong \u2014 560 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 60 over it, 1.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":"embassy-nrf/src/saadc.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b7891c4a9010c7fb45ea4bd341dec9339c5d7fcb41b04e30c7350457117e256"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: AesDriver: ClassTooLong \u2014 448 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 0 methods, 10 blocks, lines 276-990. The bar is 400 significant lines; this is 48 over it, 1.12\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":"embassy-stm32/src/crypto_driver.rs"},"region":{"startLine":273}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ea94eff9ab6bf7907d81d507cb18d0f96497c4d35f336dcba46584c1f34d534"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: CtrlMsg.encode: MethodTooLong \u2014 encode runs 112 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 12 over it, 1.12\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":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":11902}}}],"partialFingerprints":{"codehealthFindingId/v1":"1abd79c0ecbace082a971147d4b146a6d418f4376ff218990f1a78994457b0b8"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: r#wifi_ap_config.decode: MethodTooLong \u2014 decode runs 112 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 12 over it, 1.12\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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":4521}}}],"partialFingerprints":{"codehealthFindingId/v1":"18d1b7a6972a3cd621b6eba9b11cb022569e88d517ae3961997652c730d57468"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: embassy_stm32::rcc::h::flash_setup: FunctionTooLong \u2014 embassy_stm32::rcc::h::flash_setup runs 112 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 12 over it, 1.12\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":"embassy-stm32/src/rcc/h.rs"},"region":{"startLine":1095}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e0c33d31bd2cd22975d791c4d943c82e4a78610a2bd701ba8351636f47b2a9d"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Spi: ClassTooLong \u2014 445 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 24 methods, 11 blocks, lines 43-1011. The bar is 400 significant lines; this is 45 over it, 1.11\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":"embassy-imxrt/src/flexcomm/spi.rs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"a115fc522841df8ebf212921fc0b02a5f8e0ee5b6546dc16faf05490323d8885"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: dfsdm/filter.rs: FileTooLong \u2014 556 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 56 over it, 1.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":"embassy-stm32/src/dfsdm/filter.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"35ca83e917dbe73acd4441d9193534a026ded84a1f2e74abb646a3745ef67883"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: usb/mod.rs: FileTooLong \u2014 553 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 53 over it, 1.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":"embassy-nrf/src/usb/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"41d112d3b90ec0ca8879025f9610931522450b89e7c92701caa9f2c570dec91b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: UdpSocket: TooManyMethods \u2014 33 methods. The bar is 30 methods; this is 3 over it, 1.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":"embassy-net/src/udp.rs"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"cec576b8f8f8e106f3168e0f5b8f6d049e63b826698d446aa3ec9a17309615fb"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SecurityManager: TooManyMethods \u2014 33 methods. The bar is 30 methods; this is 3 over it, 1.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":"embassy-stm32-wpan/src/bluetooth/security/mod.rs"},"region":{"startLine":594}}}],"partialFingerprints":{"codehealthFindingId/v1":"4bfd7005aec49accaa0babf4f0be3084dad9b74cedbca64f7471400d62e5f12b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/adc.rs: FileTooLong \u2014 549 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 49 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":"embassy-mcxa/src/adc.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3cdc7bcf6791c96c01df40f54ee5987215ad9652961262132c05057b6d16188e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: usb/device.rs: FileTooLong \u2014 547 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 47 over it, 1.09\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":"embassy-rp/src/usb/device.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cb74f434137b6a2d47a9321fb5b85dd9f9c4dbb26863741996f77ca0b26bd7a"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: embassy_net_nrf91::new_internal: FunctionTooLong \u2014 embassy_net_nrf91::new_internal runs 109 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 9 over it, 1.09\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":"embassy-net-nrf91/src/lib.rs"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"6740a34ba6c6e543088304ca7d17972ebde83c8e7662fe382e1338d9807c1c58"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: I2c: ClassTooLong \u2014 435 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 24 methods, 15 blocks, lines 319-1097. The bar is 400 significant lines; this is 35 over it, 1.09\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":"embassy-mspm0/src/i2c.rs"},"region":{"startLine":319}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e7a488b8374582ac12fdcb17e4a0243a4daa49c46fdebecad35a1111c015b7f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/ltdc.rs: FileTooLong \u2014 543 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 67% of them inside a single declaration: Ltdc (7 blocks, 141-805). The bar is 500 significant lines; this is 43 over it, 1.09\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/ltdc.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"042a313e0f5934a8447ff0a00a333cb648acecd6c71cabe261f92da1fb6500ac"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: usb/usb_host.rs: FileTooLong \u2014 543 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 43 over it, 1.09\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":"embassy-stm32/src/usb/usb_host.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4415425a6a05d347e8a2d38bfd71021448f0d8df95a82f5d08eed4136bd1eb68"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: I2c: ClassTooLong \u2014 433 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 26 methods, 13 blocks, lines 152-964. The bar is 400 significant lines; this is 33 over it, 1.08\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":"embassy-rp/src/i2c.rs"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"8fc64236f203c975c30bc87cf1077c01dade49fe4b9fe391bc8656c1a884a67a"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: sai/mod.rs: FileTooLong \u2014 539 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 39 over it, 1.08\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":"embassy-stm32/src/sai/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d0462393536d44ab95ab5f0e553477f84bc339a26547b884265ea57446316be"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: embassy_stm32_wpan::bluetooth::gap_init::init_gap_and_hal: FunctionTooLong \u2014 embassy_stm32_wpan::bluetooth::gap_init::init_gap_and_hal runs 107 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 7 over it, 1.07\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":"embassy-stm32-wpan/src/bluetooth/gap_init.rs"},"region":{"startLine":269}}}],"partialFingerprints":{"codehealthFindingId/v1":"f37d0cb3a3810d89dff8207b9294c1b9894db13390a5b69f891276608f2d4aff"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Control: TooManyMethods \u2014 32 methods. The bar is 30 methods; this is 2 over it, 1.07\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":"cyw43/src/control.rs"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6439542baa81565193849092e25bb036c21ddb59d903900263396c5d6b6e81c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: I2c: TooManyMethods \u2014 32 methods. The bar is 30 methods; this is 2 over it, 1.07\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":"embassy-mcxa/src/i2c/controller.rs"},"region":{"startLine":298}}}],"partialFingerprints":{"codehealthFindingId/v1":"fae854eec6a1ec3b061634af09de02bacca2219ece0c7344ff2c6e9be806bcc7"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Sgi: TooManyMethods \u2014 32 methods. The bar is 30 methods; this is 2 over it, 1.07\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":"embassy-mcxa/src/sgi/mod.rs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c26afc20229aefbda0a4e072cc8215e966b925c47063b34b7f0ef0f46aa20f1"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CtrlMsg_Req_StartSoftAP: TooManyMethods \u2014 32 methods. The bar is 30 methods; this is 2 over it, 1.07\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":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":3065}}}],"partialFingerprints":{"codehealthFindingId/v1":"908971241bcb61aafe554677ca2d33693ddcbd46cbb84aecf707d928a379a5bd"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Rpc_Resp_MemMonitor: TooManyMethods \u2014 32 methods. The bar is 30 methods; this is 2 over it, 1.07\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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":35503}}}],"partialFingerprints":{"codehealthFindingId/v1":"712a260e11ce07bd2dd67e1250d574d3cf6dcf264e0f76f6ec46945d17ad971e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Spis: TooManyMethods \u2014 32 methods. The bar is 30 methods; this is 2 over it, 1.07\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":"embassy-nrf/src/spis.rs"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"78fcf28394b6d0ad22b77b9abc22c99e104e57b5b685f08c5ed2e88b3e7493e4"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DsiHost: TooManyMethods \u2014 32 methods, declared across 4 files: dsihost/mod.rs (23), dsihost/mode.rs (6), dsihost/phy.rs (2), dsihost/panel.rs (1). The bar is 30 methods; this is 2 over it, 1.07\u00D7 the bar. That list is where to read them, not a suggestion to split the file: the members belong to the type wherever they are declared, so moving them between files leaves the count unchanged. 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":"embassy-stm32/src/dsihost/mod.rs"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"59df58a22bde9b47b86aa3eb208c53b6ace7b6ef4cf661527edbe4b02d558b27"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Xspi: TooManyMethods \u2014 32 methods. The bar is 30 methods; this is 2 over it, 1.07\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":"embassy-stm32/src/xspi/mod.rs"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b548d3ca0155b510455fadbd85a991e8c177f9394f04d11885480744b805847"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: rcc/l.rs: FileTooLong \u2014 533 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 33 over it, 1.07\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":"embassy-stm32/src/rcc/l.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"880909cc8c212a79c176e07d3cfebb753efdc0c291e7a6e5f19ee80e799bcdc0"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Hash: ClassTooLong \u2014 426 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 12 methods, 5 blocks, lines 308-1074. The bar is 400 significant lines; this is 26 over it, 1.07\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":"embassy-stm32/src/hash/mod.rs"},"region":{"startLine":308}}}],"partialFingerprints":{"codehealthFindingId/v1":"d62f54dea4b9c24a4b5a84b8bad5ba7dd8b1e50f9012bb26fb9fdeba54900741"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: symmetric/driver.rs: FileTooLong \u2014 528 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). 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":"embassy-nrf/src/crypto/symmetric/driver.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"db792cc50df1cf0f9805f44db1894e09c567039bed7590152f56c02bf52a6e9b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/twis.rs: FileTooLong \u2014 528 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 77% of them inside a single declaration: Twis (5 blocks, 176-845). The bar is 500 significant lines; this is 28 over it, 1.06\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/twis.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"689482573169030e098c8ac9ae2fe813fda99edce22eb6a1a5522a916f051aa2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/gpio.rs: FileTooLong \u2014 526 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 26 over it, 1.05\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":"embassy-nrf/src/gpio.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3de7a525ec84ad21b45993ad7d69d9760d8c77b0704f19a0e948cfe4f9ea0d0"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/spim.rs: FileTooLong \u2014 526 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 26 over it, 1.05\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":"embassy-nrf/src/spim.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"875ec54fa4fb1277fcfc7bfc1a1fdfe78926256549815dcd651c2e5d23cf0a33"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/twim.rs: FileTooLong \u2014 526 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 71% of them inside a single declaration: Twim (9 blocks, 165-975). The bar is 500 significant lines; this is 26 over it, 1.05\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/twim.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c44e53a3d07b8f6085ecc15d8950f6552072a3ee25ca4e24fad30878ad65872e"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: Adc.new_inner: MethodTooLong \u2014 new_inner runs 105 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 5 over it, 1.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":"embassy-mcxa/src/adc.rs"},"region":{"startLine":581}}}],"partialFingerprints":{"codehealthFindingId/v1":"434048c57f87b82246503fa61526cd750da8ced6b6f63cdd0e3f5c2418edd129"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: PioSpi.new: MethodTooLong \u2014 new runs 104 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 4 over it, 1.04\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":"cyw43-pio/src/lib.rs"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f59d1cff8914d841eb63b8264b30b070bf5deb442819a736871c3a0f4b714b8"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: bluetooth/mod.rs: FileTooLong \u2014 519 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 91% of them inside a single declaration: HCI (4 blocks, 93-1039). The bar is 500 significant lines; this is 19 over it, 1.04\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32-wpan/src/bluetooth/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b88863488f957490549e94d51dd33d1d4e103394286c4decbacb9104f92e931"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Spim: TooManyMethods \u2014 31 methods. The bar is 30 methods; this is 1 over it, 1.03\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":"embassy-nrf/src/spim.rs"},"region":{"startLine":215}}}],"partialFingerprints":{"codehealthFindingId/v1":"f41d733028330597474e72173e645b7e54b84cb994c24333b4b27482d1ed32b8"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Sqspi: TooManyMethods \u2014 31 methods. The bar is 30 methods; this is 1 over it, 1.03\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":"embassy-nrf/src/sqspi/mod.rs"},"region":{"startLine":326}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4779d23aab8dcd77c3e692ee54ad279a35ff77436d8ae2abb4b1cfcb2da9f46"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: ClockOperator.configure_firc_clocks: MethodTooLong \u2014 configure_firc_clocks runs 103 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 3 over it, 1.03\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":"embassy-mcxa/src/clocks/operator.rs"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc45ebcbdd5b48f5528012d050aced2f736ae8e26f21c6106b1b565d90f763fc"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: saes/mod.rs: FileTooLong \u2014 513 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 72% of them inside a single declaration: Saes (7 blocks, 317-990). The bar is 500 significant lines; this is 13 over it, 1.03\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/saes/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8cf53a2764f913791aef236f45a99f53b8ca3fd1550ff923b33eb0e6c812b85"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: src/spi.rs: FileTooLong \u2014 511 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), about 68% of them inside a single declaration: Spi (10 blocks, 95-781). The bar is 500 significant lines; this is 11 over it, 1.02\u00D7 the bar. Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/spi.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"44f3724640749845efbd111eb8ae09f42b9cd495a0be7f90d2c5fe839e7e4cc1"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: uart/buffered.rs: FileTooLong \u2014 511 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 11 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":"embassy-rp/src/uart/buffered.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"259b49b218b4f28068a74bca5eda0390e388154768ed6b38cc18e0191017e6aa"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: Twis: ClassTooLong \u2014 408 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 30 methods, 5 blocks, lines 176-845. The bar is 400 significant lines; this is 8 over it, 1.02\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":"embassy-nrf/src/twis.rs"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e79f22c3a55e1b4cf0297c1bed453b55a63a9b5ed1a908f2ead3bce034af67a"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: embassy_executor_macros::macros::main::run: FunctionTooLong \u2014 embassy_executor_macros::macros::main::run runs 102 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 2 over it, 1.02\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":"embassy-executor-macros/src/macros/main.rs"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb8cc3f8acda6137de8e7d5125afb90b4239809f0bb1c3bbd7899074d113f5ac"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: embassy_mcxa::flexcan::classic::mailbox::rx::setup: FunctionTooLong \u2014 embassy_mcxa::flexcan::classic::mailbox::rx::setup runs 102 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 2 over it, 1.02\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":"embassy-mcxa/src/flexcan/classic/mailbox.rs"},"region":{"startLine":432}}}],"partialFingerprints":{"codehealthFindingId/v1":"b10a6d3a2a4741098a2565a6670d80d3a0416ef34ddaf484f2c575863fec3930"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: r#wifi_init_config.encode: MethodTooLong \u2014 encode runs 102 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 2 over it, 1.02\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":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":1040}}}],"partialFingerprints":{"codehealthFindingId/v1":"17f833903282643526b124d29ee14900e92f239e3693f4ff1e1ac2a783ca65d3"}},{"ruleId":"D3","level":"warning","message":{"text":"MethodTooLong: I2c.read_dma_internal_slave: MethodTooLong \u2014 read_dma_internal_slave runs 102 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 2 over it, 1.02\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":"embassy-stm32/src/i2c/v2.rs"},"region":{"startLine":2066}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f9483f8c798903eb985686f9b71a1f9134a44bff87fa97925e559c4954a3885"}},{"ruleId":"D3","level":"warning","message":{"text":"FunctionTooLong: embassy_usb_synopsys_otg::on_interrupt: FunctionTooLong \u2014 embassy_usb_synopsys_otg::on_interrupt runs 102 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted) in one body. The bar is 100 significant lines; this is 2 over it, 1.02\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":"embassy-usb-synopsys-otg/src/lib.rs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"5679851b12eb8862dfe5932f11cb852a060fe5b370970e07bd3ff19d0564ff2c"}},{"ruleId":"D3","level":"warning","message":{"text":"ClassTooLong: UartRx: ClassTooLong \u2014 404 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted), 24 methods, 7 blocks, lines 518-1613. The bar is 400 significant lines; this is 4 over it, 1.01\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":"embassy-stm32/src/usart/mod.rs"},"region":{"startLine":518}}}],"partialFingerprints":{"codehealthFindingId/v1":"19cf2b79c9972632a11086386b3bb5b4683181ab8592358fefc6e143da614a4e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: lpuart/mod.rs: FileTooLong \u2014 502 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 2 over it, 1.00\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":"embassy-mcxa/src/lpuart/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6022c64936ca0e5427fa7ee53d493791fc0e4696548a8ac9b697f261b522b0de"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: dfsdm/transceiver.rs: FileTooLong \u2014 501 significant lines (blank, comment-only and punctuation-only lines excluded, and inline test code \u2014 #[cfg(test)] modules and bare #[test] functions \u2014 not counted). The bar is 500 significant lines; this is 1 over it, 1.00\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":"embassy-stm32/src/dfsdm/transceiver.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a38f6bf44ea3b2e67682376ba1a2178f49d5fc1259caf776dcf4ac47d889db55"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member family (7 members, 28 shared lines): embassy-mcxa/src/clocks/periph_helpers.rs:429-543 | embassy-mcxa/src/clocks/periph_helpers.rs:583-685 | embassy-mcxa/src/clocks/periph_helpers.rs:818-934 | embassy-mcxa/src/clocks/periph_helpers.rs:1231-1322 | embassy-mcxa/src/clocks/periph_helpers.rs:1386-1503 | embassy-mcxa/src/clocks/periph_helpers.rs:1564-1682 | embassy-mcxa/src/clocks/periph_helpers.rs:1733-1820 \u2014 These 7 members are variants of one another: a block of 28 lines reported below appears in every one of them, and the pairwise near-duplicate rows they would otherwise produce are collapsed into this row. Read them as one construct written 7 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 7 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/periph_helpers.rs"},"region":{"startLine":429}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8c2c41545f8dd4ae2df7ce25f1b0af3d5f1cbaab10557be6f020de913feced6"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member family (6 members, 15 shared lines): embassy-stm32/src/hspi/mod.rs:809-839 | embassy-stm32/src/hspi/mod.rs:885-916 | embassy-stm32/src/ospi/mod.rs:1956-1987 | embassy-stm32/src/ospi/mod.rs:2031-2062 | embassy-stm32/src/xspi/mod.rs:1758-1788 | embassy-stm32/src/xspi/mod.rs:1834-1865 \u2014 These 6 members are variants of one another: a block of 15 lines reported below appears in every one of them, and the pairwise near-duplicate rows they would otherwise produce are collapsed into this row. Read them as one construct written 6 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 6 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hspi/mod.rs"},"region":{"startLine":809}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ee59a363c75ba80e3cc297b0ce79e6bc9e7659941ad7a5bce62b7d3172b053a"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member family (4 members, 21 shared lines): embassy-net-esp-hosted/src/proto/fg/mod.rs:1891-1937 | embassy-net-esp-hosted/src/proto/fg/mod.rs:2253-2293 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3003-3061 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3479-3531 \u2014 These 4 members are variants of one another: a block of 21 lines reported below appears in every one of them, and the pairwise near-duplicate rows they would otherwise produce are collapsed into this row. Read them as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":1891}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d474a3b7de24c16e69978959e97db3fa26e96239cd7b1edff2b6351e689a7b7"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member family (3 members, 20 shared lines): embassy-stm32/src/hspi/mod.rs:488-526 | embassy-stm32/src/ospi/mod.rs:830-866 | embassy-stm32/src/xspi/mod.rs:627-665 \u2014 These 3 members are variants of one another: a block of 20 lines reported below appears in every one of them, and the pairwise near-duplicate rows they would otherwise produce are collapsed into this row. Read them as one construct written 3 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 3 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hspi/mod.rs"},"region":{"startLine":488}}}],"partialFingerprints":{"codehealthFindingId/v1":"1525652436d69ebdcd0894d6b98ea0dc76c382c8ad4f65ea2470841753c5cdfc"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member family (3 members, 16 shared lines): embassy-nxp/src/i2c/lpc55.rs:159-181 | embassy-nxp/src/spi/lpc55.rs:115-137 | embassy-nxp/src/usart/lpc55.rs:609-631 \u2014 These 3 members are variants of one another: a block of 16 lines reported below appears in every one of them, and the pairwise near-duplicate rows they would otherwise produce are collapsed into this row. Read them as one construct written 3 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 3 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nxp/src/i2c/lpc55.rs"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"db4bec8b8284bb8704e9dec277398e9bf7cc3c09c84bedb7589d5cc04560a4ec"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member family (3 members, 15 shared lines): embassy-stm32/src/ltdc.rs:293-323 | embassy-stm32/src/ltdc.rs:353-385 | embassy-stm32/src/ltdc.rs:422-460 \u2014 These 3 members are variants of one another: a block of 15 lines reported below appears in every one of them, and the pairwise near-duplicate rows they would otherwise produce are collapsed into this row. Read them as one construct written 3 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 3 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/ltdc.rs"},"region":{"startLine":293}}}],"partialFingerprints":{"codehealthFindingId/v1":"7fb7296e16057ec4c77def36961880c3224ec751f8f7de04c1b2d0dfdebf3272"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (95 shared lines): embassy-stm32/src/rcc/u3.rs:186-499 | embassy-stm32/src/rcc/u5.rs:180-561 \u2014 These two members are variants of one another: 95 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/u3.rs"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"0adf71ad2b183ba19862b96d99eada40aeac0bc1cb090583b9e71f85aa20865b"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (61 shared lines): embassy-stm32/src/cryp/mod.rs:668-749 | embassy-stm32/src/cryp/mod.rs:1235-1310 \u2014 These two members are variants of one another: 61 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/cryp/mod.rs"},"region":{"startLine":668}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f15f5389e6f27ac1706bb3cacdd6062c6c118a2a599cc911d403c4d000cdc14"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (59 shared lines): embassy-stm32/src/sdmmc/mod.rs:1476-1563 | embassy-stm32/src/sdmmc/mod.rs:1858-1954 \u2014 These two members are variants of one another: 59 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/sdmmc/mod.rs"},"region":{"startLine":1476}}}],"partialFingerprints":{"codehealthFindingId/v1":"67291596dc0b9365ee712cfcc5d7d1564e5e9d73fea9064bee3217f7ff3fce02"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (53 shared lines): embassy-stm32/src/crypto_driver.rs:830-906 | embassy-stm32/src/crypto_driver.rs:919-989 \u2014 These two members are variants of one another: 53 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/crypto_driver.rs"},"region":{"startLine":830}}}],"partialFingerprints":{"codehealthFindingId/v1":"efb89bfa9847f5bd22ce71be82b9b67076de9c6294ab939e92ec9adf9bc1c15d"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (51 shared lines): embassy-stm32/src/i2c/v2.rs:1067-1173 | embassy-stm32/src/i2c/v2.rs:1477-1575 \u2014 These two members are variants of one another: 51 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i2c/v2.rs"},"region":{"startLine":1067}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd17c593570f3553cdaa7e3492f26e35d50815c8fcfa71ab749d57fe11ae7ed7"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (48 shared lines): embassy-stm32/src/cryp/mod.rs:862-938 | embassy-stm32/src/cryp/mod.rs:1440-1534 \u2014 These two members are variants of one another: 48 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/cryp/mod.rs"},"region":{"startLine":862}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4e4d4eb78d35c2027400ba00cc17332c50968b5c2a9a5451cb0e83fba33a0d0"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (47 shared lines): embassy-mcxa/src/chips/mcxa2xx.rs:8-82 | embassy-mcxa/src/chips/mcxa5xx.rs:8-99 \u2014 These two members are variants of one another: 47 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/chips/mcxa2xx.rs"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"87387053e3ff3c7d598435fc4cbf7c90803f205168da2a8846cae4a48617d83d"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (42 shared lines): embassy-stm32/src/rcc/u5.rs:610-705 | embassy-stm32/src/rcc/wba.rs:487-575 \u2014 These two members are variants of one another: 42 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/u5.rs"},"region":{"startLine":610}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5fafe8d4eff7ebcb2cabbc7f3f56ec263ce865751a91bf7676a62619b8ad79a"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (40 shared lines): embassy-stm32/src/sdmmc/mod.rs:1223-1290 | embassy-stm32/src/sdmmc/mod.rs:1295-1361 \u2014 These two members are variants of one another: 40 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/sdmmc/mod.rs"},"region":{"startLine":1223}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d116f2f18a994ebd02390dd798fd5d3d06a006a30000d2ff1e13050d5a2c0a6"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (38 shared lines): embassy-boot/src/firmware_updater/asynch.rs:90-146 | embassy-boot/src/firmware_updater/blocking.rs:125-181 \u2014 These two members are variants of one another: 38 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-boot/src/firmware_updater/asynch.rs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"c029c57c14a58aa617b1d8f88c4c6145ebbe04dc807dc91fae2d638a2007ac08"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (29 shared lines): embassy-stm32/src/ospi/mod.rs:706-810 | embassy-stm32/src/xspi/mod.rs:486-607 \u2014 These two members are variants of one another: 29 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/ospi/mod.rs"},"region":{"startLine":706}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c77e72337f645bc98b585b0db580cf038a8c067f441cc30c09c7f903616d527"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (29 shared lines): embassy-stm32/src/spi/mod.rs:1650-1732 | embassy-stm32/src/spi/mod.rs:1741-1798 \u2014 These two members are variants of one another: 29 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/spi/mod.rs"},"region":{"startLine":1650}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3159d6c0c750e691f47e059c9ca807ec55cfaaef511588f596e61c7a004c603"}},{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (25 shared lines): embassy-mcxa/src/spi/controller.rs:980-1091 | embassy-mcxa/src/spi/controller.rs:1179-1233 \u2014 These two members are variants of one another: 25 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/spi/controller.rs"},"region":{"startLine":980}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae9e2e143240dd0c3325f8193bbe574a6e82d6fc44ce5cf78128c40e932cde84"}},{"ruleId":"D4","level":"warning","message":{"text":"Edited copy of a member (27 corresponding lines): embassy-stm32/src/xspi/mod.rs:1136-1170 | embassy-stm32/src/xspi/mod.rs:1199-1233 \u2014 These two members are one piece of code written twice and then edited apart: 27 consecutive lines correspond almost exactly, broken only by small local edits. Most of that correspondence is NOT reported as duplicated blocks below \u2014 the edits cut it into fragments and only the largest of them clear the block floor, so the rows below understate it. The repair is at the members\u0027 grain \u2014 factor the shared implementation into one the two call with their differences as parameters or as an injected step, or, where the difference is systematic (an extra return value, one transport against another), generate one from the other. Left alone, the next edit has to be made twice and the two will drift further apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/xspi/mod.rs"},"region":{"startLine":1136}}}],"partialFingerprints":{"codehealthFindingId/v1":"efa583d4718c4eb9e4428efc655ceda1be5531f88e7d1ef5e45fc1229a45fd71"}},{"ruleId":"D4","level":"warning","message":{"text":"Edited copy of a member (59 corresponding lines): embassy-net-esp-hosted/src/proto/fg/mod.rs:7643-7701 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:32041-32099 \u2014 These two members are one piece of code written twice and then edited apart: 59 consecutive lines correspond almost exactly, broken only by small local edits. Most of that correspondence is NOT reported as duplicated blocks below \u2014 the edits cut it into fragments and only the largest of them clear the block floor, so the rows below understate it. The repair is at the members\u0027 grain \u2014 factor the shared implementation into one the two call with their differences as parameters or as an injected step, or, where the difference is systematic (an extra return value, one transport against another), generate one from the other. Left alone, the next edit has to be made twice and the two will drift further apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":7643}}}],"partialFingerprints":{"codehealthFindingId/v1":"7dd8bf76fbbead7c140c4af4ace6351e6e0848e8bc02d9dc1b6ec16b2c3763dc"}},{"ruleId":"D4","level":"warning","message":{"text":"Edited copy of a member (23 corresponding lines): embassy-stm32/src/crypto_driver.rs:607-629 | embassy-stm32/src/crypto_driver.rs:670-692 \u2014 These two members are one piece of code written twice and then edited apart: 23 consecutive lines correspond almost exactly, broken only by small local edits. Most of that correspondence is NOT reported as duplicated blocks below \u2014 the edits cut it into fragments and only the largest of them clear the block floor, so the rows below understate it. The repair is at the members\u0027 grain \u2014 factor the shared implementation into one the two call with their differences as parameters or as an injected step, or, where the difference is systematic (an extra return value, one transport against another), generate one from the other. Left alone, the next edit has to be made twice and the two will drift further apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/crypto_driver.rs"},"region":{"startLine":607}}}],"partialFingerprints":{"codehealthFindingId/v1":"794a5161fab06837b7fad3d21188c06ae446b163abc6e4832706ce76191ee76b"}},{"ruleId":"D4","level":"warning","message":{"text":"Edited copy of a member (23 corresponding lines): embassy-stm32/src/crypto_driver.rs:631-653 | embassy-stm32/src/crypto_driver.rs:694-716 \u2014 These two members are one piece of code written twice and then edited apart: 23 consecutive lines correspond almost exactly, broken only by small local edits. Most of that correspondence is NOT reported as duplicated blocks below \u2014 the edits cut it into fragments and only the largest of them clear the block floor, so the rows below understate it. The repair is at the members\u0027 grain \u2014 factor the shared implementation into one the two call with their differences as parameters or as an injected step, or, where the difference is systematic (an extra return value, one transport against another), generate one from the other. Left alone, the next edit has to be made twice and the two will drift further apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/crypto_driver.rs"},"region":{"startLine":631}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d85bad7b05358f61c6d262ec09811aa41be8d7ae39535f81bc9c5c69d1dfedd"}},{"ruleId":"D4","level":"warning","message":{"text":"Edited copy of a member (21 corresponding lines): embassy-nrf/src/twis.rs:511-534 | embassy-nrf/src/twis.rs:622-649 \u2014 These two members are one piece of code written twice and then edited apart: 21 consecutive lines correspond almost exactly, broken only by small local edits. Most of that correspondence is NOT reported as duplicated blocks below \u2014 the edits cut it into fragments and only the largest of them clear the block floor, so the rows below understate it. The repair is at the members\u0027 grain \u2014 factor the shared implementation into one the two call with their differences as parameters or as an injected step, or, where the difference is systematic (an extra return value, one transport against another), generate one from the other. Left alone, the next edit has to be made twice and the two will drift further apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/twis.rs"},"region":{"startLine":511}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ee710956576e2f20ff272e4e0e01f953e87077956e35286ff02862dab89fffb"}},{"ruleId":"D4","level":"warning","message":{"text":"Edited copy of a member (17 corresponding lines): embassy-stm32/src/can/fdcan.rs:370-386 | embassy-stm32/src/can/fdcan.rs:737-753 \u2014 These two members are one piece of code written twice and then edited apart: 17 consecutive lines correspond almost exactly, broken only by small local edits. Most of that correspondence is NOT reported as duplicated blocks below \u2014 the edits cut it into fragments and only the largest of them clear the block floor, so the rows below understate it. The repair is at the members\u0027 grain \u2014 factor the shared implementation into one the two call with their differences as parameters or as an injected step, or, where the difference is systematic (an extra return value, one transport against another), generate one from the other. Left alone, the next edit has to be made twice and the two will drift further apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/can/fdcan.rs"},"region":{"startLine":370}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc6a76cd96d2784e90f48602e28a1e72774664045036cccc24affa0b43827d91"}},{"ruleId":"D4","level":"warning","message":{"text":"Edited copy of a member (17 corresponding lines): embassy-stm32/src/can/fdcan.rs:417-433 | embassy-stm32/src/can/fdcan.rs:763-779 \u2014 These two members are one piece of code written twice and then edited apart: 17 consecutive lines correspond almost exactly, broken only by small local edits. Most of that correspondence is NOT reported as duplicated blocks below \u2014 the edits cut it into fragments and only the largest of them clear the block floor, so the rows below understate it. The repair is at the members\u0027 grain \u2014 factor the shared implementation into one the two call with their differences as parameters or as an injected step, or, where the difference is systematic (an extra return value, one transport against another), generate one from the other. Left alone, the next edit has to be made twice and the two will drift further apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/can/fdcan.rs"},"region":{"startLine":417}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f6c9fa0b458eb82e73549e774459c597d8d6bcc6129b2b9c66b75c1930764a2"}},{"ruleId":"D4","level":"warning","message":{"text":"Edited copy of a member (29 corresponding lines): embassy-stm32/src/timer/complementary_pwm.rs:137-168 | embassy-stm32/src/timer/simple_pwm.rs:260-288 \u2014 These two members are one piece of code written twice and then edited apart: 29 consecutive lines correspond almost exactly, broken only by small local edits. Most of that correspondence is NOT reported as duplicated blocks below \u2014 the edits cut it into fragments and only the largest of them clear the block floor, so the rows below understate it. The repair is at the members\u0027 grain \u2014 factor the shared implementation into one the two call with their differences as parameters or as an injected step, or, where the difference is systematic (an extra return value, one transport against another), generate one from the other. Left alone, the next edit has to be made twice and the two will drift further apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/timer/complementary_pwm.rs"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"806c7bf1356f6bf132890c814a38c548bb6dd8fc9fc8410d53ab7062dc1b5241"}},{"ruleId":"D4","level":"warning","message":{"text":"Edited copy of a member (25 corresponding lines): embassy-stm32/src/qspi/mod.rs:609-633 | embassy-stm32/src/qspi/mod.rs:651-675 \u2014 These two members are one piece of code written twice and then edited apart: 25 consecutive lines correspond almost exactly, broken only by small local edits. Most of that correspondence is NOT reported as duplicated blocks below \u2014 the edits cut it into fragments and only the largest of them clear the block floor, so the rows below understate it. The repair is at the members\u0027 grain \u2014 factor the shared implementation into one the two call with their differences as parameters or as an injected step, or, where the difference is systematic (an extra return value, one transport against another), generate one from the other. Left alone, the next edit has to be made twice and the two will drift further apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/qspi/mod.rs"},"region":{"startLine":609}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d501d594adb488cfdb07f08e47653da9e106302ce403b939fe005b344f5ffe6"}},{"ruleId":"D4","level":"warning","message":{"text":"Edited copy of a member (28 corresponding lines): embassy-stm32/src/xspi/mod.rs:825-858 | embassy-stm32/src/xspi/mod.rs:1292-1325 \u2014 These two members are one piece of code written twice and then edited apart: 28 consecutive lines correspond almost exactly, broken only by small local edits. Most of that correspondence is NOT reported as duplicated blocks below \u2014 the edits cut it into fragments and only the largest of them clear the block floor, so the rows below understate it. The repair is at the members\u0027 grain \u2014 factor the shared implementation into one the two call with their differences as parameters or as an injected step, or, where the difference is systematic (an extra return value, one transport against another), generate one from the other. Left alone, the next edit has to be made twice and the two will drift further apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/xspi/mod.rs"},"region":{"startLine":825}}}],"partialFingerprints":{"codehealthFindingId/v1":"2272a103bdc862b1521ebda4aff5934e0b1cddc470fe540fcc3ada8b40657263"}},{"ruleId":"D4","level":"warning","message":{"text":"Edited copy of a member (20 corresponding lines): embassy-stm32/src/sdmmc/mod.rs:634-656 | embassy-stm32/src/sdmmc/mod.rs:744-765 \u2014 These two members are one piece of code written twice and then edited apart: 20 consecutive lines correspond almost exactly, broken only by small local edits. Most of that correspondence is NOT reported as duplicated blocks below \u2014 the edits cut it into fragments and only the largest of them clear the block floor, so the rows below understate it. The repair is at the members\u0027 grain \u2014 factor the shared implementation into one the two call with their differences as parameters or as an injected step, or, where the difference is systematic (an extra return value, one transport against another), generate one from the other. Left alone, the next edit has to be made twice and the two will drift further apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/sdmmc/mod.rs"},"region":{"startLine":634}}}],"partialFingerprints":{"codehealthFindingId/v1":"418137ee7a1f11a7ee475e589adf7d6a68f28b0434f89af9440e1793226cfdcc"}},{"ruleId":"D4","level":"warning","message":{"text":"Edited copy of a member (23 corresponding lines): embassy-net-esp-hosted/src/proto/mcu/mod.rs:34756-34780 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:35007-35038 \u2014 These two members are one piece of code written twice and then edited apart: 23 consecutive lines correspond almost exactly, broken only by small local edits. Most of that correspondence is NOT reported as duplicated blocks below \u2014 the edits cut it into fragments and only the largest of them clear the block floor, so the rows below understate it. The repair is at the members\u0027 grain \u2014 factor the shared implementation into one the two call with their differences as parameters or as an injected step, or, where the difference is systematic (an extra return value, one transport against another), generate one from the other. Left alone, the next edit has to be made twice and the two will drift further apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":34756}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7c3b75899c3087738fc7f25f2faf1a164edd528e283535cf5738cbe320c3180"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (362 members, 50\u002B identical tokens): embassy-net-esp-hosted/src/proto/fg/mod.rs:128-183 | embassy-net-esp-hosted/src/proto/fg/mod.rs:367-396 | embassy-net-esp-hosted/src/proto/fg/mod.rs:493-516 | embassy-net-esp-hosted/src/proto/fg/mod.rs:614-643 | embassy-net-esp-hosted/src/proto/fg/mod.rs:714-727 | embassy-net-esp-hosted/src/proto/fg/mod.rs:804-837 | embassy-net-esp-hosted/src/proto/fg/mod.rs:933-956 | embassy-net-esp-hosted/src/proto/fg/mod.rs:1031-1054 | embassy-net-esp-hosted/src/proto/fg/mod.rs:1104-1117 | embassy-net-esp-hosted/src/proto/fg/mod.rs:1171-1194 | embassy-net-esp-hosted/src/proto/fg/mod.rs:1292-1321 | embassy-net-esp-hosted/src/proto/fg/mod.rs:1417-1440 | embassy-net-esp-hosted/src/proto/fg/mod.rs:1490-1503 | embassy-net-esp-hosted/src/proto/fg/mod.rs:1695-1770 | embassy-net-esp-hosted/src/proto/fg/mod.rs:2088-2149 | embassy-net-esp-hosted/src/proto/fg/mod.rs:2375-2414 | embassy-net-esp-hosted/src/proto/fg/mod.rs:2506-2519 | embassy-net-esp-hosted/src/proto/fg/mod.rs:2757-2852 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3258-3343 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3613-3652 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3744-3757 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3835-3878 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3973-3986 | embassy-net-esp-hosted/src/proto/fg/mod.rs:4064-4107 | embassy-net-esp-hosted/src/proto/fg/mod.rs:4202-4215 | embassy-net-esp-hosted/src/proto/fg/mod.rs:4269-4292 | embassy-net-esp-hosted/src/proto/fg/mod.rs:4367-4386 | embassy-net-esp-hosted/src/proto/fg/mod.rs:4461-4484 | embassy-net-esp-hosted/src/proto/fg/mod.rs:4534-4547 | embassy-net-esp-hosted/src/proto/fg/mod.rs:4601-4624 | embassy-net-esp-hosted/src/proto/fg/mod.rs:4791-4846 | embassy-net-esp-hosted/src/proto/fg/mod.rs:5104-5154 | embassy-net-esp-hosted/src/proto/fg/mod.rs:5339-5362 | embassy-net-esp-hosted/src/proto/fg/mod.rs:5437-5460 | embassy-net-esp-hosted/src/proto/fg/mod.rs:5535-5558 | embassy-net-esp-hosted/src/proto/fg/mod.rs:5608-5621 | embassy-net-esp-hosted/src/proto/fg/mod.rs:5698-5731 | embassy-net-esp-hosted/src/proto/fg/mod.rs:5850-5883 | embassy-net-esp-hosted/src/proto/fg/mod.rs:5979-6002 | embassy-net-esp-hosted/src/proto/fg/mod.rs:6100-6133 | embassy-net-esp-hosted/src/proto/fg/mod.rs:6229-6252 | embassy-net-esp-hosted/src/proto/fg/mod.rs:6302-6315 | embassy-net-esp-hosted/src/proto/fg/mod.rs:6507-6586 | embassy-net-esp-hosted/src/proto/fg/mod.rs:6810-6839 | embassy-net-esp-hosted/src/proto/fg/mod.rs:6935-6958 | embassy-net-esp-hosted/src/proto/fg/mod.rs:7008-7021 | embassy-net-esp-hosted/src/proto/fg/mod.rs:7098-7127 | embassy-net-esp-hosted/src/proto/fg/mod.rs:7407-7494 | embassy-net-esp-hosted/src/proto/fg/mod.rs:7737-7760 | embassy-net-esp-hosted/src/proto/fg/mod.rs:7810-7823 | embassy-net-esp-hosted/src/proto/fg/mod.rs:8084-8181 | embassy-net-esp-hosted/src/proto/fg/mod.rs:8446-8465 | embassy-net-esp-hosted/src/proto/fg/mod.rs:8540-8563 | embassy-net-esp-hosted/src/proto/fg/mod.rs:8753-8818 | embassy-net-esp-hosted/src/proto/fg/mod.rs:9136-9211 | embassy-net-esp-hosted/src/proto/fg/mod.rs:9504-9563 | embassy-net-esp-hosted/src/proto/fg/mod.rs:9791-9840 | embassy-net-esp-hosted/src/proto/fg/mod.rs:10185-10282 | embassy-net-esp-hosted/src/proto/fg/mod.rs:10570-10599 | embassy-net-esp-hosted/src/proto/fg/mod.rs:10741-10780 | embassy-net-esp-hosted/src/proto/fg/mod.rs:10943-10982 | embassy-net-esp-hosted/src/proto/fg/mod.rs:11174-11513 | embassy-net-esp-hosted/src/proto/fg/mod.rs:12339-12444 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:588-841 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:1497-1556 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:1741-1774 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:1922-1952 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:2116-2149 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:2470-2549 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:2896-2926 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:3093-3126 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:3319-3374 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:3585-3628 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:3770-3803 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:3924-3957 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:4525-4704 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:5650-5801 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:6238-6275 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:6462-6501 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:6621-6654 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:7202-7405 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:7909-7935 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:8074-8097 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:8318-8401 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:8753-8811 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:9058-9091 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:9165-9188 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:9363-9426 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:9685-9740 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:9972-10021 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10208-10251 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10489-10554 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10831-10886 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:11070-11103 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:11200-11219 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:11319-11344 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:11443-11476 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:11601-11634 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:11732-11755 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:11977-12060 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:12384-12463 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:12741-12790 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:12929-12952 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:13028-13047 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:13147-13176 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:13273-13292 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:13392-13425 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:13546-13579 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:13798-13871 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:14076-14109 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:14518-14635 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:15007-15040 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:15161-15194 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:15354-15381 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:15570-15599 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:15744-15787 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:15905-15928 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16026-16055 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16126-16139 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16216-16249 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16345-16368 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16443-16466 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16516-16529 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16606-16639 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16735-16758 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16833-16856 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16954-16983 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17079-17102 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17152-17165 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17219-17242 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17317-17336 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17411-17434 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17484-17497 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17551-17574 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17624-17637 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17691-17714 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17764-17777 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17879-17909 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18047-18070 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18145-18168 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18218-18231 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18308-18341 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18460-18493 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18589-18612 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18711-18731 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18848-18871 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18921-18934 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18988-19011 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19134-19164 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19302-19325 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19400-19423 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19570-19610 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19744-19757 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19811-19834 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19884-19897 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19951-19974 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20024-20037 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20091-20114 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20164-20177 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20231-20254 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20401-20441 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20600-20623 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20673-20686 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20740-20763 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20813-20826 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20903-20936 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21032-21055 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21154-21197 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21292-21305 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21410-21440 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21553-21566 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21620-21643 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21693-21706 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21760-21783 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21833-21846 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21900-21923 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21998-22021 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22119-22152 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22223-22236 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22341-22371 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22532-22565 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22661-22684 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22759-22782 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22880-22913 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:23032-23065 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:23161-23184 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:23259-23282 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:23380-23413 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:23532-23565 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:23661-23684 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:23734-23747 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:23847-23890 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24007-24030 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24105-24128 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24226-24255 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24351-24374 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24424-24437 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24514-24543 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24663-24683 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24800-24823 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24873-24886 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24988-25018 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:25131-25144 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:25246-25276 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:25414-25433 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:25483-25496 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:25573-25606 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:25725-25758 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:25829-25842 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:25919-25952 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:26120-26160 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:26368-26398 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:26512-26525 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:26602-26635 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:26782-26812 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:26973-27006 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:27102-27125 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:27275-27315 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:27525-27555 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:27716-27749 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:27845-27868 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:28018-28058 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:28217-28240 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:28315-28338 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:28388-28401 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:28478-28511 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:28607-28630 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:28705-28728 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:28778-28791 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:28868-28901 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:29020-29053 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:29149-29172 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:29247-29270 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:29368-29401 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:29524-29544 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:29662-29685 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:29760-29783 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:29858-29881 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:29979-30012 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:30108-30131 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:30181-30194 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:30271-30304 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:30400-30423 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:30498-30521 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:30596-30619 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:30694-30717 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:30816-30836 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:30953-30976 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:31026-31039 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:31279-31378 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:31805-31892 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:32135-32158 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:32233-32256 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:32538-32635 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:32900-32923 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:32998-33021 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33071-33084 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33138-33161 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33309-33350 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33488-33511 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33561-33574 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33628-33651 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33701-33714 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33768-33791 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33913-33952 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:34138-34187 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:34325-34348 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:34469-34512 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:34675-34718 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:34908-34961 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:35247-35304 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:35729-35806 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:36102-36135 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:36255-36284 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:36380-36403 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:36570-36629 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:36857-36906 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:37095-37125 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:37315-37345 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:37535-37565 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:37796-37859 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38044-38064 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38181-38204 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38279-38302 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38377-38400 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38499-38532 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38628-38651 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38726-38749 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38847-38880 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38999-39032 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:39130-39153 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:39228-39251 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:39326-39349 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:39447-39480 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:39578-39601 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:39860-39963 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:40206-40229 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:40511-40608 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:40992-41052 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:41300-41343 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:41508-41565 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:41747-41790 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:41882-41895 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:41949-41972 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42022-42035 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42089-42112 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42210-42239 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42335-42358 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42408-42421 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42475-42498 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42596-42625 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42721-42744 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42794-42807 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42861-42884 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42982-43011 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43107-43130 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43180-43193 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43247-43270 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43368-43397 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43493-43516 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43566-43579 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43633-43656 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43754-43783 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43879-43902 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43952-43965 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:44019-44042 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:44232-44293 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:44473-44496 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:44546-44559 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:44613-44636 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:44711-44734 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:44809-44832 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:44882-44895 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:44972-45005 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:45101-45124 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:45199-45222 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:45297-45320 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:45395-45418 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:45516-45545 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:45641-45664 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:45766-45786 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:45903-45926 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46001-46024 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46099-46122 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46197-46220 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46295-46318 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46393-46412 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46487-46510 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46585-46608 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46683-46706 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46805-46834 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46978-47008 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:47170-47203 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:47323-47352 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:47496-47526 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:47688-47721 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:47843-47872 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48017-48056 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48222-48261 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48526-48583 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48863-49399 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:50586-50681 \u2014 These 362 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 362 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 362 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5dfc1fb3577e1c7b1a26f15cc499da0cca5c1a87ad1ffe271efc9b3349fa7b1"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (14 members, 50\u002B identical tokens): embassy-ambiq/src/time_driver.rs:155-165 | embassy-ambiq/src/time_driver.rs:314-324 | embassy-imxrt/src/time_driver.rs:240-251 | embassy-imxrt/src/time_driver.rs:390-401 | embassy-mcxa/src/ostimer.rs:186-197 | embassy-microchip/src/time_driver.rs:164-175 | embassy-mspm0/src/time_driver/tim.rs:310-322 | embassy-nrf/src/time_driver.rs:452-462 | embassy-nxp/src/time_driver/pit.rs:48-60 | embassy-nxp/src/time_driver/rtc.rs:158-169 | embassy-rp/src/time_driver.rs:46-57 | embassy-stm32/src/time_driver/lptim.rs:404-415 | embassy-stm32/src/time_driver/tim.rs:377-388 | embassy-time/src/driver_cmsdk/mod.rs:324-335 \u2014 These 14 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 14 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 14 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-ambiq/src/time_driver.rs"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"d481944cb16a21346297c88cda719ab79f7fd4b2e5e5f438b2f908e19ebad739"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (12 members, 50\u002B identical tokens): embassy-ambiq/src/time_driver.rs:110-115 | embassy-ambiq/src/time_driver.rs:256-261 | embassy-imxrt/src/time_driver.rs:222-227 | embassy-imxrt/src/time_driver.rs:362-367 | embassy-mcxa/src/ostimer.rs:148-153 | embassy-microchip/src/time_driver.rs:148-153 | embassy-mspm0/src/time_driver/tim.rs:231-237 | embassy-nrf/src/time_driver.rs:342-358 | embassy-rp/src/time_driver.rs:104-109 | embassy-stm32/src/time_driver/lptim.rs:278-284 | embassy-stm32/src/time_driver/tim.rs:246-251 | embassy-time/src/driver_cmsdk/mod.rs:227-243 \u2014 These 12 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 12 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 12 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-ambiq/src/time_driver.rs"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"2fb1fc961fc2da63039cff659022e781d99ea0aeb6a3339731ce77fc45fbd4a7"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (8 members, 50\u002B identical tokens): embassy-stm32/src/crypto_driver.rs:385-393 | embassy-stm32/src/crypto_driver.rs:401-409 | embassy-stm32/src/crypto_driver.rs:427-435 | embassy-stm32/src/crypto_driver.rs:443-451 | embassy-stm32/src/crypto_driver.rs:469-491 | embassy-stm32/src/crypto_driver.rs:499-521 | embassy-stm32/src/crypto_driver.rs:539-561 | embassy-stm32/src/crypto_driver.rs:569-591 \u2014 These 8 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 8 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 8 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/crypto_driver.rs"},"region":{"startLine":385}}}],"partialFingerprints":{"codehealthFindingId/v1":"4873bafcda42c8b7ca97adc1afb85906496bbc833dfffa1071230ed7a33a2454"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (7 members, 50\u002B identical tokens): embassy-executor/build_common.rs:69-94 | embassy-hal-internal/build_common.rs:69-94 | embassy-mcxa/build_common.rs:69-94 | embassy-mspm0/build_common.rs:69-94 | embassy-nxp/build_common.rs:69-94 | embassy-stm32/build_common.rs:69-94 | embassy-sync/build_common.rs:69-94 \u2014 These 7 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 7 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 7 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-executor/build_common.rs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"cfc3133d0b375b168d83404e43a6dad752f4b5af2d725351844d8eaf03034752"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (7 members, 50\u002B identical tokens): embassy-mspm0/src/sysctl/c1103_1104.rs:38-46 | embassy-mspm0/src/sysctl/c1105_1106.rs:38-46 | embassy-mspm0/src/sysctl/g110x_150x_310x_350x.rs:43-52 | embassy-mspm0/src/sysctl/g151x_351x.rs:43-52 | embassy-mspm0/src/sysctl/g511x_518x.rs:48-58 | embassy-mspm0/src/sysctl/h321x.rs:38-46 | embassy-mspm0/src/sysctl/l_typeb.rs:38-46 \u2014 These 7 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 7 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 7 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/sysctl/c1103_1104.rs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"b25b5151407e6466fc0943800d746b932108116e8921dcd3f62ccd740adf0820"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (7 members, 50\u002B identical tokens): embassy-net-esp-hosted/src/proto/fg/mod.rs:10625-10642 | embassy-net-esp-hosted/src/proto/fg/mod.rs:10814-10838 | embassy-net-esp-hosted/src/proto/fg/mod.rs:11016-11040 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:9790-9828 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:47898-47915 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48090-48114 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48295-48319 \u2014 These 7 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 7 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 7 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":10625}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b875f855492fc05bd0172cb2314d50b1f8e85a2e67ce72230747cd38938b818"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (7 members, 50\u002B identical tokens): embassy-net-esp-hosted/src/proto/fg/mod.rs:10643-10659 | embassy-net-esp-hosted/src/proto/fg/mod.rs:10839-10861 | embassy-net-esp-hosted/src/proto/fg/mod.rs:11041-11063 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:9829-9863 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:47916-47932 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48115-48137 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48320-48342 \u2014 These 7 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 7 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 7 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":10643}}}],"partialFingerprints":{"codehealthFindingId/v1":"3316cb13609ae85843f66dbf89d038d0cb95a71b8e774b48dca355aa524ca349"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (6 members, 50\u002B identical tokens): embassy-net-esp-hosted/src/proto/fg/mod.rs:2448-2472 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3686-3710 | embassy-net-esp-hosted/src/proto/fg/mod.rs:9613-9651 | embassy-net-esp-hosted/src/proto/fg/mod.rs:9882-9913 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:36679-36717 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:36948-36979 \u2014 These 6 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 6 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 6 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":2448}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd7685a7831c805b355f133909f23c2dfe73f18c59cd07c82ea2f3ef9427b633"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (6 members, 50\u002B identical tokens): embassy-net-esp-hosted/src/proto/fg/mod.rs:2473-2495 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3711-3733 | embassy-net-esp-hosted/src/proto/fg/mod.rs:9652-9686 | embassy-net-esp-hosted/src/proto/fg/mod.rs:9914-9942 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:36718-36752 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:36980-37008 \u2014 These 6 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 6 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 6 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":2473}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d3b8f5f5f99cab8b0d99a1d73d7feae1b9865c77f697f801e2cdfad9b67e904"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (6 members, 50\u002B identical tokens): embassy-stm32/src/hspi/mod.rs:766-806 | embassy-stm32/src/hspi/mod.rs:842-882 | embassy-stm32/src/ospi/mod.rs:1915-1953 | embassy-stm32/src/ospi/mod.rs:1990-2028 | embassy-stm32/src/xspi/mod.rs:1715-1755 | embassy-stm32/src/xspi/mod.rs:1791-1831 \u2014 These 6 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 6 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 6 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hspi/mod.rs"},"region":{"startLine":766}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3731729860d8c629deb5ce890a0b2471277f4e9383994495a6738a915db77b5"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (5 members, 50\u002B identical tokens): embassy-mspm0/src/sysctl/g110x_150x_310x_350x.rs:54-63 | embassy-mspm0/src/sysctl/g151x_351x.rs:54-63 | embassy-mspm0/src/sysctl/g511x_518x.rs:60-71 | embassy-mspm0/src/sysctl/h321x.rs:48-57 | embassy-mspm0/src/sysctl/l_typeb.rs:48-56 \u2014 These 5 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 5 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 5 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/sysctl/g110x_150x_310x_350x.rs"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"32cbc0122fb34c40f5e592a18f6d7d010562e6761d15f19b0485ceb289a66ae7"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (5 members, 50\u002B identical tokens): embassy-net-nrf91/src/context.rs:103-150 | embassy-net-nrf91/src/context.rs:153-164 | embassy-net-nrf91/src/context.rs:167-178 | embassy-net-nrf91/src/context.rs:308-321 | embassy-net-nrf91/src/context.rs:324-345 \u2014 These 5 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 5 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 5 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-nrf91/src/context.rs"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"7737977535e56b3c50acb4c8a87c7f7fa4bd2ea11a705966254b813e82d36cc0"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (5 members, 50\u002B identical tokens): embassy-nxp/src/casper/lpc55.rs:315-335 | embassy-nxp/src/casper/lpc55.rs:347-365 | embassy-nxp/src/casper/lpc55.rs:377-397 | embassy-nxp/src/casper/lpc55.rs:412-432 | embassy-nxp/src/casper/lpc55.rs:447-467 \u2014 These 5 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 5 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 5 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nxp/src/casper/lpc55.rs"},"region":{"startLine":315}}}],"partialFingerprints":{"codehealthFindingId/v1":"74fc450c9489b367cf42906a8c408ab3b067c161ab5823e34aff5c2060a00de8"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (5 members, 50\u002B identical tokens): embassy-stm32/src/hash/mod.rs:375-466 | embassy-stm32/src/hash/mod.rs:474-553 | embassy-stm32/src/hash/mod.rs:566-624 | embassy-stm32/src/hash/mod.rs:851-939 | embassy-stm32/src/hash/mod.rs:952-1025 \u2014 These 5 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 5 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 5 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hash/mod.rs"},"region":{"startLine":375}}}],"partialFingerprints":{"codehealthFindingId/v1":"05c64b3103c221a63420779049fce714196924e332d82997e986f0f78adee744"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (5 members, 50\u002B identical tokens): embassy-stm32/src/hspi/mod.rs:317-378 | embassy-stm32/src/ospi/mod.rs:554-703 | embassy-stm32/src/ospi/mod.rs:900-967 | embassy-stm32/src/xspi/mod.rs:335-483 | embassy-stm32/src/xspi/mod.rs:699-765 \u2014 These 5 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 5 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 5 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hspi/mod.rs"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2418e3b0abb51417b33be54a404b0bdff5cfd71036820cee9739fd5e2d329c6"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (5 members, 50\u002B identical tokens): embassy-stm32/src/jpeg.rs:228-261 | embassy-stm32/src/jpeg.rs:276-343 | embassy-stm32/src/jpeg.rs:379-518 | embassy-stm32/src/jpeg.rs:525-612 | embassy-stm32/src/jpeg.rs:617-730 \u2014 These 5 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 5 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 5 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/jpeg.rs"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3a899f6706c6c66b9538b16ec5b8cf37f622857f65c7423c9d5817076daa12c"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (5 members, 50\u002B identical tokens): embassy-stm32/src/rcc/c0.rs:99-240 | embassy-stm32/src/rcc/f013.rs:178-517 | embassy-stm32/src/rcc/f247.rs:163-379 | embassy-stm32/src/rcc/g0.rs:134-328 | embassy-stm32/src/rcc/g4.rs:126-338 \u2014 These 5 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 5 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 5 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/c0.rs"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"2dd1ef97a60de682c40893c27561be64fc6206dfa600abdc8f8bf8b1b1275918"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (5 members, 50\u002B identical tokens): embassy-stm32/src/sdmmc/mod.rs:589-611 | embassy-stm32/src/sdmmc/mod.rs:703-724 | embassy-stm32/src/sdmmc/mod.rs:744-765 | embassy-stm32/src/sdmmc/mod.rs:825-844 | embassy-stm32/src/sdmmc/mod.rs:896-915 \u2014 These 5 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 5 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 5 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/sdmmc/mod.rs"},"region":{"startLine":589}}}],"partialFingerprints":{"codehealthFindingId/v1":"d677899b439a98aeaf3b1f7925ab5ae6791b988c04845e5618a47b056d7395ae"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (5 members, 50\u002B identical tokens): embassy-stm32-wpan/src/bluetooth/security/mod.rs:989-1028 | embassy-stm32-wpan/src/bluetooth/security/mod.rs:1075-1110 | embassy-stm32-wpan/src/bluetooth/security/mod.rs:1114-1144 | embassy-stm32-wpan/src/bluetooth/security/mod.rs:1252-1268 | embassy-stm32-wpan/src/bluetooth/security/mod.rs:1301-1337 \u2014 These 5 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 5 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 5 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32-wpan/src/bluetooth/security/mod.rs"},"region":{"startLine":989}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee1d982b4895605813556ae853b1e50ef38d3a8b993c3dcb5590b51a68acc64a"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (5 members, 50\u002B identical tokens): embassy-usb-host/src/class/uac/mod.rs:321-342 | embassy-usb-host/src/class/uac/mod.rs:355-420 | embassy-usb-host/src/class/uac/mod.rs:437-458 | embassy-usb-host/src/class/uac/mod.rs:475-496 | embassy-usb-host/src/class/uac/mod.rs:513-534 \u2014 These 5 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 5 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 5 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb-host/src/class/uac/mod.rs"},"region":{"startLine":321}}}],"partialFingerprints":{"codehealthFindingId/v1":"bef34a1f7f8bf858ed4732d87d6c96330d2108731b6caf598983d36be7cd9654"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): embassy-executor/src/platform/cortex_m.rs:232-238 | embassy-mspm0/src/executor.rs:247-253 | embassy-rp/src/executor.rs:254-260 | embassy-stm32/src/executor.rs:273-279 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-executor/src/platform/cortex_m.rs"},"region":{"startLine":232}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba9fa3f27b8054cb342340736a8a0fa11a900432dd3a69bcf5a6bdbc0d8c0f6b"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): embassy-imxrt/src/flexcomm/uart.rs:858-866 | embassy-imxrt/src/flexcomm/uart.rs:958-966 | embassy-mcxa/src/lpuart/blocking.rs:281-288 | embassy-mcxa/src/lpuart/blocking.rs:356-363 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-imxrt/src/flexcomm/uart.rs"},"region":{"startLine":858}}}],"partialFingerprints":{"codehealthFindingId/v1":"f836c8d0b720fd39131dad3421b8dd0cea63e16521cc0a759d9989f7e9f259f7"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): embassy-mcxa/src/flexspi.rs:997-1034 | embassy-mcxa/src/flexspi.rs:1036-1061 | embassy-mcxa/src/flexspi.rs:1229-1265 | embassy-mcxa/src/flexspi.rs:1272-1295 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/flexspi.rs"},"region":{"startLine":997}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4052bb2ef07f4814914e68b6b8a685f09bd1a13de32025d0b5df9db9e248fa5"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): embassy-mcxa/src/i2c/controller.rs:357-389 | embassy-mcxa/src/i2c/target.rs:320-352 | embassy-mcxa/src/i3c/controller.rs:338-369 | embassy-mcxa/src/i3c/target.rs:369-403 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/i2c/controller.rs"},"region":{"startLine":357}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce35ffa66469c3be8760959758ea3cc46a112fd48878301bab8c79221644df6f"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): embassy-mcxa/src/i2c/controller.rs:1330-1436 | embassy-mcxa/src/i2c/target.rs:889-999 | embassy-mcxa/src/i3c/controller.rs:1274-1378 | embassy-mcxa/src/spi/controller.rs:626-674 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/i2c/controller.rs"},"region":{"startLine":1330}}}],"partialFingerprints":{"codehealthFindingId/v1":"8318c66ccaad934c2065aa924b6f3ab6d2012ae3f09eb61094df9ab5deaffc5c"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): embassy-mcxa/src/lpuart/bbq.rs:403-417 | embassy-mcxa/src/lpuart/bbq.rs:427-441 | embassy-mcxa/src/lpuart/bbq.rs:453-467 | embassy-mcxa/src/lpuart/bbq.rs:480-494 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/lpuart/bbq.rs"},"region":{"startLine":403}}}],"partialFingerprints":{"codehealthFindingId/v1":"35e91074d85d24d4d88150da729d71e4f6a1d892e8eed35bc6f83b526d1be32b"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): embassy-net-esp-hosted/src/proto/fg/mod.rs:11905-12050 | embassy-net-esp-hosted/src/proto/fg/mod.rs:12560-12615 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:50028-50246 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:50787-50835 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":11905}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd2b3219aafc582d9c876bc03f57442502c6a40477a0757db74afc73db4737f3"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): embassy-net-esp-hosted/src/proto/fg/mod.rs:12051-12171 | embassy-net-esp-hosted/src/proto/fg/mod.rs:12616-12664 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:50247-50425 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:50836-50878 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":12051}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cf47f68a73288a98ec832e164cd25bc29856631ec6c803d577f513a7e4ce54f"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): embassy-net-esp-hosted/src/proto/mcu/mod.rs:42265-42282 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42651-42668 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43037-43054 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43423-43440 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":42265}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0c2a55dc1b2a2ad13cb8c5f99c833509ee47cdc8c9e7a4f9d8867a030771139"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): embassy-net-esp-hosted/src/proto/mcu/mod.rs:42283-42299 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42669-42685 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43055-43071 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43441-43457 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":42283}}}],"partialFingerprints":{"codehealthFindingId/v1":"2eb4d86bca2b5e1a785d9eada976fd635e1e7def3e75e39f5d692a26cfdf0949"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): embassy-nxp/src/casper/lpc55.rs:480-498 | embassy-nxp/src/casper/lpc55.rs:513-537 | embassy-nxp/src/casper/lpc55.rs:554-578 | embassy-nxp/src/casper/lpc55.rs:595-623 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nxp/src/casper/lpc55.rs"},"region":{"startLine":480}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce23f38bf04c6ee864f125d65abaa410b0e81802d088dd6e35cb2d49d8ac0f78"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): embassy-stm32/src/adc/mod.rs:811-843 | embassy-stm32/src/adc/mod.rs:895-910 | embassy-stm32/src/adc/mod.rs:925-937 | embassy-stm32/src/adc/watchdog.rs:185-223 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/adc/mod.rs"},"region":{"startLine":811}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e660f2dd93ae8d19eeba16370e5a85bd6bcf9f5ae7c4a3b68304cf948bb3e72"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): embassy-stm32/src/adc/mod.rs:991-1027 | embassy-stm32/src/adc/mod.rs:1053-1088 | embassy-stm32/src/adc/mod.rs:1110-1125 | embassy-stm32/src/adc/mod.rs:1150-1167 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/adc/mod.rs"},"region":{"startLine":991}}}],"partialFingerprints":{"codehealthFindingId/v1":"ecfb68505f255076a4423e7f9496edd2b1aac64446e417b005165ebde3b3b1c2"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): embassy-stm32/src/cryp/mod.rs:144-154 | embassy-stm32/src/cryp/mod.rs:186-196 | embassy-stm32/src/cryp/mod.rs:228-238 | embassy-stm32/src/cryp/mod.rs:269-279 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/cryp/mod.rs"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e926eb39f68479a9cceedf0c273b19df68e2944a8540eb798585d3cf18b378a"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): embassy-stm32/src/cryp/mod.rs:766-846 | embassy-stm32/src/cryp/mod.rs:946-984 | embassy-stm32/src/cryp/mod.rs:1332-1416 | embassy-stm32/src/cryp/mod.rs:1546-1583 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/cryp/mod.rs"},"region":{"startLine":766}}}],"partialFingerprints":{"codehealthFindingId/v1":"b37ef9b3dac42f85f1906026398a4f53aab4be6b648cb12585ccff01f5ab3b97"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): embassy-stm32/src/crypto_driver.rs:283-300 | embassy-stm32/src/crypto_driver.rs:302-319 | embassy-stm32/src/crypto_driver.rs:331-348 | embassy-stm32/src/crypto_driver.rs:350-367 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/crypto_driver.rs"},"region":{"startLine":283}}}],"partialFingerprints":{"codehealthFindingId/v1":"00e2cd7804e81f6298cd75c06130a7111b81aea68fa43658d270c3ade94914e8"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): embassy-stm32/src/hspi/mod.rs:589-620 | embassy-stm32/src/hspi/mod.rs:682-713 | embassy-stm32/src/xspi/mod.rs:782-815 | embassy-stm32/src/xspi/mod.rs:1247-1280 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hspi/mod.rs"},"region":{"startLine":589}}}],"partialFingerprints":{"codehealthFindingId/v1":"15657e0c8583c33c0f1de487cc972d51e8e83d24c7d4ae4fd2f3a092e8de0f98"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): embassy-stm32/src/i2c/v1.rs:162-254 | embassy-stm32/src/i2c/v1.rs:299-391 | embassy-stm32/src/i2c/v1.rs:488-702 | embassy-stm32/src/i2c/v1.rs:722-969 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i2c/v1.rs"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e8dc42fc10853dc671b8222c0da6e50bc161aaaf6e06221dee17a7e70a3465b"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): embassy-stm32/src/ospi/mod.rs:985-1007 | embassy-stm32/src/ospi/mod.rs:1018-1043 | embassy-stm32/src/ospi/mod.rs:1445-1467 | embassy-stm32/src/ospi/mod.rs:1480-1505 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/ospi/mod.rs"},"region":{"startLine":985}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d65a49b4278be89a90fa12747089bb9fe5f8de4cb6658e3c390c36e59b723dc"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): embassy-stm32/src/ospi/mod.rs:1054-1076 | embassy-stm32/src/ospi/mod.rs:1087-1112 | embassy-stm32/src/ospi/mod.rs:1518-1540 | embassy-stm32/src/ospi/mod.rs:1553-1578 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/ospi/mod.rs"},"region":{"startLine":1054}}}],"partialFingerprints":{"codehealthFindingId/v1":"dcc72fb5fe776dc40f26f46cc502aee0ceb38b38de839bdefa0a1a5eb4fcff4f"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): embassy-stm32/src/spi/mod.rs:803-849 | embassy-stm32/src/spi/mod.rs:852-868 | embassy-stm32/src/spi/mod.rs:873-889 | embassy-stm32/src/spi/mod.rs:897-913 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/spi/mod.rs"},"region":{"startLine":803}}}],"partialFingerprints":{"codehealthFindingId/v1":"6dc95c8793eefc9220379a3f1f54da1c11e70a7077a648c44de7213244426954"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): embassy-stm32/src/usart/mod.rs:1665-1680 | embassy-stm32/src/usart/mod.rs:1846-1861 | embassy-stm32/src/usart/mod.rs:2040-2055 | embassy-stm32/src/usart/mod.rs:2190-2205 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usart/mod.rs"},"region":{"startLine":1665}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5541af4cd282523e38e0996dc00902c44532d0e12cc3b6cde27035239dadce7"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): embassy-stm32/src/usb/otg.rs:67-92 | embassy-stm32/src/usb/otg.rs:108-131 | embassy-stm32/src/usb/otg.rs:926-963 | embassy-stm32/src/usb/otg.rs:971-1012 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usb/otg.rs"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"1634d3e2348b300b68ecb9343265e79125052ec2eec9ea2deddc31a8cfc80392"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): embassy-stm32/src/flash/c5.rs:118-167 | embassy-stm32/src/flash/h5.rs:39-85 | embassy-stm32/src/flash/h7.rs:67-113 | embassy-stm32/src/flash/h7.rs:115-155 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/c5.rs"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"940c0f17f7f8856388a6cb9b7cfd8a5b59bf46d12edaf9b022e9ca8f791528b6"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): embassy-stm32/src/flash/f2.rs:49-58 | embassy-stm32/src/flash/f4.rs:88-97 | embassy-stm32/src/flash/g.rs:91-100 | embassy-stm32/src/flash/l.rs:64-73 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/f2.rs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdc9006829e4946b16cbfb03ee521f336e8cc044edd084aa945602ed96e36e64"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): embassy-stm32/src/flash/f2.rs:63-84 | embassy-stm32/src/flash/f4.rs:102-129 | embassy-stm32/src/flash/f4.rs:134-155 | embassy-stm32/src/flash/f7.rs:54-71 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/f2.rs"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"f75ea896d2fbc7d609c2a1c66472878b7281f3ebd2d8a8fc4572f93267a54076"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): embassy-stm32/src/flash/f2.rs:128-140 | embassy-stm32/src/flash/f4.rs:216-228 | embassy-stm32/src/flash/g.rs:236-244 | embassy-stm32/src/flash/l.rs:323-335 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/f2.rs"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"f52e562c9683791daba6aa51fe38b651507d140d51f8a663b847d2c5befee9f7"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): embassy-stm32/src/flash/c.rs:33-44 | embassy-stm32/src/flash/h50.rs:36-47 | embassy-stm32/src/flash/l.rs:215-226 | embassy-stm32/src/flash/u0.rs:33-44 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/c.rs"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd78fe5f3d55b72cfed9e94732cb7afa5547bada0093d88542e1749ef070942d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (74 lines \u00D7 6): embassy-net-esp-hosted/src/proto/fg/mod.rs:7414-7487 | embassy-net-esp-hosted/src/proto/fg/mod.rs:8101-8174 | embassy-net-esp-hosted/src/proto/fg/mod.rs:10192-10265 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:31812-31885 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:32545-32618 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:40518-40591 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":7414}}}],"partialFingerprints":{"codehealthFindingId/v1":"922bba0a56fab24e411e13a73eccf62ce76c4a9f4356480bfd20c5d8ac9071f3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (64\u201365 lines \u00D7 2): embassy-mcxa/src/spi/controller.rs:687-751 | embassy-mcxa/src/spi/controller.rs:777-840 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/spi/controller.rs"},"region":{"startLine":687}}}],"partialFingerprints":{"codehealthFindingId/v1":"e313f50231cc8dc3fabe06fa36b0038682e9ea11f44b8b94095db5541497eb5c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (62 lines \u00D7 6): embassy-net-esp-hosted/src/proto/fg/mod.rs:7579-7640 | embassy-net-esp-hosted/src/proto/fg/mod.rs:8281-8342 | embassy-net-esp-hosted/src/proto/fg/mod.rs:10375-10436 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:31977-32038 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:32728-32789 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:40701-40762 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":7579}}}],"partialFingerprints":{"codehealthFindingId/v1":"a43c28913ad24a1ed2f4a79bedcec69a42a88f8719e4a33b4750256cc4ca87d5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (53 lines \u00D7 6): embassy-net-esp-hosted/src/proto/fg/mod.rs:7647-7699 | embassy-net-esp-hosted/src/proto/fg/mod.rs:8355-8407 | embassy-net-esp-hosted/src/proto/fg/mod.rs:10450-10502 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:32045-32097 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:32803-32855 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:40776-40828 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":7647}}}],"partialFingerprints":{"codehealthFindingId/v1":"b251e66d7ee4e0f9ae305728ef50c2a3461b02bfed88591f718a340dce62d9bb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (45 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:11178-11222 | embassy-net-esp-hosted/src/proto/fg/mod.rs:12343-12387 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":11178}}}],"partialFingerprints":{"codehealthFindingId/v1":"176cf6ffe95b3058f843ea424ca669eeafde24eb044264ca0fb841ae5b538476"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (38 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:2789-2826 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3290-3327 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":2789}}}],"partialFingerprints":{"codehealthFindingId/v1":"c476f5e78ef94b97e5a51422ded881b5bcd30cc480d7ec8f718fe00dc9eaf6a1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (38 lines \u00D7 2): embassy-rp/src/block.rs:303-340 | embassy-rp/src/block.rs:549-586 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/block.rs"},"region":{"startLine":303}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3d450226c21d9315a143c640ccd3ad28d50908c3c75d55261a2b775d4e95aa5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (37 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:34682-34718 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:34925-34961 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":34682}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c4ac6fcfcbd68a52d400a93154e6fe00ece5fb149adae7e55bf7a2603436788"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (36 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:3013-3048 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3489-3524 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":3013}}}],"partialFingerprints":{"codehealthFindingId/v1":"a87bd37a5dc7114806c0ba342ee94fe49d8e8c905d1c188a3c646b2044051788"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (35 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:2953-2987 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3436-3470 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":2953}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc04898c0bd5fec9cfb9bfe25fa637a67cc32be54c5dc2492d5c8ecb7063ded6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (35 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:48867-48901 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:50590-50624 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":48867}}}],"partialFingerprints":{"codehealthFindingId/v1":"baf69ff9ce2420d198fff87884b268d7be9000b1d7ce2923d110b60977ef79d9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (35 lines \u00D7 2): embassy-stm32/src/hspi/enums.rs:286-320 | embassy-stm32/src/xspi/enums.rs:378-412 \u2014 \u0060embassy-stm32/src/hspi/enums.rs\u0060 and \u0060embassy-stm32/src/xspi/enums.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 4 separate duplicated blocks between them, totalling at least 106 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hspi/enums.rs"},"region":{"startLine":286}}}],"partialFingerprints":{"codehealthFindingId/v1":"430dc7161bd4be868c3ffa6f912d1300c5ccd81341e624d4d212fb4a0d12c2a3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (35 lines \u00D7 2): embassy-stm32/src/hspi/enums.rs:364-398 | embassy-stm32/src/xspi/enums.rs:456-490 \u2014 \u0060embassy-stm32/src/hspi/enums.rs\u0060 and \u0060embassy-stm32/src/xspi/enums.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 4 separate duplicated blocks between them, totalling at least 106 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hspi/enums.rs"},"region":{"startLine":364}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6c4f7a12565647fa4878e842608a720bad3bf44f90fd0eaf526bd2b407dcf92"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (33 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:33920-33952 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:34155-34187 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":33920}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec0c9174d661cf6f9a3e6c4eaa9a5937a0422011a0e293c46ddb1b1bce77a3fe"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (29\u201333 lines \u00D7 2): embassy-stm32/src/cryp/mod.rs:876-904 | embassy-stm32/src/cryp/mod.rs:1454-1486 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/cryp/mod.rs"},"region":{"startLine":876}}}],"partialFingerprints":{"codehealthFindingId/v1":"b57f63a5fbc97910a5c6a3ca4c12024e1458c590173b4b59f84e4aec89069ed4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (29\u201332 lines \u00D7 2): embassy-embedded-hal/src/shared_bus/asynch/spi.rs:91-122 | embassy-embedded-hal/src/shared_bus/asynch/spi.rs:185-213 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-embedded-hal/src/shared_bus/asynch/spi.rs"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"17fa3b3791990970a7fc6ad893905bbdc3ce9581048c3ad779a25c740147e547"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (32 lines \u00D7 2): embassy-rp/src/pio_programs/ws2812.rs:142-173 | embassy-rp/src/pio_programs/ws2812.rs:251-282 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/pio_programs/ws2812.rs"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"aff998abfbf952ce13f190d4ef5ed0facf19bec86309d3d70448b3db715460d4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (2\u201332 lines \u00D7 4): embassy-stm32/src/cryp/mod.rs:767-798 | embassy-stm32/src/cryp/mod.rs:950-951 | embassy-stm32/src/cryp/mod.rs:1333-1364 | embassy-stm32/src/cryp/mod.rs:1550-1551 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/cryp/mod.rs"},"region":{"startLine":767}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e357dec22ba85b020bbdda638448174c17f1129e1dcded1d4d8ac1a43718c39"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (32 lines \u00D7 2): embassy-stm32/src/rcc/u3.rs:213-244 | embassy-stm32/src/rcc/u5.rs:208-239 \u2014 before extracting anything, compare \u0060embassy-stm32/src/rcc/u3.rs\u0060 and \u0060embassy-stm32/src/rcc/u5.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 113 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/u3.rs"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae8235597f8f499fe179c7512a00400442309f55c1a26e8e7a3a00c62e1ddef2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (31 lines \u00D7 4): embassy-net-esp-hosted/src/proto/fg/mod.rs:9516-9546 | embassy-net-esp-hosted/src/proto/fg/mod.rs:9803-9833 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:36582-36612 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:36869-36899 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":9516}}}],"partialFingerprints":{"codehealthFindingId/v1":"283361ce64423c1ade16a76f6010e282f40910e7762ea215733f0787be9d684d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (31 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:13395-13425 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:13549-13579 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":13395}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf76aa7dd57adad0629ecf081bc06b949fddb5dd2df8653b1426a68e633581d6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (31 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:35254-35284 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:35746-35776 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":35254}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b450204511d54580840e9d30b47cb519f08864821a93837aa8489a7d581daf5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (29 lines \u00D7 2): embassy-stm32/src/flash/u3.rs:168-196 | embassy-stm32/src/flash/u5.rs:159-187 \u2014 before extracting anything, compare \u0060embassy-stm32/src/flash/u3.rs\u0060 and \u0060embassy-stm32/src/flash/u5.rs\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 88 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/u3.rs"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5c466aa280023fe27bf375e32d712a1f4af15f95b2896cc78775bb045dbd2f1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (28 lines \u00D7 2): cyw43/src/sdio.rs:117-144 | cyw43/src/spi.rs:101-128 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cyw43/src/sdio.rs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"c33960083573ed64256ad0821b42f56537a567ed9d9a21f21a3136cb632c8db6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27\u201328 lines \u00D7 2): embassy-mcxa/src/sgi/mod.rs:561-588 | embassy-mcxa/src/sgi/mod.rs:612-638 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/sgi/mod.rs"},"region":{"startLine":561}}}],"partialFingerprints":{"codehealthFindingId/v1":"cda5f0fb1da91f70877bf6115916daa7a6975bd47f1cb38715bd6a32f2a69a4b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (28 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:9297-9324 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10625-10652 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":9297}}}],"partialFingerprints":{"codehealthFindingId/v1":"f28889a2710e5993869120501230e2b7af9ada13489954f10a4678f75bc47631"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (28 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:35779-35806 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48556-48583 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":35779}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7c68348e9c5e8ba1669c065ec8adcadca822a50c3fc7e736c11a3720cd7fe1e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27\u201328 lines \u00D7 2): embassy-rp/src/uart/mod.rs:509-535 | embassy-rp/src/uart/mod.rs:677-704 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/uart/mod.rs"},"region":{"startLine":509}}}],"partialFingerprints":{"codehealthFindingId/v1":"402c43b170e28e4a73d6e985aa4f1625b5076f7b2eeffecf18494275e7f8b8f0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24\u201328 lines \u00D7 2): embassy-stm32/src/jpeg.rs:412-439 | embassy-stm32/src/jpeg.rs:644-667 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/jpeg.rs"},"region":{"startLine":412}}}],"partialFingerprints":{"codehealthFindingId/v1":"c714dfda06bc2d3bf65fdab145904820793c83f06f9854f5e85772abb668c684"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27 lines \u00D7 3): embassy-stm32/src/hspi/enums.rs:161-187 | embassy-stm32/src/ospi/enums.rs:175-201 | embassy-stm32/src/xspi/enums.rs:141-167 \u2014 \u0060embassy-stm32/src/hspi/enums.rs\u0060 and \u0060embassy-stm32/src/xspi/enums.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 4 separate duplicated blocks between them, totalling at least 106 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hspi/enums.rs"},"region":{"startLine":161}}}],"partialFingerprints":{"codehealthFindingId/v1":"2644c85f4e12766e82649f53a2c9c00ec1a77b8b7c13d68f620c8a877bf7700b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:5857-5883 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18467-18493 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":5857}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f936e4ba5a62c299089796c27f347f2e2abdf091001a356eca4da93d938aa2c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:6813-6839 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24229-24255 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":6813}}}],"partialFingerprints":{"codehealthFindingId/v1":"52c99bd47305ae7ceeadacd8faf7682e0711eb588c80648b8dbd6d29ba50b415"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:23539-23565 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:23864-23890 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":23539}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f41e3dd94e97950f64ebd6e59bd7d06ccc2773f85b1d08c1100056ce9892502"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:47177-47203 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:47695-47721 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":47177}}}],"partialFingerprints":{"codehealthFindingId/v1":"4afc27cb12ec9c36853f81c8696a3bd7a840e746aa6509f4e336ef4d945b7b6b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (27 lines \u00D7 2): embassy-stm32/src/xspi/mod.rs:397-423 | embassy-stm32/src/xspi/mod.rs:718-744 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/xspi/mod.rs"},"region":{"startLine":397}}}],"partialFingerprints":{"codehealthFindingId/v1":"a59b73810bd56e9a1123bfd3bff84a01f21eceb0f4dc1f884550659fd45aa8c5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24\u201326 lines \u00D7 3): embassy-stm32/src/i2c/v1.rs:527-552 | embassy-stm32/src/i2c/v1.rs:759-784 | embassy-stm32/src/i2c/v1.rs:844-867 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i2c/v1.rs"},"region":{"startLine":527}}}],"partialFingerprints":{"codehealthFindingId/v1":"8924cf26b65e1e35ef278dc208b8284eae1fa6f72475b16244fd09a1a95d7e4c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 2): embassy-mcxa/src/i3c/controller.rs:1008-1033 | embassy-mcxa/src/i3c/controller.rs:1282-1307 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/i3c/controller.rs"},"region":{"startLine":1008}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e252936449f6a1f9df60e5346d9e2149b97e3c761c1e329110809e03409128a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (26 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:8896-8921 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10949-10974 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":8896}}}],"partialFingerprints":{"codehealthFindingId/v1":"9eaa55abd56313b7a1ad3afb7de4b877063a5a452e32f79f1b1239108571064f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24\u201326 lines \u00D7 2): embassy-stm32/src/crypto_driver.rs:862-887 | embassy-stm32/src/crypto_driver.rs:948-971 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/crypto_driver.rs"},"region":{"startLine":862}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed324de2192ed581f014e4ea35cd3c6ab17bc3de7cd6d592f08752d444ba22a4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25\u201326 lines \u00D7 2): embassy-stm32/src/timer/complementary_pwm.rs:144-168 | embassy-stm32/src/timer/simple_pwm.rs:263-288 \u2014 before extracting anything, compare \u0060embassy-stm32/src/timer/complementary_pwm.rs\u0060 and \u0060embassy-stm32/src/timer/simple_pwm.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 48 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/timer/complementary_pwm.rs"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4b3440578ed5dac7c3644105fa31cb447d874408ab0b5d8259986ccbf889ab8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 7): embassy-executor/build_common.rs:70-94 | embassy-hal-internal/build_common.rs:70-94 | embassy-mcxa/build_common.rs:70-94 | embassy-mspm0/build_common.rs:70-94 | embassy-nxp/build_common.rs:70-94 | embassy-stm32/build_common.rs:70-94 | embassy-sync/build_common.rs:70-94 \u2014 \u0060embassy-executor/build_common.rs\u0060 and \u0060embassy-hal-internal/build_common.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 4 separate duplicated blocks between them, totalling at least 42 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-executor/build_common.rs"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"950a3be60cce77d3b3eaea8b12be316a7b029f7e2c6395c203885320baac6701"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 3): embassy-mcxa/src/i2c/controller.rs:1201-1225 | embassy-mcxa/src/i2c/target.rs:782-806 | embassy-mcxa/src/i3c/controller.rs:1073-1097 \u2014 before extracting anything, compare \u0060embassy-mcxa/src/i2c/controller.rs\u0060 and \u0060embassy-mcxa/src/i2c/target.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 77 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/i2c/controller.rs"},"region":{"startLine":1201}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b23c437cb4c13c8bf9b7d4605a894c1ef20ff0b19c016929037115810c5261e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 2): embassy-mcxa/src/lpuart/dma.rs:212-236 | embassy-mcxa/src/lpuart/dma.rs:258-282 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/lpuart/dma.rs"},"region":{"startLine":212}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e060033d33c58e60d1e9b60a8e55beca865d9a4d1f0d81af0ef66d71b472b73"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 2): embassy-mcxa/src/lpuart/dma.rs:422-446 | embassy-mcxa/src/lpuart/dma.rs:472-496 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/lpuart/dma.rs"},"region":{"startLine":422}}}],"partialFingerprints":{"codehealthFindingId/v1":"510c8d18b01573a1b052f2f7f862041095efe096fbb9db3ac2a44fffcb4bd0e6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:8781-8805 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10849-10873 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":8781}}}],"partialFingerprints":{"codehealthFindingId/v1":"06bee50635899197b12bec322ee6830408b41ecebfe326519cec6fca45228450"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25 lines \u00D7 2): embassy-stm32/src/dma/gpdma/mod.rs:652-676 | embassy-stm32/src/dma/gpdma/mod.rs:796-820 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/dma/gpdma/mod.rs"},"region":{"startLine":652}}}],"partialFingerprints":{"codehealthFindingId/v1":"a573877e731cce4d2edc3e9261ff456ea41d4852fb2d26160e7d04f68aefbdaa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 4): embassy-net-esp-hosted/src/proto/fg/mod.rs:9619-9642 | embassy-net-esp-hosted/src/proto/fg/mod.rs:9888-9911 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:36685-36708 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:36954-36977 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":9619}}}],"partialFingerprints":{"codehealthFindingId/v1":"40dfdf8c1a8c96d394f741af483e4c0101838d77353db72da06e8f729dba39b1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): embassy-executor/src/platform/cortex_m.rs:25-48 | embassy-stm32/src/executor.rs:55-78 \u2014 before extracting anything, compare \u0060embassy-executor/src/platform/cortex_m.rs\u0060 and \u0060embassy-stm32/src/executor.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 51 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-executor/src/platform/cortex_m.rs"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"eac7ca2b8f32ced0cc35db095e7d1bb81c633ef6c39d748b76cb44e080b9b835"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:21417-21440 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22348-22371 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":21417}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed0b5f2602f13f56bc22debd23652af725e82c9d6c24171aaf53200d589208fb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:22542-22565 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22890-22913 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":22542}}}],"partialFingerprints":{"codehealthFindingId/v1":"65110388eb34f869fc11b8ac3a3e11fd0e7db59b5e31628450cf0acdcb50936c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:23042-23065 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:23390-23413 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":23042}}}],"partialFingerprints":{"codehealthFindingId/v1":"f71593c13e65516f18d31d0ad6907fced202073e429d79616359d41c6ce47c16"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:25735-25758 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:26612-26635 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":25735}}}],"partialFingerprints":{"codehealthFindingId/v1":"2db016411d6183d79513a5aee98656f3fb12f1f69007793f7ec9e2d47bdedfa8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:26789-26812 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:27292-27315 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":26789}}}],"partialFingerprints":{"codehealthFindingId/v1":"71e2cc69a798e023cbca65f5cddbdae03b508c5e69c36bea671b106b80ff8a9a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:27532-27555 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:28035-28058 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":27532}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e77f6e6598ae1a1170e2faa23bbe89cf0302657f5290b31ddec8bb70554be24"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:38509-38532 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38857-38880 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":38509}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c4b0c2900d329cacb1334f70937f8691ba80f1be71d1667f7e1f631ce91f5d5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): embassy-nrf/src/twim.rs:406-429 | embassy-nrf/src/twis.rs:440-463 \u2014 before extracting anything, compare \u0060embassy-nrf/src/twim.rs\u0060 and \u0060embassy-nrf/src/twis.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 85 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/twim.rs"},"region":{"startLine":406}}}],"partialFingerprints":{"codehealthFindingId/v1":"d66478baa151cc3fd597c4cfe2b38ac5b0e08c3d918ef1a0af114222334e8127"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): embassy-stm32/src/can/fd/message_ram/rxfifo_element.rs:91-114 | embassy-stm32/src/can/fd/message_ram/txbuffer_element.rs:343-366 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/can/fd/message_ram/rxfifo_element.rs"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"aab4f6d801d3b99eface3afe4dbab8b17db3de27abaccd2dd2f8c9200024e0f3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15\u201324 lines \u00D7 2): embassy-stm32/src/hspi/mod.rs:444-458 | embassy-stm32/src/ospi/mod.rs:765-788 \u2014 \u0060embassy-stm32/src/hspi/mod.rs\u0060 and \u0060embassy-stm32/src/ospi/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 19 separate duplicated blocks between them, totalling at least 220 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hspi/mod.rs"},"region":{"startLine":444}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc68eba9b96824f0abc1145f058c8a00efc5308990217bb5b6f884874929a646"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): embassy-stm32/src/sdmmc/mod.rs:1479-1502 | embassy-stm32/src/sdmmc/mod.rs:1861-1884 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/sdmmc/mod.rs"},"region":{"startLine":1479}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2fcc9864174d4840c41cebe92db263e790013a64b0cd969bea65ebc3730edfc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): embassy-stm32/src/sdmmc/mod.rs:1537-1560 | embassy-stm32/src/sdmmc/mod.rs:1928-1951 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/sdmmc/mod.rs"},"region":{"startLine":1537}}}],"partialFingerprints":{"codehealthFindingId/v1":"f670c7ebf4ed49c4e48ea5c3f6f24cdd520aa3bcf828090ee76b9dfdcb821d9d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 3): embassy-net-esp-hosted/src/proto/fg/mod.rs:1722-1744 | embassy-net-esp-hosted/src/proto/fg/mod.rs:2774-2796 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3275-3297 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":1722}}}],"partialFingerprints":{"codehealthFindingId/v1":"42f56d2e58ec93eb3ad1c5f48fef4320c703f739685a875a28671a470c07dd32"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:10748-10770 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48024-48046 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":10748}}}],"partialFingerprints":{"codehealthFindingId/v1":"26daeb6a4bd010312e8e076d15c6cf32042ed5df9df23d97cf5a4221821b8f98"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:29031-29053 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:29379-29401 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":29031}}}],"partialFingerprints":{"codehealthFindingId/v1":"47a3e6804258baecaabd24270e81f3e5d6636f757bf19de5567ec3c59c6360b2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:46812-46834 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:47330-47352 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":46812}}}],"partialFingerprints":{"codehealthFindingId/v1":"902ef6bef6812e7f21b105760d21ec7f20fc918fba3886b099d598cb65f5617d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20\u201323 lines \u00D7 2): embassy-rp/src/otp.rs:94-113 | embassy-rp/src/otp.rs:119-141 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/otp.rs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"73f0d15e8ba84abaa79007f25fb6ec4b533469db22fdf59b663f4fab78d197e4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): embassy-stm32/src/cryp/mod.rs:694-716 | embassy-stm32/src/cryp/mod.rs:1261-1283 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/cryp/mod.rs"},"region":{"startLine":694}}}],"partialFingerprints":{"codehealthFindingId/v1":"979cc35e38e612ef8740974e47dc30950f46cfe30085d0e43a04e2899178a0e4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): embassy-stm32/src/i2c/v2.rs:1068-1090 | embassy-stm32/src/i2c/v2.rs:1478-1500 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i2c/v2.rs"},"region":{"startLine":1068}}}],"partialFingerprints":{"codehealthFindingId/v1":"6625ae958a79001dc1e9feeda850dd5f556874e53f7cb009e959ca68f7f5a925"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 4): embassy-net-esp-hosted/src/proto/fg/mod.rs:8770-8791 | embassy-net-esp-hosted/src/proto/fg/mod.rs:9153-9174 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10496-10517 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10838-10859 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":8770}}}],"partialFingerprints":{"codehealthFindingId/v1":"66fc3bae5532af35995465153293fa233928718d8e40fd4f1027a7e37bab24eb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19\u201322 lines \u00D7 3): embassy-mcxa/src/spi/controller.rs:603-624 | embassy-mcxa/src/spi/controller.rs:746-764 | embassy-mcxa/src/spi/controller.rs:835-853 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/spi/controller.rs"},"region":{"startLine":603}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbb3cc997951f49b9a48ad5cce6cba548996cb20fd55a9656c51a612dab688b7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): embassy-executor-macros/src/macros/main.rs:79-100 | embassy-executor-macros/src/macros/task.rs:22-43 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-executor-macros/src/macros/main.rs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"74b5229b733c7d006a3fb0b20adaff59b4e355d9a32b6ff676b26e6d51c7f688"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): embassy-mcxa/src/lpuart/bbq.rs:881-902 | embassy-mcxa/src/lpuart/bbq.rs:1243-1264 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/lpuart/bbq.rs"},"region":{"startLine":881}}}],"partialFingerprints":{"codehealthFindingId/v1":"21d22b17618080ba7d46dd3a2f6c370fe71a7e189187ae4f6dc360ad4eb54bc5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): embassy-mcxa/src/chips/mcxa2xx.rs:61-82 | embassy-mcxa/src/chips/mcxa5xx.rs:78-99 \u2014 before extracting anything, compare \u0060embassy-mcxa/src/chips/mcxa2xx.rs\u0060 and \u0060embassy-mcxa/src/chips/mcxa5xx.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 47 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/chips/mcxa2xx.rs"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ac7696cc481345df50798d234a27fde65cadcb61f2cb5ef89360fd7a2155a14"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): embassy-microchip/src/i2c.rs:311-332 | embassy-microchip/src/i2c.rs:599-620 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-microchip/src/i2c.rs"},"region":{"startLine":311}}}],"partialFingerprints":{"codehealthFindingId/v1":"c24827ea457487c5e82bab4ba4e38a5be5e5bfad395b13dd120af68bb69c8c4e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:2387-2408 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3625-3646 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":2387}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7382a2797cdfed2d50b8d87ab2f1367c886e0e71d0a501dda6c387d55534677"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:7106-7127 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24522-24543 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":7106}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea95ed8ce845a5cd477a945905e13de4bb759ceb9015210e108866eae1c74097"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:9352-9373 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10674-10695 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":9352}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6717a6a20015d92250076d50a74f12fe4c3469ac263619a3f5cff687895268d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:33989-34010 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:34239-34260 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":33989}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b88156b75e829e966d08b5e71fd9140a2fb93685a1d93247874011ece55441a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:34759-34780 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:35017-35038 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":34759}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f5ffdbf1c51545c678bab439e70871b264fc6da6024988cda3856477fc50541"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): embassy-nrf/src/rramc.rs:208-229 | embassy-nrf/src/rramc.rs:299-320 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/rramc.rs"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6719194ed5d2d7af90d85f0c2406c6c86098cc0b6ccf25de156a9deedfe5ba0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): embassy-stm32/src/cryp/mod.rs:669-690 | embassy-stm32/src/cryp/mod.rs:1236-1257 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/cryp/mod.rs"},"region":{"startLine":669}}}],"partialFingerprints":{"codehealthFindingId/v1":"54a0db108daf8979e0c35bd258a37777a73bdb1443762408097a9ba38ad50123"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20\u201322 lines \u00D7 2): embassy-stm32/src/crypto_driver.rs:831-852 | embassy-stm32/src/crypto_driver.rs:920-939 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/crypto_driver.rs"},"region":{"startLine":831}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0b4dde4e9408b93090219266b7b65e5a4aed9c99a998ae0cdd1e14a9d2b76eb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): embassy-usb-host/src/class/cdc_acm.rs:188-209 | embassy-usb-host/src/class/msc.rs:712-733 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb-host/src/class/cdc_acm.rs"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"2367b48adb830b634723ae6f1b39750223b355c09808738eca037022a6a1be9c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 4): embassy-net-esp-hosted/src/proto/fg/mod.rs:8886-8906 | embassy-net-esp-hosted/src/proto/fg/mod.rs:9287-9307 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10615-10635 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10939-10959 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":8886}}}],"partialFingerprints":{"codehealthFindingId/v1":"713f18fa27e364fae0799944098db5cd007d902ed5a4055e9348621333c84282"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 4): embassy-net-esp-hosted/src/proto/mcu/mod.rs:19144-19164 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19590-19610 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46988-47008 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:47506-47526 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":19144}}}],"partialFingerprints":{"codehealthFindingId/v1":"6270d3476b16fc6aab5f5cdf82738ab9a64890ee9d22f20d992d12f4d4b3b09e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 3): embassy-net-esp-hosted/src/proto/fg/mod.rs:9543-9563 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:36609-36629 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:41770-41790 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":9543}}}],"partialFingerprints":{"codehealthFindingId/v1":"d997ce178253a955610203f0c07f7b410bc6686cc4f30e540b481ece090a517c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:8091-8111 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19577-19597 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":8091}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1e47762ddde67d26ffd3c641ba9e459b0cc8b3c9e588196a336606a771b430a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:8543-8563 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:36383-36403 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":8543}}}],"partialFingerprints":{"codehealthFindingId/v1":"485f010f47507674a7e5e6e9d805a3cdc94abe546a52e375c62b64873e7708a2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:11916-11936 | embassy-net-esp-hosted/src/proto/fg/mod.rs:12571-12591 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":11916}}}],"partialFingerprints":{"codehealthFindingId/v1":"abb687077879de321906e5e773e6f12302db619a7273fa690e2c2c8ed5daac52"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:35369-35389 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:35894-35914 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":35369}}}],"partialFingerprints":{"codehealthFindingId/v1":"e26d8bba205373ef8641d222297274c982e2088dafd8483159435571253e2942"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:41515-41535 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:41754-41774 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":41515}}}],"partialFingerprints":{"codehealthFindingId/v1":"44fbabf320cd31c9b33e7bb305fc7401a1e813a43b22e44935486954383b836e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): embassy-nrf/src/buffered_uarte/v1.rs:577-597 | embassy-nrf/src/buffered_uarte/v2.rs:479-499 \u2014 before extracting anything, compare \u0060embassy-nrf/src/buffered_uarte/v1.rs\u0060 and \u0060embassy-nrf/src/buffered_uarte/v2.rs\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 127 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/buffered_uarte/v1.rs"},"region":{"startLine":577}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f3b5d5da9dcee8954314ee60c8da84dc8f2b81ff54fda9601894ef634545c72"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): embassy-nrf/src/twim.rs:379-399 | embassy-nrf/src/twis.rs:413-433 \u2014 before extracting anything, compare \u0060embassy-nrf/src/twim.rs\u0060 and \u0060embassy-nrf/src/twis.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 85 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/twim.rs"},"region":{"startLine":379}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a785cd5c0990ff040e03f065d4452272d36fe40a9e62d5ae498b0006100869c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): embassy-nxp/src/spi/lpc55.rs:181-201 | embassy-nxp/src/usart/lpc55.rs:586-606 \u2014 \u0060embassy-nxp/src/spi/lpc55.rs\u0060 and \u0060embassy-nxp/src/usart/lpc55.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 4 separate duplicated blocks between them, totalling at least 48 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nxp/src/spi/lpc55.rs"},"region":{"startLine":181}}}],"partialFingerprints":{"codehealthFindingId/v1":"36f1918e6338e2182168374f3e16674c47d4bee4502704bce654f41cf6348e46"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): embassy-rp/src/multicore.rs:133-153 | embassy-rp/src/multicore.rs:162-182 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/multicore.rs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"4845a7368b1a0db940bd6b651cd554471a9de8fc1613634bdc63b0c151e0d81f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): embassy-stm32/src/dma/dma_bdma.rs:1396-1416 | embassy-stm32/src/dma/dma_bdma.rs:1573-1593 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/dma/dma_bdma.rs"},"region":{"startLine":1396}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b68d3a41756b0d32dc3634d4d602286d2be12f5acb0a684920693356d42a8e1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): embassy-stm32/src/dma/gpdma/ringbuffered.rs:112-132 | embassy-stm32/src/dma/gpdma/ringbuffered.rs:292-312 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/dma/gpdma/ringbuffered.rs"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"73a24eb05060b7f795a2ec825b0f0d5c7879ea1e0598ec9af395145758762298"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20\u201321 lines \u00D7 2): embassy-stm32/src/hash/mod.rs:604-624 | embassy-stm32/src/hash/mod.rs:1006-1025 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hash/mod.rs"},"region":{"startLine":604}}}],"partialFingerprints":{"codehealthFindingId/v1":"e93883b4673de3061a1676d71aefd2d027d6a82cecbbfa13e4445e179299dfdf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): embassy-stm32/src/ospi/mod.rs:620-640 | embassy-stm32/src/ospi/mod.rs:913-933 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/ospi/mod.rs"},"region":{"startLine":620}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa17d5b94c5dc0d437272e1dbfe4db17466fdd5abc1ab7494c5b03f9a308c8c3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): embassy-stm32/src/flash/f2.rs:64-84 | embassy-stm32/src/flash/f4.rs:135-155 \u2014 before extracting anything, compare \u0060embassy-stm32/src/flash/f2.rs\u0060 and \u0060embassy-stm32/src/flash/f4.rs\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 105 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/f2.rs"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"e04993ae96c350bbdc8d1731726b4cae749b4732dfb6da7f9adb828bb68365be"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): embassy-stm32-wpan/src/bluetooth/gap/advertiser.rs:170-190 | embassy-stm32-wpan/src/bluetooth/gap/advertiser.rs:198-218 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32-wpan/src/bluetooth/gap/advertiser.rs"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"4966205d4c04d908e1bcff75cd286ba9ffe3654aa0a790e547a509bcda5c62ea"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 7): embassy-net-esp-hosted/src/proto/fg/mod.rs:10580-10599 | embassy-net-esp-hosted/src/proto/fg/mod.rs:10761-10780 | embassy-net-esp-hosted/src/proto/fg/mod.rs:10963-10982 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:9721-9740 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:47853-47872 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48037-48056 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48242-48261 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":10580}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ce9a5cc2d1cc8c361a3350fc24cf0e99758fe47513c91c2f3c55d89cadc5794"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 4): embassy-net-esp-hosted/src/proto/mcu/mod.rs:42220-42239 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42606-42625 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42992-43011 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43378-43397 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":42220}}}],"partialFingerprints":{"codehealthFindingId/v1":"59b6e10b61793bf2c1af8dc017be480db8511e58e9ac85a3becb2c7f64229a14"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16\u201320 lines \u00D7 2): embassy-imxrt/src/flexcomm/spi.rs:347-362 | embassy-imxrt/src/flexcomm/spi.rs:467-486 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-imxrt/src/flexcomm/spi.rs"},"region":{"startLine":347}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5301c2fa9dc71e85fa51a574f1c1611571725fa63ffca0113352e1679b18364"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): embassy-mcxa/src/ctimer/pwm.rs:271-290 | embassy-mcxa/src/ctimer/pwm.rs:397-416 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/ctimer/pwm.rs"},"region":{"startLine":271}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ac1c672874268179421f264c1ae64119acf73d1f75424ca764d4f458907d97d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): embassy-mcxa/src/ctimer/pwm.rs:316-335 | embassy-mcxa/src/ctimer/pwm.rs:452-471 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/ctimer/pwm.rs"},"region":{"startLine":316}}}],"partialFingerprints":{"codehealthFindingId/v1":"26030dd6d4e11e235055521f6556c8c5122f230f57f82db1e9738a04fff3ef24"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): embassy-mcxa/src/chips/mcxa2xx.rs:21-40 | embassy-mcxa/src/chips/mcxa5xx.rs:25-44 \u2014 before extracting anything, compare \u0060embassy-mcxa/src/chips/mcxa2xx.rs\u0060 and \u0060embassy-mcxa/src/chips/mcxa5xx.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 47 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/chips/mcxa2xx.rs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"2013064331bf441ef6152f108667bc1a26409b77314ec6d1dec39323a6c84068"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:20910-20929 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21161-21180 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":20910}}}],"partialFingerprints":{"codehealthFindingId/v1":"b262367be68379ea54a61ce6d316c0ce101512c1cc078aee814eb3c92c342910"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:41016-41035 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:41764-41783 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":41016}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ce557a621a05b25ddbfe6e14cabdae0d9b808e3d54b16f6732fba0576c90b34"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): embassy-nrf/src/pwm.rs:106-125 | embassy-nrf/src/pwm.rs:842-861 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/pwm.rs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"fdf6201e44c1b6725986ac1b8c80057abc7075f48d69b38e27e170dedd1f3f41"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17\u201320 lines \u00D7 2): embassy-stm32/src/hspi/mod.rs:69-85 | embassy-stm32/src/ospi/mod.rs:112-131 \u2014 \u0060embassy-stm32/src/hspi/mod.rs\u0060 and \u0060embassy-stm32/src/ospi/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 19 separate duplicated blocks between them, totalling at least 220 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hspi/mod.rs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d06616f9fe3944ddae196d5ac5cdbcbe9b0f133c23a26c956d4069b97e0a4af"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): embassy-stm32/src/i2c/v2.rs:751-770 | embassy-stm32/src/i2c/v2.rs:1393-1412 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i2c/v2.rs"},"region":{"startLine":751}}}],"partialFingerprints":{"codehealthFindingId/v1":"c290a8e3e21c10e90e052168396d8e3cc4e8ef48a5e2219c2fd11bb91cbddee5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): embassy-stm32/src/sdmmc/mod.rs:1224-1243 | embassy-stm32/src/sdmmc/mod.rs:1296-1315 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/sdmmc/mod.rs"},"region":{"startLine":1224}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3778588060e32296e9b48557b562946f0f9273cb9288681ab8d0252edd1bc66"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 6): embassy-net-esp-hosted/src/proto/fg/mod.rs:1752-1770 | embassy-net-esp-hosted/src/proto/fg/mod.rs:2131-2149 | embassy-net-esp-hosted/src/proto/fg/mod.rs:2396-2414 | embassy-net-esp-hosted/src/proto/fg/mod.rs:2834-2852 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3325-3343 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3634-3652 \u2014 all 6 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":1752}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf147d24f20d50ee292403a08cb36107e716b5bd87f4c94ed34eadafc013d7d9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 4): embassy-net-esp-hosted/src/proto/fg/mod.rs:11906-11924 | embassy-net-esp-hosted/src/proto/fg/mod.rs:12561-12579 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:50029-50047 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:50788-50806 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":11906}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ad06bbdf390570ef6c514f60f82110b53450b63b438b06d60ac3888a73a8dbc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16\u201319 lines \u00D7 3): embassy-mcxa/src/clocks/periph_helpers.rs:909-927 | embassy-mcxa/src/clocks/periph_helpers.rs:1480-1495 | embassy-mcxa/src/clocks/periph_helpers.rs:1659-1675 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/periph_helpers.rs"},"region":{"startLine":909}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8cb1c101f1866bd3a4e3cb35eafa24bf7e5b75e9b554a16996ce6af3f8d2384"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): embassy-ambiq/src/i2c.rs:178-196 | embassy-ambiq/src/i2c.rs:278-296 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-ambiq/src/i2c.rs"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"667d2753c17747f6e8969d172e79f010360f84c97c4ae5e8969e4de998310d2d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): embassy-imxrt/src/flexcomm/uart.rs:159-177 | embassy-imxrt/src/flexcomm/uart.rs:272-290 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-imxrt/src/flexcomm/uart.rs"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb1282befff254e9ccecb2de0c4cf3683391aa7963ea83f1dfd23eda50e18a84"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): embassy-imxrt/src/flexcomm/uart.rs:632-650 | embassy-imxrt/src/flexcomm/uart.rs:760-778 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-imxrt/src/flexcomm/uart.rs"},"region":{"startLine":632}}}],"partialFingerprints":{"codehealthFindingId/v1":"34c4667aa89d78b08876faaa76be2c2b1c79a1fa2bb663ebd8f18d56761992d0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201319 lines \u00D7 2): embassy-mcxa/src/i3c/target.rs:1852-1865 | embassy-mcxa/src/lpuart/bbq.rs:1522-1540 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/i3c/target.rs"},"region":{"startLine":1852}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbf4e4270bb9a9dbe5db9c6e1d6c2155a0c7ea2baf26fad8d182b26daf61bdba"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:2454-2472 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3692-3710 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":2454}}}],"partialFingerprints":{"codehealthFindingId/v1":"f55a0b922c669c5eb2188c1e68636480ffc286f887164661ad822bf84bf3463d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:8944-8962 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10991-11009 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":8944}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0955f73ae1d66aa4c7c627a55701b175b0a4dc850335a7f0dc7f84f490ac8b4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:9668-9686 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:36734-36752 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":9668}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a0957bc5e8b8d2903b87db3beb024d2d60b74ec82e8b4c9bf495ea008413e6d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:12061-12079 | embassy-net-esp-hosted/src/proto/fg/mod.rs:12626-12644 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":12061}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f2bc537ce31d9fa0adf69e60affb5dafab6e85a6d17fa616d38ef731169e3c0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:8793-8811 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:34494-34512 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":8793}}}],"partialFingerprints":{"codehealthFindingId/v1":"79754e66b42c34b72f2dfd8ccf5da3084dcd8b8232efe3a1868a9afb94759d4e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:12772-12790 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:41325-41343 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":12772}}}],"partialFingerprints":{"codehealthFindingId/v1":"a312cc74b5cb4b83ecadc6dfcf3e445a18e81ca98a245bd0bcd9457afec15639"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:34015-34033 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:34271-34289 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":34015}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a89c327d9e6b7ebc30bf4272d84808c3d5dff98ec254733d04e7b3515f0ab3e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:34785-34803 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:35049-35067 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":34785}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b8999a60bf421b19046dee5a877088d8984bd60e73e13829e6e19fe0edc335f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:35916-35934 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48661-48679 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":35916}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d9459106064491e07f616748478c81529126be8c1ac5f44d981f5ed05f9c149"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): embassy-nrf/src/buffered_uarte/v1.rs:186-204 | embassy-nrf/src/buffered_uarte/v2.rs:131-149 \u2014 before extracting anything, compare \u0060embassy-nrf/src/buffered_uarte/v1.rs\u0060 and \u0060embassy-nrf/src/buffered_uarte/v2.rs\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 127 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/buffered_uarte/v1.rs"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"7850b249d0b989c93359ccd9eebece3d5933a4d6dc703f44ae82675152da1e65"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): embassy-nrf/src/twis.rs:488-506 | embassy-nrf/src/twis.rs:594-612 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/twis.rs"},"region":{"startLine":488}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e4bfa9de516492df4280a1af307271a273fd18973a291b233c2c337fa5769bb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): embassy-stm32/src/cordic/mod.rs:387-405 | embassy-stm32/src/cordic/mod.rs:550-568 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/cordic/mod.rs"},"region":{"startLine":387}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9281ee9f6a65cef0f69f7c81fb162eccb1f166a1e6745644a65c8dba9cca195"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): embassy-stm32/src/hspi/mod.rs:395-413 | embassy-stm32/src/ospi/mod.rs:718-736 \u2014 \u0060embassy-stm32/src/hspi/mod.rs\u0060 and \u0060embassy-stm32/src/ospi/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 19 separate duplicated blocks between them, totalling at least 220 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hspi/mod.rs"},"region":{"startLine":395}}}],"partialFingerprints":{"codehealthFindingId/v1":"4823fd74331754e7073d6c54ca184724875d49b1342c3f9788db66f1f09e446d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17\u201319 lines \u00D7 2): embassy-usb-host/src/class/msc.rs:360-378 | embassy-usb-host/src/class/vcp/cp210x.rs:504-520 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb-host/src/class/msc.rs"},"region":{"startLine":360}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b60591c2f30b7bc6ef16644d503da8df0d632a68764c6543260b60c8c72f9a3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 4): embassy-mcxa/src/clocks/periph_helpers.rs:519-536 | embassy-mcxa/src/clocks/periph_helpers.rs:661-678 | embassy-mcxa/src/clocks/periph_helpers.rs:1298-1315 | embassy-mcxa/src/clocks/periph_helpers.rs:1796-1813 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/periph_helpers.rs"},"region":{"startLine":519}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1271dbeba71c58dc788fa547ff296372d96222385465775259926069ba8fb55"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 4): embassy-net-esp-hosted/src/proto/fg/mod.rs:8932-8949 | embassy-net-esp-hosted/src/proto/fg/mod.rs:9340-9357 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10662-10679 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10979-10996 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":8932}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ec78a58203377d40509fe9c26739c0adb30f23b48ce29620cc1133bb7f44027"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13\u201318 lines \u00D7 4): embassy-stm32/src/rcc/h.rs:1116-1133 | embassy-stm32/src/rcc/h.rs:1147-1162 | embassy-stm32/src/rcc/h.rs:1174-1186 | embassy-stm32/src/rcc/h.rs:1204-1219 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/h.rs"},"region":{"startLine":1116}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef86a85b41a0af881651739106d557630d5c553776af95c08070f38b4fe544e2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 3): embassy-net-esp-hosted/src/proto/fg/mod.rs:9188-9205 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10531-10548 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22129-22146 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":9188}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f10a09cf392f1c06a15da016626cadbfec6ae7691fcb8ec48c66cce6f0ef88f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 3): embassy-net-esp-hosted/src/proto/mcu/mod.rs:38285-38302 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38732-38749 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:39234-39251 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":38285}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6e84b3a4bf3a17d5e4e1cee1922d10ac2deed7fb5090a35d9e70db366a0bea2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15\u201318 lines \u00D7 3): embassy-stm32/src/aes/common.rs:386-402 | embassy-stm32/src/aes/v2.rs:293-307 | embassy-stm32/src/saes/mod.rs:651-668 \u2014 before extracting anything, compare \u0060embassy-stm32/src/aes/common.rs\u0060 and \u0060embassy-stm32/src/aes/v2.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 56 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/aes/common.rs"},"region":{"startLine":386}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef7c081527d0407ae7ba56e34835d3a9a86a239ab42de16a95203847f4fba37f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): embassy-mcxa/src/flexspi.rs:974-991 | embassy-mcxa/src/flexspi.rs:1203-1220 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/flexspi.rs"},"region":{"startLine":974}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f40dc6b0a98ee9b3a327a044da58a83c1f2c044162a90843c7d9fd768d0596d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): embassy-mspm0/src/i2c.rs:758-775 | embassy-mspm0/src/i2c.rs:819-836 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/i2c.rs"},"region":{"startLine":758}}}],"partialFingerprints":{"codehealthFindingId/v1":"f881e889303964cf07ee5ae50119e352f7aac832943ddc2c28322e187692fb15"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:620-637 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16032-16049 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":620}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ce69f73027ff2ac5db185b9952009507ee3c0589cbe9991a470e04abb7d298d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:1298-1315 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16960-16977 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":1298}}}],"partialFingerprints":{"codehealthFindingId/v1":"33e59bd1f9b65bb5f466f9b2795e9402b51e9eadd8c7b3d496f1578727e29c12"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:10815-10832 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48091-48108 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":10815}}}],"partialFingerprints":{"codehealthFindingId/v1":"70218cfa0eabe016be0384fcffc5476320ff7b6c89803bc4d8a305a3aaf4ad79"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:4547-4564 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:7332-7349 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":4547}}}],"partialFingerprints":{"codehealthFindingId/v1":"f07114b8a3702248a66a0cba8fd31321b9e4666e1c7aa6347e5fc0b149ebf677"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:19406-19423 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:32239-32256 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":19406}}}],"partialFingerprints":{"codehealthFindingId/v1":"59a36c672253cbc0ccfbb33db7642a0d3b6849c6e11624f0aa2b4929a29005f6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:35407-35424 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:35945-35962 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":35407}}}],"partialFingerprints":{"codehealthFindingId/v1":"886cff5df93a6dae7b047d38916439b4ce53c07ab743e66d44ee913e2081d8a7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): embassy-nxp/src/casper/lpc55.rs:514-531 | embassy-nxp/src/casper/lpc55.rs:555-572 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nxp/src/casper/lpc55.rs"},"region":{"startLine":514}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc34fd1b0b03f3acf788e3e0a68b878d289c887b738d0d31b6cad795c3fc7b9c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17\u201318 lines \u00D7 2): embassy-rp/src/uart/buffered.rs:109-125 | embassy-rp/src/uart/buffered.rs:146-163 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/uart/buffered.rs"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a3086af29e8d44410806ba8c1020846d22df2a7680fa3909fdf95492ee2bc7c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16\u201318 lines \u00D7 2): embassy-stm32/src/i2c/v2.rs:176-193 | embassy-stm32/src/i2c/v2.rs:213-228 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i2c/v2.rs"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c3cc87496029a565c11e941bf3cf8e8fd453713d00b59d36449a8960b4134a0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): embassy-stm32/src/rcc/f013.rs:422-439 | embassy-stm32/src/rcc/f013.rs:451-468 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/f013.rs"},"region":{"startLine":422}}}],"partialFingerprints":{"codehealthFindingId/v1":"9715fd162ca5607de16c4aa44e9ffec2d395a99d1177e3e0c266a3a5bf3068e8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): embassy-stm32/src/rcc/f247.rs:183-200 | embassy-stm32/src/rcc/g4.rs:129-146 \u2014 before extracting anything, compare \u0060embassy-stm32/src/rcc/f247.rs\u0060 and \u0060embassy-stm32/src/rcc/g4.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 58 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/f247.rs"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"6336acb9784ee87305160aa5cb608d9c605dc064854fee49d040bd4c5dc83fbd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): embassy-usb-host/src/class/hub.rs:61-78 | embassy-usb-host/src/class/kbd.rs:60-77 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb-host/src/class/hub.rs"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"bcb4995ebbcdec032461f63836a7cb9de48ad609f35d9f3bd4662f1fd4c253df"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 95): embassy-net-esp-hosted/src/proto/fg/mod.rs:627-643 | embassy-net-esp-hosted/src/proto/fg/mod.rs:821-837 | embassy-net-esp-hosted/src/proto/fg/mod.rs:1038-1054 | embassy-net-esp-hosted/src/proto/fg/mod.rs:1178-1194 | embassy-net-esp-hosted/src/proto/fg/mod.rs:1424-1440 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3862-3878 | embassy-net-esp-hosted/src/proto/fg/mod.rs:4091-4107 | embassy-net-esp-hosted/src/proto/fg/mod.rs:4276-4292 | embassy-net-esp-hosted/src/proto/fg/mod.rs:4468-4484 | embassy-net-esp-hosted/src/proto/fg/mod.rs:4608-4624 | embassy-net-esp-hosted/src/proto/fg/mod.rs:5346-5362 | embassy-net-esp-hosted/src/proto/fg/mod.rs:5542-5558 | embassy-net-esp-hosted/src/proto/fg/mod.rs:5715-5731 | embassy-net-esp-hosted/src/proto/fg/mod.rs:5986-6002 | embassy-net-esp-hosted/src/proto/fg/mod.rs:6236-6252 | embassy-net-esp-hosted/src/proto/fg/mod.rs:6942-6958 | embassy-net-esp-hosted/src/proto/fg/mod.rs:7744-7760 | embassy-net-esp-hosted/src/proto/fg/mod.rs:10266-10282 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16039-16055 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16233-16249 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16450-16466 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16840-16856 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17086-17102 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17226-17242 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17418-17434 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17558-17574 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17698-17714 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18152-18168 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18325-18341 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18596-18612 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18855-18871 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18995-19011 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19309-19325 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19818-19834 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19958-19974 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20098-20114 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20238-20254 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20607-20623 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20747-20763 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21627-21643 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21767-21783 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21907-21923 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22668-22684 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:23168-23184 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:23668-23684 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24112-24128 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24358-24374 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24807-24823 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:28322-28338 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:28712-28728 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:29156-29172 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:29669-29685 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:29865-29881 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:30115-30131 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:30505-30521 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:30701-30717 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:30960-30976 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:32142-32158 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:32619-32635 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33005-33021 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33145-33161 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33495-33511 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33635-33651 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33775-33791 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38188-38204 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38384-38400 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38635-38651 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:39137-39153 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:39333-39349 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:39585-39601 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:40213-40229 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:40592-40608 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:41956-41972 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42096-42112 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42342-42358 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42482-42498 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42728-42744 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42868-42884 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43114-43130 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43254-43270 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43500-43516 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43640-43656 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43886-43902 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:44026-44042 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:44480-44496 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:44620-44636 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:44816-44832 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:45206-45222 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:45402-45418 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:45648-45664 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:45910-45926 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46106-46122 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46302-46318 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46494-46510 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46690-46706 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":627}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc699560076a4de65922ad9d8b5705589674dba562da42dcb50ac67b5ae3c08b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201317 lines \u00D7 7): embassy-mcxa/src/clocks/periph_helpers.rs:513-529 | embassy-mcxa/src/clocks/periph_helpers.rs:656-671 | embassy-mcxa/src/clocks/periph_helpers.rs:903-919 | embassy-mcxa/src/clocks/periph_helpers.rs:1293-1308 | embassy-mcxa/src/clocks/periph_helpers.rs:1475-1488 | embassy-mcxa/src/clocks/periph_helpers.rs:1653-1667 | embassy-mcxa/src/clocks/periph_helpers.rs:1792-1806 \u2014 all 7 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/periph_helpers.rs"},"region":{"startLine":513}}}],"partialFingerprints":{"codehealthFindingId/v1":"413986095e93b3ec3efa052150808fde6551caefa3ddf8c86da6f57ed21d2d66"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 6): embassy-net-esp-hosted/src/proto/fg/mod.rs:380-396 | embassy-net-esp-hosted/src/proto/fg/mod.rs:8802-8818 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10870-10886 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:11739-11755 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:15583-15599 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:25936-25952 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":380}}}],"partialFingerprints":{"codehealthFindingId/v1":"7143950ca3c5cd0d003e528593caa8bbcf9b8b6c667093c007ef53bfdf1a2c22"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 6): embassy-net-esp-hosted/src/proto/fg/mod.rs:500-516 | embassy-net-esp-hosted/src/proto/fg/mod.rs:940-956 | embassy-net-esp-hosted/src/proto/fg/mod.rs:1305-1321 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:15912-15928 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16352-16368 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16967-16983 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":500}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2ca3ef00feeeedf8ec90272f63d1494a8864bd8ac9fd3b0b184b6c5ef2c93b9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 6): embassy-net-esp-hosted/src/proto/fg/mod.rs:2382-2398 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3620-3636 | embassy-net-esp-hosted/src/proto/fg/mod.rs:9511-9527 | embassy-net-esp-hosted/src/proto/fg/mod.rs:9798-9814 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:36577-36593 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:36864-36880 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":2382}}}],"partialFingerprints":{"codehealthFindingId/v1":"12c433dfbc5f2f21f6fe37a03249b2d5fcf43d36cdb8529edeaff0874a37cd6b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 5): embassy-net-esp-hosted/src/proto/mcu/mod.rs:22766-22782 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:23266-23282 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:27109-27125 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:27733-27749 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:27852-27868 \u2014 all 5 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":22766}}}],"partialFingerprints":{"codehealthFindingId/v1":"60644cd00f583e1ad401998814fde6d8e3648e5b70bc12601ad609151f487685"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 5): embassy-stm32/src/jpeg.rs:238-254 | embassy-stm32/src/jpeg.rs:300-316 | embassy-stm32/src/jpeg.rs:403-419 | embassy-stm32/src/jpeg.rs:546-562 | embassy-stm32/src/jpeg.rs:635-651 \u2014 all 5 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/jpeg.rs"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"a09059ba238576673a4e519d09f6e59c7c039d520d705145254c08a6a24ee01f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 4): embassy-net-esp-hosted/src/proto/fg/mod.rs:9195-9211 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10538-10554 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22005-22021 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22136-22152 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":9195}}}],"partialFingerprints":{"codehealthFindingId/v1":"7bb2aedd52d432c16e854053cfe86a77d2e001e764d4c2fef582035821f1e27b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 4): embassy-net-esp-hosted/src/proto/fg/mod.rs:9662-9678 | embassy-net-esp-hosted/src/proto/fg/mod.rs:9924-9940 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:36728-36744 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:36990-37006 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":9662}}}],"partialFingerprints":{"codehealthFindingId/v1":"7683e499a5e7d0076eb203bcf90307e006b552a2c28ba774b6396365eeaba04a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 4): embassy-net-esp-hosted/src/proto/fg/mod.rs:12052-12068 | embassy-net-esp-hosted/src/proto/fg/mod.rs:12617-12633 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:50248-50264 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:50837-50853 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":12052}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad5d185a9c896a317229c455c178a146ccc324576cc3b78e5e67947fa1d81e2d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 3): embassy-net-esp-hosted/src/proto/fg/mod.rs:6117-6133 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:45304-45320 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46204-46220 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":6117}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf52d6657c4dc878160f74f5fc54266953344e0d0b818ace81e4e86198e93838"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 3): embassy-net-esp-hosted/src/proto/fg/mod.rs:9173-9189 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:4552-4568 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10516-10532 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":9173}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e8bd36b3348395bbb42d7c235b268c9001bb7bbf80c742c6ab34937db8dbf1f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 3): embassy-net-esp-hosted/src/proto/mcu/mod.rs:16623-16639 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16742-16758 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:45108-45124 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":16623}}}],"partialFingerprints":{"codehealthFindingId/v1":"bea0c59187d6b8530ff09ad6223697d86180b120c3748c2385a01aafcf233997"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 3): embassy-net-esp-hosted/src/proto/mcu/mod.rs:27285-27301 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:27726-27742 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:28028-28044 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":27285}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b2fa451d02838df600423b75743883d006c62dda678e7746113efcbf388e3fb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): cyw43/src/lib.rs:506-522 | cyw43/src/lib.rs:542-558 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cyw43/src/lib.rs"},"region":{"startLine":506}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f60ae4d953b0c6bf5b777473992b1eac7f4f52a913e594ace5770d9a1da5759"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): embassy-executor/src/platform/cortex_m.rs:10-26 | embassy-rp/src/executor.rs:22-38 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-executor/src/platform/cortex_m.rs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"30e4792b442148c4acd5542eb367122c732f90a837c771d028ff635f26d1c3d7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15\u201317 lines \u00D7 2): embassy-executor/src/platform/cortex_m.rs:20-34 | embassy-mspm0/src/executor.rs:35-51 \u2014 before extracting anything, compare \u0060embassy-executor/src/platform/cortex_m.rs\u0060 and \u0060embassy-mspm0/src/executor.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 44 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-executor/src/platform/cortex_m.rs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"2933d6593829f7ce9ae5b7b7ab5671216b986e8ffbc41fe6f63448132732284a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13\u201317 lines \u00D7 2): embassy-mcxa/src/i2c/controller.rs:1366-1378 | embassy-mcxa/src/i3c/controller.rs:1315-1331 \u2014 \u0060embassy-mcxa/src/i2c/controller.rs\u0060 and \u0060embassy-mcxa/src/i3c/controller.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 4 separate duplicated blocks between them, totalling at least 73 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/i2c/controller.rs"},"region":{"startLine":1366}}}],"partialFingerprints":{"codehealthFindingId/v1":"0385ac7db07de1e27a6d5b44e140677c45c91380389e4114ce15d0fd91730dac"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:670-686 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16082-16098 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":670}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e3624fec777ba8e2f51f28ca34d62cd2c15f6a3c38d313d0e080c19f0e68f3b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:1348-1364 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17010-17026 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":1348}}}],"partialFingerprints":{"codehealthFindingId/v1":"448caa5c0bcdb3622eec17aa3d28a28e01ccbea86972abea5564fbdd576a2afa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:2091-2107 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3261-3277 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":2091}}}],"partialFingerprints":{"codehealthFindingId/v1":"344513aadb14739f37347d15df89f7501e97fb7488a5047ef8d74881e1ffd3c6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:4370-4386 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17320-17336 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":4370}}}],"partialFingerprints":{"codehealthFindingId/v1":"d633ba2909ed5b8121e5a3abb14e011d48e207a8fef6a3cc08d43214de58720f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:5910-5926 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18520-18536 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":5910}}}],"partialFingerprints":{"codehealthFindingId/v1":"7be38f38aa2f4b3ba6adf416c27cad955283d07e884b4b355277f0bf43fa7b33"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:6866-6882 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24282-24298 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":6866}}}],"partialFingerprints":{"codehealthFindingId/v1":"31fa84ed89c8dae43396239ef7abddf335bcf0125390fca48dc0c778681676fd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:7154-7170 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24570-24586 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":7154}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c6b56181ef543774208b1ca395e6aa1a3118ede42c56fd354f847483ec50cd3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:10840-10856 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48116-48132 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":10840}}}],"partialFingerprints":{"codehealthFindingId/v1":"79a4ed0ea44caf27c54ea8a732703fcb21b2b127909b25a99e9024ad4dd274d6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:2519-2535 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:2903-2919 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":2519}}}],"partialFingerprints":{"codehealthFindingId/v1":"84359e62f1f90f28964272d0d80b3b88967826b6abb8293c80e6b04b200c0e67"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:11203-11219 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:13031-13047 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":11203}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ba73f46b2bff4c227dab55506b8735c4cb049a60b61091b4445a0d84fdad3fb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:13452-13468 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:13606-13622 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":13452}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e7b8e4b0ec5e93b6507e24b6f5fff555c63e821b311533c77c120211cb116ab"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:20920-20936 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21039-21055 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":20920}}}],"partialFingerprints":{"codehealthFindingId/v1":"032f582f7b0f7a168a015a52092102b1a1922b98bb5ed837573b07b502cbf1ed"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:26375-26391 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:40999-41015 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":26375}}}],"partialFingerprints":{"codehealthFindingId/v1":"f15031284504da509efd5f8be5c7c4e3028f457d5e4cdd446acd28dcfe654628"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:26990-27006 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:29254-29270 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":26990}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c8a404c54cc2ab7c614c2db750a3f0b18c60ebf9801178b7164a164bb21560f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:28224-28240 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:28495-28511 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":28224}}}],"partialFingerprints":{"codehealthFindingId/v1":"122e563e62163a19eeae54a4f78a177b31d3b65b6960d350f7bb84059a2d3a22"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:28614-28630 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:28885-28901 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":28614}}}],"partialFingerprints":{"codehealthFindingId/v1":"39b9079c3da76b2f31848198e2067b9647532a369c4a39092c25eeb69239464f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:44718-44734 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:44989-45005 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":44718}}}],"partialFingerprints":{"codehealthFindingId/v1":"6620babe2361a00b658719390743a1d7a63dd6094a7a4064fe865dd24f54f3b6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:46861-46877 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:47379-47395 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":46861}}}],"partialFingerprints":{"codehealthFindingId/v1":"7517408c892896c0e1c18b5aeea5af1e2ad0cce4534b942ae2885934b4742c9e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:47230-47246 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:47748-47764 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":47230}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a54502a728b1ce3294da56a4473b81718f6f2ed2f07f31bc5046058bcd45e58"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): embassy-nrf/src/twis.rs:513-529 | embassy-nrf/src/twis.rs:625-641 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/twis.rs"},"region":{"startLine":513}}}],"partialFingerprints":{"codehealthFindingId/v1":"deedc418ba314b3da61315de1e81b74f10ba7057f981b420efabff5b37f2b545"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): embassy-stm32/src/crypto_driver.rs:475-491 | embassy-stm32/src/crypto_driver.rs:545-561 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/crypto_driver.rs"},"region":{"startLine":475}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b719768ab612494ef474cf902897d0c74bf278390a684169f0fb05e22554398"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): embassy-stm32/src/crypto_driver.rs:505-521 | embassy-stm32/src/crypto_driver.rs:575-591 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/crypto_driver.rs"},"region":{"startLine":505}}}],"partialFingerprints":{"codehealthFindingId/v1":"15bfe56920f2ec8363d770413a3c516f5f6556629f8d29751f277f83c81caec7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): embassy-stm32/src/dma/gpdma/mod.rs:1078-1094 | embassy-stm32/src/dma/gpdma/mod.rs:1122-1138 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/dma/gpdma/mod.rs"},"region":{"startLine":1078}}}],"partialFingerprints":{"codehealthFindingId/v1":"be71518dde802db5c75b80049b06c0ab216e462054cae61e3a5bd9b066fcf977"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): embassy-stm32/src/sdmmc/mod.rs:557-573 | embassy-stm32/src/sdmmc/mod.rs:674-690 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/sdmmc/mod.rs"},"region":{"startLine":557}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5f75c12910c297458c4605fa6c83e9db7cfaf78743380dab81c4e8b9efdebf7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201317 lines \u00D7 2): embassy-stm32/src/sdmmc/mod.rs:1512-1522 | embassy-stm32/src/sdmmc/mod.rs:1899-1915 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/sdmmc/mod.rs"},"region":{"startLine":1512}}}],"partialFingerprints":{"codehealthFindingId/v1":"abf4010a06709ece287c805cf248d26f09ee07c729ab874ce135a78a2127f2c2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): embassy-stm32/src/flash/f0.rs:53-69 | embassy-stm32/src/flash/f1f3.rs:63-79 \u2014 before extracting anything, compare \u0060embassy-stm32/src/flash/f0.rs\u0060 and \u0060embassy-stm32/src/flash/f1f3.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 32 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/f0.rs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"90f19321915173b23c2875114adc4a23a0a7670e7a60f53807a94f178e478ef1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): embassy-usb-host/src/class/ccid.rs:263-279 | embassy-usb-host/src/class/ccid.rs:303-319 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb-host/src/class/ccid.rs"},"region":{"startLine":263}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f9d46c4e99524f5592de81e03e10c91d8afee77e97fe8020d3cfedaf059dae5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): embassy-usb-host/src/class/msc.rs:1221-1237 | embassy-usb-host/src/class/msc.rs:1244-1260 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb-host/src/class/msc.rs"},"region":{"startLine":1221}}}],"partialFingerprints":{"codehealthFindingId/v1":"02a097c694376ade9f5caec87bb9268b5e68e03cdbd1c387c616a8cc514f698c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 8): embassy-net-esp-hosted/src/proto/fg/mod.rs:814-829 | embassy-net-esp-hosted/src/proto/fg/mod.rs:2819-2834 | embassy-net-esp-hosted/src/proto/fg/mod.rs:5708-5723 | embassy-net-esp-hosted/src/proto/fg/mod.rs:10259-10274 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16226-16241 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18318-18333 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:32612-32627 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:40585-40600 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":814}}}],"partialFingerprints":{"codehealthFindingId/v1":"49d9e3f6e282dd56fd085176c4449a805276a7ea03f11e4aeec6e74c71e6d920"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 6): embassy-net-esp-hosted/src/proto/fg/mod.rs:145-160 | embassy-net-esp-hosted/src/proto/fg/mod.rs:8796-8811 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:3342-3357 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10864-10879 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:11988-12003 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:25930-25945 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"7fbdd974f098473660c2403117fef8d368888f81682dd717e2f84704a7e47a32"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 6): embassy-net-esp-hosted/src/proto/fg/mod.rs:2449-2464 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3687-3702 | embassy-net-esp-hosted/src/proto/fg/mod.rs:9614-9629 | embassy-net-esp-hosted/src/proto/fg/mod.rs:9883-9898 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:36680-36695 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:36949-36964 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":2449}}}],"partialFingerprints":{"codehealthFindingId/v1":"e09aceb93f0634a8e729d242d03c6ad25e04dc04e05d3c8efb2b9689bb4d125f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 5): embassy-net-esp-hosted/src/proto/fg/mod.rs:9179-9194 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:3352-3367 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:3596-3611 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:4558-4573 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10522-10537 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":9179}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2c8f25acf75a6af7cb9b9015102071a5660c30b5856f1dd3d80446384a1df67"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 4): embassy-mcxa/src/i2c/controller.rs:362-377 | embassy-mcxa/src/i2c/target.rs:325-340 | embassy-mcxa/src/i3c/controller.rs:343-358 | embassy-mcxa/src/i3c/target.rs:374-389 \u2014 before extracting anything, compare \u0060embassy-mcxa/src/i2c/controller.rs\u0060 and \u0060embassy-mcxa/src/i2c/target.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 77 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/i2c/controller.rs"},"region":{"startLine":362}}}],"partialFingerprints":{"codehealthFindingId/v1":"09e6dbdf33d0ee7ecfbb7703c3e63c9a45be8cbaaef7d338cd5ebc891b0963d3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 3): embassy-executor/src/platform/cortex_m.rs:208-223 | embassy-mspm0/src/executor.rs:223-238 | embassy-stm32/src/executor.rs:249-264 \u2014 before extracting anything, compare \u0060embassy-executor/src/platform/cortex_m.rs\u0060 and \u0060embassy-mspm0/src/executor.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 44 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-executor/src/platform/cortex_m.rs"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"4dd5e29f52ba571d11dd26d626ce7cebc435d022b9d3181db96da6d3c3889aeb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 3): embassy-mcxa/src/spi/controller.rs:553-568 | embassy-mcxa/src/spi/controller.rs:677-692 | embassy-mcxa/src/spi/controller.rs:767-782 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/spi/controller.rs"},"region":{"startLine":553}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fd3d7bd88d513073eff79e503a0d49a7573f8cc3ba33d641964adc596594240"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 3): embassy-nxp/src/i2c/lpc55.rs:160-175 | embassy-nxp/src/spi/lpc55.rs:116-131 | embassy-nxp/src/usart/lpc55.rs:610-625 \u2014 \u0060embassy-nxp/src/spi/lpc55.rs\u0060 and \u0060embassy-nxp/src/usart/lpc55.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 4 separate duplicated blocks between them, totalling at least 48 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nxp/src/i2c/lpc55.rs"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"11bfcc366460028bc5a515ed9f9484218b694ddb1ea1fb9f4db68729c08a87d6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): cyw43/src/bluetooth.rs:578-593 | embassy-net-esp-hosted/src/bluetooth.rs:193-208 \u2014 before extracting anything, compare \u0060cyw43/src/bluetooth.rs\u0060 and \u0060embassy-net-esp-hosted/src/bluetooth.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 55 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cyw43/src/bluetooth.rs"},"region":{"startLine":578}}}],"partialFingerprints":{"codehealthFindingId/v1":"f75960ed16d7da30f017b7da2a613c5a43b7c09a07032434fe7c5cf4b732a62f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): embassy-boot/src/firmware_updater/asynch.rs:113-128 | embassy-boot/src/firmware_updater/blocking.rs:148-163 \u2014 before extracting anything, compare \u0060embassy-boot/src/firmware_updater/asynch.rs\u0060 and \u0060embassy-boot/src/firmware_updater/blocking.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 71 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-boot/src/firmware_updater/asynch.rs"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"83e56f755a2ed45d34b2a30c108f7290c84bea94bc9470cc9d7a35d27b9f9831"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): embassy-boot/src/firmware_updater/asynch.rs:223-238 | embassy-boot/src/firmware_updater/blocking.rs:258-273 \u2014 before extracting anything, compare \u0060embassy-boot/src/firmware_updater/asynch.rs\u0060 and \u0060embassy-boot/src/firmware_updater/blocking.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 71 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-boot/src/firmware_updater/asynch.rs"},"region":{"startLine":223}}}],"partialFingerprints":{"codehealthFindingId/v1":"18557d5a9c686e815e3ec80ca3975ee3efb9399ea8ee2a0f21975c8a8eeb70c2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): embassy-mcxa/src/clocks/operator.rs:565-580 | embassy-mcxa/src/clocks/operator.rs:652-667 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/operator.rs"},"region":{"startLine":565}}}],"partialFingerprints":{"codehealthFindingId/v1":"0dd0abd5491cfa697ec897efe70b09463edba4e050347508cca5ae9337250f1e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15\u201316 lines \u00D7 2): embassy-mcxa/src/i2c/target.rs:912-927 | embassy-mcxa/src/spi/controller.rs:632-646 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/i2c/target.rs"},"region":{"startLine":912}}}],"partialFingerprints":{"codehealthFindingId/v1":"ecdb193032cf788dc434bbdf3e223769ca482f442021043ac13fee74a667186a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): embassy-mcxa/src/lpuart/bbq.rs:542-557 | embassy-mcxa/src/lpuart/bbq.rs:1113-1128 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/lpuart/bbq.rs"},"region":{"startLine":542}}}],"partialFingerprints":{"codehealthFindingId/v1":"a34eb185e3fbc7243fed8fcbab6e0dc03952e4fd8b044da920c7d3f01f6853e1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:1839-1854 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:2635-2650 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":1839}}}],"partialFingerprints":{"codehealthFindingId/v1":"82f1c2106e8c9ad6976ca61516239d85d9b450d13a1dd561d0616bd47978517c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:2208-2223 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3420-3435 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":2208}}}],"partialFingerprints":{"codehealthFindingId/v1":"63f32427029c7912ede98cf15eb652d4c7eed03560666cd80bb9613485af6762"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:5928-5943 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18538-18553 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":5928}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdc4b004270635c7ecc0710fcc8de956b0bc3adb1c4bd4da231617a5b5c47130"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:6884-6899 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24300-24315 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":6884}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b3e15f9aefb9af5dd7b9bbea279e299dc443698e670f923529b51b18c2e3a58"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:7172-7187 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24588-24603 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":7172}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6af979ca28cfad94684f491ce0d874b6d47c167fe0a804d37d149564ab68020"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:8272-8287 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19650-19665 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":8272}}}],"partialFingerprints":{"codehealthFindingId/v1":"93763af9609cf7afc72e303e9adab03a5f9959129a32379e324648fe1e864f80"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:4870-4885 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:5950-5965 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":4870}}}],"partialFingerprints":{"codehealthFindingId/v1":"441301dbee29c18e519443e931df5516ea8bea7256136c2054e056d821746162"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:13470-13485 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:13624-13639 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":13470}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e48e68fb7942d68412159c4c5bac3e621241033b6e2ffd85af57c0dc30d4841"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:30821-30836 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38049-38064 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":30821}}}],"partialFingerprints":{"codehealthFindingId/v1":"4438499363e1cf98521ea07ece3cc5acd2346849a9e82b7b9edb70ee8818a8f3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:35964-35979 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48697-48712 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":35964}}}],"partialFingerprints":{"codehealthFindingId/v1":"f611f5d11dbf3a054189ceabc504ef2dbbc824f39850a65571d491e06e61a240"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:37807-37822 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:39010-39025 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":37807}}}],"partialFingerprints":{"codehealthFindingId/v1":"65465aa7f01689ed41c7736fe6bdbc8aee309544b3ab356efdfabdd2c86b5c3d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:41608-41623 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:41825-41840 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":41608}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b6562ee089b2091e7dc40ea6691e340db9edc17efab2faba5b0fc6c69ba45aa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:46879-46894 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:47397-47412 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":46879}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f59a9593708003f22479a885d24367a21d84d2ff4c18eb29bbf7ef4c0c0fabf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:47248-47263 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:47766-47781 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":47248}}}],"partialFingerprints":{"codehealthFindingId/v1":"793ae1cab9b0557355954bbb565d844ec7dc3b0fb4f1a94c67b769670e7b8a2f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201316 lines \u00D7 2): embassy-nrf/src/crypto/symmetric/aes.rs:424-439 | embassy-nrf/src/crypto/symmetric/chacha.rs:59-70 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/crypto/symmetric/aes.rs"},"region":{"startLine":424}}}],"partialFingerprints":{"codehealthFindingId/v1":"7987cddb4d3602a865efa64dbd922a245294883984451210041178b4767b396d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): embassy-nrf/src/twis.rs:539-554 | embassy-nrf/src/twis.rs:565-580 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/twis.rs"},"region":{"startLine":539}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd5b736afb4a340db44a1b9968d150f381496c158d1d3225580d1a1bfbdb9024"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15\u201316 lines \u00D7 2): embassy-rp/src/i2c.rs:696-710 | embassy-rp/src/i2c_slave.rs:407-422 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/i2c.rs"},"region":{"startLine":696}}}],"partialFingerprints":{"codehealthFindingId/v1":"62c0306cf17cb14399cd8c5c7c08be2cdadd51faaf6cee52ff0e666e1995da4f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): embassy-stm32/src/aes/common.rs:351-366 | embassy-stm32/src/saes/mod.rs:617-632 \u2014 before extracting anything, compare \u0060embassy-stm32/src/aes/common.rs\u0060 and \u0060embassy-stm32/src/saes/mod.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 72 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/aes/common.rs"},"region":{"startLine":351}}}],"partialFingerprints":{"codehealthFindingId/v1":"e64612432cbfc93b290434de95253fa35ac9d160e23fb34281ed5e257c752b7c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): embassy-stm32/src/cordic/mod.rs:471-486 | embassy-stm32/src/cordic/mod.rs:533-548 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/cordic/mod.rs"},"region":{"startLine":471}}}],"partialFingerprints":{"codehealthFindingId/v1":"3be6e2fd96bab933dec81c32e4620c673152ddcdc118997720f059e2686040e5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15\u201316 lines \u00D7 2): embassy-stm32/src/eth/sma/v2.rs:85-100 | embassy-stm32/src/eth/sma/v2.rs:116-130 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/eth/sma/v2.rs"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ac35c516c9bbc8f819f27a3c5bcca3bfe6a78894387368b008f55168372cd92"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): embassy-stm32/src/eth/v1/ptp.rs:144-159 | embassy-stm32/src/eth/v2/ptp.rs:144-159 \u2014 \u0060embassy-stm32/src/eth/v1/ptp.rs\u0060 and \u0060embassy-stm32/src/eth/v2/ptp.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 3 separate duplicated blocks between them, totalling at least 43 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/eth/v1/ptp.rs"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"13e6895602d852b99a4f997ea20ce09e692ca982c4d0e34a2c8aba33bfaaa3d9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): embassy-stm32/src/i2c/v1.rs:511-526 | embassy-stm32/src/i2c/v1.rs:742-757 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i2c/v1.rs"},"region":{"startLine":511}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f92091b1df50bb7ddedc85c9ceece9ef796a6f3f1951f8ecd306e859950d784"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): embassy-stm32/src/i2c/v1.rs:604-619 | embassy-stm32/src/i2c/v1.rs:823-838 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i2c/v1.rs"},"region":{"startLine":604}}}],"partialFingerprints":{"codehealthFindingId/v1":"598a10f00f267624b2f0c1c91482775c5be9a20035fb0ab169ba26e516cd24c0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): embassy-stm32/src/opamp.rs:184-199 | embassy-stm32/src/opamp.rs:309-324 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/opamp.rs"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"d094eb0c5026809ccc898cec0cfed6ab897ad099421a6a85716113ebdb4d400e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): embassy-stm32/src/ospi/mod.rs:952-967 | embassy-stm32/src/xspi/mod.rs:750-765 \u2014 \u0060embassy-stm32/src/ospi/mod.rs\u0060 and \u0060embassy-stm32/src/xspi/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 21 separate duplicated blocks between them, totalling at least 214 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/ospi/mod.rs"},"region":{"startLine":952}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4b8958d95a8080984e5b9b5d528d383affcf1602bdf58740b2ef36a3f3275fe"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): embassy-stm32/src/flash/c.rs:106-121 | embassy-stm32/src/flash/u0.rs:67-82 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/c.rs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"2433b996b7b3c8db32db907f920a1c8e9bf206c292a68e4a0960f8b69a02423d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): embassy-usb-host/src/class/kbd.rs:53-68 | embassy-usb-host/src/class/uac/mod.rs:106-121 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb-host/src/class/kbd.rs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b67c5296aacd69c6ae0aae0c2e6919c71d8f7ff03b54f7b7eaba09eeb24dae0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): embassy-usb-host/src/class/uac/mod.rs:476-491 | embassy-usb-host/src/class/uac/mod.rs:514-529 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb-host/src/class/uac/mod.rs"},"region":{"startLine":476}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b2076b3c56f5611b54fe7d9954a5e7f715e50211e53884ffe5ec72c5475475b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 6): embassy-net-esp-hosted/src/proto/fg/mod.rs:2474-2488 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3712-3726 | embassy-net-esp-hosted/src/proto/fg/mod.rs:9653-9667 | embassy-net-esp-hosted/src/proto/fg/mod.rs:9915-9929 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:36719-36733 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:36981-36995 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":2474}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6e91ab96d7405c41edbe8bba2ce1f9bf11b7ea3a48067826066e580047cdcb0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201315 lines \u00D7 4): embassy-mcxa/src/i2c/controller.rs:1363-1376 | embassy-mcxa/src/i2c/target.rs:909-923 | embassy-mcxa/src/i3c/controller.rs:1312-1325 | embassy-mcxa/src/spi/controller.rs:629-640 \u2014 before extracting anything, compare \u0060embassy-mcxa/src/i2c/controller.rs\u0060 and \u0060embassy-mcxa/src/i2c/target.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 77 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/i2c/controller.rs"},"region":{"startLine":1363}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a1d9fa98ee6274a8ddf23247d0ba64b1ecbac2919adc6626cedeb3a95dc268a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 3): embassy-net-esp-hosted/src/proto/mcu/mod.rs:33926-33940 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:34161-34175 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:34482-34496 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":33926}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f1eabbdcab0cccb7ca7d0511e908dddcf9af02b6e92fdfca6778d3edfc0b66b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201315 lines \u00D7 2): embassy-embedded-hal/src/shared_bus/asynch/spi.rs:74-88 | embassy-embedded-hal/src/shared_bus/asynch/spi.rs:171-182 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-embedded-hal/src/shared_bus/asynch/spi.rs"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"5904e48ab5b9e78b533f22ccd5702f96170fa6cf1ff367e4622f62b739b4a1bb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): embassy-mcxa/src/i3c/controller.rs:935-949 | embassy-mcxa/src/i3c/controller.rs:1119-1133 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/i3c/controller.rs"},"region":{"startLine":935}}}],"partialFingerprints":{"codehealthFindingId/v1":"22e1ba4bb3d883dedc9c9f7a1776aab59947a45a38055e69d0a4272bf75220fb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): embassy-mcxa/src/i3c/controller.rs:1041-1055 | embassy-mcxa/src/i3c/controller.rs:1364-1378 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/i3c/controller.rs"},"region":{"startLine":1041}}}],"partialFingerprints":{"codehealthFindingId/v1":"586cc7ae2c79e38c068b71dcd38eb17f9c0803059481b683bb419cdb1fda8e3b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201315 lines \u00D7 2): embassy-mcxa/src/spi/controller.rs:911-924 | embassy-mcxa/src/spi/controller.rs:956-970 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/spi/controller.rs"},"region":{"startLine":911}}}],"partialFingerprints":{"codehealthFindingId/v1":"da7b7cdf9e848490fef6b0a1083786c29f8c89360bd21cdc7d39615821661af6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:689-703 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16101-16115 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":689}}}],"partialFingerprints":{"codehealthFindingId/v1":"a725c6de81cc170c2411269ec032d8936a812899a7c36ff1d93fb12d5016ee5b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:1367-1381 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17029-17043 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":1367}}}],"partialFingerprints":{"codehealthFindingId/v1":"31a13ce779ba9b50d99892774debed656c8a4e7f34e6aea3bfce5c5f7a009698"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:8346-8360 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19674-19688 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":8346}}}],"partialFingerprints":{"codehealthFindingId/v1":"b065345356ab608543e06761a45bab219ba13adcd247c20798e3db794b48b428"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:20963-20977 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21237-21251 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":20963}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad6a73f86b7e4f0dd75e0e01be1624f674a0c0b3253ae196448842d96b4b6471"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:23594-23608 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:23934-23948 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":23594}}}],"partialFingerprints":{"codehealthFindingId/v1":"c05c87f8c2c13e653de82ec8515557209e64e8301ce0ea789373df0b77186580"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:41639-41653 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:41850-41864 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":41639}}}],"partialFingerprints":{"codehealthFindingId/v1":"10b491366224260ced792ecd5fc65c19d3b3f214fd2cc0937d2675cb1c53efb2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): embassy-nrf/src/buffered_uarte/v1.rs:533-547 | embassy-nrf/src/buffered_uarte/v2.rs:435-449 \u2014 before extracting anything, compare \u0060embassy-nrf/src/buffered_uarte/v1.rs\u0060 and \u0060embassy-nrf/src/buffered_uarte/v2.rs\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 127 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/buffered_uarte/v1.rs"},"region":{"startLine":533}}}],"partialFingerprints":{"codehealthFindingId/v1":"a11edf4159283926428fd8beab5b4bcb48c839f72ecffa892e93eaeced522ef9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): embassy-nrf/src/buffered_uarte/v2.rs:355-369 | embassy-nrf/src/buffered_uarte/v2.rs:544-558 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/buffered_uarte/v2.rs"},"region":{"startLine":355}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6b698a728a7496c5bf920b01c49410264ef9fa6e0fb40fb718fced233471535"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): embassy-nxp/src/i2c/lpc55.rs:329-343 | embassy-nxp/src/i2c/lpc55.rs:574-588 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nxp/src/i2c/lpc55.rs"},"region":{"startLine":329}}}],"partialFingerprints":{"codehealthFindingId/v1":"e419025fa364898db11ad26a5e8ca0acf10cb460a50aa75bdd9ba0580e9ddd2b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201315 lines \u00D7 2): embassy-rp/src/clocks.rs:1437-1450 | embassy-rp/src/clocks.rs:1462-1476 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/clocks.rs"},"region":{"startLine":1437}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d8ad4791fcafc112e8866f7e25fbd25f1d412a382b51df4f79d1281df714c42"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): embassy-rp/src/psram.rs:269-283 | embassy-rp/src/psram.rs:475-489 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/psram.rs"},"region":{"startLine":269}}}],"partialFingerprints":{"codehealthFindingId/v1":"c65e4b1de585ac787b52331d4ddec09564e090e0df135e94ba6e2949f848ed43"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): embassy-stm32/src/adc/v2.rs:88-102 | embassy-stm32/src/adc/v3.rs:146-160 \u2014 before extracting anything, compare \u0060embassy-stm32/src/adc/v2.rs\u0060 and \u0060embassy-stm32/src/adc/v3.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 78 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/adc/v2.rs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fad286e6650d54bedf5ea2554d92d071ce1667dec9630b91fbf7628558c87cd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): embassy-stm32/src/dac/mod.rs:313-327 | embassy-stm32/src/dac/mod.rs:348-362 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/dac/mod.rs"},"region":{"startLine":313}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e902d40e09cc35fbbc682cb45893baf1b7878fb601b0cf158229cbe87a5900c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201315 lines \u00D7 2): embassy-stm32/src/dma/gpdma/mod.rs:982-995 | embassy-stm32/src/dma/gpdma/mod.rs:1052-1066 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/dma/gpdma/mod.rs"},"region":{"startLine":982}}}],"partialFingerprints":{"codehealthFindingId/v1":"49f168d5ce3534f5dcef9ab2e14e1e4bd98ad59ec4431662d78c084076f924fe"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): embassy-stm32/src/eth/v1/ptp.rs:10-24 | embassy-stm32/src/eth/v2/ptp.rs:10-24 \u2014 \u0060embassy-stm32/src/eth/v1/ptp.rs\u0060 and \u0060embassy-stm32/src/eth/v2/ptp.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 3 separate duplicated blocks between them, totalling at least 43 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/eth/v1/ptp.rs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"51bd9418d61e1dd715770f7584100ea43e2ddc7f489c491d7c849cc774c9d9d5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201315 lines \u00D7 2): embassy-stm32/src/i2c/v1.rs:650-664 | embassy-stm32/src/i2c/v1.rs:944-957 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i2c/v1.rs"},"region":{"startLine":650}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0f9c13e023f04d312ed15420b95e6065d761dbaded1395ed2913aba85602385"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): embassy-stm32/src/i2c/v1.rs:1079-1093 | embassy-stm32/src/i2c/v2.rs:1581-1595 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i2c/v1.rs"},"region":{"startLine":1079}}}],"partialFingerprints":{"codehealthFindingId/v1":"e87957d2af77eb9f50d9ce1944ef0063534ef059472f58a0d1350c8aa639663f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): embassy-stm32/src/i3c/controller.rs:75-89 | embassy-stm32/src/i3c/controller.rs:133-147 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i3c/controller.rs"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f915bcead78f398ea586367938c6d7205b008dbb150061f182fd4a8b2ff7c58"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): embassy-stm32/src/sdmmc/mod.rs:597-611 | embassy-stm32/src/sdmmc/mod.rs:710-724 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/sdmmc/mod.rs"},"region":{"startLine":597}}}],"partialFingerprints":{"codehealthFindingId/v1":"49309bc217f274a51af7d1130adc33063734c802b644c6980b728eb5f8817771"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): embassy-stm32/src/spi/mod.rs:1718-1732 | embassy-stm32/src/spi/mod.rs:1784-1798 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/spi/mod.rs"},"region":{"startLine":1718}}}],"partialFingerprints":{"codehealthFindingId/v1":"df2d42bd9c83877b298f35b22adc8cf42761d1bae4dd57d9eccf5846f076da17"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): embassy-stm32/src/usb/otg.rs:117-131 | embassy-stm32/src/usb/otg.rs:155-169 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usb/otg.rs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"23362cee5067645480fa668c22015db5522491e330c277db4258ece2b259e9d3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14\u201315 lines \u00D7 2): embassy-stm32/src/usb/usb_host.rs:649-663 | embassy-stm32/src/usb/usb_host.rs:683-696 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usb/usb_host.rs"},"region":{"startLine":649}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b405239cbc398f52f5a5f5dec9158ebd48f82097cce016ba0aacf0b8ac7b2b6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 148): embassy-net-esp-hosted/src/proto/fg/mod.rs:1034-1047 | embassy-net-esp-hosted/src/proto/fg/mod.rs:1174-1187 | embassy-net-esp-hosted/src/proto/fg/mod.rs:1420-1433 | embassy-net-esp-hosted/src/proto/fg/mod.rs:2378-2391 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3616-3629 | embassy-net-esp-hosted/src/proto/fg/mod.rs:4272-4285 | embassy-net-esp-hosted/src/proto/fg/mod.rs:4464-4477 | embassy-net-esp-hosted/src/proto/fg/mod.rs:4604-4617 | embassy-net-esp-hosted/src/proto/fg/mod.rs:5342-5355 | embassy-net-esp-hosted/src/proto/fg/mod.rs:5538-5551 | embassy-net-esp-hosted/src/proto/fg/mod.rs:5982-5995 | embassy-net-esp-hosted/src/proto/fg/mod.rs:6232-6245 | embassy-net-esp-hosted/src/proto/fg/mod.rs:6510-6523 | embassy-net-esp-hosted/src/proto/fg/mod.rs:6938-6951 | embassy-net-esp-hosted/src/proto/fg/mod.rs:7101-7114 | embassy-net-esp-hosted/src/proto/fg/mod.rs:7740-7753 | embassy-net-esp-hosted/src/proto/fg/mod.rs:8087-8100 | embassy-net-esp-hosted/src/proto/fg/mod.rs:8756-8769 | embassy-net-esp-hosted/src/proto/fg/mod.rs:9139-9152 | embassy-net-esp-hosted/src/proto/fg/mod.rs:9507-9520 | embassy-net-esp-hosted/src/proto/fg/mod.rs:9794-9807 | embassy-net-esp-hosted/src/proto/fg/mod.rs:10744-10757 | embassy-net-esp-hosted/src/proto/fg/mod.rs:10946-10959 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16446-16459 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16609-16622 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16836-16849 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17082-17095 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17222-17235 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17414-17427 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17554-17567 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17694-17707 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17882-17895 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18148-18161 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18592-18605 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18851-18864 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18991-19004 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19305-19318 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19573-19586 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19814-19827 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19954-19967 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20094-20107 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20234-20247 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20603-20616 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20743-20756 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20906-20919 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21157-21170 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21413-21426 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21623-21636 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21763-21776 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21903-21916 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22122-22135 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22344-22357 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22664-22677 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22883-22896 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:23164-23177 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:23383-23396 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:23664-23677 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:23850-23863 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24108-24121 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24354-24367 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24517-24530 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24803-24816 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24991-25004 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:25249-25262 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:25576-25589 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:25728-25741 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:25922-25935 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:26371-26384 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:26605-26618 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:26976-26989 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:27278-27291 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:27719-27732 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:28021-28034 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:28318-28331 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:28481-28494 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:28708-28721 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:28871-28884 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:29152-29165 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:29371-29384 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:29665-29678 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:29861-29874 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:30111-30124 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:30274-30287 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:30501-30514 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:30697-30710 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:30956-30969 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:31282-31295 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:32138-32151 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33001-33014 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33141-33154 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33491-33504 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33631-33644 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33771-33784 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:34141-34154 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:34472-34485 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:34911-34924 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:35732-35745 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:36105-36118 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:36573-36586 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:36860-36873 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:37098-37111 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:37318-37331 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:37538-37551 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38184-38197 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38380-38393 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38631-38644 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38850-38863 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:39133-39146 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:39329-39342 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:39581-39594 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:40209-40222 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:40995-41008 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:41303-41316 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:41511-41524 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:41750-41763 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:41952-41965 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42092-42105 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42338-42351 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42478-42491 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42724-42737 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42864-42877 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43110-43123 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43250-43263 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43496-43509 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43636-43649 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43882-43895 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:44022-44035 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:44476-44489 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:44616-44629 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:44812-44825 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:44975-44988 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:45202-45215 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:45398-45411 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:45644-45657 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:45906-45919 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46102-46115 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46298-46311 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46490-46503 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46686-46699 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46808-46821 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46981-46994 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:47173-47186 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:47326-47339 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:47499-47512 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:47691-47704 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48020-48033 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48225-48238 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48529-48542 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":1034}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b3d3da3200e8fcba3c33bd70711425459eadbd13b4c66eccb032644f82348fb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 10): embassy-net-esp-hosted/src/proto/mcu/mod.rs:9688-9701 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:12744-12757 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22535-22548 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22762-22775 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:23035-23048 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:23262-23275 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:26785-26798 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:27105-27118 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:27528-27541 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:27848-27861 \u2014 all 10 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":9688}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0150406c4e9d931ab2f800bdf857e9ea5b303c504cb8ca3cbb269f331db002c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 9): embassy-net-esp-hosted/src/proto/fg/mod.rs:817-830 | embassy-net-esp-hosted/src/proto/fg/mod.rs:1740-1753 | embassy-net-esp-hosted/src/proto/fg/mod.rs:2822-2835 | embassy-net-esp-hosted/src/proto/fg/mod.rs:5711-5724 | embassy-net-esp-hosted/src/proto/fg/mod.rs:10262-10275 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16229-16242 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18321-18334 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:32615-32628 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:40588-40601 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":817}}}],"partialFingerprints":{"codehealthFindingId/v1":"a041be600e27c89141240868157e0963f4666da7c7353e9e7cb1f65b6ff4b256"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 8): embassy-net-esp-hosted/src/proto/fg/mod.rs:7410-7423 | embassy-net-esp-hosted/src/proto/fg/mod.rs:10188-10201 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19137-19150 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19403-19416 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:31808-31821 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:32236-32249 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:32541-32554 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:40514-40527 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":7410}}}],"partialFingerprints":{"codehealthFindingId/v1":"153425b33ca3b2fea737c20ea5b692f7c38c8d737a57d1d0a2a68c931c5584b9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 7): embassy-net-esp-hosted/src/proto/fg/mod.rs:10629-10642 | embassy-net-esp-hosted/src/proto/fg/mod.rs:10825-10838 | embassy-net-esp-hosted/src/proto/fg/mod.rs:11027-11040 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:9815-9828 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:47902-47915 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48101-48114 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48306-48319 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":10629}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e246b8e1741b731aa70eb732f0565d862db102575e9aa0139c93a290a14c45f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 6): embassy-net-esp-hosted/src/proto/fg/mod.rs:496-509 | embassy-net-esp-hosted/src/proto/fg/mod.rs:807-820 | embassy-net-esp-hosted/src/proto/fg/mod.rs:936-949 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:15908-15921 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16219-16232 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16348-16361 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":496}}}],"partialFingerprints":{"codehealthFindingId/v1":"96adc771d581dfaab45fe3c7ffcdd54173bc8b53844f530711f4386bca36f76e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 6): embassy-net-esp-hosted/src/proto/mcu/mod.rs:38282-38295 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38502-38515 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38729-38742 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:39002-39015 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:39231-39244 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:39450-39463 \u2014 all 6 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":38282}}}],"partialFingerprints":{"codehealthFindingId/v1":"0156feb92eeda6fc2912281c408606caeb3b7610bb7e6c26a2af7c12b1f9f5cd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 5): embassy-net-esp-hosted/src/proto/fg/mod.rs:5107-5120 | embassy-net-esp-hosted/src/proto/fg/mod.rs:5853-5866 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18463-18476 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:45300-45313 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46200-46213 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":5107}}}],"partialFingerprints":{"codehealthFindingId/v1":"01d1f9a8d4cdcf25d3efa5a217e93ef0c70d2659cd9705c52817e6ab61567565"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 5): embassy-net-esp-hosted/src/proto/fg/mod.rs:8773-8786 | embassy-net-esp-hosted/src/proto/fg/mod.rs:9156-9169 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:4541-4554 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10499-10512 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10841-10854 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":8773}}}],"partialFingerprints":{"codehealthFindingId/v1":"4681ea6b72f72e42aac0b21c5d7747680ca07bfa81582ac3d59a2313f9c05207"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 5): embassy-net-esp-hosted/src/proto/fg/mod.rs:9172-9185 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:2486-2499 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:5692-5705 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:9982-9995 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10515-10528 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":9172}}}],"partialFingerprints":{"codehealthFindingId/v1":"e76771853701accb0b7d95f220f60797c9313b694127dd821148be88154225df"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 4): embassy-net-esp-hosted/src/proto/fg/mod.rs:1877-1890 | embassy-net-esp-hosted/src/proto/fg/mod.rs:2239-2252 | embassy-net-esp-hosted/src/proto/fg/mod.rs:2989-3002 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3465-3478 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":1877}}}],"partialFingerprints":{"codehealthFindingId/v1":"e766b82cca416c0ae3b210fb2925fb7a3d5a69f4f6b1681a2607d1ed2a91d104"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 4): embassy-net-esp-hosted/src/proto/mcu/mod.rs:3588-3601 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:7205-7218 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:11604-11617 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:11735-11748 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":3588}}}],"partialFingerprints":{"codehealthFindingId/v1":"72054890b3c6e1c0fd319faa3997c8df208f012c09ae4298c362d5d4092b62f9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 4): embassy-net-esp-hosted/src/proto/mcu/mod.rs:42269-42282 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42655-42668 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43041-43054 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43427-43440 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":42269}}}],"partialFingerprints":{"codehealthFindingId/v1":"1fa2c4e2eeee1c8a396e539d4a4729ee0208817e26ded51b5da6d7367dcda659"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 4): embassy-stm32/src/hspi/mod.rs:364-377 | embassy-stm32/src/ospi/mod.rs:951-964 | embassy-stm32/src/xspi/mod.rs:439-452 | embassy-stm32/src/xspi/mod.rs:749-762 \u2014 \u0060embassy-stm32/src/hspi/mod.rs\u0060 and \u0060embassy-stm32/src/ospi/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 19 separate duplicated blocks between them, totalling at least 220 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hspi/mod.rs"},"region":{"startLine":364}}}],"partialFingerprints":{"codehealthFindingId/v1":"2be1758a38a5458221c8fcf86d57e8221e14eba5415773e6407d5a56ce0c8332"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 3): embassy-net-esp-hosted/src/proto/fg/mod.rs:1862-1875 | embassy-net-esp-hosted/src/proto/fg/mod.rs:2953-2966 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3436-3449 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":1862}}}],"partialFingerprints":{"codehealthFindingId/v1":"795dbbd3a4d9193523a7aeadaa56c775f7834ece392cf7e50c14e3f51d8636cb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 3): embassy-net-esp-hosted/src/proto/fg/mod.rs:2255-2268 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3005-3018 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3481-3494 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":2255}}}],"partialFingerprints":{"codehealthFindingId/v1":"bca9a4515bac5573cec038c5e19634db3ef767cc3174c0e1ac56f8c00c184ad4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 3): embassy-net-esp-hosted/src/proto/fg/mod.rs:9316-9329 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10644-10657 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22182-22195 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":9316}}}],"partialFingerprints":{"codehealthFindingId/v1":"945eb011b13991dc5aee2a8056ccb0a1d2431df07f5f316778f2145f39155900"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 3): embassy-net-esp-hosted/src/proto/fg/mod.rs:9308-9321 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:4893-4906 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10636-10649 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":9308}}}],"partialFingerprints":{"codehealthFindingId/v1":"47caa921f178447405e6ed8abed443b6ed28def949c6f9310d885a3a039c1752"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 3): embassy-stm32/src/i2c/v2.rs:972-985 | embassy-stm32/src/i2c/v2.rs:1101-1114 | embassy-stm32/src/i2c/v2.rs:1511-1524 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i2c/v2.rs"},"region":{"startLine":972}}}],"partialFingerprints":{"codehealthFindingId/v1":"8fc6c9970a403326f98cb8b58f7a211944a05d848c71af441733bf5d2379c76a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-boot/src/boot_loader.rs:113-126 | embassy-boot/src/firmware_updater/blocking.rs:65-78 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-boot/src/boot_loader.rs"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"54588ec0918b06526743f35e27c06788bc5da20795b89bad1648268db66513b4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (3\u201314 lines \u00D7 3): embassy-hal-internal/src/atomic_ring_buffer.rs:255-268 | embassy-hal-internal/src/atomic_ring_buffer.rs:293-306 | embassy-hal-internal/src/atomic_ring_buffer.rs:442-444 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-hal-internal/src/atomic_ring_buffer.rs"},"region":{"startLine":255}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebed020d11307ba2c33a4a3bf1d39785a118c7d295bf9075edaed4edd741e63d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-mcxa/src/ctimer/pwm.rs:284-297 | embassy-mcxa/src/ctimer/pwm.rs:418-431 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/ctimer/pwm.rs"},"region":{"startLine":284}}}],"partialFingerprints":{"codehealthFindingId/v1":"2174ffd2c182b30aa54f2420afdb71ba22d4a7097e23b796b7aca33b77d4734f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-mcxa/src/i2c/target.rs:542-555 | embassy-mcxa/src/i2c/target.rs:1070-1083 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/i2c/target.rs"},"region":{"startLine":542}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a9519a68b1bd209c6b7bc626ac3d2ec9b86ddb6183fde00fced7c0154bc79fe"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-mcxa/src/sgi/mod.rs:594-607 | embassy-mcxa/src/sgi/mod.rs:641-654 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/sgi/mod.rs"},"region":{"startLine":594}}}],"partialFingerprints":{"codehealthFindingId/v1":"22352bcfcdc5ddbea5ca35e99732e8444d5c786cf42c1d50fa7d49fcefe9f993"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-mcxa/src/spi/controller.rs:903-916 | embassy-mcxa/src/spi/controller.rs:1094-1107 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/spi/controller.rs"},"region":{"startLine":903}}}],"partialFingerprints":{"codehealthFindingId/v1":"0da1b071f939047119b9f0147d4ce22d7de4d7a3ef1c403887da5adc60da2ef3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:1701-1714 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:2476-2489 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":1701}}}],"partialFingerprints":{"codehealthFindingId/v1":"f129447a4ebff5558ef238f260327fd46a8a3161b8f213ef7e1498a2db56e94e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:4531-4544 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:5656-5669 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":4531}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a3d0ae5bee6e4d2dc462ae9542e9b94b223fb6c7e08325359e2bf5fab38840e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:4999-5012 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:6065-6078 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":4999}}}],"partialFingerprints":{"codehealthFindingId/v1":"de84ab0efbe77ff9759cf3eb0592a959774030f96c299ebb6208052c0076ed61"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:18050-18063 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18311-18324 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":18050}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e5f3c5dba3b2efdba6114c7f9d4a5bcda25b7a8db569504a836e76f3768cd89"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:20981-20994 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21261-21274 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":20981}}}],"partialFingerprints":{"codehealthFindingId/v1":"cacf95a7f431fb7c757b1415b4d89216c5b0b89e231cd46538c9f7c287f18aa2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:21474-21487 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22405-22418 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":21474}}}],"partialFingerprints":{"codehealthFindingId/v1":"03a87eb46304ea2c989020b154c991b3366425fa3e2dd88edd4f0f506cb62bad"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:21490-21503 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22421-22434 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":21490}}}],"partialFingerprints":{"codehealthFindingId/v1":"5580cbb3a02e3a39601ab076b2a219c8b6930e1362fb6bc175c1b4827fd1f19c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:22595-22608 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22943-22956 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":22595}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3d43c524a7508b697b13e22fb5ed55eec662a1feab0b765268cbf2f4b6517cb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:23095-23108 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:23443-23456 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":23095}}}],"partialFingerprints":{"codehealthFindingId/v1":"ecdbfcb8a621fc0a2a75e03ae8b20a7b19c3b16366b34e684cbe78e776dab284"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:25788-25801 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:26665-26678 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":25788}}}],"partialFingerprints":{"codehealthFindingId/v1":"96eabb76851c47402c1ed3840c9664c3b93294bf419f29b9cecf42fafa9de8fb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:26846-26859 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:27364-27377 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":26846}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e892e40bb168e054f9e1e67071fff065370e9514e5eace16dac679c603cb6d8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:27589-27602 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:28107-28120 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":27589}}}],"partialFingerprints":{"codehealthFindingId/v1":"fedc3ac8b5e9cc5bd6556fd49ec00fc6752051b1f10849246fd24eebb9f12d6e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:29023-29036 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:29250-29263 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":29023}}}],"partialFingerprints":{"codehealthFindingId/v1":"66bb90aa05deb4786467dacf71e51074c9dc4f1b623e75a38025f304fb1d49a5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:29763-29776 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:29982-29995 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":29763}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c465e6c081eb155a991b7cdb3f557798553a8fc61f4f828089526228fc72153"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:38562-38575 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38910-38923 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":38562}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e39e73bfb5c8feb71742e7c82a3a057c0757719232aa832a9f54cfb65d14ed4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-net-esp-hosted/src/rpc/fg.rs:68-81 | embassy-net-esp-hosted/src/rpc/mcu.rs:78-91 \u2014 before extracting anything, compare \u0060embassy-net-esp-hosted/src/rpc/fg.rs\u0060 and \u0060embassy-net-esp-hosted/src/rpc/mcu.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 52 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/rpc/fg.rs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"e12a3672fe3e96c14a789464c612b80c5fc87829cfe2ef4085b6d0c9426bf3ec"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-nrf/src/buffered_uarte/v1.rs:82-95 | embassy-nrf/src/buffered_uarte/v2.rs:76-89 \u2014 before extracting anything, compare \u0060embassy-nrf/src/buffered_uarte/v1.rs\u0060 and \u0060embassy-nrf/src/buffered_uarte/v2.rs\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 127 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/buffered_uarte/v1.rs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f6a7d3d8d591c87fbd54b9a5c3dda02d805730e67732210683d67431fb889c4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13\u201314 lines \u00D7 2): embassy-nrf/src/crypto/rng/cryptocell.rs:144-157 | embassy-nrf/src/rng.rs:127-139 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/crypto/rng/cryptocell.rs"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c02388251eaa127fd37be3cc6ed4fe629b2b27ea2df2f9c1e6e4a69e6e43d4d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-nrf/src/sqspi/mod.rs:649-662 | embassy-nrf/src/sqspi/mod.rs:670-683 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/sqspi/mod.rs"},"region":{"startLine":649}}}],"partialFingerprints":{"codehealthFindingId/v1":"5dc9128ad83b7560e0a560f17085d9ececf85c6687be145f023db184dd6e0242"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-nrf/src/sqspi/mod.rs:702-715 | embassy-nrf/src/sqspi/mod.rs:738-751 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/sqspi/mod.rs"},"region":{"startLine":702}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c156deb928be4321ca198545819431bf17e41a78bb6f43d53acf9444fa7f6b2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-nrf/src/twim.rs:336-349 | embassy-nrf/src/twis.rs:367-380 \u2014 before extracting anything, compare \u0060embassy-nrf/src/twim.rs\u0060 and \u0060embassy-nrf/src/twis.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 85 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/twim.rs"},"region":{"startLine":336}}}],"partialFingerprints":{"codehealthFindingId/v1":"0da3f9ecac84da0c13899a0ca8eea0f9ec3ab695b2279822b1b90bbece99ee16"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-rp/src/flash.rs:473-486 | embassy-rp/src/flash.rs:503-516 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/flash.rs"},"region":{"startLine":473}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1a0b79aec0ab554285bc0893a6c32ed238d4c14029b7a3e1ba7520a4e22f184"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13\u201314 lines \u00D7 2): embassy-stm32/src/aes/v3.rs:134-147 | embassy-stm32/src/cryp/mod.rs:1216-1228 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/aes/v3.rs"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"f267e164297558de8ede9dbec007e65fcccde543167648c32c71bac246dc82c8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7\u201314 lines \u00D7 2): embassy-stm32/src/cryp/mod.rs:1591-1604 | embassy-stm32/src/cryp/mod.rs:1626-1632 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/cryp/mod.rs"},"region":{"startLine":1591}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a666f419d226e209349b4296794918d140c8b3f2a02eea08b47e428b31b64b6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-stm32/src/dfsdm/filter.rs:333-346 | embassy-stm32/src/dfsdm/filter.rs:373-386 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/dfsdm/filter.rs"},"region":{"startLine":333}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba99769cddd2652578ca734b6f9598ccceef91f4e493970e53dc6575325940ce"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13\u201314 lines \u00D7 2): embassy-stm32/src/hspi/mod.rs:815-827 | embassy-stm32/src/hspi/mod.rs:891-904 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hspi/mod.rs"},"region":{"startLine":815}}}],"partialFingerprints":{"codehealthFindingId/v1":"a14f60dd57253faeba89473cdd12042073c8b44aaacc37593a44de3ee144c829"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-stm32/src/i2c/v2.rs:675-688 | embassy-stm32/src/i2c/v2.rs:1334-1347 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i2c/v2.rs"},"region":{"startLine":675}}}],"partialFingerprints":{"codehealthFindingId/v1":"35ed2122139a462c22aa50fc690e5306bb8a7204b7510f51136e323414e29390"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-stm32/src/i2c/v2.rs:1148-1161 | embassy-stm32/src/i2c/v2.rs:1558-1571 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i2c/v2.rs"},"region":{"startLine":1148}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf415816f362a3b9580b623323071d2ae24f9ace9dd1dacb475b0c0df7825450"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-stm32/src/i2c/v2.rs:1977-1990 | embassy-stm32/src/i2c/v2.rs:2010-2023 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i2c/v2.rs"},"region":{"startLine":1977}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf506206e01b808e9c56d81dae9f8b789a100e6a6555d30a6257980c2b94f073"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-stm32/src/ospi/mod.rs:1962-1975 | embassy-stm32/src/ospi/mod.rs:2037-2050 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/ospi/mod.rs"},"region":{"startLine":1962}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb2ceb5e0d9c38bfff686ccfaaf8a305948a6b8ac6f2ae730e94fba925bf112a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-stm32/src/pka/mod.rs:2452-2465 | embassy-stm32/src/pka/mod.rs:2894-2907 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/pka/mod.rs"},"region":{"startLine":2452}}}],"partialFingerprints":{"codehealthFindingId/v1":"43c21e1a640420bd3a6d4617fc0830ec60366a183ed3d406c93528855a8b8414"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-stm32/src/qspi/mod.rs:441-454 | embassy-stm32/src/qspi/mod.rs:474-487 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/qspi/mod.rs"},"region":{"startLine":441}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e32f81cec166032112f7115962ced6449f5db1dac8049b92de4eef447cde6fd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-stm32/src/rcc/u3.rs:346-359 | embassy-stm32/src/rcc/u5.rs:325-338 \u2014 before extracting anything, compare \u0060embassy-stm32/src/rcc/u3.rs\u0060 and \u0060embassy-stm32/src/rcc/u5.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 113 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/u3.rs"},"region":{"startLine":346}}}],"partialFingerprints":{"codehealthFindingId/v1":"37aa2d2a1d524ef10a44b735963a17bd2874524a0c909bdaaeaf00cc54bff8c2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-stm32/src/rcc/u3.rs:474-487 | embassy-stm32/src/rcc/u5.rs:525-538 \u2014 before extracting anything, compare \u0060embassy-stm32/src/rcc/u3.rs\u0060 and \u0060embassy-stm32/src/rcc/u5.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 113 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/u3.rs"},"region":{"startLine":474}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3cf1936ab5e5e7a79488912833afbb174ddfdc544234ca7476615efd1883378"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201314 lines \u00D7 2): embassy-stm32/src/spi/mod.rs:1283-1294 | embassy-stm32/src/spi/mod.rs:1497-1510 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/spi/mod.rs"},"region":{"startLine":1283}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6b518ce3674af5a5f97da9d19f4a7f878106af2f800e282b79208b3d7a7e3d1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-stm32/src/spi/ringbuffered.rs:225-238 | embassy-stm32/src/usart/ringbuffered.rs:316-329 \u2014 \u0060embassy-stm32/src/spi/ringbuffered.rs\u0060 and \u0060embassy-stm32/src/usart/ringbuffered.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 3 separate duplicated blocks between them, totalling at least 32 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/spi/ringbuffered.rs"},"region":{"startLine":225}}}],"partialFingerprints":{"codehealthFindingId/v1":"70e34165b10d4da2a88708b3793e4efed52645e0555b7a5f80f72d324f637f8c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-stm32/src/usart/mod.rs:1737-1750 | embassy-stm32/src/usart/mod.rs:2099-2112 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usart/mod.rs"},"region":{"startLine":1737}}}],"partialFingerprints":{"codehealthFindingId/v1":"33ba55829552d82b00044375db6cf6fb668a341836406504fd979d93c631e0a4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13\u201314 lines \u00D7 2): embassy-stm32/src/xspi/mod.rs:1764-1776 | embassy-stm32/src/xspi/mod.rs:1840-1853 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/xspi/mod.rs"},"region":{"startLine":1764}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a84d19ce3d3694f2748dc697b46c9c0de780d1f0f44711b7e03b839a31aa80e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-stm32/src/flash/c5.rs:318-331 | embassy-stm32/src/flash/h5.rs:192-205 \u2014 before extracting anything, compare \u0060embassy-stm32/src/flash/c5.rs\u0060 and \u0060embassy-stm32/src/flash/h5.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 43 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/c5.rs"},"region":{"startLine":318}}}],"partialFingerprints":{"codehealthFindingId/v1":"23e4530a220a0bc5f8e46819942881a9b8fcad001497b04994c7c8de881e60fc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-usb/src/class/uac1/source.rs:184-197 | embassy-usb/src/class/uac1/speaker.rs:237-250 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb/src/class/uac1/source.rs"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd9dfacc42191a4de7be2a1dd9bb680c9a11c312888109364d94051750aada7d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-usb-host/src/class/uac/mod.rs:895-908 | embassy-usb-host/src/class/uac/mod.rs:932-945 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb-host/src/class/uac/mod.rs"},"region":{"startLine":895}}}],"partialFingerprints":{"codehealthFindingId/v1":"05ea93ae2dba315ef597597ab2df509ea676cabaf685e57811e957ea15915685"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 7): embassy-net-esp-hosted/src/proto/fg/mod.rs:868-880 | embassy-net-esp-hosted/src/proto/fg/mod.rs:5762-5774 | embassy-net-esp-hosted/src/proto/fg/mod.rs:10433-10445 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16280-16292 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18372-18384 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:32786-32798 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:40759-40771 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":868}}}],"partialFingerprints":{"codehealthFindingId/v1":"5aa5e9b22815d1683ab2acc9b50b862483805c83451545b6c4a3624f58129773"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 6): embassy-stm32/src/hspi/mod.rs:786-798 | embassy-stm32/src/hspi/mod.rs:862-874 | embassy-stm32/src/ospi/mod.rs:1933-1945 | embassy-stm32/src/ospi/mod.rs:2008-2020 | embassy-stm32/src/xspi/mod.rs:1735-1747 | embassy-stm32/src/xspi/mod.rs:1811-1823 \u2014 \u0060embassy-stm32/src/hspi/mod.rs\u0060 and \u0060embassy-stm32/src/ospi/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 19 separate duplicated blocks between them, totalling at least 220 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hspi/mod.rs"},"region":{"startLine":786}}}],"partialFingerprints":{"codehealthFindingId/v1":"faaf0668c61f535bdcc55b56980faae01fcdf38cb12b77d25ae0c9b30168dcaa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 5): embassy-net-esp-hosted/src/proto/fg/mod.rs:155-167 | embassy-net-esp-hosted/src/proto/fg/mod.rs:8780-8792 | embassy-net-esp-hosted/src/proto/fg/mod.rs:9163-9175 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10506-10518 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10848-10860 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"5bdcf0b258f7c8c2cdb9e6e6c00bb0f6c7b0a7622ba4e4445f0a847b10c507bb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 5): embassy-net-esp-hosted/src/proto/fg/mod.rs:8887-8899 | embassy-net-esp-hosted/src/proto/fg/mod.rs:9288-9300 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:4880-4892 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10616-10628 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10940-10952 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":8887}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0fad472ce7d25a4db9bcbf1170bdc4088db49ca3f386de6ede19fd271e539bb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 5): embassy-net-esp-hosted/src/proto/fg/mod.rs:9302-9314 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:2645-2657 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:5981-5993 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10067-10079 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10630-10642 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":9302}}}],"partialFingerprints":{"codehealthFindingId/v1":"321b8e55d1fb8d825e8df58b0794f3991e3b72022586bfc1832dd251cfee022a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 4): embassy-net-esp-hosted/src/proto/fg/mod.rs:377-389 | embassy-net-esp-hosted/src/proto/fg/mod.rs:1711-1723 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:6472-6484 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:15580-15592 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":377}}}],"partialFingerprints":{"codehealthFindingId/v1":"067966bcd10b5072ee844b725d6a39fbff34f6c0b8ded648a37a593e0f6e8ebc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 4): embassy-net-esp-hosted/src/proto/mcu/mod.rs:19199-19211 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19660-19672 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:47043-47055 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:47561-47573 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":19199}}}],"partialFingerprints":{"codehealthFindingId/v1":"f430d41aed7c4e509fd318cebafe6afed44336c44a49884d683068f97293979f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 4): embassy-stm32/src/hspi/mod.rs:590-602 | embassy-stm32/src/hspi/mod.rs:683-695 | embassy-stm32/src/xspi/mod.rs:783-795 | embassy-stm32/src/xspi/mod.rs:1248-1260 \u2014 \u0060embassy-stm32/src/hspi/mod.rs\u0060 and \u0060embassy-stm32/src/xspi/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 19 separate duplicated blocks between them, totalling at least 193 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hspi/mod.rs"},"region":{"startLine":590}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fabdf31369382eb0c98c3e752538e22aac2424159a923afc78f1579b927b1c8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): embassy-mcxa/src/ctimer/pwm.rs:204-216 | embassy-mcxa/src/ctimer/pwm.rs:317-329 | embassy-mcxa/src/ctimer/pwm.rs:453-465 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/ctimer/pwm.rs"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb4479bee7f35be878302ecbdd1a31d609e71df7a6cde16f2823d1214b8979ab"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): embassy-nrf/src/nvmc.rs:165-177 | embassy-nrf/src/rramc.rs:212-224 | embassy-nrf/src/rramc.rs:303-315 \u2014 there are 3 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 3 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/nvmc.rs"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"05c297fe7ced51cef40798ab8addb0d72cf26f25d881ed2b60d16e5bdc6d22f5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201313 lines \u00D7 3): embassy-stm32/src/aes/common.rs:511-523 | embassy-stm32/src/aes/v2.rs:355-366 | embassy-stm32/src/saes/mod.rs:731-743 \u2014 before extracting anything, compare \u0060embassy-stm32/src/aes/common.rs\u0060 and \u0060embassy-stm32/src/aes/v2.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 56 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/aes/common.rs"},"region":{"startLine":511}}}],"partialFingerprints":{"codehealthFindingId/v1":"c34e99876dc1edffccecfb8702ebb5bf609c0238a08c7ecf247feba6e6375d65"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): embassy-stm32/src/hspi/mod.rs:439-451 | embassy-stm32/src/ospi/mod.rs:760-772 | embassy-stm32/src/xspi/mod.rs:559-571 \u2014 \u0060embassy-stm32/src/hspi/mod.rs\u0060 and \u0060embassy-stm32/src/ospi/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 19 separate duplicated blocks between them, totalling at least 220 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hspi/mod.rs"},"region":{"startLine":439}}}],"partialFingerprints":{"codehealthFindingId/v1":"a31558ac61ac7bed635aa8e293e74dc5eff1a786945bda1266abe0201e2bb418"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): embassy-stm32/src/hspi/mod.rs:473-485 | embassy-stm32/src/ospi/mod.rs:815-827 | embassy-stm32/src/xspi/mod.rs:612-624 \u2014 \u0060embassy-stm32/src/hspi/mod.rs\u0060 and \u0060embassy-stm32/src/ospi/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 19 separate duplicated blocks between them, totalling at least 220 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hspi/mod.rs"},"region":{"startLine":473}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc032eeb55de1c0fef821efac75a727e3a99c951909055414fbd232ee58c56af"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): embassy-stm32/src/hspi/mod.rs:827-839 | embassy-stm32/src/ospi/mod.rs:1975-1987 | embassy-stm32/src/xspi/mod.rs:1776-1788 \u2014 \u0060embassy-stm32/src/hspi/mod.rs\u0060 and \u0060embassy-stm32/src/ospi/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 19 separate duplicated blocks between them, totalling at least 220 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hspi/mod.rs"},"region":{"startLine":827}}}],"partialFingerprints":{"codehealthFindingId/v1":"aab8dc2a8dfb3d1ca02dc63e4a0fff426fa1f8c0bf7bf4ab61239662d65a2cd7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): embassy-stm32/src/hspi/mod.rs:904-916 | embassy-stm32/src/ospi/mod.rs:2050-2062 | embassy-stm32/src/xspi/mod.rs:1853-1865 \u2014 \u0060embassy-stm32/src/hspi/mod.rs\u0060 and \u0060embassy-stm32/src/ospi/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 19 separate duplicated blocks between them, totalling at least 220 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hspi/mod.rs"},"region":{"startLine":904}}}],"partialFingerprints":{"codehealthFindingId/v1":"049a66e32d26ce68a522e58dbffb763ac897043f0e06673729bcb54b84f91d3e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): embassy-stm32/src/i2c/v1.rs:604-616 | embassy-stm32/src/i2c/v1.rs:823-835 | embassy-stm32/src/i2c/v1.rs:885-897 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i2c/v1.rs"},"region":{"startLine":604}}}],"partialFingerprints":{"codehealthFindingId/v1":"55f2664099c578930f4c80677bf1e35d9cb7b2e8ab23427e6de6ebfb51f268c8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): embassy-stm32/src/i3c/controller.rs:96-108 | embassy-stm32/src/i3c/controller.rs:115-127 | embassy-stm32/src/i3c/controller.rs:154-166 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i3c/controller.rs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"65fdf31599b5a7faeb599ffc7a3a063c7f334fd871d610f51fdca9c3fe16ba96"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): embassy-stm32/src/rcc/f013.rs:194-206 | embassy-stm32/src/rcc/f247.rs:190-202 | embassy-stm32/src/rcc/g4.rs:136-148 \u2014 before extracting anything, compare \u0060embassy-stm32/src/rcc/f013.rs\u0060 and \u0060embassy-stm32/src/rcc/f247.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 33 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/f013.rs"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ca70b7d499963718bd559703b2d8c0f9e3b12daf1d2bae63a244c224da4e9c1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): embassy-stm32/src/flash/f2.rs:68-80 | embassy-stm32/src/flash/f4.rs:139-151 | embassy-stm32/src/flash/f7.rs:55-67 \u2014 before extracting anything, compare \u0060embassy-stm32/src/flash/f2.rs\u0060 and \u0060embassy-stm32/src/flash/f4.rs\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 105 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/f2.rs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"6365d3c0ec3fa07fc15265077874b343e5876f9946701947085728ee11ae8f42"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): embassy-usb-host/src/class/cdc_acm.rs:195-207 | embassy-usb-host/src/class/msc.rs:719-731 | embassy-usb-host/src/class/vcp/cp210x.rs:648-660 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 3 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb-host/src/class/cdc_acm.rs"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"401602021ebb21950960be77d658c2ec0fddfd315e04d099b5af4b4b663b2185"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): embassy-usb-host/src/descriptor.rs:190-202 | embassy-usb-host/src/descriptor.rs:252-264 | embassy-usb-host/src/descriptor.rs:329-341 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb-host/src/descriptor.rs"},"region":{"startLine":190}}}],"partialFingerprints":{"codehealthFindingId/v1":"42cc191ba80d9d4324b4c574916e369196e0d58d2479918b4902bf9f7bfe9775"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-boot/src/firmware_updater/asynch.rs:95-107 | embassy-boot/src/firmware_updater/blocking.rs:130-142 \u2014 before extracting anything, compare \u0060embassy-boot/src/firmware_updater/asynch.rs\u0060 and \u0060embassy-boot/src/firmware_updater/blocking.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 71 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-boot/src/firmware_updater/asynch.rs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"3aa3ec0d007d0e00c3fcfd977efc65aef71e1e2110449ef00ddf75bb2fbfd4bb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-imxrt/src/flexcomm/spi.rs:309-321 | embassy-imxrt/src/flexcomm/spi.rs:493-505 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-imxrt/src/flexcomm/spi.rs"},"region":{"startLine":309}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5465c767bc26c13f25eabaa051bcd95ae1ace4625090618e0ef6f9d5fee2ccb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u201313 lines \u00D7 2): embassy-mcxa/src/i2c/controller.rs:1252-1259 | embassy-mcxa/src/i2c/target.rs:814-826 \u2014 before extracting anything, compare \u0060embassy-mcxa/src/i2c/controller.rs\u0060 and \u0060embassy-mcxa/src/i2c/target.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 77 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/i2c/controller.rs"},"region":{"startLine":1252}}}],"partialFingerprints":{"codehealthFindingId/v1":"c715a678472e5e8aa75a7a2964f16b3331bfeb029a421f508a2d044ad068c79b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-mcxa/src/i3c/controller.rs:634-646 | embassy-mcxa/src/i3c/controller.rs:1502-1514 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/i3c/controller.rs"},"region":{"startLine":634}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2c4ff47a33b9b5cc3a9ff1f4605404c74b6db5dcc390e9fa72691f0a375e604"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-mcxa/src/i3c/controller.rs:1336-1348 | embassy-mcxa/src/spi/controller.rs:652-664 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/i3c/controller.rs"},"region":{"startLine":1336}}}],"partialFingerprints":{"codehealthFindingId/v1":"51554d0e68be110204ba3a1f35ed4ab4c0371c4897abb272eb3ce6a3504d822d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-mcxa/src/spi/controller.rs:257-269 | embassy-mcxa/src/spi/controller.rs:358-370 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/spi/controller.rs"},"region":{"startLine":257}}}],"partialFingerprints":{"codehealthFindingId/v1":"59bbf5345dcc5ab99b36ec6880f5b03c1aa0540b029df668dfcdc6521b13b432"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201313 lines \u00D7 2): embassy-mspm0/src/i2c.rs:1072-1084 | embassy-mspm0/src/i2c_target.rs:218-229 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/i2c.rs"},"region":{"startLine":1072}}}],"partialFingerprints":{"codehealthFindingId/v1":"35c009761ea57a65189b7aa4e661ce26d52221aa25edc71397cbb2c495072571"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-mspm0/src/i2c_target.rs:111-123 | embassy-mspm0/src/i2c_target.rs:131-143 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/i2c_target.rs"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f38e916efd38d8674e1d9510e6c6c0567d850b8866c2b492076e328c89020b1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-mspm0/src/uart/buffered.rs:822-834 | embassy-rp/src/uart/buffered.rs:329-341 \u2014 before extracting anything, compare \u0060embassy-mspm0/src/uart/buffered.rs\u0060 and \u0060embassy-rp/src/uart/buffered.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 34 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/uart/buffered.rs"},"region":{"startLine":822}}}],"partialFingerprints":{"codehealthFindingId/v1":"40cdea596a44f411da6f48450ac76bc67a68ab79051e0a25aadc32314d65d1c7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:427-439 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:15630-15642 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":427}}}],"partialFingerprints":{"codehealthFindingId/v1":"51b1ec2a15b19bf8c8de08c2e47d01858a830e5fe53c3222d1bc67968780f3e2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:882-894 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16294-16306 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":882}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ec4bb0a51a045ec7fa5237ba84a726bf37085dcd745010f2c240533fcef379a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:3928-3940 | embassy-net-esp-hosted/src/proto/fg/mod.rs:4157-4169 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":3928}}}],"partialFingerprints":{"codehealthFindingId/v1":"0968d945a93a31d5243191f0297c31c55c1f1d81daac5ce578cc09feb8cc3b80"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:3448-3460 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:3665-3677 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":3448}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0d85c2d0100d1e724de7e24d50266bc510f9329c4b80dbc4faa6ffe5a48c91b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:4887-4899 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:7655-7667 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":4887}}}],"partialFingerprints":{"codehealthFindingId/v1":"09a14b7b46cd9373e702a1fe7a1b5a5815a67364816d7bb46cff46d0ff92bfb5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:23613-23625 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:23959-23971 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":23613}}}],"partialFingerprints":{"codehealthFindingId/v1":"eea1d36941e6f8bf82d29f96542c2ec67ccd89b34a723ebb9b228e422b6598bd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:25806-25818 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:26683-26695 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":25806}}}],"partialFingerprints":{"codehealthFindingId/v1":"efaf2caf45e0b3f6b287e7b23ff95f5d6cfc91118aa5b3dcfbb2bc4d997c257f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:41124-41136 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:41834-41846 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":41124}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5bae537b1cb61965cc69bd47247285042715d7a09dcb8324c7c420ba7103872"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-net-nrf91/src/context.rs:181-193 | embassy-net-nrf91/src/context.rs:199-211 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-nrf91/src/context.rs"},"region":{"startLine":181}}}],"partialFingerprints":{"codehealthFindingId/v1":"c818b6f53bf038bb8c1996b10497b02c875cd63d6c3615a11a6654956e16f8f9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-nrf/src/buffered_uarte/v1.rs:481-493 | embassy-nrf/src/buffered_uarte/v2.rs:383-395 \u2014 before extracting anything, compare \u0060embassy-nrf/src/buffered_uarte/v1.rs\u0060 and \u0060embassy-nrf/src/buffered_uarte/v2.rs\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 127 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/buffered_uarte/v1.rs"},"region":{"startLine":481}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f9a1c1ba095fb09a970469a5a6fdae18f4d3eb6fa06332f991947e9e646410c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-nrf/src/buffered_uarte/v1.rs:555-567 | embassy-nrf/src/buffered_uarte/v2.rs:457-469 \u2014 before extracting anything, compare \u0060embassy-nrf/src/buffered_uarte/v1.rs\u0060 and \u0060embassy-nrf/src/buffered_uarte/v2.rs\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 127 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/buffered_uarte/v1.rs"},"region":{"startLine":555}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fe9b56eea0b2cbc1cbbef4a6985031c3f19b952251c6cd52d0a6f7a46d7186f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-nrf/src/spim.rs:635-647 | embassy-nrf/src/spis.rs:545-557 \u2014 before extracting anything, compare \u0060embassy-nrf/src/spim.rs\u0060 and \u0060embassy-nrf/src/spis.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 34 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/spim.rs"},"region":{"startLine":635}}}],"partialFingerprints":{"codehealthFindingId/v1":"34c495120a8a79af3b460d274c7a7ad8a89743f622f6faa7f9cddca36de05334"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-nrf/src/uarte.rs:492-504 | embassy-nrf/src/uarte.rs:614-626 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/uarte.rs"},"region":{"startLine":492}}}],"partialFingerprints":{"codehealthFindingId/v1":"39cc4b9778248bfe1ae1d5caf9cd7be3d850d2fa76bd327237859d810a24c923"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201313 lines \u00D7 2): embassy-nrf/src/usb/usbhs.rs:353-363 | embassy-stm32/src/usb/otg.rs:1049-1061 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/usb/usbhs.rs"},"region":{"startLine":353}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1e6ad2842cf45e39fdaf4645793c9cfa11f4ea5fca4590adb20f46d1a7bff72"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201313 lines \u00D7 2): embassy-rp/src/clocks.rs:240-251 | embassy-rp/src/clocks.rs:259-271 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/clocks.rs"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7fb51269ca8492dee9ffa0bdbc330137d0eb63296193242b35e57607f762bdc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-rp/src/uart/mod.rs:496-508 | embassy-rp/src/uart/mod.rs:664-676 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/uart/mod.rs"},"region":{"startLine":496}}}],"partialFingerprints":{"codehealthFindingId/v1":"e826c71e3f769a1cbc4570095746594bbabce9949a4208615fa2d60d3a065f2b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-stm32/src/adc/v2.rs:644-656 | embassy-stm32/src/adc/v3.rs:668-680 \u2014 before extracting anything, compare \u0060embassy-stm32/src/adc/v2.rs\u0060 and \u0060embassy-stm32/src/adc/v3.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 78 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/adc/v2.rs"},"region":{"startLine":644}}}],"partialFingerprints":{"codehealthFindingId/v1":"f29ec29bebacffb349b4faf4f221d184f1825a086acfa711a0a29779f53087a9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-stm32/src/aes/common.rs:496-508 | embassy-stm32/src/saes/mod.rs:716-728 \u2014 before extracting anything, compare \u0060embassy-stm32/src/aes/common.rs\u0060 and \u0060embassy-stm32/src/saes/mod.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 72 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/aes/common.rs"},"region":{"startLine":496}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9b6a229170d8642aaef59b1570b546dc896633abf28769d89e7f588989500a2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201313 lines \u00D7 2): embassy-stm32/src/aes/common.rs:494-506 | embassy-stm32/src/aes/v2.rs:342-351 \u2014 before extracting anything, compare \u0060embassy-stm32/src/aes/common.rs\u0060 and \u0060embassy-stm32/src/aes/v2.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 56 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/aes/common.rs"},"region":{"startLine":494}}}],"partialFingerprints":{"codehealthFindingId/v1":"0616c8a3d7bdd63eaa0502da18ffe3a09d132a562e4f597f55e2bcf2bc80f1bf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-stm32/src/can/fdcan.rs:861-873 | embassy-stm32/src/can/fdcan.rs:878-890 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/can/fdcan.rs"},"region":{"startLine":861}}}],"partialFingerprints":{"codehealthFindingId/v1":"05a77bd4a9c9a56aa7d4e77a834e21333874d0c3faa6328ede0130fbdc6adc25"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-stm32/src/cryp/mod.rs:954-966 | embassy-stm32/src/cryp/mod.rs:1554-1566 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/cryp/mod.rs"},"region":{"startLine":954}}}],"partialFingerprints":{"codehealthFindingId/v1":"892378ab2ec4055c63329533d561a815a0e11e689910dba898f21b49d38cfdd3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-stm32/src/dma/ringbuffer/mod.rs:213-225 | embassy-stm32/src/dma/ringbuffer/mod.rs:473-485 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/dma/ringbuffer/mod.rs"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c2c76cab79694c1117ccaf2d6e69aa37111f2a889cede4275fed2b6b621fe10"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-stm32/src/i2c/v1.rs:566-578 | embassy-stm32/src/i2c/v1.rs:798-810 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i2c/v1.rs"},"region":{"startLine":566}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea473d8cbc9f7dec4ae01abbdeed85878c0e1d866a6a752fb2704830c97520ef"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-stm32/src/i2c/v1.rs:1346-1358 | embassy-stm32/src/i2c/v1.rs:1365-1377 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i2c/v1.rs"},"region":{"startLine":1346}}}],"partialFingerprints":{"codehealthFindingId/v1":"2897905e3aa69e0f37611864165a4a7c2eb98bf4e651a2eadac05b79149eaef3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-stm32/src/i2c/v1.rs:1709-1721 | embassy-stm32/src/i2c/v1.rs:1743-1755 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i2c/v1.rs"},"region":{"startLine":1709}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e2387c5267891b45df5d0d02ccf0ce1aeaab159d903732b00d7e378d912b850"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-stm32/src/jpeg.rs:471-483 | embassy-stm32/src/jpeg.rs:689-701 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/jpeg.rs"},"region":{"startLine":471}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9cbf354e207b3c7cd65b66f715ddfd80b97d62f038fbd49aff486fbc4bf950d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-stm32/src/ospi/mod.rs:341-353 | embassy-stm32/src/xspi/mod.rs:271-283 \u2014 \u0060embassy-stm32/src/ospi/mod.rs\u0060 and \u0060embassy-stm32/src/xspi/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 21 separate duplicated blocks between them, totalling at least 214 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/ospi/mod.rs"},"region":{"startLine":341}}}],"partialFingerprints":{"codehealthFindingId/v1":"df9403982f2f63e9bd1faab2edb18542a060de3c13538037dabc678f074c87f4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-stm32/src/rcc/g0.rs:294-306 | embassy-stm32/src/rcc/g4.rs:300-312 \u2014 before extracting anything, compare \u0060embassy-stm32/src/rcc/g0.rs\u0060 and \u0060embassy-stm32/src/rcc/g4.rs\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 63 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/g0.rs"},"region":{"startLine":294}}}],"partialFingerprints":{"codehealthFindingId/v1":"eabf4233515d0824669faace5ac32b802e6f1c913e8c6be7bfee008bb40aade2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-stm32/src/rcc/u5.rs:493-505 | embassy-stm32/src/rcc/wba.rs:402-414 \u2014 before extracting anything, compare \u0060embassy-stm32/src/rcc/u5.rs\u0060 and \u0060embassy-stm32/src/rcc/wba.rs\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 81 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/u5.rs"},"region":{"startLine":493}}}],"partialFingerprints":{"codehealthFindingId/v1":"54c5f07b1ac37e63605dd66fbdb03f414ce4750eeb24dd620493671e45cd6d7d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-stm32/src/sdmmc/mod.rs:1263-1275 | embassy-stm32/src/sdmmc/mod.rs:1334-1346 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/sdmmc/mod.rs"},"region":{"startLine":1263}}}],"partialFingerprints":{"codehealthFindingId/v1":"3986d6f76aafb0fe81edae8217b41bd4fe31990d8f4d8b4b018c93a2b2ac3835"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-stm32/src/sdmmc/sd.rs:675-687 | embassy-stm32/src/sdmmc/sd.rs:753-765 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/sdmmc/sd.rs"},"region":{"startLine":675}}}],"partialFingerprints":{"codehealthFindingId/v1":"153782333cf2185c18fdd36240abfe68d2a911a3a979934598dd379baca8d6f2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-stm32/src/spi/mod.rs:877-889 | embassy-stm32/src/spi/mod.rs:901-913 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/spi/mod.rs"},"region":{"startLine":877}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f892e2aea44e8f7b0f655dcc8eb95572868179c2650e8409a41f701a6ef7887"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12\u201313 lines \u00D7 2): embassy-stm32/src/spi/mod.rs:1571-1583 | embassy-stm32/src/spi/mod.rs:1662-1673 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/spi/mod.rs"},"region":{"startLine":1571}}}],"partialFingerprints":{"codehealthFindingId/v1":"568788e63a8398a36323f1f7de31bf492b758aabc84e4feed2bdeb8dd2ebc37a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-stm32/src/usb/usb.rs:915-927 | embassy-stm32/src/usb/usb.rs:1014-1026 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usb/usb.rs"},"region":{"startLine":915}}}],"partialFingerprints":{"codehealthFindingId/v1":"5cd02b25e93b9e4e992178d17b3060de9e1300c5d82f7850c05f1a95a1ec0c8e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-stm32/src/flash/h7.rs:92-104 | embassy-stm32/src/flash/h7.rs:138-150 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/h7.rs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ee027a9d8cad8bf8c26c5d6eb025e990a06f63d3698663744149a4b83bb1da8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 54): embassy-net-esp-hosted/src/proto/fg/mod.rs:716-727 | embassy-net-esp-hosted/src/proto/fg/mod.rs:1106-1117 | embassy-net-esp-hosted/src/proto/fg/mod.rs:1492-1503 | embassy-net-esp-hosted/src/proto/fg/mod.rs:2508-2519 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3746-3757 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3975-3986 | embassy-net-esp-hosted/src/proto/fg/mod.rs:4204-4215 | embassy-net-esp-hosted/src/proto/fg/mod.rs:4536-4547 | embassy-net-esp-hosted/src/proto/fg/mod.rs:5610-5621 | embassy-net-esp-hosted/src/proto/fg/mod.rs:6304-6315 | embassy-net-esp-hosted/src/proto/fg/mod.rs:7010-7021 | embassy-net-esp-hosted/src/proto/fg/mod.rs:7812-7823 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16128-16139 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16518-16529 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17154-17165 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17486-17497 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17626-17637 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17766-17777 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18220-18231 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18923-18934 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19746-19757 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19886-19897 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20026-20037 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20166-20177 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20675-20686 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20815-20826 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21294-21305 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21555-21566 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21695-21706 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21835-21846 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22225-22236 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:23736-23747 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24426-24437 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24875-24886 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:25133-25144 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:25485-25496 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:25831-25842 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:26514-26525 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:28390-28401 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:28780-28791 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:30183-30194 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:31028-31039 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33073-33084 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33563-33574 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33703-33714 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:41884-41895 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42024-42035 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42410-42421 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42796-42807 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43182-43193 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43568-43579 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43954-43965 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:44548-44559 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:44884-44895 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":716}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6ce790e31c0498d6af839ab4ea248dc980147a99c0ea1203c68eb99c7ecb2d9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 8): embassy-net-esp-hosted/src/proto/fg/mod.rs:867-878 | embassy-net-esp-hosted/src/proto/fg/mod.rs:2982-2993 | embassy-net-esp-hosted/src/proto/fg/mod.rs:5761-5772 | embassy-net-esp-hosted/src/proto/fg/mod.rs:10432-10443 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16279-16290 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18371-18382 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:32785-32796 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:40758-40769 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":867}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce72fa07fa1530bad99882caa87d658ffc9a346ee76cac8da1d613d48f9b6e10"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 7): embassy-net-esp-hosted/src/proto/fg/mod.rs:886-897 | embassy-net-esp-hosted/src/proto/fg/mod.rs:5780-5791 | embassy-net-esp-hosted/src/proto/fg/mod.rs:10499-10510 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16298-16309 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18390-18401 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:32852-32863 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:40825-40836 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":886}}}],"partialFingerprints":{"codehealthFindingId/v1":"e842a081a9ad4bda3840d268485e5ff1937711d9cf5541860f04b1f2cd4958eb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 7): embassy-net-esp-hosted/src/proto/fg/mod.rs:10648-10659 | embassy-net-esp-hosted/src/proto/fg/mod.rs:10850-10861 | embassy-net-esp-hosted/src/proto/fg/mod.rs:11052-11063 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:9852-9863 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:47921-47932 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48126-48137 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48331-48342 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":10648}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9e90c31690975d8a1009c7eeb2dc0a4f69fd2693d291cd021fc7d59843ea1a3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 5): embassy-net-esp-hosted/src/proto/fg/mod.rs:246-257 | embassy-net-esp-hosted/src/proto/fg/mod.rs:8908-8919 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:3442-3453 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10961-10972 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:12130-12141 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":246}}}],"partialFingerprints":{"codehealthFindingId/v1":"529f961fe8dbc811f13f27da9abc5c4c3d0e34e1c3ecab2a966ca85420c4d362"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 4): embassy-net-esp-hosted/src/proto/fg/mod.rs:165-176 | embassy-net-esp-hosted/src/proto/fg/mod.rs:1732-1743 | embassy-net-esp-hosted/src/proto/fg/mod.rs:2784-2795 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3285-3296 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"0462a6e4ffc72ffd8f5309a304babb28ab188261e3243d0df636a04a8d961aa0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 4): embassy-net-esp-hosted/src/proto/fg/mod.rs:426-437 | embassy-net-esp-hosted/src/proto/fg/mod.rs:1849-1860 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:6539-6550 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:15629-15640 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":426}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2af10d391b9eec84f2c67ce76e1ffd7aa6d1bbf69d1bcbb4249ed4dd258e432"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 4): embassy-net-esp-hosted/src/proto/fg/mod.rs:1926-1937 | embassy-net-esp-hosted/src/proto/fg/mod.rs:2282-2293 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3050-3061 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3520-3531 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":1926}}}],"partialFingerprints":{"codehealthFindingId/v1":"880124a734118d0fea67577d756169e2d25349c9c6bdab7253bdede4249839bb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 4): embassy-net-esp-hosted/src/proto/mcu/mod.rs:27033-27044 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:27355-27366 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:27776-27787 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:28098-28109 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":27033}}}],"partialFingerprints":{"codehealthFindingId/v1":"5233e74919918d77ca74204bb97990213ddd06a8ed6e2cce2287132b0a67c2a9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 4): embassy-net-esp-hosted/src/proto/mcu/mod.rs:42288-42299 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42674-42685 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43060-43071 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43446-43457 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":42288}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e191ca2c9c97aeb969a725bcd46c2c163547fdd9632106a8fc3f84be794e89d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 4): embassy-nxp/src/casper/lpc55.rs:317-328 | embassy-nxp/src/casper/lpc55.rs:379-390 | embassy-nxp/src/casper/lpc55.rs:414-425 | embassy-nxp/src/casper/lpc55.rs:449-460 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nxp/src/casper/lpc55.rs"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"249e3cb1e56b6ff13630989fac21e8139d0ecfc6162d8fbc34ed5ec3428a7082"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): embassy-mcxa/src/spi/controller.rs:304-315 | embassy-mcxa/src/spi/controller.rs:981-992 | embassy-mcxa/src/spi/controller.rs:1180-1191 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/spi/controller.rs"},"region":{"startLine":304}}}],"partialFingerprints":{"codehealthFindingId/v1":"35973bc1e1d6f6430851313f1b56ae9f79baab78c05609df4711cf9d995793fb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): embassy-net-esp-hosted/src/proto/fg/mod.rs:1913-1924 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3019-3030 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3495-3506 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":1913}}}],"partialFingerprints":{"codehealthFindingId/v1":"246fea5e57a46ecc4591dcd865635dc7c9428c08e98f3432ee663f03ce849a86"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): embassy-net-esp-hosted/src/proto/fg/mod.rs:9365-9376 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10687-10698 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22201-22212 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":9365}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d32460426f8f6cd87c340b160d01727b1b633226ab04471fd3af2a42f37176d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): embassy-net-esp-hosted/src/proto/fg/mod.rs:9358-9369 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:5019-5030 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10680-10691 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":9358}}}],"partialFingerprints":{"codehealthFindingId/v1":"c56178b5091d4d05965e5bfe9cd85f1205d77636924c563bacdef17240bf8cda"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): embassy-net-esp-hosted/src/proto/mcu/mod.rs:22179-22190 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:25785-25796 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:26662-26673 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":22179}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8bfd823c19f18b2622d1e9cc35aa86fb8e95f5443efd1110dad6b9c934296d8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201312 lines \u00D7 3): embassy-stm32/src/aes/common.rs:361-372 | embassy-stm32/src/aes/v2.rs:270-280 | embassy-stm32/src/saes/mod.rs:627-638 \u2014 before extracting anything, compare \u0060embassy-stm32/src/aes/common.rs\u0060 and \u0060embassy-stm32/src/aes/v2.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 56 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/aes/common.rs"},"region":{"startLine":361}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2bff0e01f94332425857e56debd3d094abdeb3bca308e0bbee12f5ca6767229"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): embassy-stm32/src/dcmipp.rs:610-621 | embassy-stm32/src/dcmipp.rs:818-829 | embassy-stm32/src/dcmipp.rs:1153-1164 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/dcmipp.rs"},"region":{"startLine":610}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b9e999f6fca8b1cf9a7b62ede099f0b6b68c6325b1a72a6be53c2511709e69b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): embassy-stm32/src/hspi/mod.rs:69-80 | embassy-stm32/src/ospi/mod.rs:112-126 | embassy-stm32/src/xspi/mod.rs:65-79 \u2014 \u0060embassy-stm32/src/hspi/mod.rs\u0060 and \u0060embassy-stm32/src/ospi/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 19 separate duplicated blocks between them, totalling at least 220 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hspi/mod.rs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b8f10ead3c23d4e14d10e6f9b49accca79b649171b36fa22e6e232cd710cbc7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201312 lines \u00D7 3): embassy-stm32/src/spi/ringbuffered.rs:201-211 | embassy-stm32/src/spi/ringbuffered.rs:257-268 | embassy-stm32/src/usart/ringbuffered.rs:261-271 \u2014 \u0060embassy-stm32/src/spi/ringbuffered.rs\u0060 and \u0060embassy-stm32/src/usart/ringbuffered.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 3 separate duplicated blocks between them, totalling at least 32 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/spi/ringbuffered.rs"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"aceb162eb211b188fa2855fad7d468471ff001fb58169dfd0db831a5f5bd4827"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): embassy-stm32/src/flash/h5.rs:69-80 | embassy-stm32/src/flash/h7.rs:93-104 | embassy-stm32/src/flash/h7.rs:139-150 \u2014 there are 3 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 3 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/h5.rs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ae61ef0edffff67cee1c2f843652657d3ab1bf71ddc9d6b50fe9d7bac19aab8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): cyw43/src/bluetooth.rs:564-575 | embassy-net-esp-hosted/src/bluetooth.rs:179-190 \u2014 before extracting anything, compare \u0060cyw43/src/bluetooth.rs\u0060 and \u0060embassy-net-esp-hosted/src/bluetooth.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 55 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cyw43/src/bluetooth.rs"},"region":{"startLine":564}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb669d8ff3ab708b8e19b3ee9a2a6ad87c1e66484be69f93c5172b27f79e059b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): embassy-ambiq/src/i2c.rs:213-224 | embassy-ambiq/src/i2c.rs:247-258 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-ambiq/src/i2c.rs"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ab2327947889da9cadb423a8d864d3ffd1fa1fea2ab7f686b28508a2a543317"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): embassy-crypto-test/src/lib.rs:1297-1308 | embassy-crypto-test/src/lib.rs:1479-1490 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-crypto-test/src/lib.rs"},"region":{"startLine":1297}}}],"partialFingerprints":{"codehealthFindingId/v1":"86ad6719ac36ae8515f753ca25e08578ee612ff00929c617a077cfb4a5901e5d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): embassy-mcxa/src/flexspi.rs:1003-1014 | embassy-mcxa/src/flexspi.rs:1235-1246 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/flexspi.rs"},"region":{"startLine":1003}}}],"partialFingerprints":{"codehealthFindingId/v1":"49faab54f6d317832098f3915f80a25da212ce9b72d9d45e69b5b3b0ec89f1e3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): embassy-mcxa/src/flexspi.rs:1496-1507 | embassy-mcxa/src/flexspi.rs:1524-1535 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/flexspi.rs"},"region":{"startLine":1496}}}],"partialFingerprints":{"codehealthFindingId/v1":"7368c5e9c2be75c88350ba53c3319e069691acde01fbe6ddc9cd8f06ac6534aa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201312 lines \u00D7 2): embassy-mcxa/src/sgi/hash.rs:631-642 | embassy-mcxa/src/sgi/hash.rs:695-705 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/sgi/hash.rs"},"region":{"startLine":631}}}],"partialFingerprints":{"codehealthFindingId/v1":"69edb5f89af939e1839b84317bae5f4c4ce088d414aedaefe96438b577eeef38"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201312 lines \u00D7 2): embassy-mspm0/src/uart/buffered.rs:864-874 | embassy-rp/src/uart/buffered.rs:315-326 \u2014 before extracting anything, compare \u0060embassy-mspm0/src/uart/buffered.rs\u0060 and \u0060embassy-rp/src/uart/buffered.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 34 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/uart/buffered.rs"},"region":{"startLine":864}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f8cfe494a461edfd3ec57ced272b72fb5286c9f742406b6476ff3e4cd0c3d87"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:2672-2683 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:2960-2971 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":2672}}}],"partialFingerprints":{"codehealthFindingId/v1":"64fe53a03668ed9533d3c2fa96d54b908dc3c09253d9c1d827d0b0abd6a8249e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:7912-7923 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:8756-8767 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":7912}}}],"partialFingerprints":{"codehealthFindingId/v1":"a87325deace7196d8f7532dd32ceef3c00bd720400770cf6d767d9a7b3afa3a0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:16666-16677 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:34547-34558 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":16666}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba3d4d2d3f25ab6a4ea7b71a52c96f8f26a39b12030689b9d8e0cac02de29309"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:22614-22625 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22962-22973 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":22614}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d9eccbbacf8af69373256d096c91af1c9156112ad2efda3a1fe05dfe7dbb9d6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:23114-23125 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:23462-23473 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":23114}}}],"partialFingerprints":{"codehealthFindingId/v1":"a124b145e6eba820632966ab8b145d11981be1655975bb445c1a23b5d0873a4e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:26433-26444 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:41111-41122 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":26433}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef95325eac315db0b4170f00133ab99fec4bee496151147c45becaf13e2bc9ef"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:26449-26460 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:41148-41159 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":26449}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ba01ae87ce47a90a71692702ea64ccd714cdf054996794285664ee0bd045ddb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:26864-26875 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:27388-27399 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":26864}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc2c57f29d82d6fa8db3d889f698e1e801a02e1d53b08cdd17b54cbfac420612"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:27607-27618 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:28131-28142 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":27607}}}],"partialFingerprints":{"codehealthFindingId/v1":"09413f57b1925c69bf68644370e96a10090c2741650a0a54204ec6be9624f074"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:38581-38592 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38929-38940 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":38581}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa7b8c7261b605c26a8db1cce3e921e827a42906062abb715cbbf03fc0620697"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201312 lines \u00D7 2): embassy-nrf/src/spim.rs:620-631 | embassy-nrf/src/spis.rs:531-541 \u2014 before extracting anything, compare \u0060embassy-nrf/src/spim.rs\u0060 and \u0060embassy-nrf/src/spis.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 34 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/spim.rs"},"region":{"startLine":620}}}],"partialFingerprints":{"codehealthFindingId/v1":"86976e88c5e67165133598b905a764d0d8619d63b17442a616cf25e0b874bf30"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): embassy-nrf/src/uarte.rs:815-826 | embassy-nrf/src/uarte.rs:1142-1153 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/uarte.rs"},"region":{"startLine":815}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b24577801ffd6c8ebbcc293c6bb53bea9d9dff3e996d60d65ff38f8c6151b7c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201312 lines \u00D7 2): embassy-rp/src/clocks.rs:913-924 | embassy-rp/src/clocks.rs:944-952 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/clocks.rs"},"region":{"startLine":913}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b3ae6e811372cab020dd668df3ed986acd5cd4555b739eb35b818f78e8e40f8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): embassy-rp/src/pio_programs/step_dir.rs:253-264 | embassy-rp/src/pio_programs/stepper.rs:113-124 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/pio_programs/step_dir.rs"},"region":{"startLine":253}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e29e19f108e94abc0e9c89b5dfe885286e3103ffa1a0768d84d7be913450d5a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): embassy-stm32/src/comp.rs:312-323 | embassy-stm32/src/comp.rs:343-354 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/comp.rs"},"region":{"startLine":312}}}],"partialFingerprints":{"codehealthFindingId/v1":"fffa13818dc18680dbc8b781c4e434bf67faa0d3183a6a48cef0c077366d4113"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): embassy-stm32/src/cryp/mod.rs:863-874 | embassy-stm32/src/cryp/mod.rs:1441-1452 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/cryp/mod.rs"},"region":{"startLine":863}}}],"partialFingerprints":{"codehealthFindingId/v1":"8613dad9192dffc66788db50982c905ba4713931953d6d6b8bf3aa7ab3dde357"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201312 lines \u00D7 2): embassy-stm32/src/dcmipp.rs:524-535 | embassy-stm32/src/dcmipp.rs:573-583 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/dcmipp.rs"},"region":{"startLine":524}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3151136eaa02d83356520e61cc253af7ff4dc7e267c914d6fa17d2431ff6643"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): embassy-stm32/src/eth/v1/ptp.rs:87-98 | embassy-stm32/src/eth/v2/ptp.rs:87-98 \u2014 \u0060embassy-stm32/src/eth/v1/ptp.rs\u0060 and \u0060embassy-stm32/src/eth/v2/ptp.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 3 separate duplicated blocks between them, totalling at least 43 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/eth/v1/ptp.rs"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"673efc95f4f1b183e17cf4118ea58d168f848814524c2cecc8fa5bc92ac5f314"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): embassy-stm32/src/flash/asynch.rs:171-182 | embassy-stm32/src/flash/common.rs:174-185 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/asynch.rs"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce78a0de60fd50bbc8dbb748f5792a9c4b716e6802e3445a8267f2d3eaf81b55"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): embassy-stm32/src/hrtim/mod.rs:250-261 | embassy-stm32/src/lptim/timer/prescaler.rs:63-74 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hrtim/mod.rs"},"region":{"startLine":250}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e0a0f190d650f039ab1ab15038940d3eb5fed6d6cce011728599e948549a073"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11\u201312 lines \u00D7 2): embassy-stm32/src/hspi/mod.rs:343-354 | embassy-stm32/src/xspi/mod.rs:417-427 \u2014 \u0060embassy-stm32/src/hspi/mod.rs\u0060 and \u0060embassy-stm32/src/xspi/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 19 separate duplicated blocks between them, totalling at least 193 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hspi/mod.rs"},"region":{"startLine":343}}}],"partialFingerprints":{"codehealthFindingId/v1":"fca053bd56868c615f1b30405c6a91396a382d333f77251728787c13b27b0543"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): embassy-stm32/src/jpeg.rs:507-518 | embassy-stm32/src/jpeg.rs:719-730 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/jpeg.rs"},"region":{"startLine":507}}}],"partialFingerprints":{"codehealthFindingId/v1":"189311b7889d7d787a6c528428929e7ffae5ab2d50531bdebb1d93f4e088d793"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): embassy-stm32/src/opamp.rs:279-290 | embassy-stm32/src/opamp.rs:319-330 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/opamp.rs"},"region":{"startLine":279}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ca1c5ae61bade14cf6e954c9b28d03cf251741c097e30321872705cdfdc638b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): embassy-stm32/src/ospi/mod.rs:481-492 | embassy-stm32/src/ospi/mod.rs:507-518 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/ospi/mod.rs"},"region":{"startLine":481}}}],"partialFingerprints":{"codehealthFindingId/v1":"7edfa9d3c5dbae985fadfb90307abc25f9f9a8ad5677603a8813e0d5887f409a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): embassy-stm32/src/rcc/f247.rs:323-334 | embassy-stm32/src/rcc/g4.rs:290-301 \u2014 before extracting anything, compare \u0060embassy-stm32/src/rcc/f247.rs\u0060 and \u0060embassy-stm32/src/rcc/g4.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 58 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/f247.rs"},"region":{"startLine":323}}}],"partialFingerprints":{"codehealthFindingId/v1":"de3a3818c1a8eca5c14266b2935960f4a939fc978a1ba993eba59a9057565967"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): embassy-stm32/src/rcc/g0.rs:290-301 | embassy-stm32/src/rcc/h.rs:726-737 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/g0.rs"},"region":{"startLine":290}}}],"partialFingerprints":{"codehealthFindingId/v1":"42c759733b4f272614881b248f1a17d88833cef4d64c6e586cd1f6a6d4208873"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): embassy-stm32/src/rcc/u3.rs:248-259 | embassy-stm32/src/rcc/u3.rs:302-313 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/u3.rs"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"75a8fe2422583e5de63588c8a2e4011860804baeb21f94821b983fa925e8f8af"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): embassy-stm32/src/rcc/u5.rs:243-254 | embassy-stm32/src/rcc/u5.rs:282-293 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/u5.rs"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c012a173e839b434047e6414ced8347ddaad340f9fd1a37a2e49abc0f7b159d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): embassy-stm32/src/rcc/u5.rs:660-671 | embassy-stm32/src/rcc/wba.rs:548-559 \u2014 before extracting anything, compare \u0060embassy-stm32/src/rcc/u5.rs\u0060 and \u0060embassy-stm32/src/rcc/wba.rs\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 81 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/u5.rs"},"region":{"startLine":660}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2c40dbded20a9eba773ec64a97f6265237b11db7366371067f4ca917824a167"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): embassy-stm32/src/sdmmc/mod.rs:645-656 | embassy-stm32/src/sdmmc/mod.rs:754-765 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/sdmmc/mod.rs"},"region":{"startLine":645}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6a06c7d324b6e899c66c60d939056a5dda517b31bf0fed5d82289caa471ad41"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): embassy-stm32/src/sdmmc/mod.rs:793-804 | embassy-stm32/src/sdmmc/mod.rs:863-874 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/sdmmc/mod.rs"},"region":{"startLine":793}}}],"partialFingerprints":{"codehealthFindingId/v1":"54023e70284beb49fceea08eb5df74c18e7e7a7f9b16396897a8c9777122b5ce"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): embassy-stm32/src/usart/mod.rs:1638-1649 | embassy-stm32/src/usart/mod.rs:1818-1829 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usart/mod.rs"},"region":{"startLine":1638}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd0fc0b473c2d687c397b6f177c51a8508ae6ae3e36ca1586a56ae7eda00eab0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): embassy-stm32/src/usart/mod.rs:2069-2080 | embassy-stm32/src/usart/mod.rs:2220-2231 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usart/mod.rs"},"region":{"startLine":2069}}}],"partialFingerprints":{"codehealthFindingId/v1":"0953b7c2f4787a32657e78442e5bee792a4cbadcb46015e575627500450beb2d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): embassy-stm32/src/flash/f2.rs:103-114 | embassy-stm32/src/flash/f4.rs:191-202 \u2014 before extracting anything, compare \u0060embassy-stm32/src/flash/f2.rs\u0060 and \u0060embassy-stm32/src/flash/f4.rs\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 105 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/f2.rs"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"41c423d888e993474ca472bfe385030e68a58472dcbc0068f5e246bb291c956e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): embassy-sync/src/channel.rs:775-786 | embassy-sync/src/priority_channel.rs:425-436 \u2014 before extracting anything, compare \u0060embassy-sync/src/channel.rs\u0060 and \u0060embassy-sync/src/priority_channel.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 31 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-sync/src/channel.rs"},"region":{"startLine":775}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab81520cff658bacccb318cbf6af641dbdab16f6aa38fa415a6949f8f3bbc2de"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): embassy-usb-host/src/class/msc.rs:1010-1021 | embassy-usb-host/src/class/msc.rs:1051-1062 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb-host/src/class/msc.rs"},"region":{"startLine":1010}}}],"partialFingerprints":{"codehealthFindingId/v1":"b34f85159516428d94283d8a5913bd8d53ed1e50fd0319b0496010858c06f465"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 9): embassy-net-esp-hosted/src/proto/fg/mod.rs:131-141 | embassy-net-esp-hosted/src/proto/fg/mod.rs:1698-1708 | embassy-net-esp-hosted/src/proto/fg/mod.rs:2760-2770 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:2473-2483 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:4528-4538 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:5653-5663 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10492-10502 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10834-10844 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:11322-11332 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e15a6839f4fdcb193fc1ffa403d73d6f04599125b2cf3d6a33c97802edcbe3d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 5): embassy-net-esp-hosted/src/proto/fg/mod.rs:8933-8943 | embassy-net-esp-hosted/src/proto/fg/mod.rs:9341-9351 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:5008-5018 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10663-10673 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10980-10990 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":8933}}}],"partialFingerprints":{"codehealthFindingId/v1":"87e395c8281c2142e33103091b0f97c0ce528df636019a0b766ecf4a6124edff"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 5): embassy-net-esp-hosted/src/proto/fg/mod.rs:9353-9363 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:2703-2713 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:6092-6102 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10100-10110 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10675-10685 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":9353}}}],"partialFingerprints":{"codehealthFindingId/v1":"9628befea6889da7bc6a5800f22252e5780f46297bbf3c09019209831b1e3e3a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 4): embassy-mcxa/src/flexspi.rs:1001-1011 | embassy-mcxa/src/flexspi.rs:1040-1050 | embassy-mcxa/src/flexspi.rs:1233-1243 | embassy-mcxa/src/flexspi.rs:1276-1286 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/flexspi.rs"},"region":{"startLine":1001}}}],"partialFingerprints":{"codehealthFindingId/v1":"bad02c8619a16f98972a860bc6d53d2646fb35949cdb5a8a43fcf033e00f8660"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 4): embassy-net-esp-hosted/src/proto/mcu/mod.rs:19217-19227 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19684-19694 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:47061-47071 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:47579-47589 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":19217}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd86a5f87b0e1434b2958d36456a767685e40998b25000bd78b269821237316f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 4): embassy-net-esp-hosted/src/proto/mcu/mod.rs:27051-27061 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:27379-27389 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:27794-27804 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:28122-28132 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":27051}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b8e37ceeac5caeaf82726a7507fd5d7815e6c132305036a22a199a4e5458916"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 4): embassy-stm32/src/crypto_driver.rs:608-618 | embassy-stm32/src/crypto_driver.rs:632-642 | embassy-stm32/src/crypto_driver.rs:671-681 | embassy-stm32/src/crypto_driver.rs:695-705 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/crypto_driver.rs"},"region":{"startLine":608}}}],"partialFingerprints":{"codehealthFindingId/v1":"5784c9ea65303b7b39ffcbe2351a59766fdbc50a0db03846bbdb9b190826b5d4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 4): embassy-stm32/src/flash/c.rs:34-44 | embassy-stm32/src/flash/h50.rs:37-47 | embassy-stm32/src/flash/l.rs:216-226 | embassy-stm32/src/flash/u0.rs:34-44 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from all 4 call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/c.rs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef26b478c3082fd0e79fa12c88d77d1284fca64bfec2fd11f7fd752b9bdee25c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): embassy-mcxa/src/dma.rs:1003-1013 | embassy-mcxa/src/dma.rs:1412-1422 | embassy-mcxa/src/dma.rs:2372-2382 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/dma.rs"},"region":{"startLine":1003}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6240d28de2eea42f53e2b95b840c1f6f29f1c4fb823f236d3623db55d6a396e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): embassy-net-esp-hosted/src/proto/fg/mod.rs:285-295 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:3480-3490 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:12184-12194 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":285}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd0c2a069796855dbf83241898e2f5c410f5e86b275c23ed41df6043ea5dea36"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): embassy-net-esp-hosted/src/proto/fg/mod.rs:1896-1906 | embassy-net-esp-hosted/src/proto/fg/mod.rs:2264-2274 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:2697-2707 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":1896}}}],"partialFingerprints":{"codehealthFindingId/v1":"c05d4cc5c21b45d589983065ea60e09eb1865ee4bd30a3b8f8ca0b9599d15492"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): embassy-net-esp-hosted/src/proto/mcu/mod.rs:20404-20414 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:30819-30829 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38047-38057 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":20404}}}],"partialFingerprints":{"codehealthFindingId/v1":"34d6f5e71e1f821a6cce18f83c6dc839f5c32923834ed8158ef9650cc442b5e2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): embassy-net-esp-hosted/src/proto/mcu/mod.rs:22197-22207 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:25803-25813 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:26680-26690 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":22197}}}],"partialFingerprints":{"codehealthFindingId/v1":"a63caedf34824bd6718d6d0b82eb95ae9c2f22d997db644299fe64d45c4380f0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): embassy-nrf/src/uarte.rs:497-507 | embassy-nrf/src/uarte.rs:697-707 | embassy-nrf/src/uarte.rs:818-828 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/uarte.rs"},"region":{"startLine":497}}}],"partialFingerprints":{"codehealthFindingId/v1":"fca1bc3c92f4222f738aade735657ec8a0ec6434e5c42c2fd7d1326db54ab280"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201311 lines \u00D7 3): embassy-stm32/src/i2c/v1.rs:179-189 | embassy-stm32/src/i2c/v1.rs:309-319 | embassy-stm32/src/i2c/v1.rs:341-349 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i2c/v1.rs"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5ca3a11c2f0b3b7124ea0823ec5bb10f34228f3dd6a3b7939f8829162947891"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (2\u201311 lines \u00D7 4): embassy-stm32/src/flash/f2.rs:130-140 | embassy-stm32/src/flash/f4.rs:218-228 | embassy-stm32/src/flash/g.rs:240-241 | embassy-stm32/src/flash/l.rs:325-335 \u2014 before extracting anything, compare \u0060embassy-stm32/src/flash/f2.rs\u0060 and \u0060embassy-stm32/src/flash/f4.rs\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 105 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/f2.rs"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e89e3c0d8d36ef1b4bcf824b22dde86b533e88f14d56fef71500f612d0d6279"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): embassy-stm32/src/flash/f7.rs:39-49 | embassy-stm32/src/flash/u3.rs:67-77 | embassy-stm32/src/flash/u5.rs:70-80 \u2014 before extracting anything, compare \u0060embassy-stm32/src/flash/u3.rs\u0060 and \u0060embassy-stm32/src/flash/u5.rs\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 88 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/f7.rs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3ce3fd77932b9d4dfb737ac902c653e6b17baf1195d6566b719d4c9841a5f73"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): embassy-stm32-wpan/src/bluetooth/security/mod.rs:991-1001 | embassy-stm32-wpan/src/bluetooth/security/mod.rs:1079-1089 | embassy-stm32-wpan/src/bluetooth/security/mod.rs:1305-1315 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32-wpan/src/bluetooth/security/mod.rs"},"region":{"startLine":991}}}],"partialFingerprints":{"codehealthFindingId/v1":"5384102ef4a90fb7553c667a93719f65c0914c1df83a879fc3df14598f6ab0af"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): embassy-usb-host/src/descriptor.rs:164-174 | embassy-usb-host/src/descriptor.rs:226-236 | embassy-usb-host/src/descriptor.rs:293-303 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb-host/src/descriptor.rs"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbf366c7aadb16203aef2e661f0a81bddd6c99e5925721dd7a2323800f94f1aa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): cyw43/src/bluetooth.rs:128-138 | embassy-net-esp-hosted/src/bluetooth.rs:94-104 \u2014 before extracting anything, compare \u0060cyw43/src/bluetooth.rs\u0060 and \u0060embassy-net-esp-hosted/src/bluetooth.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 55 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cyw43/src/bluetooth.rs"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a0ca7737ab03948e11dba7c9ddb0d7fa30de669423f3dbbf63ec8e39a137a4d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): cyw43/src/consts.rs:304-314 | cyw43/src/consts.rs:371-381 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cyw43/src/consts.rs"},"region":{"startLine":304}}}],"partialFingerprints":{"codehealthFindingId/v1":"023aa0f50a86804569e93bdc55563fce4a92908c8c934f11e110fa7e2acd3e02"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): cyw43/src/consts.rs:332-342 | cyw43/src/consts.rs:405-415 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cyw43/src/consts.rs"},"region":{"startLine":332}}}],"partialFingerprints":{"codehealthFindingId/v1":"7bdf0bb9eeb26d588614a16fbb95558d1e89a38cffb528cc63e85e709377064d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-boot/src/firmware_updater/asynch.rs:28-38 | embassy-boot/src/firmware_updater/blocking.rs:58-68 \u2014 before extracting anything, compare \u0060embassy-boot/src/firmware_updater/asynch.rs\u0060 and \u0060embassy-boot/src/firmware_updater/blocking.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 71 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-boot/src/firmware_updater/asynch.rs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"5602f0d4f14ef57581080a5c82bfdf4b0b8fd60deb149efad267de9024d75971"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-mcxa/src/clkout.rs:74-84 | embassy-mcxa/src/clkout.rs:107-117 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clkout.rs"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e93338f585382cafe6cc7545e5faa6da9685645ed8b760647eaf0557d836306"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-mcxa/src/i2c/controller.rs:433-443 | embassy-mcxa/src/i2c/controller.rs:483-493 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/i2c/controller.rs"},"region":{"startLine":433}}}],"partialFingerprints":{"codehealthFindingId/v1":"65c77e648461c6701002b9f9be8653f032c6149a056a4d3c9943fa7ba588a8ef"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-mcxa/src/lpuart/bbq.rs:934-944 | embassy-mcxa/src/lpuart/bbq.rs:1296-1306 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/lpuart/bbq.rs"},"region":{"startLine":934}}}],"partialFingerprints":{"codehealthFindingId/v1":"75006df8cb8a5994fefbb4cf2b6aa1c3bca684fb43ffe8d6c0c78873cde3ad5d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-mspm0/src/adc.rs:293-303 | embassy-mspm0/src/adc.rs:340-350 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/adc.rs"},"region":{"startLine":293}}}],"partialFingerprints":{"codehealthFindingId/v1":"fea81d784917a7ac2f4814b6caf42934f09c5b2f41b0a71d78712122a2f52fa6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-mspm0/src/mathacl.rs:47-57 | embassy-mspm0/src/wwdt.rs:272-282 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/mathacl.rs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"004f8e0d3832e8f408b4df5357e62298a32799a594d8567082998ef62bc66e48"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-mspm0/src/time_driver/tim.rs:244-254 | embassy-mspm0/src/time_driver/tim.rs:267-278 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/time_driver/tim.rs"},"region":{"startLine":244}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b6108de144356bb6639ee2b2f80ca27ad8b2717c1d6b64e0d298e8327756d3a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-mspm0/src/uart/buffered.rs:939-949 | embassy-stm32/src/usart/buffered.rs:900-910 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/uart/buffered.rs"},"region":{"startLine":939}}}],"partialFingerprints":{"codehealthFindingId/v1":"eff9e6179b82a5d2f3219993f792a2e3242daebb802be8987f04cc8361f01d84"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201311 lines \u00D7 2): embassy-net-esp-hosted/src/lib.rs:289-299 | embassy-net-esp-hosted/src/lib.rs:305-314 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/lib.rs"},"region":{"startLine":289}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5392ce4c104c58737da695fe924a0bbe1ca122f33878cbc6e581aeb93d6a577"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:446-456 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:15649-15659 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":446}}}],"partialFingerprints":{"codehealthFindingId/v1":"0342eba3fd4b4956c0da1d4523b87d1ac697455b123fe932c1b8c7a455bd331e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:3952-3962 | embassy-net-esp-hosted/src/proto/fg/mod.rs:4181-4191 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":3952}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1a2a214b0615003750fce964e7399c3985e2f06545f0b51536e5aae327b1b2b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:3485-3495 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:3691-3701 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":3485}}}],"partialFingerprints":{"codehealthFindingId/v1":"31cad96533c4c1763db760146414150e7e75966bd190ae004bf41c8cbf8a90b0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:5014-5024 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:7781-7791 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":5014}}}],"partialFingerprints":{"codehealthFindingId/v1":"9be5306d4410bd310e0de26d675d25ae5c4db4670d24b5b4d20da151c448e2fe"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:16684-16694 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:34572-34582 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":16684}}}],"partialFingerprints":{"codehealthFindingId/v1":"37e5aa5d3bee43413461b0ce7cff65fb10529d4344c24d295299982019e2cbc3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:41161-41171 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:41859-41869 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":41161}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0c15696c77c39723e69a5153d99ae6957516b00513adb13e4fa25a2009ae6cf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-net-esp-hosted/src/rpc/fg.rs:241-251 | embassy-net-esp-hosted/src/rpc/mcu.rs:335-345 \u2014 before extracting anything, compare \u0060embassy-net-esp-hosted/src/rpc/fg.rs\u0060 and \u0060embassy-net-esp-hosted/src/rpc/mcu.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 52 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/rpc/fg.rs"},"region":{"startLine":241}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7f7078bf83c59a83c1b96640e3f54c3d68439b1d9dccaf30426eec647ba3005"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-nrf/src/twis.rs:703-713 | embassy-nrf/src/twis.rs:736-746 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/twis.rs"},"region":{"startLine":703}}}],"partialFingerprints":{"codehealthFindingId/v1":"4aa2de1b9a902a2b9eecbf21c399852cc4ce50b9f4336e1ce0c4f7003edeecb5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-nrf/src/uarte.rs:379-389 | embassy-nrf/src/uarte.rs:410-420 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/uarte.rs"},"region":{"startLine":379}}}],"partialFingerprints":{"codehealthFindingId/v1":"36b4f28f33ef133dd70781aeda0b999d0c836d38f6f3c27dc8dfaf18d909a337"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201311 lines \u00D7 2): embassy-nrf/src/uarte.rs:744-753 | embassy-nrf/src/uarte.rs:1191-1201 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/uarte.rs"},"region":{"startLine":744}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb1570e97b2560982a538a26ad20fc28ed486d4bd5a0088707b18c7b1c51549f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-nxp/src/i2c/lpc55.rs:397-407 | embassy-nxp/src/i2c/lpc55.rs:427-437 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nxp/src/i2c/lpc55.rs"},"region":{"startLine":397}}}],"partialFingerprints":{"codehealthFindingId/v1":"527f39abc60020ee09c288460de294bb91dab582981d8b588305e56a49e4106f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-nxp/src/i2c/lpc55.rs:414-424 | embassy-nxp/src/i2c/lpc55.rs:637-647 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nxp/src/i2c/lpc55.rs"},"region":{"startLine":414}}}],"partialFingerprints":{"codehealthFindingId/v1":"37d00775ccc7b60022f59ddc46c7e35d0f1175d34d852c47629c6cda87703a4d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-nxp/src/i2c/lpc55.rs:620-630 | embassy-nxp/src/i2c/lpc55.rs:650-660 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nxp/src/i2c/lpc55.rs"},"region":{"startLine":620}}}],"partialFingerprints":{"codehealthFindingId/v1":"adfb91ed51ce8061bfdf5f235f73ac9279d9f698c7322e4a66ec0b262afe083a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-rp/src/clocks.rs:1613-1623 | embassy-rp/src/clocks.rs:1707-1717 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/clocks.rs"},"region":{"startLine":1613}}}],"partialFingerprints":{"codehealthFindingId/v1":"77c88531989f225f2d6fb271e657f982b6bd227857f84c2d05be33380086328f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-rp/src/pio/mod.rs:1090-1100 | embassy-rp/src/pio/mod.rs:1105-1115 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/pio/mod.rs"},"region":{"startLine":1090}}}],"partialFingerprints":{"codehealthFindingId/v1":"6699319a0e1278241cedb6cbcb30c3f0d104f7576766b15703f5e14f3d29a090"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-stm32/src/can/bxcan/registers.rs:29-39 | embassy-stm32/src/can/bxcan/registers.rs:117-127 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/can/bxcan/registers.rs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed54d030005fc82baa5bc245f44fe5e0e4df602394d34181ae51733e8054d531"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-stm32/src/dcmipp.rs:734-744 | embassy-stm32/src/dcmipp.rs:782-792 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/dcmipp.rs"},"region":{"startLine":734}}}],"partialFingerprints":{"codehealthFindingId/v1":"1327ef88689aedef34ee06d3cbd2770bb04a8dc8771c78208dcee0fea663a062"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-stm32/src/dcmipp.rs:1069-1079 | embassy-stm32/src/dcmipp.rs:1117-1127 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/dcmipp.rs"},"region":{"startLine":1069}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3b204675a255efc3c35e6f84092f02f18dff08584a2d3a392cf7de5c1b6ffe0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-stm32/src/dma/dma_bdma.rs:1335-1345 | embassy-stm32/src/dma/gpdma/mod.rs:1296-1306 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/dma/dma_bdma.rs"},"region":{"startLine":1335}}}],"partialFingerprints":{"codehealthFindingId/v1":"94e9dd9b320c5a33155023077f29e78728a41ce25b1546a36e0ccc5e4ce20ef6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-stm32/src/eth/sma/v1.rs:55-65 | embassy-stm32/src/eth/sma/v2.rs:68-78 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/eth/sma/v1.rs"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c5e7424073968bac5fbbcd763d45445e10008ba8c0745ee23bd071ad96d8276"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-stm32/src/hsem/mod.rs:147-157 | embassy-stm32/src/hsem/mod.rs:176-186 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hsem/mod.rs"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"21d83ae1aff719ffc473336134f06454ad8ec80ca09f415717918796bb47b90d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-stm32/src/hspi/mod.rs:409-419 | embassy-stm32/src/xspi/mod.rs:533-543 \u2014 \u0060embassy-stm32/src/hspi/mod.rs\u0060 and \u0060embassy-stm32/src/xspi/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 19 separate duplicated blocks between them, totalling at least 193 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hspi/mod.rs"},"region":{"startLine":409}}}],"partialFingerprints":{"codehealthFindingId/v1":"e38441cb35a12d012756ba65c899f28486ae198721cf246386dae3557de187bb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-stm32/src/i2c/v1.rs:81-91 | embassy-stm32/src/i2c/v1.rs:2166-2176 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i2c/v1.rs"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6a0f29ca8a616620f3ff59c567492aebee086662b37a96bd50a7053130e182c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-stm32/src/i2c/v2.rs:1759-1769 | embassy-stm32/src/i2c/v2.rs:1825-1835 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i2c/v2.rs"},"region":{"startLine":1759}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ccf87255051dbfb0fe514c59c196627ffe3f7d2711afee22c03a16ff391144a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-stm32/src/ospi/mod.rs:427-437 | embassy-stm32/src/ospi/mod.rs:452-462 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/ospi/mod.rs"},"region":{"startLine":427}}}],"partialFingerprints":{"codehealthFindingId/v1":"99fee4f4c277582d700647a3bcf27fdac7d13f5396d14d14fbb0996e06d74f60"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201311 lines \u00D7 2): embassy-stm32/src/ospi/mod.rs:495-504 | embassy-stm32/src/ospi/mod.rs:521-531 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/ospi/mod.rs"},"region":{"startLine":495}}}],"partialFingerprints":{"codehealthFindingId/v1":"1fa656c0a6fef268fe258b151c62e9188dcca1e2472d94d3da828a8e99ab2a05"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-stm32/src/qspi/mod.rs:623-633 | embassy-stm32/src/qspi/mod.rs:665-675 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/qspi/mod.rs"},"region":{"startLine":623}}}],"partialFingerprints":{"codehealthFindingId/v1":"d148a2aedd84bc16a9745b3d9715c0fb77a06aa62dab4897860ace5025d6a454"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-stm32/src/qspi/mod.rs:694-704 | embassy-stm32/src/qspi/mod.rs:736-746 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/qspi/mod.rs"},"region":{"startLine":694}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c44bb7545eb606b2ff8ed4ad54d74def329b48511708448b010e01d70c86af0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-stm32/src/qspi/mod.rs:707-717 | embassy-stm32/src/qspi/mod.rs:749-759 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/qspi/mod.rs"},"region":{"startLine":707}}}],"partialFingerprints":{"codehealthFindingId/v1":"23baebc78610cfd505773e14edb83b9029784e4ce34fcb9cba38792ac61d04c2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-stm32/src/rcc/u3.rs:333-343 | embassy-stm32/src/rcc/u5.rs:312-322 \u2014 before extracting anything, compare \u0060embassy-stm32/src/rcc/u3.rs\u0060 and \u0060embassy-stm32/src/rcc/u5.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 113 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/u3.rs"},"region":{"startLine":333}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd8e3f4059f07a3de159865f97c212e0286e0e58a802dbb7229ea2ce9dd3e04d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-stm32/src/rcc/u3.rs:389-399 | embassy-stm32/src/rcc/u5.rs:361-371 \u2014 before extracting anything, compare \u0060embassy-stm32/src/rcc/u3.rs\u0060 and \u0060embassy-stm32/src/rcc/u5.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 113 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/u3.rs"},"region":{"startLine":389}}}],"partialFingerprints":{"codehealthFindingId/v1":"b22f43b38f8ee98cca2197e5345fbdbfa9e9d2aff5e3fd66b9c9783eb261f263"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-stm32/src/spi/mod.rs:624-634 | embassy-stm32/src/spi/mod.rs:2026-2036 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/spi/mod.rs"},"region":{"startLine":624}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b61cbbc455808352343e64da30c7b6723980ec489a3783602a5c323a742fe8d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10\u201311 lines \u00D7 2): embassy-stm32/src/spi/mod.rs:1269-1278 | embassy-stm32/src/spi/mod.rs:1404-1414 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/spi/mod.rs"},"region":{"startLine":1269}}}],"partialFingerprints":{"codehealthFindingId/v1":"876e8252a32562c31a064d8d068d37b2cc4d82c0253ae531174bb03f0fe079e3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-stm32/src/timer/complementary_pwm.rs:719-729 | embassy-stm32/src/timer/simple_pwm.rs:540-550 \u2014 before extracting anything, compare \u0060embassy-stm32/src/timer/complementary_pwm.rs\u0060 and \u0060embassy-stm32/src/timer/simple_pwm.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 48 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/timer/complementary_pwm.rs"},"region":{"startLine":719}}}],"partialFingerprints":{"codehealthFindingId/v1":"41f3cc56f94637240e47b0333be27b6e37afef399486cf859fab33a323f24465"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-stm32/src/timer/input_capture.rs:487-497 | embassy-stm32/src/timer/pwm_input.rs:182-192 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/timer/input_capture.rs"},"region":{"startLine":487}}}],"partialFingerprints":{"codehealthFindingId/v1":"23f7aa55c3fe2d10222884b6fd0ea43e002212ecc55e7fb470888d094205e1fa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-stm32/src/usart/mod.rs:1701-1711 | embassy-stm32/src/usart/mod.rs:1883-1893 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usart/mod.rs"},"region":{"startLine":1701}}}],"partialFingerprints":{"codehealthFindingId/v1":"62ebb400084a35b3559feac8f1013ff0546b8cafe4575c37d6501e75b4e34510"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-stm32/src/usart/mod.rs:2045-2055 | embassy-stm32/src/usart/mod.rs:2195-2205 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usart/mod.rs"},"region":{"startLine":2045}}}],"partialFingerprints":{"codehealthFindingId/v1":"79a04a894d46837cd890a950e632a92905dd80b3beb120b18c36095061b16f77"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-stm32/src/usb/otg.rs:196-206 | embassy-stm32/src/usb/otg.rs:244-254 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usb/otg.rs"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6135ed1588f40cc0c0064e34131f3aad92a96aac94aec9fb39c1f57621b20a6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-stm32/src/usb/otg.rs:378-388 | embassy-stm32/src/usb/otg.rs:989-999 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usb/otg.rs"},"region":{"startLine":378}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ed6381843a9f04d30ade2607ef929cedfec5021574e92d0bb67c53d389ba463"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-stm32/src/xspi/mod.rs:826-836 | embassy-stm32/src/xspi/mod.rs:1293-1303 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/xspi/mod.rs"},"region":{"startLine":826}}}],"partialFingerprints":{"codehealthFindingId/v1":"77857332b2cc46e7ffa8ebb22a841fcc2401084eeea0c8aa2ab7ab2297d723bd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-stm32/src/flash/u3.rs:93-103 | embassy-stm32/src/flash/u5.rs:96-106 \u2014 before extracting anything, compare \u0060embassy-stm32/src/flash/u3.rs\u0060 and \u0060embassy-stm32/src/flash/u5.rs\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 88 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/u3.rs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f57e2db6f3a15a4254563128c67d4aa4f9658b670ff6e4f99bbbd09eedba9c3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-stm32/src/flash/g.rs:255-265 | embassy-stm32/src/flash/l.rs:418-428 \u2014 before extracting anything, compare \u0060embassy-stm32/src/flash/g.rs\u0060 and \u0060embassy-stm32/src/flash/l.rs\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 64 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/g.rs"},"region":{"startLine":255}}}],"partialFingerprints":{"codehealthFindingId/v1":"25d497e85f8c70f3268cf1d2f724d02b8ddb0a74aa196feb45ceaacc821e1dea"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-stm32-wpan/src/bluetooth/mod.rs:691-701 | embassy-stm32-wpan/src/bluetooth/mod.rs:727-737 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32-wpan/src/bluetooth/mod.rs"},"region":{"startLine":691}}}],"partialFingerprints":{"codehealthFindingId/v1":"581fd1d3004e0acd3a0cc45973b472669a50b746abbe08a125731fdf72e3a386"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-usb-host/src/class/uac/mod.rs:332-342 | embassy-usb-host/src/class/uac/mod.rs:486-496 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb-host/src/class/uac/mod.rs"},"region":{"startLine":332}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0083ae00d8227097ca60dd98f99e626149fc67a4f740ce43e698a40f9466854"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 8): embassy-net-esp-hosted/src/proto/fg/mod.rs:370-379 | embassy-net-esp-hosted/src/proto/fg/mod.rs:617-626 | embassy-net-esp-hosted/src/proto/fg/mod.rs:1295-1304 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:6465-6474 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:15573-15582 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16029-16038 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16957-16966 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:25417-25426 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":370}}}],"partialFingerprints":{"codehealthFindingId/v1":"b63762a8f93214d51ba2878cbbd6c50053166431a059e5456f44d827788f681a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 8): embassy-net-esp-hosted/src/proto/fg/mod.rs:886-895 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3044-3053 | embassy-net-esp-hosted/src/proto/fg/mod.rs:5780-5789 | embassy-net-esp-hosted/src/proto/fg/mod.rs:10499-10508 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16298-16307 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18390-18399 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:32852-32861 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:40825-40834 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":886}}}],"partialFingerprints":{"codehealthFindingId/v1":"988849c485588eff360975f3698aebc31876d91ac0668928adb9760b0222ef3a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 5): embassy-net-esp-hosted/src/proto/fg/mod.rs:285-294 | embassy-net-esp-hosted/src/proto/fg/mod.rs:8951-8960 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:3480-3489 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10998-11007 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:12184-12193 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":285}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef1eff8f2e2a581fa56cd3e68d34b4d816d90e899fd6cbe5de1c60a7af55adfc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 5): embassy-stm32/src/rcc/c0.rs:120-129 | embassy-stm32/src/rcc/f013.rs:197-206 | embassy-stm32/src/rcc/f247.rs:193-202 | embassy-stm32/src/rcc/g0.rs:152-161 | embassy-stm32/src/rcc/g4.rs:139-148 \u2014 before extracting anything, compare \u0060embassy-stm32/src/rcc/f013.rs\u0060 and \u0060embassy-stm32/src/rcc/f247.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 33 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/c0.rs"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee25b8d896f25e18b91a5f3d23322dded7e6a60e58006fbcf94f515b5832a85d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 4): embassy-mcxa/src/spi/controller.rs:257-267 | embassy-mcxa/src/spi/controller.rs:358-367 | embassy-mcxa/src/spi/controller.rs:903-913 | embassy-mcxa/src/spi/controller.rs:1094-1103 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/spi/controller.rs"},"region":{"startLine":257}}}],"partialFingerprints":{"codehealthFindingId/v1":"5281037e394902e1cfdb2264ee901f96d723af7781f26c0f9dcaf2628c7cb0a2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 4): embassy-net-esp-hosted/src/proto/fg/mod.rs:445-454 | embassy-net-esp-hosted/src/proto/fg/mod.rs:1902-1911 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:6565-6574 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:15648-15657 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":445}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa6f4836e55323de45a585fbb8ba26d8e2a048fb87e8b3b0469ed7fbf522ccf7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 4): embassy-net-esp-hosted/src/proto/fg/mod.rs:11214-11223 | embassy-net-esp-hosted/src/proto/fg/mod.rs:12379-12388 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48893-48902 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:50616-50625 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":11214}}}],"partialFingerprints":{"codehealthFindingId/v1":"14b1ec43832cbb039e09c610eddc27eca25fe4d723be2285dce5fe398fd32610"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 4): embassy-stm32/src/cryp/mod.rs:145-154 | embassy-stm32/src/cryp/mod.rs:187-196 | embassy-stm32/src/cryp/mod.rs:229-238 | embassy-stm32/src/cryp/mod.rs:270-279 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/cryp/mod.rs"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba36a4ffd290b737389431efdec58ffa6de25e93b5558950a5e96e074ab915ed"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 4): embassy-stm32/src/crypto_driver.rs:284-293 | embassy-stm32/src/crypto_driver.rs:303-312 | embassy-stm32/src/crypto_driver.rs:332-341 | embassy-stm32/src/crypto_driver.rs:351-360 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/crypto_driver.rs"},"region":{"startLine":284}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e3c0e40ddadfce571edf48732b78ab0c5946ef5c17d384de6267785acb97f5d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 4): embassy-stm32/src/i2c/v1.rs:527-536 | embassy-stm32/src/i2c/v1.rs:664-679 | embassy-stm32/src/i2c/v1.rs:759-768 | embassy-stm32/src/i2c/v1.rs:844-853 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i2c/v1.rs"},"region":{"startLine":527}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9d1c324c5359c4bab7a508b47aadecc53bd185d573cd2420f2cebfce2ed6401"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 4): embassy-stm32/src/ospi/mod.rs:986-995 | embassy-stm32/src/ospi/mod.rs:1019-1028 | embassy-stm32/src/ospi/mod.rs:1446-1455 | embassy-stm32/src/ospi/mod.rs:1481-1490 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/ospi/mod.rs"},"region":{"startLine":986}}}],"partialFingerprints":{"codehealthFindingId/v1":"a342b78e1708992c24412ce7ff71a18e0ad3703e6ccbe4f3cbee39716112a5df"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 4): embassy-stm32/src/ospi/mod.rs:1055-1064 | embassy-stm32/src/ospi/mod.rs:1088-1097 | embassy-stm32/src/ospi/mod.rs:1519-1528 | embassy-stm32/src/ospi/mod.rs:1554-1563 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/ospi/mod.rs"},"region":{"startLine":1055}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e98e98590920e1b9a19315c78e5c306d2072047af1508e47f0847c169a39228"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 4): embassy-stm32-wpan/src/bluetooth/security/mod.rs:990-999 | embassy-stm32-wpan/src/bluetooth/security/mod.rs:1078-1087 | embassy-stm32-wpan/src/bluetooth/security/mod.rs:1115-1124 | embassy-stm32-wpan/src/bluetooth/security/mod.rs:1304-1313 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32-wpan/src/bluetooth/security/mod.rs"},"region":{"startLine":990}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fa26ffe2e8f63693ccb5531c01b940f67672849575781b14b2c76c963dca232"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201310 lines \u00D7 3): embassy-mcxa/src/clocks/periph_helpers.rs:894-903 | embassy-mcxa/src/clocks/periph_helpers.rs:1148-1157 | embassy-mcxa/src/clocks/periph_helpers.rs:1285-1293 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/periph_helpers.rs"},"region":{"startLine":894}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6fc345ceb6390cc89d0d77e89c148f4f83d309c2d7cd2d26e27971beb5c2227"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): embassy-rp/src/spi.rs:160-169 | embassy-rp/src/spi.rs:173-182 | embassy-rp/src/spi.rs:186-195 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/spi.rs"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"1161bf5399e001f988150eefa11fd7c0dd5193caa7699de2762163f72ef579a9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): embassy-stm32/src/hspi/mod.rs:452-461 | embassy-stm32/src/ospi/mod.rs:782-791 | embassy-stm32/src/xspi/mod.rs:591-600 \u2014 \u0060embassy-stm32/src/hspi/mod.rs\u0060 and \u0060embassy-stm32/src/ospi/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 19 separate duplicated blocks between them, totalling at least 220 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hspi/mod.rs"},"region":{"startLine":452}}}],"partialFingerprints":{"codehealthFindingId/v1":"15355ba2d7fb6b638c752dcc93f48717e95770574b021bc0f86cd7435c702e4e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): embassy-stm32/src/ltdc.rs:314-323 | embassy-stm32/src/ltdc.rs:376-385 | embassy-stm32/src/ltdc.rs:451-460 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/ltdc.rs"},"region":{"startLine":314}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c9b3fb864f6ae3c7dcea73ea45bd7f448ce881df5ca26a5b76d06863b1007c4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): embassy-sync/src/channel.rs:603-612 | embassy-sync/src/channel.rs:629-638 | embassy-sync/src/priority_channel.rs:313-322 \u2014 before extracting anything, compare \u0060embassy-sync/src/channel.rs\u0060 and \u0060embassy-sync/src/priority_channel.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 31 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-sync/src/channel.rs"},"region":{"startLine":603}}}],"partialFingerprints":{"codehealthFindingId/v1":"71a2276d1c2404a98d971ecb60daddafd474d0018e064133a6d59e281eb8216c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u201310 lines \u00D7 2): cyw43/src/runner.rs:1254-1263 | embassy-net-esp-hosted/src/lib.rs:412-419 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cyw43/src/runner.rs"},"region":{"startLine":1254}}}],"partialFingerprints":{"codehealthFindingId/v1":"0398de8e33d586ec394143fc0bf7349b789ba1eb553f0e68a14b73d2e1c1dd11"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-mcxa/src/adc.rs:416-425 | embassy-mcxa/src/adc.rs:443-452 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/adc.rs"},"region":{"startLine":416}}}],"partialFingerprints":{"codehealthFindingId/v1":"3102a448243c487cef8ddb569f7cafd5d0fb8ac4546da6436b46b962930915cb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-mcxa/src/adc.rs:466-475 | embassy-mcxa/src/adc.rs:490-499 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/adc.rs"},"region":{"startLine":466}}}],"partialFingerprints":{"codehealthFindingId/v1":"8825bafff12faa46941cc5c330e9bb0f993491673f2394a849e09f2c952e1236"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-mcxa/src/ctimer/pwm.rs:337-346 | embassy-mcxa/src/ctimer/pwm.rs:474-483 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/ctimer/pwm.rs"},"region":{"startLine":337}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b59e2d13752830c9d91207610dada17eca9142f43632962587ea1760add8a09"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-mcxa/src/dma.rs:488-497 | embassy-mcxa/src/dma.rs:562-571 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/dma.rs"},"region":{"startLine":488}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9fa46a3cb74f47cc751048b1932048c8526886e52270b2c6c91a3eeea433e96"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-mcxa/src/flexcan/classic/mailbox.rs:502-511 | embassy-mcxa/src/flexcan/classic/mailbox.rs:550-559 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/flexcan/classic/mailbox.rs"},"region":{"startLine":502}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd44528bcdac978a73fc33286c1fd1f6c9014ad5f0275dabd5529f0da85cbeaa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-mcxa/src/lpuart/bbq.rs:358-367 | embassy-mcxa/src/lpuart/bbq.rs:382-391 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/lpuart/bbq.rs"},"region":{"startLine":358}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fcb7d152395b3f9e6551b3001719ef17f35726ecfdf925cd378712e75c610f6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-mcxa/src/lpuart/bbq.rs:408-417 | embassy-mcxa/src/lpuart/bbq.rs:458-467 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/lpuart/bbq.rs"},"region":{"startLine":408}}}],"partialFingerprints":{"codehealthFindingId/v1":"51546978234121f1c695ecd8905950cb3d2308a907337ef9125c6ebb3273b32b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-mcxa/src/lpuart/bbq.rs:404-413 | embassy-mcxa/src/lpuart/bbq.rs:428-437 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/lpuart/bbq.rs"},"region":{"startLine":404}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc580a6e5f8eca02f9114f3ef3526f2e498e8424a5a9318367c24cb6bbcaf7bd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-mcxa/src/lpuart/bbq.rs:432-441 | embassy-mcxa/src/lpuart/bbq.rs:485-494 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/lpuart/bbq.rs"},"region":{"startLine":432}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a54a80950e79ac480aeaa09f0be8eecc5b4954fa35661c638cb57d7a1d11224"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-mcxa/src/lpuart/bbq.rs:454-463 | embassy-mcxa/src/lpuart/bbq.rs:481-490 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/lpuart/bbq.rs"},"region":{"startLine":454}}}],"partialFingerprints":{"codehealthFindingId/v1":"76e41be4857f63fb2ccbedb8355f9f8e790fe7d851091f2ea09da0d710acb969"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-mcxa/src/spi/controller.rs:283-292 | embassy-mcxa/src/spi/controller.rs:949-958 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/spi/controller.rs"},"region":{"startLine":283}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab0b51a207bc8d69d5836896d3e670c3fd6d8751446e2b86bea8969733799f29"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-mspm0/src/dma.rs:100-109 | embassy-mspm0/src/dma.rs:140-149 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/dma.rs"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4fa56938906c8a082ec35e5a7c0398a276dba0b44b371f053d344b2dfd773a7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:8449-8458 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:36258-36267 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":8449}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ef05ae45f38e204f77f38658b0874af81d115beaf38c19802fc3f32bcda14c0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:2726-2735 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:2978-2987 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":2726}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cb015ba33dcfe025f4daf34bb2f5299db78cb8c82b0a103405a639f944b8b32"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-nrf/src/buffered_uarte/v1.rs:205-214 | embassy-nrf/src/buffered_uarte/v2.rs:150-159 \u2014 before extracting anything, compare \u0060embassy-nrf/src/buffered_uarte/v1.rs\u0060 and \u0060embassy-nrf/src/buffered_uarte/v2.rs\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 127 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/buffered_uarte/v1.rs"},"region":{"startLine":205}}}],"partialFingerprints":{"codehealthFindingId/v1":"38d1b8490efa5db7963a14435c1884ff3173936f4905da4e64ec0ca2796744b6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-nrf/src/crypto/pka/driver.rs:297-306 | embassy-stm32/src/pka/driver.rs:388-397 \u2014 before extracting anything, compare \u0060embassy-nrf/src/crypto/pka/driver.rs\u0060 and \u0060embassy-stm32/src/pka/driver.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 1170 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/crypto/pka/driver.rs"},"region":{"startLine":297}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4610343158f653717c6f8bcd4b4adab9d342c0f426dd5f66b037c0e384bbe4b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-nrf/src/crypto/pka/driver.rs:351-360 | embassy-stm32/src/pka/driver.rs:448-457 \u2014 before extracting anything, compare \u0060embassy-nrf/src/crypto/pka/driver.rs\u0060 and \u0060embassy-stm32/src/pka/driver.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 1170 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/crypto/pka/driver.rs"},"region":{"startLine":351}}}],"partialFingerprints":{"codehealthFindingId/v1":"358a97b574e727e703a3acb4865fa61d574296ab8f886537511708dc06858c55"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-nrf/src/saadc.rs:101-110 | embassy-nrf/src/saadc.rs:116-125 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/saadc.rs"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"553024e481d70f9b6b2a05b3de81c3ba0dbd7b4cba744a092a29b8c6158bb0de"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-nrf/src/twim.rs:316-325 | embassy-nrf/src/twis.rs:347-356 \u2014 before extracting anything, compare \u0060embassy-nrf/src/twim.rs\u0060 and \u0060embassy-nrf/src/twis.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 85 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/twim.rs"},"region":{"startLine":316}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe66d9e65851055affb86e140273f14090f2d72c4b8948e1bd1c65e7436236a6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (2\u201310 lines \u00D7 3): embassy-nrf/src/uarte.rs:841-842 | embassy-nrf/src/uarte.rs:990-999 | embassy-nrf/src/uarte.rs:1053-1062 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/uarte.rs"},"region":{"startLine":841}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4b4ada208a53986b40d22bddb982dda368f244833e01943260af7f7cd46480c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-rp/src/pio_programs/ws2812.rs:178-187 | embassy-rp/src/pio_programs/ws2812.rs:287-296 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/pio_programs/ws2812.rs"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"e991160548602889dcbb5d277a0761079d6eeeb282d3b967413655c1583c2f72"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-stm32/src/cordic/mod.rs:621-630 | embassy-stm32/src/cordic/mod.rs:653-662 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/cordic/mod.rs"},"region":{"startLine":621}}}],"partialFingerprints":{"codehealthFindingId/v1":"276a1d1dec566ebe3fb452a1cc71354ef9c0d66bf02b36d9669c1c4de75f15d7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-stm32/src/dac/mod.rs:764-773 | embassy-stm32/src/dac/mod.rs:849-858 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/dac/mod.rs"},"region":{"startLine":764}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d0a5332cfe507c960d53b6a97595034051b6815bb5fc51e875d4691f0a3644a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-stm32/src/flash/edata.rs:178-187 | embassy-stm32/src/flash/edata.rs:218-227 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/edata.rs"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba0e8799a9bc0241b42e4e08532677a83a7bc6c408479989bb75dd49fdf187bd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-stm32/src/hash/mod.rs:567-576 | embassy-stm32/src/hash/mod.rs:953-962 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hash/mod.rs"},"region":{"startLine":567}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2ed8e7c13072759063357924e6a74b6ae0349662cb501b453ffb32c9f3edbb0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-stm32/src/hspi/mod.rs:489-499 | embassy-stm32/src/hspi/mod.rs:530-539 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hspi/mod.rs"},"region":{"startLine":489}}}],"partialFingerprints":{"codehealthFindingId/v1":"31d855667ba14bd690f8f8d908d83e41a4296c6e0eee3d9e364514a86a4a887b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-stm32/src/i2c/v2.rs:137-146 | embassy-stm32/src/i2c/v2.rs:2509-2518 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i2c/v2.rs"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3287396963ecd0b8ead5bbf0c0a32824eada4dc2bc69cec1f9848355b93cb8f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-stm32/src/ipcc.rs:209-218 | embassy-stm32/src/ipcc.rs:227-236 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/ipcc.rs"},"region":{"startLine":209}}}],"partialFingerprints":{"codehealthFindingId/v1":"22e451e135d35127da2fb0bafe8febed85b23394b4eb7e01472a0cf3eeb9743f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6\u201310 lines \u00D7 2): embassy-stm32/src/jpeg.rs:380-389 | embassy-stm32/src/jpeg.rs:618-623 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/jpeg.rs"},"region":{"startLine":380}}}],"partialFingerprints":{"codehealthFindingId/v1":"95d1d3397d341fe83424ec724a8938faffd41d4a4a54e5ed6d809a6aabd18f80"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-stm32/src/ospi/mod.rs:831-841 | embassy-stm32/src/ospi/mod.rs:870-879 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/ospi/mod.rs"},"region":{"startLine":831}}}],"partialFingerprints":{"codehealthFindingId/v1":"f28ffeeda80814fcfa54b9269c8efb2e58296ac60ad48e89f2386e40358a5bf9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-stm32/src/ospi/mod.rs:902-911 | embassy-stm32/src/xspi/mod.rs:701-710 \u2014 \u0060embassy-stm32/src/ospi/mod.rs\u0060 and \u0060embassy-stm32/src/xspi/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 21 separate duplicated blocks between them, totalling at least 214 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/ospi/mod.rs"},"region":{"startLine":902}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f3123489a38596e2221d91c357a3cc5a922735dc05adfaf5796924abd2333c2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-stm32/src/ospi/mod.rs:937-946 | embassy-stm32/src/xspi/mod.rs:738-747 \u2014 \u0060embassy-stm32/src/ospi/mod.rs\u0060 and \u0060embassy-stm32/src/xspi/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 21 separate duplicated blocks between them, totalling at least 214 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/ospi/mod.rs"},"region":{"startLine":937}}}],"partialFingerprints":{"codehealthFindingId/v1":"40e70c0d45e5832e0d2a5748af649a1e173855a86a4e1b778a90c6eb90bbaa2c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-stm32/src/rcc/g0.rs:175-184 | embassy-stm32/src/rcc/g4.rs:161-170 \u2014 before extracting anything, compare \u0060embassy-stm32/src/rcc/g0.rs\u0060 and \u0060embassy-stm32/src/rcc/g4.rs\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 63 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/g0.rs"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8c03a8f18f65d38504938f115d1cf3f16b594f695bf42529b9ce2fbdf5ef2a4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-stm32/src/rcc/g0.rs:232-241 | embassy-stm32/src/rcc/g4.rs:219-228 \u2014 before extracting anything, compare \u0060embassy-stm32/src/rcc/g0.rs\u0060 and \u0060embassy-stm32/src/rcc/g4.rs\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 63 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/g0.rs"},"region":{"startLine":232}}}],"partialFingerprints":{"codehealthFindingId/v1":"babfe46fc43709d6b336f6982d05a888a4215d9a40da2d2eedc4d7e0f87d6b55"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-stm32/src/rcc/g0.rs:254-263 | embassy-stm32/src/rcc/g4.rs:234-243 \u2014 before extracting anything, compare \u0060embassy-stm32/src/rcc/g0.rs\u0060 and \u0060embassy-stm32/src/rcc/g4.rs\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 63 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/g0.rs"},"region":{"startLine":254}}}],"partialFingerprints":{"codehealthFindingId/v1":"303f75ccd21eecc440483be505fd8c8fc9dacb51f3ccaf420aacfb032cf86044"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-stm32/src/rcc/u5.rs:532-541 | embassy-stm32/src/rcc/wba.rs:450-459 \u2014 before extracting anything, compare \u0060embassy-stm32/src/rcc/u5.rs\u0060 and \u0060embassy-stm32/src/rcc/wba.rs\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 81 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/u5.rs"},"region":{"startLine":532}}}],"partialFingerprints":{"codehealthFindingId/v1":"1cf65f5a072db7f6684543037b29a00f1cc856822d62bf60885502f7e9c56392"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-stm32/src/spi/mod.rs:2142-2151 | embassy-stm32/src/spi/mod.rs:2158-2167 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/spi/mod.rs"},"region":{"startLine":2142}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fd92643958a622a4d13578913aa2232dfddb5e1f915e5941ffc6160970731bf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-stm32/src/time_driver/tim.rs:259-268 | embassy-stm32/src/time_driver/tim.rs:279-290 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/time_driver/tim.rs"},"region":{"startLine":259}}}],"partialFingerprints":{"codehealthFindingId/v1":"6bf0a4bf021dc49dfca9f26db48390ce0c45dac34b80d6df6771d6f7aa4cf6c9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-stm32/src/timer/input_capture.rs:91-100 | embassy-stm32/src/timer/simple_pwm.rs:241-250 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/timer/input_capture.rs"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd34fefcf60d9cc80058bc6893767591afbe1332fef4f572c351dbbf16169d6d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-stm32/src/timer/low_level.rs:1156-1165 | embassy-stm32/src/timer/low_level.rs:1296-1305 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/timer/low_level.rs"},"region":{"startLine":1156}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f1e9740e52666a919776943a2515872741145ccce3812ff49f9e34b9f027b0a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-stm32/src/tsc/tsc.rs:278-287 | embassy-stm32/src/tsc/tsc.rs:308-317 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/tsc/tsc.rs"},"region":{"startLine":278}}}],"partialFingerprints":{"codehealthFindingId/v1":"32b909ff449670cd19d38e36041f42d763cf3a923bd42b5c398db2a68d9f45fb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9\u201310 lines \u00D7 2): embassy-stm32/src/usart/buffered.rs:748-757 | embassy-stm32/src/usart/buffered.rs:788-796 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usart/buffered.rs"},"region":{"startLine":748}}}],"partialFingerprints":{"codehealthFindingId/v1":"54cb3179c33d11d95aff752a0fed93c4a94e7ff43163098666a29257a1a48c26"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-stm32/src/usart/buffered.rs:813-822 | embassy-stm32/src/usart/buffered.rs:931-940 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usart/buffered.rs"},"region":{"startLine":813}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba54201eac3fae55f01edf1b7c4d662316742f8c7180868fa8056a749d1605f5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-stm32/src/usart/mod.rs:1671-1680 | embassy-stm32/src/usart/mod.rs:1852-1861 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usart/mod.rs"},"region":{"startLine":1671}}}],"partialFingerprints":{"codehealthFindingId/v1":"89812d55d979daa7aaece4238753a3d31cc95fb184220e96f329af86fffcd87e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-stm32/src/xspi/mod.rs:628-638 | embassy-stm32/src/xspi/mod.rs:669-678 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/xspi/mod.rs"},"region":{"startLine":628}}}],"partialFingerprints":{"codehealthFindingId/v1":"de1bcbd9e39452bf52e1001deb5fa519e689707d213c72e0176c26f654e3bfa5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-stm32/src/flash/c5.rs:133-142 | embassy-stm32/src/flash/h5.rs:54-63 \u2014 before extracting anything, compare \u0060embassy-stm32/src/flash/c5.rs\u0060 and \u0060embassy-stm32/src/flash/h5.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 43 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/c5.rs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"0edb3f6127f295166bb87c9186f159b73c7a65d22f760481591541ac90d8b4df"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-stm32/src/flash/f4.rs:164-173 | embassy-stm32/src/flash/l.rs:110-119 \u2014 before extracting anything, compare \u0060embassy-stm32/src/flash/f4.rs\u0060 and \u0060embassy-stm32/src/flash/l.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 39 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/f4.rs"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"a89a7250eb84cec1cdbc153d7d9ae30b2c3150e46fd57adbd17f7fa55a51e487"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-stm32/src/flash/u3.rs:149-158 | embassy-stm32/src/flash/u5.rs:140-149 \u2014 before extracting anything, compare \u0060embassy-stm32/src/flash/u3.rs\u0060 and \u0060embassy-stm32/src/flash/u5.rs\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 88 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/u3.rs"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"cdeefb6a2dfdca865cea36377abed7c4b7e464dfff8195050649c02bdb72b590"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-stm32/src/flash/h7.rs:80-89 | embassy-stm32/src/flash/h7.rs:126-135 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/h7.rs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"2377b7b0512dbd766ccf6be87d8259e103cf39c9f6f4aae2f50ce3c17db85d39"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-stm32-wpan/src/bluetooth/mod.rs:145-154 | embassy-stm32-wpan/src/bluetooth/mod.rs:881-890 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32-wpan/src/bluetooth/mod.rs"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc8d20f8693444bd74e22f08e9889c1c50054a14821e8f337d78d5b3f7c7ce46"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-stm32-wpan/src/wba/controller.rs:255-264 | embassy-stm32-wpan/src/wba/controller.rs:271-280 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32-wpan/src/wba/controller.rs"},"region":{"startLine":255}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8d09523a56201d4b6c98223e6f5275cecec49dc0fe1895ea812782ffb095daa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-usb/src/class/cdc_acm.rs:140-149 | embassy-usb/src/class/uac1/speaker.rs:397-406 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb/src/class/cdc_acm.rs"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a24b3ed6026a979bc06af2e6244cc086084cae3e4ea388f3c96ae7ddb8cecc4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-usb-synopsys-otg/src/host.rs:554-565 | embassy-usb-synopsys-otg/src/host.rs:847-856 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb-synopsys-otg/src/host.rs"},"region":{"startLine":554}}}],"partialFingerprints":{"codehealthFindingId/v1":"2406fd3d28153036ff19762d5742b63274cb19ffa5fdc58e89637e873183eb31"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 12): embassy-net-esp-hosted/src/proto/mcu/mod.rs:17941-17949 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21472-21480 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22403-22411 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:25050-25058 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:25308-25316 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:26431-26439 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:37158-37166 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:37378-37386 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:37598-37606 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:41109-41117 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:47040-47048 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:47558-47566 \u2014 all 12 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":17941}}}],"partialFingerprints":{"codehealthFindingId/v1":"68d777040ad690e43f4eea113312452186cfbf431547ddfd25cebc2bb12dd6d3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 12): embassy-net-esp-hosted/src/proto/mcu/mod.rs:17958-17966 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21489-21497 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22420-22428 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:25067-25075 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:25325-25333 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:26448-26456 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:37175-37183 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:37395-37403 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:37615-37623 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:41147-41155 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:47057-47065 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:47575-47583 \u2014 all 12 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":17958}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e4a0a7cb07510b2c8ad7c4dfe5444946d575b1c8226ca9f8d852af092184d97"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 11): embassy-net-esp-hosted/src/proto/fg/mod.rs:275-283 | embassy-net-esp-hosted/src/proto/fg/mod.rs:1892-1900 | embassy-net-esp-hosted/src/proto/fg/mod.rs:2254-2262 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3004-3012 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3480-3488 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:2693-2701 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:4998-5006 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:6064-6072 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10659-10667 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10976-10984 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:11389-11397 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":275}}}],"partialFingerprints":{"codehealthFindingId/v1":"3900b3f69a9f67aa530cf95002a614f4ccae6a06991dfb3a697fb9799b22ebb0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 7): embassy-net-esp-hosted/src/proto/fg/mod.rs:441-449 | embassy-net-esp-hosted/src/proto/fg/mod.rs:688-696 | embassy-net-esp-hosted/src/proto/fg/mod.rs:1366-1374 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:6561-6569 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:15644-15652 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16100-16108 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17028-17036 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":441}}}],"partialFingerprints":{"codehealthFindingId/v1":"19c324b3927db0c347463ee3c8f2ceb29d29223348cf852aff434a77d2d05cf6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u20139 lines \u00D7 6): embassy-stm32/src/hspi/mod.rs:494-502 | embassy-stm32/src/hspi/mod.rs:535-542 | embassy-stm32/src/ospi/mod.rs:836-844 | embassy-stm32/src/ospi/mod.rs:875-882 | embassy-stm32/src/xspi/mod.rs:633-641 | embassy-stm32/src/xspi/mod.rs:674-681 \u2014 \u0060embassy-stm32/src/hspi/mod.rs\u0060 and \u0060embassy-stm32/src/ospi/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 19 separate duplicated blocks between them, totalling at least 220 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hspi/mod.rs"},"region":{"startLine":494}}}],"partialFingerprints":{"codehealthFindingId/v1":"179c6f0e060312011f5ae86bacb72ca926ea480c7d4198c2e00af9802688317d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 6): embassy-stm32/src/hspi/mod.rs:823-831 | embassy-stm32/src/hspi/mod.rs:900-908 | embassy-stm32/src/ospi/mod.rs:1971-1979 | embassy-stm32/src/ospi/mod.rs:2046-2054 | embassy-stm32/src/xspi/mod.rs:1772-1780 | embassy-stm32/src/xspi/mod.rs:1849-1857 \u2014 \u0060embassy-stm32/src/hspi/mod.rs\u0060 and \u0060embassy-stm32/src/ospi/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 19 separate duplicated blocks between them, totalling at least 220 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hspi/mod.rs"},"region":{"startLine":823}}}],"partialFingerprints":{"codehealthFindingId/v1":"641898177e0909444f24e7bfc263274a92dceee36703219c9569bb986b898b4e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 5): embassy-nxp/src/casper/lpc55.rs:316-324 | embassy-nxp/src/casper/lpc55.rs:348-356 | embassy-nxp/src/casper/lpc55.rs:378-386 | embassy-nxp/src/casper/lpc55.rs:413-421 | embassy-nxp/src/casper/lpc55.rs:448-456 \u2014 all 5 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nxp/src/casper/lpc55.rs"},"region":{"startLine":316}}}],"partialFingerprints":{"codehealthFindingId/v1":"530b79746fdd3a125dcf5f8f871eb249bb54fb740da17817650b260306d47011"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u20139 lines \u00D7 5): embassy-usb-host/src/class/uac/mod.rs:331-339 | embassy-usb-host/src/class/uac/mod.rs:366-373 | embassy-usb-host/src/class/uac/mod.rs:447-455 | embassy-usb-host/src/class/uac/mod.rs:485-493 | embassy-usb-host/src/class/uac/mod.rs:523-531 \u2014 all 5 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb-host/src/class/uac/mod.rs"},"region":{"startLine":331}}}],"partialFingerprints":{"codehealthFindingId/v1":"450ffd0f3eea9a26aee6af2b72d5b97c16595f068cade6e0d655b4ecf747b8e2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 4): embassy-rp/src/spi.rs:160-168 | embassy-rp/src/spi.rs:173-181 | embassy-rp/src/spi.rs:186-194 | embassy-rp/src/spi.rs:199-207 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/spi.rs"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d59075ffbce5c0f2a7ea54ef89ead05615daec4d5791afaa8056440d476b8cf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 4): embassy-stm32/src/adc/mod.rs:817-825 | embassy-stm32/src/adc/mod.rs:896-904 | embassy-stm32/src/adc/mod.rs:926-934 | embassy-stm32/src/adc/watchdog.rs:188-196 \u2014 there are 4 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 4 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/adc/mod.rs"},"region":{"startLine":817}}}],"partialFingerprints":{"codehealthFindingId/v1":"61de5fb1fb4c4d7f615be654ab8c5720b52f6d7c49260a93396ea57d27e5b225"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 4): embassy-stm32/src/hspi/mod.rs:767-775 | embassy-stm32/src/hspi/mod.rs:810-818 | embassy-stm32/src/hspi/mod.rs:843-851 | embassy-stm32/src/hspi/mod.rs:886-894 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hspi/mod.rs"},"region":{"startLine":767}}}],"partialFingerprints":{"codehealthFindingId/v1":"45dd30df3c63f51bf30160d3fdc196c28cac2d765ab925b8975575d5962ee811"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 4): embassy-stm32/src/ospi/mod.rs:1916-1924 | embassy-stm32/src/ospi/mod.rs:1957-1965 | embassy-stm32/src/ospi/mod.rs:1991-1999 | embassy-stm32/src/ospi/mod.rs:2032-2040 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/ospi/mod.rs"},"region":{"startLine":1916}}}],"partialFingerprints":{"codehealthFindingId/v1":"360b7d6d530b1748e67a11e922f38e95b8b5e47ccdb0eb4ddc56e13bfa238bae"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 4): embassy-stm32/src/xspi/mod.rs:1716-1724 | embassy-stm32/src/xspi/mod.rs:1759-1767 | embassy-stm32/src/xspi/mod.rs:1792-1800 | embassy-stm32/src/xspi/mod.rs:1835-1843 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/xspi/mod.rs"},"region":{"startLine":1716}}}],"partialFingerprints":{"codehealthFindingId/v1":"db4be4deadb58e023a0bc7ae8e16b83732101fd49a0028a999c6bf4592957861"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 4): embassy-stm32/src/flash/f2.rs:50-58 | embassy-stm32/src/flash/f4.rs:89-97 | embassy-stm32/src/flash/g.rs:92-100 | embassy-stm32/src/flash/l.rs:65-73 \u2014 before extracting anything, compare \u0060embassy-stm32/src/flash/f2.rs\u0060 and \u0060embassy-stm32/src/flash/f4.rs\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 105 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/f2.rs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2d68d9f1d113fb54d31a7c04803be3c2d21d0f87bfb41c80595a9fddfb1d897"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 4): embassy-stm32-wpan/src/wba/linklayer_plat.rs:431-439 | embassy-stm32/src/flash/u3.rs:149-157 | embassy-stm32/src/flash/u5.rs:129-137 | embassy-stm32/src/flash/u5.rs:140-148 \u2014 before extracting anything, compare \u0060embassy-stm32/src/flash/u3.rs\u0060 and \u0060embassy-stm32/src/flash/u5.rs\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 88 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32-wpan/src/wba/linklayer_plat.rs"},"region":{"startLine":431}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f94fb9ef864df00aa2d99e5f3c605b5fc0348b0683228aea8769e8f90a7cf9d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): embassy-net-nrf91/src/context.rs:104-112 | embassy-net-nrf91/src/context.rs:309-317 | embassy-net-nrf91/src/context.rs:325-333 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-nrf91/src/context.rs"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb9efb50c717e7826a2474ea3fbbd948bbd4403412369b3a1bfba81f50335e8d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): embassy-nrf/src/twis.rs:201-209 | embassy-nrf/src/twis.rs:230-238 | embassy-nrf/src/twis.rs:256-264 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/twis.rs"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"80f680406e9ddecd61e9d1b2408d2c11356e2fa483eb938bafdce74391f9a9fd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): embassy-rp/src/uart/buffered.rs:909-917 | embassy-rp/src/uart/buffered.rs:928-936 | embassy-stm32/src/usart/buffered.rs:1134-1142 \u2014 there are 3 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 3 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/uart/buffered.rs"},"region":{"startLine":909}}}],"partialFingerprints":{"codehealthFindingId/v1":"deacbba85e7a0a548517faf7bd0415ee78ce3ab7433ef7bd32e5a066a9281777"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u20139 lines \u00D7 3): embassy-stm32/src/hsem/mod.rs:150-157 | embassy-stm32/src/hsem/mod.rs:179-186 | embassy-stm32/src/hsem/mod.rs:226-234 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hsem/mod.rs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6cd91e5f78d9b534c043b2546bb3cbe9dd1773911362d10453014b672cbe83d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): embassy-stm32/src/rcc/h.rs:651-659 | embassy-stm32/src/rcc/u5.rs:491-499 | embassy-stm32/src/rcc/wba.rs:400-408 \u2014 before extracting anything, compare \u0060embassy-stm32/src/rcc/u5.rs\u0060 and \u0060embassy-stm32/src/rcc/wba.rs\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 81 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/h.rs"},"region":{"startLine":651}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2c11cfe336b0d99597dad6fba03f4e6245c7565bd9d84290eb2fabbf24c61f1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): embassy-stm32/src/timer/low_level.rs:1159-1167 | embassy-stm32/src/timer/low_level.rs:1219-1227 | embassy-stm32/src/timer/low_level.rs:1299-1307 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/timer/low_level.rs"},"region":{"startLine":1159}}}],"partialFingerprints":{"codehealthFindingId/v1":"59a1c4fcd59aa084becc93ee5c790f4486400a762280bd151b12cfddf2d25630"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): embassy-stm32/src/flash/f2.rs:118-126 | embassy-stm32/src/flash/f4.rs:206-214 | embassy-stm32/src/flash/l.rs:312-320 \u2014 before extracting anything, compare \u0060embassy-stm32/src/flash/f2.rs\u0060 and \u0060embassy-stm32/src/flash/f4.rs\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 105 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/f2.rs"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"878e61e9e9db63f20b29c6bf65adb95bb3096adf96fb88a7b93c2fe0df131ec8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): embassy-stm32/src/flash/u3.rs:82-90 | embassy-stm32/src/flash/u3.rs:93-101 | embassy-stm32/src/flash/u5.rs:96-104 \u2014 before extracting anything, compare \u0060embassy-stm32/src/flash/u3.rs\u0060 and \u0060embassy-stm32/src/flash/u5.rs\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 88 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/u3.rs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"443d306c30911ef090c87053600af2b54c411630a2503cd66cdb834e00b86ff9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): embassy-stm32-wpan/src/bluetooth/security/mod.rs:990-998 | embassy-stm32-wpan/src/bluetooth/security/mod.rs:1115-1123 | embassy-stm32-wpan/src/bluetooth/security/mod.rs:1253-1261 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32-wpan/src/bluetooth/security/mod.rs"},"region":{"startLine":990}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8d30181135d9a8cdffe830e95e53d3a968fb8e27331decf09b15835ee4d0650"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): embassy-usb-host/src/class/uac/mod.rs:552-560 | embassy-usb-host/src/class/uac/mod.rs:592-600 | embassy-usb-host/src/class/uac/mod.rs:632-640 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb-host/src/class/uac/mod.rs"},"region":{"startLine":552}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a4726d825c580bf398f3219cd72c14166c2d87cc574710a49d595d1697c21d4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): cyw43/src/bluetooth.rs:548-556 | embassy-net-esp-hosted/src/bluetooth.rs:163-171 \u2014 before extracting anything, compare \u0060cyw43/src/bluetooth.rs\u0060 and \u0060embassy-net-esp-hosted/src/bluetooth.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 55 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cyw43/src/bluetooth.rs"},"region":{"startLine":548}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1ce57cc6ae88c1a9e14efd0f0550382df8cdd3a08e1ad2732055f764ce338a0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): cyw43/src/sdio.rs:257-265 | cyw43/src/sdio.rs:294-302 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cyw43/src/sdio.rs"},"region":{"startLine":257}}}],"partialFingerprints":{"codehealthFindingId/v1":"35b0264de6cc8aec85c1cb37115c1a34ab01b5a7ac823f07b2f9ad10a3689385"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-boot/src/firmware_updater/asynch.rs:131-139 | embassy-boot/src/firmware_updater/blocking.rs:166-174 \u2014 before extracting anything, compare \u0060embassy-boot/src/firmware_updater/asynch.rs\u0060 and \u0060embassy-boot/src/firmware_updater/blocking.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 71 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-boot/src/firmware_updater/asynch.rs"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"f70df185ad26c49461923710b365e6c31b75135348547ddbda0fdd1b237a9b2b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-boot-rp/src/lib.rs:55-63 | embassy-boot-stm32/src/lib.rs:49-57 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-boot-rp/src/lib.rs"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"e773f74d006928c2a07ec4ec07e7abbf704c27aa4c749e8fb47e521fd98d492c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-embedded-hal/src/shared_bus/blocking/spi.rs:82-91 | embassy-embedded-hal/src/shared_bus/blocking/spi.rs:158-166 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-embedded-hal/src/shared_bus/blocking/spi.rs"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce9f89a34eb37c6b9d1a7b3cfab7e8d4157c1a3c95f7d3c21f0be2a988c254bc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-imxrt/src/flexcomm/uart.rs:368-376 | embassy-mcxa/src/lpuart/mod.rs:328-336 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-imxrt/src/flexcomm/uart.rs"},"region":{"startLine":368}}}],"partialFingerprints":{"codehealthFindingId/v1":"33b83ef34a3ce214918bad6aec49733e82b2458f27f85fa1036d786a8e84dce8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-imxrt/src/flexcomm/uart.rs:599-607 | embassy-imxrt/src/flexcomm/uart.rs:727-735 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-imxrt/src/flexcomm/uart.rs"},"region":{"startLine":599}}}],"partialFingerprints":{"codehealthFindingId/v1":"04b2c3c72532abf8af78d23e68758040943962fd25292150a57f97d3ab2398bc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u20139 lines \u00D7 2): embassy-mcxa/src/dma.rs:2552-2560 | embassy-mcxa/src/dma.rs:2563-2570 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/dma.rs"},"region":{"startLine":2552}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef42717fbf0cdf71bd0a4cbca748c402f9d23cf0115336b24e10a41b94e1dd60"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-mcxa/src/flexspi.rs:1311-1319 | embassy-mcxa/src/flexspi.rs:1359-1367 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/flexspi.rs"},"region":{"startLine":1311}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1137034e99d41d766a2a28cb352ef3a53f99b2765b197a23ac439afe132f877"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-mcxa/src/i2c/target.rs:1162-1170 | embassy-mcxa/src/i2c/target.rs:1190-1198 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/i2c/target.rs"},"region":{"startLine":1162}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2b9bcb0a8286e6b19ea745fd9883f11c0e418e8eadc2b77beed7d0771a243bd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-mcxa/src/lpuart/bbq.rs:273-281 | embassy-mcxa/src/lpuart/bbq.rs:308-316 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/lpuart/bbq.rs"},"region":{"startLine":273}}}],"partialFingerprints":{"codehealthFindingId/v1":"732c1a0e23424e52c8b2b4a3db57f2be2a64b32d0361ebe6d25daebc232478b5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-microchip/src/i2c.rs:336-344 | embassy-microchip/src/i2c.rs:624-632 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-microchip/src/i2c.rs"},"region":{"startLine":336}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b76b3ec0b215d9a734dba532669749b49529b6618be394e20dbeb524f30e8ca"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-microchip/src/time_driver.rs:104-112 | embassy-stm32/src/time_driver/lptim.rs:263-271 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-microchip/src/time_driver.rs"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"5277cee323a023eaf6fd6e3f12b6f42af3dfa01ab182f61ca8ba7d97f834c28a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u20139 lines \u00D7 2): embassy-mspm0/src/i2c.rs:621-628 | embassy-mspm0/src/i2c.rs:787-795 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/i2c.rs"},"region":{"startLine":621}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0e6a85579cfb7356b8726062c17c8b242eaa9d5b23cdefed1decb418af3980d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-mspm0/src/low_power/c110x.rs:39-47 | embassy-mspm0/src/low_power/h321x.rs:38-46 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/low_power/c110x.rs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"f708d6bfc476b0eb2678978360c4f3539d38b11064820167f13bfe614cc026d6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-mspm0/src/sysctl/c1103_1104.rs:49-57 | embassy-mspm0/src/sysctl/c1105_1106.rs:49-57 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/sysctl/c1103_1104.rs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed145aa80cca4d5b1bbd7ffa90b6705a3a9283f38472f6152a4b03d3f3962a60"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-mspm0/src/uart/buffered.rs:998-1006 | embassy-rp/src/uart/buffered.rs:67-75 \u2014 before extracting anything, compare \u0060embassy-mspm0/src/uart/buffered.rs\u0060 and \u0060embassy-rp/src/uart/buffered.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 34 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/uart/buffered.rs"},"region":{"startLine":998}}}],"partialFingerprints":{"codehealthFindingId/v1":"378f721e84a8d11573fe2f9798765023e594b6b86d216be86ec94a3db0afa226"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-net-enc28j60/src/lib.rs:347-355 | embassy-net-enc28j60/src/lib.rs:362-370 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-enc28j60/src/lib.rs"},"region":{"startLine":347}}}],"partialFingerprints":{"codehealthFindingId/v1":"898cc60bd38bf780f7b3c45ea7edb5b1cf47699db043147de8387f53ac4bdd38"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:26844-26852 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:27587-27595 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":26844}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c600de3b5947b6ca45b5b40a1b7ebbdff3c5e24765546b0756e71da7e81dd9a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:26861-26869 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:27604-27612 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":26861}}}],"partialFingerprints":{"codehealthFindingId/v1":"08fcdf593e6ecd08a7f33a2167c72332786020718fc47cf5e924bb37fe70014d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:30870-30878 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38098-38106 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":30870}}}],"partialFingerprints":{"codehealthFindingId/v1":"6843e3eed1e4740e6fb859a60c17f3a6a9663894ff1fdf00b6820a961ed67e1b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-nrf/src/rramc.rs:177-185 | embassy-nrf/src/rramc.rs:267-275 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/rramc.rs"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f65e1b02c1c26f3bb0442e3a398acc4ce02264631538a112ba98a7781e6b3ff"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-nrf/src/uarte.rs:365-373 | embassy-nrf/src/uarte.rs:395-403 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/uarte.rs"},"region":{"startLine":365}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c582eab48702068f69441ba236ff4eebddcb29b6de3c71e1ef93d9f61aa3bfe"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-nrf/src/uarte.rs:726-734 | embassy-nrf/src/uarte.rs:1174-1182 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/uarte.rs"},"region":{"startLine":726}}}],"partialFingerprints":{"codehealthFindingId/v1":"11ec26f898765fe81fd15615e1e682c2b502b65a6c2e4aaea281be7715584626"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-nxp/src/i2c/lpc55.rs:384-392 | embassy-nxp/src/i2c/lpc55.rs:607-615 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nxp/src/i2c/lpc55.rs"},"region":{"startLine":384}}}],"partialFingerprints":{"codehealthFindingId/v1":"392e79d8cb39ff6b2e3fde5f01b96e30cbf2b581243ebc0e892e790ec646c64d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-rp/src/spi.rs:486-494 | embassy-rp/src/spi.rs:573-581 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/spi.rs"},"region":{"startLine":486}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa86cbdc200d78777b5e03c0554293eceb5b8ba09d81689792593846962ca18d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-stm32/src/adc/injected.rs:172-180 | embassy-stm32/src/adc/injected.rs:247-255 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/adc/injected.rs"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad95670bdae609745fa90be28aa99f7877835f19ad1fb2852cfa0fa3d7104cf4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-stm32/src/adc/v2.rs:560-568 | embassy-stm32/src/adc/v3.rs:600-608 \u2014 before extracting anything, compare \u0060embassy-stm32/src/adc/v2.rs\u0060 and \u0060embassy-stm32/src/adc/v3.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 78 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/adc/v2.rs"},"region":{"startLine":560}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a97fa20e7654c5dae99e211a26cec2bea8b75e451c83d3d1bc84903d908d04b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-stm32/src/atomic.rs:26-34 | embassy-stm32/src/atomic.rs:57-65 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/atomic.rs"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"32de68d7b668ae80d82fccb983bae6707550e01d59e04a58682cd1379e42d1c9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-stm32/src/comp.rs:289-297 | embassy-stm32/src/comp.rs:350-358 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/comp.rs"},"region":{"startLine":289}}}],"partialFingerprints":{"codehealthFindingId/v1":"cad7f3a07d16dffae0850415b55803aa4ec1e3b8ba8ef9e82d9a8997b4a0c137"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-stm32/src/cryp/mod.rs:823-831 | embassy-stm32/src/cryp/mod.rs:1387-1395 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/cryp/mod.rs"},"region":{"startLine":823}}}],"partialFingerprints":{"codehealthFindingId/v1":"4083d56c4847799d5129bf13fc8301ae035d18062a04aa5d3abcde4ebbe70dac"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-stm32/src/crypto_driver.rs:898-906 | embassy-stm32/src/crypto_driver.rs:981-989 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/crypto_driver.rs"},"region":{"startLine":898}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9b88485204118827a0cb518090abd1712ca62b6bc7700ea9a2e56c60f3b59e2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-stm32/src/i2s.rs:721-729 | embassy-stm32/src/i2s.rs:754-762 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i2s.rs"},"region":{"startLine":721}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d68534d8273bfcdd1a0c50039fec1b0a38b5316531a965f0972aece0890c0af"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-stm32/src/i3c/controller.rs:262-270 | embassy-stm32/src/i3c/controller.rs:278-286 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i3c/controller.rs"},"region":{"startLine":262}}}],"partialFingerprints":{"codehealthFindingId/v1":"b586602e53da97a81e1e2950587977142ebbd9d5fe405203e80b6b4dc7b4c210"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-stm32/src/npu/ecloader.rs:189-197 | embassy-stm32/src/npu/ecloader.rs:245-253 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/npu/ecloader.rs"},"region":{"startLine":189}}}],"partialFingerprints":{"codehealthFindingId/v1":"2868172713e2ace24b00de6b59ff434bc29e1b0a3f79e71dfba05367bbda0a09"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-stm32/src/rcc/n6.rs:1259-1267 | embassy-stm32/src/rcc/n6.rs:1272-1280 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/n6.rs"},"region":{"startLine":1259}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2d9ed18ec663e666419cfaa2384d4f528117daf69c1fe10afb7cacd90fe23fd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8\u20139 lines \u00D7 2): embassy-stm32/src/rcc/u3.rs:449-456 | embassy-stm32/src/rcc/u5.rs:463-471 \u2014 before extracting anything, compare \u0060embassy-stm32/src/rcc/u3.rs\u0060 and \u0060embassy-stm32/src/rcc/u5.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 113 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/u3.rs"},"region":{"startLine":449}}}],"partialFingerprints":{"codehealthFindingId/v1":"27ee6774821dafee50c3f59e314263edba77f3d4fe1711c39b0b61657f2f81fe"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-stm32/src/rcc/u5.rs:621-629 | embassy-stm32/src/rcc/wba.rs:508-516 \u2014 before extracting anything, compare \u0060embassy-stm32/src/rcc/u5.rs\u0060 and \u0060embassy-stm32/src/rcc/wba.rs\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 81 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/u5.rs"},"region":{"startLine":621}}}],"partialFingerprints":{"codehealthFindingId/v1":"7bc7a89c2ed299e08814119f8ee540dcf4d7bbdb2de09bc78034288b4b261745"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-stm32/src/ucpd.rs:275-283 | embassy-stm32/src/ucpd.rs:457-465 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/ucpd.rs"},"region":{"startLine":275}}}],"partialFingerprints":{"codehealthFindingId/v1":"bedf7873b6ef2366ae88d4c655a00aea97efa9294bf6d6e757703d3299fda660"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-stm32/src/usb/usb.rs:268-276 | embassy-stm32/src/usb/usb_host.rs:234-242 \u2014 before extracting anything, compare \u0060embassy-stm32/src/usb/usb.rs\u0060 and \u0060embassy-stm32/src/usb/usb_host.rs\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 53 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usb/usb.rs"},"region":{"startLine":268}}}],"partialFingerprints":{"codehealthFindingId/v1":"7232930f85832e49f29dfa6cb20297f2e6f44c67b26c13b97e7cf53831c60a7e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-stm32/src/flash/h5.rs:183-191 | embassy-stm32/src/flash/h50.rs:130-138 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/h5.rs"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"1275f4ef88cd3f36ca9e6c670b84b4a3fb1e4dea8b690d9fbb75b6f90ef28c6c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-stm32/src/flash/u3.rs:83-91 | embassy-stm32/src/flash/u5.rs:86-94 \u2014 before extracting anything, compare \u0060embassy-stm32/src/flash/u3.rs\u0060 and \u0060embassy-stm32/src/flash/u5.rs\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 88 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/u3.rs"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2dc944820a7c95ece5a0e5347091a77681a44c1eda9bd1b529710f22c532b32"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-stm32/src/flash/f0.rs:43-51 | embassy-stm32/src/flash/f1f3.rs:45-53 \u2014 before extracting anything, compare \u0060embassy-stm32/src/flash/f0.rs\u0060 and \u0060embassy-stm32/src/flash/f1f3.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 32 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/f0.rs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"675faf0338d6c7b4963d0090cc544607bb8da8e45bf2ae3d45c9da97f3074357"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-stm32/src/flash/h7.rs:69-77 | embassy-stm32/src/flash/h7.rs:117-125 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/h7.rs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"44bcd15bcb28480bfaca9f8a9ca2f7983d217f548b6860dfeb1aed606073b11a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-stm32/src/flash/h7.rs:174-182 | embassy-stm32/src/flash/h7.rs:209-217 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/h7.rs"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"b53d88758765e17875aaec6570da77ec84012b8bb8b3ad1baf27fc91763d5350"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-sync/src/pipe.rs:183-191 | embassy-sync/src/pipe.rs:808-816 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-sync/src/pipe.rs"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f93f055dc8d2ff988fc15f09b8d47d65bd0e8294d6bc664d634d6a037af77d8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-usb-host/src/class/cdc_acm.rs:96-104 | embassy-usb-host/src/class/vcp/cp210x.rs:462-470 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb-host/src/class/cdc_acm.rs"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"585eb57dccecfd57811adb15afa3e2381828ae318d81ea7892cde0e965bdbab8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-usb-host/src/class/midi/transport.rs:18-26 | embassy-usb-host/src/class/midi/transport.rs:52-60 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb-host/src/class/midi/transport.rs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"8679b4de453361c1a27565447ad64d477b8f66cf254d436d4cd2869701e1bbd5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-usb-synopsys-otg/src/host.rs:695-703 | embassy-usb-synopsys-otg/src/host.rs:742-750 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb-synopsys-otg/src/host.rs"},"region":{"startLine":695}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb35bcc1fbfaf87d11eacc888f162ad96c818ff631dc66da06285dd858236367"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 36): embassy-net-esp-hosted/src/proto/mcu/mod.rs:48908-48915 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48921-48928 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48934-48941 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48947-48954 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48960-48967 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48985-48992 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48998-49005 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:49011-49018 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:49024-49031 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:49037-49044 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:49050-49057 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:49063-49070 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:49076-49083 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:49089-49096 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:49102-49109 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:49115-49122 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:49128-49135 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:49141-49148 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:49154-49161 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:49167-49174 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:49180-49187 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:49193-49200 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:49206-49213 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:49219-49226 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:49232-49239 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:49245-49252 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:49258-49265 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:49271-49278 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:49284-49291 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:49297-49304 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:49310-49317 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:49323-49330 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:49336-49343 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:49349-49356 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:49362-49369 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:49375-49382 \u2014 all 36 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":48908}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f63c48629307beb9acc2f57f06d2ca816d101aeb31369aa44a76e08644996ec"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 21): embassy-net-esp-hosted/src/proto/fg/mod.rs:11229-11236 | embassy-net-esp-hosted/src/proto/fg/mod.rs:11242-11249 | embassy-net-esp-hosted/src/proto/fg/mod.rs:11255-11262 | embassy-net-esp-hosted/src/proto/fg/mod.rs:11268-11275 | embassy-net-esp-hosted/src/proto/fg/mod.rs:11281-11288 | embassy-net-esp-hosted/src/proto/fg/mod.rs:11294-11301 | embassy-net-esp-hosted/src/proto/fg/mod.rs:11307-11314 | embassy-net-esp-hosted/src/proto/fg/mod.rs:11320-11327 | embassy-net-esp-hosted/src/proto/fg/mod.rs:11333-11340 | embassy-net-esp-hosted/src/proto/fg/mod.rs:11346-11353 | embassy-net-esp-hosted/src/proto/fg/mod.rs:11359-11366 | embassy-net-esp-hosted/src/proto/fg/mod.rs:11372-11379 | embassy-net-esp-hosted/src/proto/fg/mod.rs:11385-11392 | embassy-net-esp-hosted/src/proto/fg/mod.rs:11398-11405 | embassy-net-esp-hosted/src/proto/fg/mod.rs:11411-11418 | embassy-net-esp-hosted/src/proto/fg/mod.rs:11424-11431 | embassy-net-esp-hosted/src/proto/fg/mod.rs:11437-11444 | embassy-net-esp-hosted/src/proto/fg/mod.rs:11450-11457 | embassy-net-esp-hosted/src/proto/fg/mod.rs:11463-11470 | embassy-net-esp-hosted/src/proto/fg/mod.rs:11476-11483 | embassy-net-esp-hosted/src/proto/fg/mod.rs:11489-11496 \u2014 all 21 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":11229}}}],"partialFingerprints":{"codehealthFindingId/v1":"33b52921db45cf3c7aab70a55d4964a410ea8c0e66e8bd52415a3eba40d111c8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5\u20138 lines \u00D7 14): embassy-ambiq/src/time_driver.rs:158-165 | embassy-ambiq/src/time_driver.rs:317-324 | embassy-imxrt/src/time_driver.rs:244-251 | embassy-imxrt/src/time_driver.rs:394-401 | embassy-mcxa/src/ostimer.rs:190-197 | embassy-microchip/src/time_driver.rs:168-175 | embassy-mspm0/src/time_driver/tim.rs:311-315 | embassy-nrf/src/time_driver.rs:455-462 | embassy-nxp/src/time_driver/pit.rs:52-60 | embassy-nxp/src/time_driver/rtc.rs:162-169 | embassy-rp/src/time_driver.rs:50-57 | embassy-stm32/src/time_driver/lptim.rs:408-415 | embassy-stm32/src/time_driver/tim.rs:381-388 | embassy-time/src/driver_cmsdk/mod.rs:328-335 \u2014 there are 14 copies across 12 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 14 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-ambiq/src/time_driver.rs"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"30d926a04ed12b384cb7ddcd5ad2249de1b3b42cde3f2295fcaa02cdcc04cab5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 5): embassy-rp/src/i2c.rs:493-500 | embassy-rp/src/spi.rs:157-164 | embassy-rp/src/spi.rs:170-177 | embassy-rp/src/spi.rs:183-190 | embassy-rp/src/spi.rs:196-203 \u2014 there are 5 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 5 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/i2c.rs"},"region":{"startLine":493}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a4c886e1568c355718a069ce8402d0005b320f6d0ae522eec18676c0b9c50d0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 5): embassy-rp/src/pio/mod.rs:1328-1337 | embassy-rp/src/spi.rs:160-167 | embassy-rp/src/spi.rs:173-180 | embassy-rp/src/spi.rs:186-193 | embassy-rp/src/spi.rs:199-206 \u2014 there are 5 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 5 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/pio/mod.rs"},"region":{"startLine":1328}}}],"partialFingerprints":{"codehealthFindingId/v1":"d70c8d92e8386ae7cc8de37222fec18e61f45c72c6248952152a3d01183a1b45"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 4): embassy-mcxa/src/spi/controller.rs:913-920 | embassy-mcxa/src/spi/controller.rs:958-966 | embassy-mcxa/src/spi/controller.rs:1027-1034 | embassy-mcxa/src/spi/controller.rs:1073-1080 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/spi/controller.rs"},"region":{"startLine":913}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca9b0963461be35c6cb5e6d16d48bbd0dc6d2f1f4facd5afdf93c06cfe80a1ca"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 4): embassy-nrf/src/uarte.rs:365-372 | embassy-nrf/src/uarte.rs:379-386 | embassy-nrf/src/uarte.rs:395-402 | embassy-nrf/src/uarte.rs:410-417 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/uarte.rs"},"region":{"startLine":365}}}],"partialFingerprints":{"codehealthFindingId/v1":"aabf27dfb64b12df1a9d7b365e230020a8b1e55241911998ce939c038b2a6d21"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 4): embassy-nxp/src/casper/lpc55.rs:485-492 | embassy-nxp/src/casper/lpc55.rs:521-528 | embassy-nxp/src/casper/lpc55.rs:562-569 | embassy-nxp/src/casper/lpc55.rs:603-610 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nxp/src/casper/lpc55.rs"},"region":{"startLine":485}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebc6fd62897599228edc3533998736adb6f434178818625ad62a1a194788204b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 4): embassy-stm32/src/crypto_driver.rs:474-481 | embassy-stm32/src/crypto_driver.rs:504-511 | embassy-stm32/src/crypto_driver.rs:544-551 | embassy-stm32/src/crypto_driver.rs:574-581 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/crypto_driver.rs"},"region":{"startLine":474}}}],"partialFingerprints":{"codehealthFindingId/v1":"2cc122a5cbe8d513c8549baa015af233dbe22ad91d4d87b49f50debc9ce752e5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 4): embassy-stm32/src/ospi/mod.rs:644-651 | embassy-stm32/src/ospi/mod.rs:937-944 | embassy-stm32/src/xspi/mod.rs:417-424 | embassy-stm32/src/xspi/mod.rs:738-745 \u2014 \u0060embassy-stm32/src/ospi/mod.rs\u0060 and \u0060embassy-stm32/src/xspi/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 21 separate duplicated blocks between them, totalling at least 214 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/ospi/mod.rs"},"region":{"startLine":644}}}],"partialFingerprints":{"codehealthFindingId/v1":"65c7d50d6a5da0879acd74d1f14305cc95f3866887ad4f5c8d6a45d601f41bd5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): embassy-net-esp-hosted/src/proto/mcu/mod.rs:50631-50638 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:50644-50651 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:50657-50664 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":50631}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b95d7c124b32318d931f2047813aa23bd6bce10685bd225f2076a2ab4f42ba4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): embassy-stm32/src/dcmipp.rs:527-534 | embassy-stm32/src/dcmipp.rs:575-582 | embassy-stm32/src/dcmipp.rs:592-599 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/dcmipp.rs"},"region":{"startLine":527}}}],"partialFingerprints":{"codehealthFindingId/v1":"aedbd0fea94a96b619cd685eba30b534464633e3f0b755722d907a6c86b85b26"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): embassy-stm32/src/dcmipp.rs:736-743 | embassy-stm32/src/dcmipp.rs:784-791 | embassy-stm32/src/dcmipp.rs:800-807 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/dcmipp.rs"},"region":{"startLine":736}}}],"partialFingerprints":{"codehealthFindingId/v1":"332781433ec1d62fe7afb06ab5fd13160c30497d057bc49a613431c374d52a49"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): embassy-stm32/src/dcmipp.rs:1071-1078 | embassy-stm32/src/dcmipp.rs:1119-1126 | embassy-stm32/src/dcmipp.rs:1135-1142 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/dcmipp.rs"},"region":{"startLine":1071}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3c7114556aedb31c20d9362438123b19fde9e8bbd9da340d5e06c3514724cd0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): embassy-stm32/src/i2c/v2.rs:950-957 | embassy-stm32/src/i2c/v2.rs:1081-1088 | embassy-stm32/src/i2c/v2.rs:1491-1498 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i2c/v2.rs"},"region":{"startLine":950}}}],"partialFingerprints":{"codehealthFindingId/v1":"300af755bd24c01ca878dc937751b064743567b0b5e4645c1b1ae8ea872bf315"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-executor-macros/src/macros/main.rs:119-126 | embassy-executor-macros/src/macros/task.rs:74-81 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-executor-macros/src/macros/main.rs"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f7804b4e860891a113398dd1d354325cf73ebc5a9a535d70f4b358e5c434797"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-imxrt/src/flexcomm/uart.rs:384-391 | embassy-mcxa/src/lpuart/mod.rs:344-351 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-imxrt/src/flexcomm/uart.rs"},"region":{"startLine":384}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3dd47ab6cbe100dc5f32b8619c69ac1b0cade49cb4f168cccb86124a468a659"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-imxrt/src/flexcomm/uart.rs:935-942 | embassy-mcxa/src/lpuart/mod.rs:843-850 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-imxrt/src/flexcomm/uart.rs"},"region":{"startLine":935}}}],"partialFingerprints":{"codehealthFindingId/v1":"c07211f085801ec694cb3705a707341f624d17cb538bcafdeb6f96014b8caf50"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-mcxa/src/flexcan/classic/mailbox.rs:522-529 | embassy-mcxa/src/flexcan/classic/mailbox.rs:536-543 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/flexcan/classic/mailbox.rs"},"region":{"startLine":522}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a0e09090e066b9467d02e3ce3416533ad5e287d90f61c19387200451ee51ccc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-mcxa/src/flexspi.rs:1022-1029 | embassy-mcxa/src/flexspi.rs:1255-1262 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/flexspi.rs"},"region":{"startLine":1022}}}],"partialFingerprints":{"codehealthFindingId/v1":"664ac83b958ac98af28568c49a306ddebebea08af1421e7c07fe740ab5974c4c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-mcxa/src/i2c/controller.rs:1303-1310 | embassy-mcxa/src/i2c/controller.rs:1408-1416 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/i2c/controller.rs"},"region":{"startLine":1303}}}],"partialFingerprints":{"codehealthFindingId/v1":"376298726391c2f18565ded7772d8448a42a2cc2593b99623dd23f89c768b91b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-mcxa/src/i2c/target.rs:579-586 | embassy-mcxa/src/i2c/target.rs:598-605 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/i2c/target.rs"},"region":{"startLine":579}}}],"partialFingerprints":{"codehealthFindingId/v1":"527a7911cf9654d32bafa9071a35aebf006161a5b81fe05f7947fae825f4b365"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-mcxa/src/i3c/controller.rs:614-621 | embassy-mcxa/src/i3c/controller.rs:1482-1489 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/i3c/controller.rs"},"region":{"startLine":614}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5e13277e95e91832b044a2fd0ed97c63c397efd1ea2fcb35ff97f494186ff68"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-mcxa/src/spi/controller.rs:1017-1024 | embassy-mcxa/src/spi/controller.rs:1048-1055 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/spi/controller.rs"},"region":{"startLine":1017}}}],"partialFingerprints":{"codehealthFindingId/v1":"65414acc8e0c8e1385080be6d9bf70b9eea5323a8deb9e2eccca60e770908680"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-mcxa/src/spi/controller.rs:1058-1065 | embassy-mcxa/src/spi/controller.rs:1210-1217 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/spi/controller.rs"},"region":{"startLine":1058}}}],"partialFingerprints":{"codehealthFindingId/v1":"552756add337475ef612bf32c30e5ed70721a0997b27e21c6ffb56a08509220e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:11229-11236 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48908-48915 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":11229}}}],"partialFingerprints":{"codehealthFindingId/v1":"584770a6b5ac8fdb97d045a6376f89d7da069cc2c2ffd3b8333abc97f1a4d968"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:11242-11249 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48921-48928 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":11242}}}],"partialFingerprints":{"codehealthFindingId/v1":"32a3c43c05e7e776c0846ed970d097038cfaa836bdf3a4db2f38bcd87011b7f5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:11307-11314 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48947-48954 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":11307}}}],"partialFingerprints":{"codehealthFindingId/v1":"440a3bb184d38417d41f834d09845c4d786b37f87d429cf1414ae75eeadad875"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:11320-11327 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48960-48967 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":11320}}}],"partialFingerprints":{"codehealthFindingId/v1":"f364ef030ab53d13de5a1be31f0f6e1d546f72745786017aef3b7b987babc932"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:11346-11353 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48985-48992 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":11346}}}],"partialFingerprints":{"codehealthFindingId/v1":"44dacef021c4114a4706a93448962aaa33681e4ff86a6298de41aa148d022c5a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:11372-11379 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:49154-49161 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":11372}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c36a891d9fb6fabfeb852ce5bd199552aae00a34e3cbe5c724cc7cc03f3205d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:11385-11392 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:49167-49174 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":11385}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2a52a3c297652c4a2a445cdcae116ab05529120f7d36f098ad37bd5a64b63c9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:11450-11457 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:49193-49200 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":11450}}}],"partialFingerprints":{"codehealthFindingId/v1":"73900bcfea64511919efad9d4a3b993bb978fca9f0d7b63cc546509268934623"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:11463-11470 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:49206-49213 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":11463}}}],"partialFingerprints":{"codehealthFindingId/v1":"e80b70ae067e83ab755d876f1528293acbf74b0359a228cf2e420c55b9260b71"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:11476-11483 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:49219-49226 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":11476}}}],"partialFingerprints":{"codehealthFindingId/v1":"4bb33db90254676ac425925993d4116a93d5b1b34654f9aaadb1555561c3a7c6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:11489-11496 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:49232-49239 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":11489}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ec4b35862aa1abac514ccd7094be0dd23b0eec5eff987a6aaed96432c37534b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:12394-12401 | embassy-net-esp-hosted/src/proto/fg/mod.rs:12407-12414 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":12394}}}],"partialFingerprints":{"codehealthFindingId/v1":"95df69838d3f9672b18c9da67f011ad4628f44ca906b7068d26b315ed2502b75"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:12394-12401 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:50631-50638 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":12394}}}],"partialFingerprints":{"codehealthFindingId/v1":"a83cb4a6d79fec3eb3dfbc028ac3d61a3f20567c93c50fa06fb42e4bed098581"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:12407-12414 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:50644-50651 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":12407}}}],"partialFingerprints":{"codehealthFindingId/v1":"30d5a0bd5fc419ccbf1534ba884f913fd428fe95b6ed7d98ce22344eb7b154bf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:7984-7991 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:8920-8927 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":7984}}}],"partialFingerprints":{"codehealthFindingId/v1":"b01295273252791a30046d063a629337de691de64f8e941e190a164b7f0ccb69"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-net-nrf91/src/context.rs:154-161 | embassy-net-nrf91/src/context.rs:168-175 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-nrf91/src/context.rs"},"region":{"startLine":154}}}],"partialFingerprints":{"codehealthFindingId/v1":"12050583d5931d0f6a28a59ff58e48bf68ec136a211017faa3578d6cf70f5dd6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-nrf/src/buffered_uarte/v1.rs:458-465 | embassy-nrf/src/buffered_uarte/v1.rs:704-711 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/buffered_uarte/v1.rs"},"region":{"startLine":458}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ff43e2826ebd96970c028f113e7e51b96375552f5cf3d1d9e3ad733cd685e2f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-nrf/src/buffered_uarte/v1.rs:504-511 | embassy-nrf/src/buffered_uarte/v2.rs:406-413 \u2014 before extracting anything, compare \u0060embassy-nrf/src/buffered_uarte/v1.rs\u0060 and \u0060embassy-nrf/src/buffered_uarte/v2.rs\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 127 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/buffered_uarte/v1.rs"},"region":{"startLine":504}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b2d93f715a08b04b12d65d4faeee62ad4923c9cbb8a0afb19c3bace0b1f9d49"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-nrf/src/crypto/symmetric/aes.rs:457-464 | embassy-nrf/src/crypto/symmetric/chacha.rs:98-105 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/crypto/symmetric/aes.rs"},"region":{"startLine":457}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3f49aca2e838e42c5ef3f6391e4ac9f738c874a9d034a600d9dcdbfa56a9722"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7\u20138 lines \u00D7 2): embassy-nrf/src/pwm.rs:140-147 | embassy-nrf/src/pwm.rs:892-898 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/pwm.rs"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d083e46fe43fee72942d0a653ac7744ad18cbbce8b4dbf250e1216b1262846c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-nrf/src/rramc.rs:157-164 | embassy-nrf/src/rramc.rs:247-254 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/rramc.rs"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"87dbfbb3a4f04c1abbdbeafe551a0cd081f3921c3e6013729f0996c4fb048581"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-nrf/src/rramc.rs:195-202 | embassy-nrf/src/rramc.rs:285-292 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/rramc.rs"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"b14dc2ead622317fb4646b4d98913b98850c17d84b951b90e0d0a4294b74a4ac"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-nrf/src/uarte.rs:1002-1009 | embassy-nrf/src/uarte.rs:1259-1266 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/uarte.rs"},"region":{"startLine":1002}}}],"partialFingerprints":{"codehealthFindingId/v1":"4410a71a1e419bfed57f7344d7fb26e3ea42298231d82fd70b21659277cbfc2a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-nxp/src/spi/lpc55.rs:289-296 | embassy-nxp/src/spi/lpc55.rs:309-316 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nxp/src/spi/lpc55.rs"},"region":{"startLine":289}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4846baa1323f36e2ca4f6f25645cfccd9ad5d96c9ce0b17fc57112033420e18"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-nxp/src/usart/lpc55.rs:343-350 | embassy-rp/src/uart/mod.rs:469-476 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nxp/src/usart/lpc55.rs"},"region":{"startLine":343}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e42fb03a59c024aa59a536965b4bd998ea5c5e140707ae265a2cb3cb7dd47d5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-rp/src/uart/buffered.rs:599-606 | embassy-rp/src/uart/mod.rs:235-242 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/uart/buffered.rs"},"region":{"startLine":599}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1b7013e313d0c79a4419f101859863b11b3bb14bcb53bd2e2d2231c0307e02a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-rp/src/usb/host.rs:1456-1463 | embassy-rp/src/usb/host.rs:1483-1490 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/usb/host.rs"},"region":{"startLine":1456}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1125ea90c9e3b7634a96fade6296afae5559d010715e8e665bf9cdb2d5e3fdd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-stm32/src/adc/v2.rs:516-523 | embassy-stm32/src/adc/v3.rs:552-559 \u2014 before extracting anything, compare \u0060embassy-stm32/src/adc/v2.rs\u0060 and \u0060embassy-stm32/src/adc/v3.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 78 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/adc/v2.rs"},"region":{"startLine":516}}}],"partialFingerprints":{"codehealthFindingId/v1":"039b554aded69c230e88c5053545fdd64ffcb6e667b2c835273b6e89de7ec632"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-stm32/src/adc/v2.rs:549-556 | embassy-stm32/src/adc/v3.rs:584-591 \u2014 before extracting anything, compare \u0060embassy-stm32/src/adc/v2.rs\u0060 and \u0060embassy-stm32/src/adc/v3.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 78 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/adc/v2.rs"},"region":{"startLine":549}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1cf700554e5ae577a789b6ae2da0a1bf5b95ad535988ef886f6519052ba29a6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-stm32/src/can/fd/peripheral.rs:722-729 | embassy-stm32/src/can/fd/peripheral.rs:735-742 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/can/fd/peripheral.rs"},"region":{"startLine":722}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f923d10b505b79f7e274d122d7686b55ddb2cd2e2ce6489c79b90e458abd02b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-stm32/src/can/fdcan.rs:379-386 | embassy-stm32/src/can/fdcan.rs:746-753 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/can/fdcan.rs"},"region":{"startLine":379}}}],"partialFingerprints":{"codehealthFindingId/v1":"b461643568e5a52d32bd30903be5e2b8af08b130e6ee697cf186a650177c611e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-stm32/src/can/fdcan.rs:426-433 | embassy-stm32/src/can/fdcan.rs:772-779 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/can/fdcan.rs"},"region":{"startLine":426}}}],"partialFingerprints":{"codehealthFindingId/v1":"e015b2d4208413323b92e0b90aedd284f2ae1dadc047f1195aa489a18beb3f2e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-stm32/src/crypto_driver.rs:127-134 | embassy-stm32/src/crypto_driver.rs:765-772 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/crypto_driver.rs"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6c8cfc155bd5119fcf886f77eeb4ca928952f25b6b136495646531bb8efd9c6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-stm32/src/eth/v1/mod.rs:176-183 | embassy-stm32/src/eth/v2/mod.rs:169-176 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/eth/v1/mod.rs"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"323ec1505975a173a76f9f7a7cf30655f0e204e63afb059c85020ee84e78647e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-stm32/src/hash/mod.rs:873-880 | embassy-stm32/src/hash/mod.rs:960-967 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hash/mod.rs"},"region":{"startLine":873}}}],"partialFingerprints":{"codehealthFindingId/v1":"d59dd7acf4751e544298af98892c0a77ebe6485205ec236e6141f8aa16df1ed0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-stm32/src/i2c/v1.rs:640-647 | embassy-stm32/src/i2c/v1.rs:934-941 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i2c/v1.rs"},"region":{"startLine":640}}}],"partialFingerprints":{"codehealthFindingId/v1":"877cff1d50206dcad8cbd2dd5a32cbb9d7c44ee3c7730e8b3c3c5663373bcf23"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-stm32/src/jpeg.rs:482-489 | embassy-stm32/src/jpeg.rs:571-578 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/jpeg.rs"},"region":{"startLine":482}}}],"partialFingerprints":{"codehealthFindingId/v1":"49d3f5756c9e1c4df2752a22d3473c64035591676ce40d9612bfcd1d22f6f857"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-stm32/src/jpeg.rs:495-502 | embassy-stm32/src/jpeg.rs:710-717 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/jpeg.rs"},"region":{"startLine":495}}}],"partialFingerprints":{"codehealthFindingId/v1":"21cf0c94c76d40ef05a803b9042f4a96a812c5d4a112dc12aadf31540047fc28"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-stm32/src/qspi/mod.rs:270-277 | embassy-stm32/src/qspi/mod.rs:390-397 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/qspi/mod.rs"},"region":{"startLine":270}}}],"partialFingerprints":{"codehealthFindingId/v1":"95f225357819f34a79dd07d7f32ce3fa9d6c5118bce1956e173bf6d0f51c9996"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-stm32/src/rcc/c0.rs:135-142 | embassy-stm32/src/rcc/f013.rs:212-219 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/c0.rs"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b327de526974f67a2a821df8c801d129ff8cf5ac1b187c901d53d42dd253d57"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-stm32/src/rcc/c0.rs:163-170 | embassy-stm32/src/rcc/g0.rs:257-264 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/c0.rs"},"region":{"startLine":163}}}],"partialFingerprints":{"codehealthFindingId/v1":"b110babac47d68872eac1f1254b9c4f6005ee825a5faad3ec48760cabbaf7461"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7\u20138 lines \u00D7 2): embassy-stm32/src/rcc/c5.rs:179-185 | embassy-stm32/src/rcc/h.rs:713-720 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/c5.rs"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"96857a719a38839fba46a3e60416865614fde593bb4ee9646ebba7bf117da258"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7\u20138 lines \u00D7 2): embassy-stm32/src/rcc/n6.rs:741-748 | embassy-stm32/src/rcc/n6.rs:763-769 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/n6.rs"},"region":{"startLine":741}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e041541bfc57f3954f7b628e9f735516482847770baafd95783aef096216a81"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-stm32/src/sdmmc/sd.rs:592-599 | embassy-stm32/src/sdmmc/sd.rs:626-633 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/sdmmc/sd.rs"},"region":{"startLine":592}}}],"partialFingerprints":{"codehealthFindingId/v1":"07ba7803a6f694c54089e4728aad51e7648c8b4eef20b0f6d0ddb282686f1729"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-stm32/src/spi/mod.rs:1659-1666 | embassy-stm32/src/spi/mod.rs:1750-1757 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/spi/mod.rs"},"region":{"startLine":1659}}}],"partialFingerprints":{"codehealthFindingId/v1":"73f297175910025152c34a0cf97976a302acf5e9e8e346f2dbdfece794daa6f3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6\u20138 lines \u00D7 2): embassy-stm32/src/spi/mod.rs:1707-1712 | embassy-stm32/src/spi/mod.rs:1774-1781 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/spi/mod.rs"},"region":{"startLine":1707}}}],"partialFingerprints":{"codehealthFindingId/v1":"93a7cbace10370507448ea43853e6c40e803a94deb0ea4c9ab9b6c1ac4b81a25"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-stm32/src/spi/mod.rs:2196-2203 | embassy-stm32/src/spi/mod.rs:2219-2226 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/spi/mod.rs"},"region":{"startLine":2196}}}],"partialFingerprints":{"codehealthFindingId/v1":"e17ccd2b78ddb22319754b84e7176810a6c22a959cc10c84f4e584f022032c60"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-stm32/src/usart/buffered.rs:500-507 | embassy-stm32/src/usart/mod.rs:2344-2351 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usart/buffered.rs"},"region":{"startLine":500}}}],"partialFingerprints":{"codehealthFindingId/v1":"7dce6e98687c9ecd60fd9323c7aa770c85b4325781e05967e36e351fb3cc4f21"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-stm32/src/usart/mod.rs:1425-1432 | embassy-stm32/src/usart/mod.rs:2346-2353 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usart/mod.rs"},"region":{"startLine":1425}}}],"partialFingerprints":{"codehealthFindingId/v1":"b22a0b89c22ccba4fe00aedf1545966e937eda4b52f1fcb54319b2bb4977adbd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-stm32/src/usb/usb.rs:523-530 | embassy-usb-synopsys-otg/src/lib.rs:710-717 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usb/usb.rs"},"region":{"startLine":523}}}],"partialFingerprints":{"codehealthFindingId/v1":"726fbf2eb377e6fe39a81349b0f1fe709a98dc5ca055b8817fffa95af04dc779"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-stm32/src/flash/g.rs:103-110 | embassy-stm32/src/flash/g.rs:136-143 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/g.rs"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"8254472a7f780a53f44871d3cf4fc963871e864c3291007978e958e1d75266d5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-stm32/src/flash/g.rs:200-207 | embassy-stm32/src/flash/l.rs:128-135 \u2014 before extracting anything, compare \u0060embassy-stm32/src/flash/g.rs\u0060 and \u0060embassy-stm32/src/flash/l.rs\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 64 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/g.rs"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"18c5424787b72189f7d0d295b400b7ef5b0314d83620b5fd1744b17bff4beb52"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-stm32/src/flash/h7.rs:161-168 | embassy-stm32/src/flash/h7.rs:198-205 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/h7.rs"},"region":{"startLine":161}}}],"partialFingerprints":{"codehealthFindingId/v1":"e10579e36ae02046bf24728684069848492b75a9773b971f94052ddcb6074e53"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-stm32-wpan/src/bluetooth/security/mod.rs:807-815 | embassy-stm32-wpan/src/bluetooth/security/mod.rs:1008-1015 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32-wpan/src/bluetooth/security/mod.rs"},"region":{"startLine":807}}}],"partialFingerprints":{"codehealthFindingId/v1":"945b1289a9af70c8cea3e3ec15fd5f978473d85b0748c4e4257780c2e5773003"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-usb-synopsys-otg/src/host.rs:973-980 | embassy-usb-synopsys-otg/src/host.rs:1059-1066 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb-synopsys-otg/src/host.rs"},"region":{"startLine":973}}}],"partialFingerprints":{"codehealthFindingId/v1":"0168fb4cec0d17b64c5f3b06d4d32e3d06e2e43f1d93ee05bc012b5ffd89d236"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 12): embassy-net-esp-hosted/src/proto/mcu/mod.rs:9688-9694 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:12744-12750 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22535-22541 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22762-22768 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:23035-23041 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:23262-23268 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:26785-26791 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:27105-27111 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:27528-27534 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:27848-27854 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:29023-29029 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:29250-29256 \u2014 all 12 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":9688}}}],"partialFingerprints":{"codehealthFindingId/v1":"1bee2b53caac485d4254840a2b61df93fb9a4e03add42c3bf2b5c58747376c15"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 11): embassy-net-esp-hosted/src/proto/fg/mod.rs:131-137 | embassy-net-esp-hosted/src/proto/fg/mod.rs:1698-1704 | embassy-net-esp-hosted/src/proto/fg/mod.rs:2091-2097 | embassy-net-esp-hosted/src/proto/fg/mod.rs:2760-2766 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3261-3267 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:2473-2479 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:4528-4534 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:5653-5659 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10492-10498 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10834-10840 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:11322-11328 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"194987b154331b66bbb6efb10600293fa8716c417aa1fc90b19ea03c32b9fd67"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 7): embassy-mcxa/src/spi/controller.rs:914-920 | embassy-mcxa/src/spi/controller.rs:960-966 | embassy-mcxa/src/spi/controller.rs:996-1002 | embassy-mcxa/src/spi/controller.rs:1028-1034 | embassy-mcxa/src/spi/controller.rs:1059-1065 | embassy-mcxa/src/spi/controller.rs:1074-1080 | embassy-mcxa/src/spi/controller.rs:1211-1217 \u2014 all 7 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/spi/controller.rs"},"region":{"startLine":914}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1331cf0af2c8bbf04f57530cb3bde8616081acdbc2adfdaf70a030d960730ea"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 6): embassy-rp/src/i2c.rs:494-500 | embassy-rp/src/pio/mod.rs:1326-1334 | embassy-rp/src/spi.rs:158-164 | embassy-rp/src/spi.rs:171-177 | embassy-rp/src/spi.rs:184-190 | embassy-rp/src/spi.rs:197-203 \u2014 there are 6 copies across 3 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 6 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/i2c.rs"},"region":{"startLine":494}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8aed88b421fec4889865195cd55617631be3a56d7398eb54a1630cb3d23f763"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 4): embassy-net-esp-hosted/src/proto/fg/mod.rs:11177-11183 | embassy-net-esp-hosted/src/proto/fg/mod.rs:12342-12348 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48866-48872 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:50589-50595 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":11177}}}],"partialFingerprints":{"codehealthFindingId/v1":"abe33c49a5f17e5625aef2bd8a929f3a685e26adaf180130d5d4f7e74555051f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 4): embassy-net-esp-hosted/src/proto/mcu/mod.rs:20404-20410 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:30819-30825 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:35250-35256 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38047-38053 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":20404}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a63b91742a03f0c0b315998faec877ad27c1c1acde3e11ffcf12d9117f041d1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 4): embassy-stm32/src/adc/mod.rs:996-1002 | embassy-stm32/src/adc/mod.rs:1056-1062 | embassy-stm32/src/adc/mod.rs:1115-1121 | embassy-stm32/src/adc/mod.rs:1155-1161 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/adc/mod.rs"},"region":{"startLine":996}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ac3e342de75e7b27c4918fd7a7e407bd976e5df546f1dedfbfb362660cc0674"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 4): embassy-stm32/src/rcc/h.rs:1109-1115 | embassy-stm32/src/rcc/h.rs:1141-1147 | embassy-stm32/src/rcc/h.rs:1170-1176 | embassy-stm32/src/rcc/h.rs:1197-1203 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/h.rs"},"region":{"startLine":1109}}}],"partialFingerprints":{"codehealthFindingId/v1":"358b96a46a8925b59ad8c7bfc6d8185be85542eb70b4c1cc0fa4162803df4def"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 4): embassy-stm32/src/sdmmc/mod.rs:704-710 | embassy-stm32/src/sdmmc/mod.rs:745-751 | embassy-stm32/src/sdmmc/mod.rs:826-832 | embassy-stm32/src/sdmmc/mod.rs:897-903 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/sdmmc/mod.rs"},"region":{"startLine":704}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5316a634667067befc459533125107724bb6e54116b749202860a9b923d20ca"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 4): embassy-stm32/src/usb/otg.rs:68-74 | embassy-stm32/src/usb/otg.rs:109-115 | embassy-stm32/src/usb/otg.rs:927-933 | embassy-stm32/src/usb/otg.rs:972-978 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usb/otg.rs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"84753bbb6bf66f7ed274bfa369426aba210e4cf47fe0ec1681446105908e0d74"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): embassy-mcxa/src/spi/controller.rs:929-935 | embassy-mcxa/src/spi/controller.rs:1011-1017 | embassy-mcxa/src/spi/controller.rs:1042-1048 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/spi/controller.rs"},"region":{"startLine":929}}}],"partialFingerprints":{"codehealthFindingId/v1":"77ea88e4f61c1d2316e79e719c3b505020caf5a95ab1170f5a761b2610308fa3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): embassy-net-esp-hosted/src/proto/fg/mod.rs:6813-6819 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24229-24235 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24666-24672 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":6813}}}],"partialFingerprints":{"codehealthFindingId/v1":"900eb1b5c4b4021abe38c2084c5609392d00534c805cbaa59468dda59c2eabb2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): embassy-net-esp-hosted/src/proto/mcu/mod.rs:16738-16744 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:34328-34334 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:45104-45110 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":16738}}}],"partialFingerprints":{"codehealthFindingId/v1":"d92ca3765907b2113ff51a9ca94963173f792b2f36d1badb776ac56ce51647e5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): embassy-nrf/src/buffered_uarte/v1.rs:454-460 | embassy-nrf/src/buffered_uarte/v2.rs:358-364 | embassy-nrf/src/buffered_uarte/v2.rs:547-553 \u2014 before extracting anything, compare \u0060embassy-nrf/src/buffered_uarte/v1.rs\u0060 and \u0060embassy-nrf/src/buffered_uarte/v2.rs\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 127 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/buffered_uarte/v1.rs"},"region":{"startLine":454}}}],"partialFingerprints":{"codehealthFindingId/v1":"40f192447f93a7f1257f2ecbd1f0d51d8773900df17cd0be228e5ea800eb0673"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): embassy-nrf/src/spim.rs:474-480 | embassy-nrf/src/twim.rs:349-355 | embassy-nrf/src/twis.rs:380-386 \u2014 before extracting anything, compare \u0060embassy-nrf/src/twim.rs\u0060 and \u0060embassy-nrf/src/twis.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 85 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/spim.rs"},"region":{"startLine":474}}}],"partialFingerprints":{"codehealthFindingId/v1":"98a962a278ecb0a63b2deab9ff864b1f4abc90df9006ad7471899d61adaa2db0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): embassy-stm32/src/hspi/mod.rs:504-510 | embassy-stm32/src/hspi/mod.rs:777-783 | embassy-stm32/src/hspi/mod.rs:853-859 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hspi/mod.rs"},"region":{"startLine":504}}}],"partialFingerprints":{"codehealthFindingId/v1":"c492fd7e52dd85a514ff3b49d7e8e16687151891a77c8db860541096953d44b9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): embassy-stm32/src/hspi/mod.rs:926-932 | embassy-stm32/src/ospi/mod.rs:2072-2078 | embassy-stm32/src/xspi/mod.rs:1875-1881 \u2014 \u0060embassy-stm32/src/hspi/mod.rs\u0060 and \u0060embassy-stm32/src/ospi/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 19 separate duplicated blocks between them, totalling at least 220 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hspi/mod.rs"},"region":{"startLine":926}}}],"partialFingerprints":{"codehealthFindingId/v1":"92982949103df099b6aef6f099d55d6358fc12a92dec529fc87a9c9e6f435ac3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): embassy-stm32/src/i2c/v2.rs:136-142 | embassy-stm32/src/i2c/v2.rs:2508-2514 | embassy-stm32/src/i2c/v2.rs:2529-2535 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i2c/v2.rs"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3cf97ea98ce586244c63f98820040357aa48b2585426cb55b06fd9e0357e171"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): embassy-stm32/src/timer/input_capture.rs:473-479 | embassy-stm32/src/timer/one_pulse.rs:391-397 | embassy-stm32/src/timer/pwm_input.rs:168-174 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from all 3 call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/timer/input_capture.rs"},"region":{"startLine":473}}}],"partialFingerprints":{"codehealthFindingId/v1":"10542a6e4f1c8b0abdb295f8799937e89a623e1d94fff295fb9351d39322a30f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): embassy-stm32/src/xspi/mod.rs:643-649 | embassy-stm32/src/xspi/mod.rs:1726-1732 | embassy-stm32/src/xspi/mod.rs:1802-1808 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/xspi/mod.rs"},"region":{"startLine":643}}}],"partialFingerprints":{"codehealthFindingId/v1":"e31df699a55c9a8e709ac25066bf12593818e60e5d24a14d0bdc1dd0ea37a4bb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-embedded-hal/src/flash/partition/asynch.rs:36-42 | embassy-embedded-hal/src/flash/partition/blocking.rs:37-43 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-embedded-hal/src/flash/partition/asynch.rs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d058202005d81cb2e7cc4999ac2ce454b944ba6de9c6698fa122631d211110e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-imxrt/src/clocks.rs:716-722 | embassy-imxrt/src/clocks.rs:853-859 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-imxrt/src/clocks.rs"},"region":{"startLine":716}}}],"partialFingerprints":{"codehealthFindingId/v1":"908b803ddf6fd66bcfeff53ad5ada54e7a269fca766b85832da3d7e453fbae60"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-imxrt/src/flexcomm/spi.rs:155-161 | embassy-imxrt/src/flexcomm/spi.rs:384-390 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-imxrt/src/flexcomm/spi.rs"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"75a10878103f223020c751301def2db496c0578237c0e908754fd9becb4aa1b3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:6103-6109 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:34678-34684 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":6103}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e354690dc5ffa5b7dfef951cf1031438eb6c16d84f1d95a8c142dd35272ff47"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-net-esp-hosted/src/proto/mcu/mod.rs:26123-26129 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:39863-39869 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":26123}}}],"partialFingerprints":{"codehealthFindingId/v1":"276020069214ff858cfbdcc7286c748b5f231d1090663d1a766c34c63842096a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-net-esp-hosted/src/rpc/mod.rs:127-133 | embassy-net-esp-hosted/src/rpc/mod.rs:152-158 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/rpc/mod.rs"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a6c3312644f350d32d62f7edcced7c9f6ee4043da3c553774035e3540eadd54"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-nrf/src/buffered_uarte/v1.rs:108-114 | embassy-nrf/src/buffered_uarte/v1.rs:139-145 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/buffered_uarte/v1.rs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"579c664d3beb52677ce8a819ce4f9bf634920d65262cac0d9d73b4c7b0d00c71"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-nrf/src/crypto/symmetric/aes_cracen.rs:213-219 | embassy-nrf/src/crypto/symmetric/chacha_cracen.rs:151-157 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/crypto/symmetric/aes_cracen.rs"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"6433db4e3afaeec6ac3233e84e0a49ced24c9be2866785cdec52bc23f4e51ef0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-nrf/src/gpiote.rs:356-362 | embassy-nrf/src/gpiote.rs:535-541 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/gpiote.rs"},"region":{"startLine":356}}}],"partialFingerprints":{"codehealthFindingId/v1":"7418e21fb416f49d75d33b3270ee7442d214fb4bec834f127233c78c21f1267e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (2\u20137 lines \u00D7 12): embassy-ambiq/src/time_driver.rs:111-112 | embassy-ambiq/src/time_driver.rs:257-258 | embassy-imxrt/src/time_driver.rs:223-224 | embassy-imxrt/src/time_driver.rs:363-364 | embassy-mcxa/src/ostimer.rs:149-150 | embassy-microchip/src/time_driver.rs:149-150 | embassy-mspm0/src/time_driver/tim.rs:232-234 | embassy-nrf/src/time_driver.rs:350-355 | embassy-rp/src/time_driver.rs:105-106 | embassy-stm32/src/time_driver/lptim.rs:280-281 | embassy-stm32/src/time_driver/tim.rs:247-248 | embassy-time/src/driver_cmsdk/mod.rs:234-240 \u2014 there are 12 copies across 10 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 12 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-ambiq/src/time_driver.rs"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d7c21eab36e8189228d58c1b62fb3fb86973137d5ef6ee3370466765b5e9858"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-nrf/src/uarte.rs:281-287 | embassy-nrf/src/uarte.rs:910-916 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/uarte.rs"},"region":{"startLine":281}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a68323961033c19f28f45115afdb69fdaeb45a04ebbb91792a553b4fd0583b2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-nxp/src/gpio/rt1xxx.rs:191-197 | embassy-nxp/src/gpio/rt1xxx.rs:209-215 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nxp/src/gpio/rt1xxx.rs"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c1a1a59965d55a88df3376504ea25e67efd1326ba9a1cdd16aa12c4a0bfdf93"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-nxp/src/spi/lpc55.rs:261-267 | embassy-nxp/src/spi/lpc55.rs:280-286 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nxp/src/spi/lpc55.rs"},"region":{"startLine":261}}}],"partialFingerprints":{"codehealthFindingId/v1":"06ace921edc743a699ccc17e89de30b4745641bf819c5b2ea612866dd6ea73f6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-rp/src/pio_programs/ws2812.rs:200-206 | embassy-rp/src/pio_programs/ws2812.rs:309-315 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/pio_programs/ws2812.rs"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"0381cc3b4ebc683dede88f8f48066366997e3bf5d4537cf2b3b823aaa77ef9c6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-rp/src/usb/host.rs:513-519 | embassy-rp/src/usb/host.rs:761-767 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/usb/host.rs"},"region":{"startLine":513}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3e6f3555a6ba45d9c4ae15b1f2e1252a627f9fc15b6c77ba2133d2112527ce6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-rp/src/usb/host.rs:1123-1129 | embassy-rp/src/usb/host.rs:1144-1150 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/usb/host.rs"},"region":{"startLine":1123}}}],"partialFingerprints":{"codehealthFindingId/v1":"efbf8908f8f1aae6d0d785f4a493c34ac9d6550428be80a2ec1703642f04c651"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-stm32/src/comp.rs:576-582 | embassy-stm32/src/comp.rs:754-760 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/comp.rs"},"region":{"startLine":576}}}],"partialFingerprints":{"codehealthFindingId/v1":"70b19aa7e0801d008875622c7ff85c96d4d9f38d6a0bb1860fc3e24efad291bf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-stm32/src/comp.rs:731-737 | embassy-stm32/src/comp.rs:743-749 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/comp.rs"},"region":{"startLine":731}}}],"partialFingerprints":{"codehealthFindingId/v1":"50f6be9e41c682e4d6c5d39467b789657b2f79e8798e6ca1ba47e8ff8fa52589"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-stm32/src/cryp/mod.rs:806-812 | embassy-stm32/src/cryp/mod.rs:1371-1377 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/cryp/mod.rs"},"region":{"startLine":806}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9c39e95d16d44860e16b954ba5efb198ea7e2dd4af265e342f5609e6e24fc8f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-stm32/src/cryp/mod.rs:925-931 | embassy-stm32/src/cryp/mod.rs:1520-1526 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/cryp/mod.rs"},"region":{"startLine":925}}}],"partialFingerprints":{"codehealthFindingId/v1":"4aff6d994d3b9aafa927fa1852de5cc43205035e83b468e67594365a9ce8d7d8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (4\u20137 lines \u00D7 4): embassy-stm32/src/cryp/mod.rs:1013-1016 | embassy-stm32/src/cryp/mod.rs:1017-1023 | embassy-stm32/src/cryp/mod.rs:1025-1031 | embassy-stm32/src/cryp/mod.rs:1032-1036 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/cryp/mod.rs"},"region":{"startLine":1013}}}],"partialFingerprints":{"codehealthFindingId/v1":"a14acab2d3b055d4ee4904834500329e43362483076265fbdebc0203c39d18bf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-stm32/src/hrtim/advanced_channel.rs:40-46 | embassy-stm32/src/hrtim/advanced_channel.rs:96-102 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hrtim/advanced_channel.rs"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab5533b41926188551a3d442310694726f7654a34eac24cc9d4cc3e7ab88d3a2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-stm32/src/hrtim/bridge_converter.rs:29-35 | embassy-stm32/src/hrtim/resonant_converter.rs:23-30 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hrtim/bridge_converter.rs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"1fdaf87593f4525a4819b33c3100ebec6adf75e1b1473e62e4ff00c73f9497fa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-stm32/src/hrtim/bridge_converter.rs:33-39 | embassy-stm32/src/hrtim/fullbridge.rs:39-45 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hrtim/bridge_converter.rs"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"923db44de36ca500c8a9e532972ebb358e542892dfd0d7a74fa7550eca1a8de8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-stm32/src/hrtim/bridge_converter.rs:36-42 | embassy-stm32/src/hrtim/resonant_converter.rs:32-38 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hrtim/bridge_converter.rs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1e480f897f10387435869c2a0e2e04e0d8be2cdf467a76cff7d93c723bc72cf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-stm32/src/i2c/v1.rs:352-358 | embassy-stm32/src/i2c/v1.rs:361-367 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i2c/v1.rs"},"region":{"startLine":352}}}],"partialFingerprints":{"codehealthFindingId/v1":"f81fd19479395aca70a30a3ae75f94987451205854364a7ffdd3026e4019eea4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-stm32/src/i2c/v1.rs:596-602 | embassy-stm32/src/i2c/v1.rs:877-883 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i2c/v1.rs"},"region":{"startLine":596}}}],"partialFingerprints":{"codehealthFindingId/v1":"62edb76cbbdf01ba382089ccb236154cd5fb758b850c9f2832ea636d97d36066"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-stm32/src/pka/mod.rs:1400-1406 | embassy-stm32/src/pka/mod.rs:1423-1429 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/pka/mod.rs"},"region":{"startLine":1400}}}],"partialFingerprints":{"codehealthFindingId/v1":"90b4d02274eb21f30b2331c263c9269f2ceec31b1c1558637aac0f3fa56eff27"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-stm32/src/qspi/mod.rs:610-616 | embassy-stm32/src/qspi/mod.rs:652-658 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/qspi/mod.rs"},"region":{"startLine":610}}}],"partialFingerprints":{"codehealthFindingId/v1":"058dbc9ccef254fd3f0475efc8a32b0aa5613fe12e260fdfab97130b0d6c1ed1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-stm32/src/rcc/h.rs:435-441 | embassy-stm32/src/rcc/h.rs:465-471 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/h.rs"},"region":{"startLine":435}}}],"partialFingerprints":{"codehealthFindingId/v1":"8be9bb8eb611d993311242a2d2ea9ae5915631c0d2f9ca2e429cc4c0dad1f6b1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-stm32/src/rcc/l.rs:710-716 | embassy-stm32/src/rcc/u5.rs:612-618 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/l.rs"},"region":{"startLine":710}}}],"partialFingerprints":{"codehealthFindingId/v1":"0068fda4773b6ee63822f9f42d10c5b5f8ed72b65148218a2236c517eba1c6b0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-stm32/src/sdmmc/mod.rs:590-596 | embassy-stm32/src/sdmmc/mod.rs:635-641 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/sdmmc/mod.rs"},"region":{"startLine":590}}}],"partialFingerprints":{"codehealthFindingId/v1":"33e878a075466c249bcb6d09df16c89acc3039e1b653bad20cdc10bfee3681fa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-stm32/src/sdmmc/mod.rs:1254-1260 | embassy-stm32/src/sdmmc/mod.rs:1326-1332 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/sdmmc/mod.rs"},"region":{"startLine":1254}}}],"partialFingerprints":{"codehealthFindingId/v1":"f242fc1a12e8e0055c13b12b41013d028820be9e83b4f7aee5521475032ac3b3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-stm32/src/usart/mod.rs:1879-1885 | embassy-stm32/src/usart/mod.rs:2217-2223 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usart/mod.rs"},"region":{"startLine":1879}}}],"partialFingerprints":{"codehealthFindingId/v1":"465f26d540b7b0c3b5516554687d989f2c8676be530cc273b0e5d99b26c99fb7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-stm32/src/flash/u3.rs:51-57 | embassy-stm32/src/flash/u3.rs:162-168 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/u3.rs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"be5db51809089073cdb8e45baa5a2c7f60bf989af022f53b9e53cd52710e1cd9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-stm32/src/flash/u5.rs:54-60 | embassy-stm32/src/flash/u5.rs:153-159 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/u5.rs"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"4568185e3b1b0fff14a81e349855ffa0a16b7d7168070ded2ac8b840cc75e0d4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-stm32/src/flash/g.rs:22-28 | embassy-stm32/src/flash/l.rs:25-31 \u2014 before extracting anything, compare \u0060embassy-stm32/src/flash/g.rs\u0060 and \u0060embassy-stm32/src/flash/l.rs\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 64 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/g.rs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"f84f6a9e8abbe9ba350a54c9ccf6883fd723398ae0dd5378e3902c6e6bf600d3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-stm32-wpan/src/wba/controller.rs:321-327 | embassy-stm32-wpan/src/wba/controller.rs:345-351 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32-wpan/src/wba/controller.rs"},"region":{"startLine":321}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbaa97c114782b372e66997922999138f2ee12d91216e8b25a28c08c3fcf8b78"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 362): embassy-net-esp-hosted/src/proto/fg/mod.rs:129-134 | embassy-net-esp-hosted/src/proto/fg/mod.rs:368-373 | embassy-net-esp-hosted/src/proto/fg/mod.rs:494-499 | embassy-net-esp-hosted/src/proto/fg/mod.rs:615-620 | embassy-net-esp-hosted/src/proto/fg/mod.rs:715-720 | embassy-net-esp-hosted/src/proto/fg/mod.rs:805-810 | embassy-net-esp-hosted/src/proto/fg/mod.rs:934-939 | embassy-net-esp-hosted/src/proto/fg/mod.rs:1032-1037 | embassy-net-esp-hosted/src/proto/fg/mod.rs:1105-1110 | embassy-net-esp-hosted/src/proto/fg/mod.rs:1172-1177 | embassy-net-esp-hosted/src/proto/fg/mod.rs:1293-1298 | embassy-net-esp-hosted/src/proto/fg/mod.rs:1418-1423 | embassy-net-esp-hosted/src/proto/fg/mod.rs:1491-1496 | embassy-net-esp-hosted/src/proto/fg/mod.rs:1696-1701 | embassy-net-esp-hosted/src/proto/fg/mod.rs:2089-2094 | embassy-net-esp-hosted/src/proto/fg/mod.rs:2376-2381 | embassy-net-esp-hosted/src/proto/fg/mod.rs:2507-2512 | embassy-net-esp-hosted/src/proto/fg/mod.rs:2758-2763 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3259-3264 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3614-3619 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3745-3750 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3836-3841 | embassy-net-esp-hosted/src/proto/fg/mod.rs:3974-3979 | embassy-net-esp-hosted/src/proto/fg/mod.rs:4065-4070 | embassy-net-esp-hosted/src/proto/fg/mod.rs:4203-4208 | embassy-net-esp-hosted/src/proto/fg/mod.rs:4270-4275 | embassy-net-esp-hosted/src/proto/fg/mod.rs:4368-4373 | embassy-net-esp-hosted/src/proto/fg/mod.rs:4462-4467 | embassy-net-esp-hosted/src/proto/fg/mod.rs:4535-4540 | embassy-net-esp-hosted/src/proto/fg/mod.rs:4602-4607 | embassy-net-esp-hosted/src/proto/fg/mod.rs:4792-4797 | embassy-net-esp-hosted/src/proto/fg/mod.rs:5105-5110 | embassy-net-esp-hosted/src/proto/fg/mod.rs:5340-5345 | embassy-net-esp-hosted/src/proto/fg/mod.rs:5438-5443 | embassy-net-esp-hosted/src/proto/fg/mod.rs:5536-5541 | embassy-net-esp-hosted/src/proto/fg/mod.rs:5609-5614 | embassy-net-esp-hosted/src/proto/fg/mod.rs:5699-5704 | embassy-net-esp-hosted/src/proto/fg/mod.rs:5851-5856 | embassy-net-esp-hosted/src/proto/fg/mod.rs:5980-5985 | embassy-net-esp-hosted/src/proto/fg/mod.rs:6101-6106 | embassy-net-esp-hosted/src/proto/fg/mod.rs:6230-6235 | embassy-net-esp-hosted/src/proto/fg/mod.rs:6303-6308 | embassy-net-esp-hosted/src/proto/fg/mod.rs:6508-6513 | embassy-net-esp-hosted/src/proto/fg/mod.rs:6811-6816 | embassy-net-esp-hosted/src/proto/fg/mod.rs:6936-6941 | embassy-net-esp-hosted/src/proto/fg/mod.rs:7009-7014 | embassy-net-esp-hosted/src/proto/fg/mod.rs:7099-7104 | embassy-net-esp-hosted/src/proto/fg/mod.rs:7408-7413 | embassy-net-esp-hosted/src/proto/fg/mod.rs:7738-7743 | embassy-net-esp-hosted/src/proto/fg/mod.rs:7811-7816 | embassy-net-esp-hosted/src/proto/fg/mod.rs:8085-8090 | embassy-net-esp-hosted/src/proto/fg/mod.rs:8447-8452 | embassy-net-esp-hosted/src/proto/fg/mod.rs:8541-8546 | embassy-net-esp-hosted/src/proto/fg/mod.rs:8754-8759 | embassy-net-esp-hosted/src/proto/fg/mod.rs:9137-9142 | embassy-net-esp-hosted/src/proto/fg/mod.rs:9505-9510 | embassy-net-esp-hosted/src/proto/fg/mod.rs:9792-9797 | embassy-net-esp-hosted/src/proto/fg/mod.rs:10186-10191 | embassy-net-esp-hosted/src/proto/fg/mod.rs:10571-10576 | embassy-net-esp-hosted/src/proto/fg/mod.rs:10742-10747 | embassy-net-esp-hosted/src/proto/fg/mod.rs:10944-10949 | embassy-net-esp-hosted/src/proto/fg/mod.rs:11175-11180 | embassy-net-esp-hosted/src/proto/fg/mod.rs:12340-12345 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:589-594 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:1498-1503 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:1742-1747 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:1923-1928 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:2117-2122 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:2471-2476 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:2897-2902 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:3094-3099 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:3320-3325 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:3586-3591 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:3771-3776 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:3925-3930 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:4526-4531 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:5651-5656 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:6239-6244 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:6463-6468 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:6622-6627 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:7203-7208 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:7910-7915 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:8075-8080 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:8319-8324 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:8754-8759 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:9059-9064 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:9166-9171 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:9364-9369 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:9686-9691 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:9973-9978 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10209-10214 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10490-10495 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:10832-10837 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:11071-11076 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:11201-11206 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:11320-11325 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:11444-11449 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:11602-11607 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:11733-11738 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:11978-11983 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:12385-12390 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:12742-12747 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:12930-12935 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:13029-13034 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:13148-13153 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:13274-13279 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:13393-13398 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:13547-13552 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:13799-13804 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:14077-14082 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:14519-14524 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:15008-15013 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:15162-15167 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:15355-15360 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:15571-15576 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:15745-15750 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:15906-15911 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16027-16032 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16127-16132 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16217-16222 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16346-16351 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16444-16449 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16517-16522 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16607-16612 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16736-16741 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16834-16839 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16955-16960 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17080-17085 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17153-17158 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17220-17225 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17318-17323 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17412-17417 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17485-17490 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17552-17557 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17625-17630 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17692-17697 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17765-17770 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17880-17885 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18048-18053 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18146-18151 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18219-18224 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18309-18314 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18461-18466 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18590-18595 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18712-18717 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18849-18854 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18922-18927 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18989-18994 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19135-19140 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19303-19308 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19401-19406 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19571-19576 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19745-19750 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19812-19817 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19885-19890 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19952-19957 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20025-20030 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20092-20097 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20165-20170 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20232-20237 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20402-20407 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20601-20606 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20674-20679 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20741-20746 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20814-20819 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20904-20909 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21033-21038 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21155-21160 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21293-21298 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21411-21416 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21554-21559 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21621-21626 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21694-21699 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21761-21766 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21834-21839 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21901-21906 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21999-22004 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22120-22125 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22224-22229 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22342-22347 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22533-22538 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22662-22667 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22760-22765 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22881-22886 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:23033-23038 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:23162-23167 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:23260-23265 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:23381-23386 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:23533-23538 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:23662-23667 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:23735-23740 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:23848-23853 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24008-24013 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24106-24111 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24227-24232 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24352-24357 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24425-24430 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24515-24520 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24664-24669 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24801-24806 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24874-24879 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24989-24994 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:25132-25137 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:25247-25252 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:25415-25420 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:25484-25489 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:25574-25579 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:25726-25731 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:25830-25835 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:25920-25925 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:26121-26126 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:26369-26374 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:26513-26518 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:26603-26608 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:26783-26788 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:26974-26979 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:27103-27108 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:27276-27281 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:27526-27531 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:27717-27722 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:27846-27851 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:28019-28024 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:28218-28223 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:28316-28321 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:28389-28394 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:28479-28484 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:28608-28613 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:28706-28711 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:28779-28784 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:28869-28874 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:29021-29026 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:29150-29155 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:29248-29253 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:29369-29374 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:29525-29530 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:29663-29668 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:29761-29766 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:29859-29864 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:29980-29985 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:30109-30114 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:30182-30187 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:30272-30277 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:30401-30406 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:30499-30504 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:30597-30602 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:30695-30700 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:30817-30822 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:30954-30959 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:31027-31032 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:31280-31285 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:31806-31811 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:32136-32141 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:32234-32239 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:32539-32544 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:32901-32906 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:32999-33004 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33072-33077 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33139-33144 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33310-33315 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33489-33494 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33562-33567 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33629-33634 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33702-33707 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33769-33774 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33914-33919 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:34139-34144 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:34326-34331 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:34470-34475 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:34676-34681 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:34909-34914 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:35248-35253 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:35730-35735 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:36103-36108 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:36256-36261 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:36381-36386 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:36571-36576 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:36858-36863 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:37096-37101 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:37316-37321 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:37536-37541 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:37797-37802 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38045-38050 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38182-38187 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38280-38285 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38378-38383 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38500-38505 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38629-38634 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38727-38732 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38848-38853 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:39000-39005 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:39131-39136 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:39229-39234 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:39327-39332 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:39448-39453 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:39579-39584 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:39861-39866 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:40207-40212 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:40512-40517 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:40993-40998 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:41301-41306 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:41509-41514 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:41748-41753 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:41883-41888 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:41950-41955 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42023-42028 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42090-42095 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42211-42216 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42336-42341 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42409-42414 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42476-42481 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42597-42602 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42722-42727 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42795-42800 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42862-42867 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42983-42988 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43108-43113 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43181-43186 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43248-43253 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43369-43374 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43494-43499 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43567-43572 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43634-43639 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43755-43760 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43880-43885 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43953-43958 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:44020-44025 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:44233-44238 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:44474-44479 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:44547-44552 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:44614-44619 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:44712-44717 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:44810-44815 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:44883-44888 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:44973-44978 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:45102-45107 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:45200-45205 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:45298-45303 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:45396-45401 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:45517-45522 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:45642-45647 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:45767-45772 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:45904-45909 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46002-46007 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46100-46105 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46198-46203 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46296-46301 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46394-46399 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46488-46493 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46586-46591 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46684-46689 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46806-46811 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46979-46984 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:47171-47176 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:47324-47329 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:47497-47502 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:47689-47694 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:47844-47849 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48018-48023 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48223-48228 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48527-48532 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48864-48869 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:50587-50592 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"64f03ce4e5a6055eea400b39d850210886a4839843eecd040791a4816865f698"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 6): embassy-stm32/src/hspi/mod.rs:815-820 | embassy-stm32/src/hspi/mod.rs:891-896 | embassy-stm32/src/ospi/mod.rs:1962-1967 | embassy-stm32/src/ospi/mod.rs:2037-2042 | embassy-stm32/src/xspi/mod.rs:1764-1769 | embassy-stm32/src/xspi/mod.rs:1840-1845 \u2014 \u0060embassy-stm32/src/hspi/mod.rs\u0060 and \u0060embassy-stm32/src/ospi/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 19 separate duplicated blocks between them, totalling at least 220 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hspi/mod.rs"},"region":{"startLine":815}}}],"partialFingerprints":{"codehealthFindingId/v1":"10bd3aff062ad8bd92cdbc6db562055b2162a72545c9837935d8bd4147e186e1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5\u20136 lines \u00D7 5): embassy-nxp/src/spi/lpc55.rs:185-190 | embassy-nxp/src/spi/lpc55.rs:196-200 | embassy-nxp/src/spi/lpc55.rs:206-211 | embassy-nxp/src/usart/lpc55.rs:590-595 | embassy-nxp/src/usart/lpc55.rs:601-605 \u2014 \u0060embassy-nxp/src/spi/lpc55.rs\u0060 and \u0060embassy-nxp/src/usart/lpc55.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 4 separate duplicated blocks between them, totalling at least 48 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nxp/src/spi/lpc55.rs"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"35b95c70f6d4db166b7fea0691706a35809c6bc8253a1fbc4c421b464a716acb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 4): embassy-imxrt/src/flexcomm/uart.rs:861-866 | embassy-imxrt/src/flexcomm/uart.rs:961-966 | embassy-mcxa/src/lpuart/blocking.rs:283-288 | embassy-mcxa/src/lpuart/blocking.rs:358-363 \u2014 there are 4 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 4 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-imxrt/src/flexcomm/uart.rs"},"region":{"startLine":861}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef72dcc18ee87ef0897c9bbe9c2db20bfab58e681fd5216ac048ca043ad6c6b3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 4): embassy-mspm0/src/sysctl/c1103_1104.rs:41-46 | embassy-mspm0/src/sysctl/c1105_1106.rs:41-46 | embassy-mspm0/src/sysctl/h321x.rs:41-46 | embassy-mspm0/src/sysctl/l_typeb.rs:41-46 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from all 4 call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/sysctl/c1103_1104.rs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"73a60f9f0b3a9ee9e9bd6a147201e356c9b5fee3a93d4db05460b606d660fb83"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 4): embassy-stm32/src/spi/mod.rs:807-812 | embassy-stm32/src/spi/mod.rs:856-861 | embassy-stm32/src/spi/mod.rs:877-882 | embassy-stm32/src/spi/mod.rs:901-906 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/spi/mod.rs"},"region":{"startLine":807}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc1a88e4d574d2b8b49f9f0591fc95a95176c0d17954429fec5ad93876b3a687"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): embassy-stm32/src/hspi/mod.rs:408-413 | embassy-stm32/src/ospi/mod.rs:731-736 | embassy-stm32/src/xspi/mod.rs:532-537 \u2014 \u0060embassy-stm32/src/hspi/mod.rs\u0060 and \u0060embassy-stm32/src/ospi/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 19 separate duplicated blocks between them, totalling at least 220 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hspi/mod.rs"},"region":{"startLine":408}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c7e870078c42ca6c3f22d06f9de655673860423fc14a8a9909a7fbae4a05055"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): embassy-stm32/src/hspi/mod.rs:512-517 | embassy-stm32/src/ospi/mod.rs:852-857 | embassy-stm32/src/xspi/mod.rs:651-656 \u2014 \u0060embassy-stm32/src/hspi/mod.rs\u0060 and \u0060embassy-stm32/src/ospi/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 19 separate duplicated blocks between them, totalling at least 220 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hspi/mod.rs"},"region":{"startLine":512}}}],"partialFingerprints":{"codehealthFindingId/v1":"760fc26d1dd07479da6436524745d7b60f0883dffcdf3565cd61e26b0aa31aaa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): embassy-stm32/src/rcc/l.rs:712-717 | embassy-stm32/src/rcc/u5.rs:614-619 | embassy-stm32/src/rcc/wba.rs:491-496 \u2014 before extracting anything, compare \u0060embassy-stm32/src/rcc/u5.rs\u0060 and \u0060embassy-stm32/src/rcc/wba.rs\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 81 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/l.rs"},"region":{"startLine":712}}}],"partialFingerprints":{"codehealthFindingId/v1":"80ead8ed06689b22920232f516c65938efed2485875c88d10d4d4132100f1fbe"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): embassy-stm32/src/flash/c5.rs:330-335 | embassy-stm32/src/flash/h5.rs:204-209 | embassy-stm32/src/flash/h50.rs:145-150 \u2014 before extracting anything, compare \u0060embassy-stm32/src/flash/c5.rs\u0060 and \u0060embassy-stm32/src/flash/h5.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 43 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/c5.rs"},"region":{"startLine":330}}}],"partialFingerprints":{"codehealthFindingId/v1":"d76d8e89c37f1417a9bc8c57df9e7e10441a8e9175f4bdba4d337f4e574b8848"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5\u20136 lines \u00D7 3): embassy-stm32/src/flash/f2.rs:68-73 | embassy-stm32/src/flash/f4.rs:107-111 | embassy-stm32/src/flash/f4.rs:139-144 \u2014 before extracting anything, compare \u0060embassy-stm32/src/flash/f2.rs\u0060 and \u0060embassy-stm32/src/flash/f4.rs\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 105 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/f2.rs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"f95e6861c694b330c811e9dd1433f75d59414385b7b3afa9d1b2ff95b6392d99"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): cyw43/src/lib.rs:499-504 | cyw43/src/lib.rs:535-540 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cyw43/src/lib.rs"},"region":{"startLine":499}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1b86f66701d3fb8777e892b392f0ce870242499f21059a931e9e7752a9238b3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-boot/src/firmware_updater/asynch.rs:158-163 | embassy-boot/src/firmware_updater/blocking.rs:193-198 \u2014 before extracting anything, compare \u0060embassy-boot/src/firmware_updater/asynch.rs\u0060 and \u0060embassy-boot/src/firmware_updater/blocking.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 71 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-boot/src/firmware_updater/asynch.rs"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"658076cfb8916b27b1d54b0dae89b86a5e0172576099aa28d58eb7e0951dca7b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-embedded-hal/src/shared_bus/blocking/spi.rs:59-64 | embassy-embedded-hal/src/shared_bus/blocking/spi.rs:134-139 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-embedded-hal/src/shared_bus/blocking/spi.rs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"f62f4d9810d142f047383dac7bbd163bdde5e546c8a365b33bc9b664e9c8ba0c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-imxrt/src/clocks.rs:1231-1236 | embassy-imxrt/src/clocks.rs:1251-1256 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-imxrt/src/clocks.rs"},"region":{"startLine":1231}}}],"partialFingerprints":{"codehealthFindingId/v1":"a96f5166c75b501c36a3dbe581498157743ea3f467ce141e3dc60c46544b47c6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-mcxa/src/flexspi.rs:1056-1061 | embassy-mcxa/src/flexspi.rs:1290-1295 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/flexspi.rs"},"region":{"startLine":1056}}}],"partialFingerprints":{"codehealthFindingId/v1":"010de92ca29475140ebf11766342febff0ff2f4d8d933b62e304a82fe1bb59a9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-mcxa/src/flexspi.rs:1305-1310 | embassy-mcxa/src/flexspi.rs:1353-1358 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/flexspi.rs"},"region":{"startLine":1305}}}],"partialFingerprints":{"codehealthFindingId/v1":"3af0ace9b169f3827cf4e88974dba6cd6034870fd5588835e3fe0376fb163827"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-mspm0/src/low_power/c110x.rs:53-58 | embassy-mspm0/src/low_power/h321x.rs:49-54 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/low_power/c110x.rs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"ffa1f3e4bfc1cfd65dd4c1bf2ece693bafbd8f14dc92749442336d8ae17f23df"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-mspm0/src/sysctl/g110x_150x_310x_350x.rs:47-52 | embassy-mspm0/src/sysctl/g151x_351x.rs:47-52 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/sysctl/g110x_150x_310x_350x.rs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"533c9feaa6767cc0c5e7fa1c37b89ca6dd0c3845e4669321903c1de1cd3f01ef"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-mspm0/src/sysctl/g110x_150x_310x_350x.rs:58-63 | embassy-mspm0/src/sysctl/g151x_351x.rs:58-63 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/sysctl/g110x_150x_310x_350x.rs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"582183768c6b94c5a05f6a39267c3cccbe495a3ec97a0bd1fc6f75c6274d8733"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-mspm0/src/sysctl/h321x.rs:51-57 | embassy-mspm0/src/sysctl/l_typeb.rs:51-56 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/sysctl/h321x.rs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"b125bbc49671a8d11ba50aec034d1287365ac74951ae1577f348382f4a9801cb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-nrf/src/buffered_uarte/v1.rs:449-454 | embassy-nrf/src/buffered_uarte/v1.rs:695-700 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/buffered_uarte/v1.rs"},"region":{"startLine":449}}}],"partialFingerprints":{"codehealthFindingId/v1":"78fea865a7c4d5b1a04b8cf53e4c2299ee3708512877e3830000c30f9d3896ed"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-nrf/src/crypto/symmetric/aes_cracen.rs:226-231 | embassy-nrf/src/crypto/symmetric/chacha_cracen.rs:164-169 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/crypto/symmetric/aes_cracen.rs"},"region":{"startLine":226}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ee899348e69f83dfccbdc039ca662af005467d9ca85223363d4867847aec765"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-nrf/src/spim.rs:314-319 | embassy-nrf/src/spim.rs:561-566 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/spim.rs"},"region":{"startLine":314}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d844aaeb73f9fbfc2703b804cdf493169d0c5d7618c4b3891ac1c840aac106c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-nrf/src/spis.rs:234-239 | embassy-nrf/src/spis.rs:446-451 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/spis.rs"},"region":{"startLine":234}}}],"partialFingerprints":{"codehealthFindingId/v1":"c104ca0f324df9865fcaa384db00616b950bdf2107c2864f90a52033d674e65d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-nrf/src/wdt.rs:41-46 | embassy-nrf/src/wdt.rs:94-99 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/wdt.rs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"35a26262f2481cea5c3cce462a74d1f73517a088948f7f572d34bb6f28fe1775"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-nrf/src/ppi/dppi.rs:93-98 | embassy-nrf/src/ppi/dppi.rs:115-120 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/ppi/dppi.rs"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e7adff16bed97ca6ba0e04f5702f5c43737779485b5c14ff86bd0fe1ec2f903"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-nxp/src/adc/lpc55.rs:267-272 | embassy-nxp/src/adc/lpc55.rs:310-315 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nxp/src/adc/lpc55.rs"},"region":{"startLine":267}}}],"partialFingerprints":{"codehealthFindingId/v1":"59c2988745623c0fe84ef46f531fd0460ba6589e01fc88c84b32d43dadcad751"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-nxp/src/adc/lpc55.rs:358-363 | embassy-nxp/src/adc/lpc55.rs:366-371 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nxp/src/adc/lpc55.rs"},"region":{"startLine":358}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c97c114d8f683a848163bffb2d7786923f876d0a6404799c6fec22afa13ed13"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-nxp/src/i2c/lpc55.rs:320-325 | embassy-nxp/src/i2c/lpc55.rs:565-570 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nxp/src/i2c/lpc55.rs"},"region":{"startLine":320}}}],"partialFingerprints":{"codehealthFindingId/v1":"35db8479e298bfd3ebaa9bbc1fd77c5ab390562df9175dc4963222bd52c5ab76"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-rp/src/gpio.rs:661-666 | embassy-rp/src/pio/mod.rs:248-253 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/gpio.rs"},"region":{"startLine":661}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcffa9740b3866605370a9e0f1530cd7bc1b0b66a70b5e08b7efe928f977b271"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-rp/src/gpio.rs:883-888 | embassy-rp/src/gpio.rs:907-912 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/gpio.rs"},"region":{"startLine":883}}}],"partialFingerprints":{"codehealthFindingId/v1":"6313e5943821490d67e90df5bc205dbe7fd8a91e3a84d5bf33e2562d5d310564"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-stm32/src/can/bxcan/mod.rs:636-641 | embassy-stm32/src/can/bxcan/mod.rs:665-670 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/can/bxcan/mod.rs"},"region":{"startLine":636}}}],"partialFingerprints":{"codehealthFindingId/v1":"32b09501d3e74514fe74912253e73715075d1e4a1755aa70bfd579f0b2f0fba2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-stm32/src/cordic/mod.rs:189-194 | embassy-stm32/src/cordic/mod.rs:250-255 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/cordic/mod.rs"},"region":{"startLine":189}}}],"partialFingerprints":{"codehealthFindingId/v1":"b137463079b9427ebb858daeac48737df7fa534fefc918ae1377b62f084283f7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-stm32/src/cordic/mod.rs:272-277 | embassy-stm32/src/cordic/mod.rs:379-384 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/cordic/mod.rs"},"region":{"startLine":272}}}],"partialFingerprints":{"codehealthFindingId/v1":"e06901ff737fe4ac6830b196368052289e76b45f8d6d3449cb8860bb18bc22a6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-stm32/src/cryp/mod.rs:841-846 | embassy-stm32/src/cryp/mod.rs:1411-1416 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/cryp/mod.rs"},"region":{"startLine":841}}}],"partialFingerprints":{"codehealthFindingId/v1":"26e5c9132371b2d74df4409a5a3ecaf2d0c334b6f2718e09b99133f8a3338b6c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-stm32/src/dfsdm/transceiver.rs:608-613 | embassy-stm32/src/dfsdm/transceiver.rs:735-740 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/dfsdm/transceiver.rs"},"region":{"startLine":608}}}],"partialFingerprints":{"codehealthFindingId/v1":"055657cd8b7e9a58a8956cf1ee2f40bd0cfc35b17dd6b049b37beca09392beb7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-stm32/src/i2c/v1.rs:791-796 | embassy-stm32/src/i2c/v1.rs:816-821 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i2c/v1.rs"},"region":{"startLine":791}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb5f903427973d86e6b032f2ec95a37cb1ab491b26d22032adf60c30c49d1565"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-stm32/src/opamp.rs:346-351 | embassy-stm32/src/opamp.rs:376-381 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/opamp.rs"},"region":{"startLine":346}}}],"partialFingerprints":{"codehealthFindingId/v1":"975b808ab65f73722a42d800f7b2a12fbe7b78ffbce5659e96e678e19672dc22"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-stm32/src/opamp.rs:407-412 | embassy-stm32/src/opamp.rs:436-441 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/opamp.rs"},"region":{"startLine":407}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fa62a6ae75875f2c27efd238def66f6039b49455e9fe5a99cbce2cfad5dbb55"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-stm32/src/rcc/c0.rs:194-199 | embassy-stm32/src/rcc/g0.rs:285-290 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/c0.rs"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"2cd3136f4966bc8534fec3647f003419e86a4ee2895bbbc3b90135c2dd72d7a5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-stm32/src/rcc/u5.rs:484-489 | embassy-stm32/src/rcc/wba.rs:393-398 \u2014 before extracting anything, compare \u0060embassy-stm32/src/rcc/u5.rs\u0060 and \u0060embassy-stm32/src/rcc/wba.rs\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 81 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/u5.rs"},"region":{"startLine":484}}}],"partialFingerprints":{"codehealthFindingId/v1":"75fad113ea878717526e6c03982da4be14c69b559843848dd9b05ff99af036ca"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-stm32/src/rcc/u5.rs:643-648 | embassy-stm32/src/rcc/wba.rs:532-537 \u2014 before extracting anything, compare \u0060embassy-stm32/src/rcc/u5.rs\u0060 and \u0060embassy-stm32/src/rcc/wba.rs\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 81 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/u5.rs"},"region":{"startLine":643}}}],"partialFingerprints":{"codehealthFindingId/v1":"ddfc07c0179771dd04e540a8ef262e4d1ff375066594dcf1c32da68cb3490c14"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-stm32/src/timer/complementary_pwm.rs:672-677 | embassy-stm32/src/timer/simple_pwm.rs:493-498 \u2014 before extracting anything, compare \u0060embassy-stm32/src/timer/complementary_pwm.rs\u0060 and \u0060embassy-stm32/src/timer/simple_pwm.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 48 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/timer/complementary_pwm.rs"},"region":{"startLine":672}}}],"partialFingerprints":{"codehealthFindingId/v1":"962ca80f656e5afbc245e1af5f2a62e25d91db7d32fe1ea0fd04f3904fc1c9ff"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-stm32/src/ucpd.rs:600-605 | embassy-stm32/src/ucpd.rs:644-649 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/ucpd.rs"},"region":{"startLine":600}}}],"partialFingerprints":{"codehealthFindingId/v1":"678068b4044f275bab4fc5ad71abc0b504f96f444e250cd1b422dfff9de6fc54"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-stm32/src/usart/mod.rs:1666-1671 | embassy-stm32/src/usart/mod.rs:2041-2046 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usart/mod.rs"},"region":{"startLine":1666}}}],"partialFingerprints":{"codehealthFindingId/v1":"df9d22a077e43908ddcee3bfb79696a4782ee8eeb5a363592a9b7cd3cf392fe5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-stm32/src/usart/mod.rs:1847-1852 | embassy-stm32/src/usart/mod.rs:2191-2196 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usart/mod.rs"},"region":{"startLine":1847}}}],"partialFingerprints":{"codehealthFindingId/v1":"44e6d560daac0214fd943cb53a2b7220f5c2d8c9dcb78c8af05a8a50d2d63d69"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-stm32/src/usart/mod.rs:1942-1947 | embassy-stm32/src/usart/mod.rs:2268-2273 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usart/mod.rs"},"region":{"startLine":1942}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5fda4d4ac33901daf999376531c6f8f696514f35b9457f65bb14149b09ba049"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-stm32/src/usb/usb.rs:541-546 | embassy-stm32/src/usb/usb_host.rs:346-352 \u2014 before extracting anything, compare \u0060embassy-stm32/src/usb/usb.rs\u0060 and \u0060embassy-stm32/src/usb/usb_host.rs\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 53 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usb/usb.rs"},"region":{"startLine":541}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a1a150b97e36972497d5a44cebb98ab41eaabf7ab72bd0da4a5ef6e986ee264"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 8): embassy-stm32/src/crypto_driver.rs:386-390 | embassy-stm32/src/crypto_driver.rs:402-406 | embassy-stm32/src/crypto_driver.rs:428-432 | embassy-stm32/src/crypto_driver.rs:444-448 | embassy-stm32/src/crypto_driver.rs:470-474 | embassy-stm32/src/crypto_driver.rs:500-504 | embassy-stm32/src/crypto_driver.rs:540-544 | embassy-stm32/src/crypto_driver.rs:570-574 \u2014 all 8 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/crypto_driver.rs"},"region":{"startLine":386}}}],"partialFingerprints":{"codehealthFindingId/v1":"ffaa807bac3e2f6975d688c995438af3bfd655a7813702d01a895fe26e7f9dda"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 7): embassy-mspm0/src/sysctl/c1103_1104.rs:39-43 | embassy-mspm0/src/sysctl/c1105_1106.rs:39-43 | embassy-mspm0/src/sysctl/g110x_150x_310x_350x.rs:44-48 | embassy-mspm0/src/sysctl/g151x_351x.rs:44-48 | embassy-mspm0/src/sysctl/g511x_518x.rs:49-53 | embassy-mspm0/src/sysctl/h321x.rs:39-43 | embassy-mspm0/src/sysctl/l_typeb.rs:39-43 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from all 7 call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/sysctl/c1103_1104.rs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f7e839ef19549b82a3a9d3869f08906e8aeb41810a5857dcb14e8ea21259c16"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 5): embassy-mspm0/src/sysctl/g110x_150x_310x_350x.rs:55-59 | embassy-mspm0/src/sysctl/g151x_351x.rs:55-59 | embassy-mspm0/src/sysctl/g511x_518x.rs:61-65 | embassy-mspm0/src/sysctl/h321x.rs:49-54 | embassy-mspm0/src/sysctl/l_typeb.rs:49-53 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from all 5 call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/sysctl/g110x_150x_310x_350x.rs"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"8fda85f1e106c50a6323c4e5b6c3dce83bb82415906d0dfd8cc40846684c45ff"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 5): embassy-nxp/src/i2c/lpc55.rs:252-256 | embassy-nxp/src/spi/lpc55.rs:182-186 | embassy-nxp/src/spi/lpc55.rs:193-197 | embassy-nxp/src/usart/lpc55.rs:587-591 | embassy-nxp/src/usart/lpc55.rs:598-602 \u2014 \u0060embassy-nxp/src/spi/lpc55.rs\u0060 and \u0060embassy-nxp/src/usart/lpc55.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 4 separate duplicated blocks between them, totalling at least 48 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nxp/src/i2c/lpc55.rs"},"region":{"startLine":252}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e0c1efb976e0dca52783db52af9c303ade71b366c55d017a25d37eae64259cd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 4): embassy-executor/src/platform/cortex_m.rs:234-238 | embassy-mspm0/src/executor.rs:249-253 | embassy-rp/src/executor.rs:256-260 | embassy-stm32/src/executor.rs:275-279 \u2014 before extracting anything, compare \u0060embassy-executor/src/platform/cortex_m.rs\u0060 and \u0060embassy-mspm0/src/executor.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 44 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-executor/src/platform/cortex_m.rs"},"region":{"startLine":234}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb0e59064938878c47f5710253e3afcd68c44a94b1232663fca1657eec1cc63c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 4): embassy-net-nrf91/src/context.rs:160-164 | embassy-net-nrf91/src/context.rs:174-178 | embassy-net-nrf91/src/context.rs:316-321 | embassy-net-nrf91/src/context.rs:341-345 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-nrf91/src/context.rs"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ff06c6ffe23e20bb5b14572ce0d6b0255ff643bcafc1a0fa9105cab83213b95"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 4): embassy-stm32/src/rcc/f013.rs:181-185 | embassy-stm32/src/rcc/f247.rs:183-187 | embassy-stm32/src/rcc/g0.rs:142-146 | embassy-stm32/src/rcc/g4.rs:129-133 \u2014 before extracting anything, compare \u0060embassy-stm32/src/rcc/f013.rs\u0060 and \u0060embassy-stm32/src/rcc/f247.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 33 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/f013.rs"},"region":{"startLine":181}}}],"partialFingerprints":{"codehealthFindingId/v1":"f75a67ecdb537da3c21300e27840bb4fc3eedb4e9c4dbae5effbb5bfac2c5afb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 4): embassy-stm32/src/flash/c5.rs:137-142 | embassy-stm32/src/flash/h5.rs:58-63 | embassy-stm32/src/flash/h7.rs:85-89 | embassy-stm32/src/flash/h7.rs:131-135 \u2014 before extracting anything, compare \u0060embassy-stm32/src/flash/c5.rs\u0060 and \u0060embassy-stm32/src/flash/h5.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 43 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/c5.rs"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cab111de3f6f7e0104f5905312e0ecef5ad4de59aaa7ba4293b6e700c56302f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): embassy-mcxa/src/spi/controller.rs:265-269 | embassy-mcxa/src/spi/controller.rs:290-295 | embassy-mcxa/src/spi/controller.rs:365-370 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/spi/controller.rs"},"region":{"startLine":265}}}],"partialFingerprints":{"codehealthFindingId/v1":"4860c8627751e7aa248e89065772f53beba5faad68d8dae1829780cc81780b29"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): embassy-nrf/src/buffered_uarte/v1.rs:322-326 | embassy-nrf/src/buffered_uarte/v1.rs:458-462 | embassy-nrf/src/buffered_uarte/v1.rs:704-708 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/buffered_uarte/v1.rs"},"region":{"startLine":322}}}],"partialFingerprints":{"codehealthFindingId/v1":"54653875f683061113bdc7cf78772864f23c565eb0d3d5d7bfdeaa32f0119b47"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): embassy-nrf/src/buffered_uarte/v2.rs:229-233 | embassy-nrf/src/buffered_uarte/v2.rs:362-366 | embassy-nrf/src/buffered_uarte/v2.rs:551-555 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/buffered_uarte/v2.rs"},"region":{"startLine":229}}}],"partialFingerprints":{"codehealthFindingId/v1":"f45ec144d60b089f56559a61f69d9faa97854ee3724ad177b05e8859b65bbade"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): embassy-rp/src/flash.rs:539-543 | embassy-rp/src/flash.rs:572-576 | embassy-rp/src/flash.rs:610-614 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/flash.rs"},"region":{"startLine":539}}}],"partialFingerprints":{"codehealthFindingId/v1":"c97ceeda17f687777e2695362a89e3bc2d531fbe71310993bc966247e7ee3c24"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): embassy-stm32/src/dma/dma_bdma.rs:477-481 | embassy-stm32/src/dma/dma_bdma.rs:485-489 | embassy-stm32/src/dma/gpdma/mod.rs:530-534 \u2014 there are 3 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 3 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/dma/dma_bdma.rs"},"region":{"startLine":477}}}],"partialFingerprints":{"codehealthFindingId/v1":"77305aeaf04ff61064cdc7c2495aa59986b26340dd3de408fbb8df2420af1922"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): embassy-stm32/src/hspi/mod.rs:522-526 | embassy-stm32/src/ospi/mod.rs:862-866 | embassy-stm32/src/xspi/mod.rs:661-665 \u2014 \u0060embassy-stm32/src/hspi/mod.rs\u0060 and \u0060embassy-stm32/src/ospi/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 19 separate duplicated blocks between them, totalling at least 220 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hspi/mod.rs"},"region":{"startLine":522}}}],"partialFingerprints":{"codehealthFindingId/v1":"e84fffcd1ee24f2c59f8bc7a1df9ffbdf3ac43de3cbeeb19207b58e14757c732"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): embassy-stm32/src/hspi/mod.rs:541-546 | embassy-stm32/src/hspi/mod.rs:817-821 | embassy-stm32/src/hspi/mod.rs:893-897 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hspi/mod.rs"},"region":{"startLine":541}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba839ed0fff91217175bebba2defdcb95e5f3451fcb8f8899654068b6c19c0f0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): embassy-stm32/src/hspi/mod.rs:553-557 | embassy-stm32/src/ospi/mod.rs:893-897 | embassy-stm32/src/xspi/mod.rs:692-696 \u2014 \u0060embassy-stm32/src/hspi/mod.rs\u0060 and \u0060embassy-stm32/src/ospi/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 19 separate duplicated blocks between them, totalling at least 220 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hspi/mod.rs"},"region":{"startLine":553}}}],"partialFingerprints":{"codehealthFindingId/v1":"0692dae9479cda5d23a90987678804467d3442969cb79a3e430b2c532c76d21e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): embassy-stm32/src/ospi/mod.rs:881-886 | embassy-stm32/src/ospi/mod.rs:1964-1968 | embassy-stm32/src/ospi/mod.rs:2039-2043 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/ospi/mod.rs"},"region":{"startLine":881}}}],"partialFingerprints":{"codehealthFindingId/v1":"1cfb6f4255a66c033e79fb202c4a106213eb01638f19f74d5441f859b2e1e892"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): embassy-stm32/src/rcc/c0.rs:135-139 | embassy-stm32/src/rcc/f013.rs:212-216 | embassy-stm32/src/rcc/f247.rs:208-212 \u2014 before extracting anything, compare \u0060embassy-stm32/src/rcc/f013.rs\u0060 and \u0060embassy-stm32/src/rcc/f247.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 33 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/c0.rs"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"e141f3da95e286387f1933dab250ee8891ff51e70a27ca714b59fada6d655df2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-embedded-hal/src/shared_bus/asynch/spi.rs:69-73 | embassy-embedded-hal/src/shared_bus/asynch/spi.rs:165-169 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-embedded-hal/src/shared_bus/asynch/spi.rs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"63da61e251a53688294d6a2e98076e89f7dd0141d7035a73f82af973707cbc00"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-imxrt/src/flexcomm/mod.rs:138-142 | embassy-imxrt/src/flexcomm/mod.rs:181-185 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-imxrt/src/flexcomm/mod.rs"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"19e30d41c7d303e2b551a8a3370f94e846211b86483fe982596db6aff6a2f9b3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-imxrt/src/flexcomm/mod.rs:146-150 | embassy-imxrt/src/flexcomm/mod.rs:188-192 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-imxrt/src/flexcomm/mod.rs"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cadcd05743f41a12b444d79da505b8d42521d211adddbf036d71312d63274d5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-mcxa/src/gpio.rs:609-613 | embassy-mcxa/src/gpio.rs:621-625 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/gpio.rs"},"region":{"startLine":609}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4c6e26036d292b3461cddad3efa4280e7cd73ed499bbd2781e9d7ba618a337b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-mcxa/src/lpuart/bbq.rs:1858-1862 | embassy-mcxa/src/lpuart/bbq.rs:1878-1882 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/lpuart/bbq.rs"},"region":{"startLine":1858}}}],"partialFingerprints":{"codehealthFindingId/v1":"98bfa01b66bcba2477ce6bd4cc7ec2dfd47f894090b234a930bcafe163a0f07d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (4\u20135 lines \u00D7 3): embassy-mcxa/src/spi/controller.rs:1004-1008 | embassy-mcxa/src/spi/controller.rs:1036-1039 | embassy-mcxa/src/spi/controller.rs:1082-1086 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/spi/controller.rs"},"region":{"startLine":1004}}}],"partialFingerprints":{"codehealthFindingId/v1":"6eb15d41162d257f9f7b82dfc001603932140a475eaf081679df1f29799ed6d9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-mcxa/src/spi/controller.rs:1067-1071 | embassy-mcxa/src/spi/controller.rs:1219-1223 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/spi/controller.rs"},"region":{"startLine":1067}}}],"partialFingerprints":{"codehealthFindingId/v1":"c24614896856d8f33ea97aabc3024b52de536c1b0037ad6706ca7fc4c005164d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-mspm0/src/low_power/full.rs:45-49 | embassy-mspm0/src/low_power/h321x.rs:42-46 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/low_power/full.rs"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"e860af1595227e5ae912cb8d73de6ccd9a669721fcb53b976406cd3729ac389a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-net/src/tcp.rs:1255-1259 | embassy-net/src/tcp.rs:1270-1274 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net/src/tcp.rs"},"region":{"startLine":1255}}}],"partialFingerprints":{"codehealthFindingId/v1":"938fad9359b68af357520a7738b7103657daa644b3b81f5e85beef0aeb6d7583"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-nrf/src/crypto/pka/driver.rs:119-123 | embassy-stm32/src/pka/driver.rs:136-140 \u2014 before extracting anything, compare \u0060embassy-nrf/src/crypto/pka/driver.rs\u0060 and \u0060embassy-stm32/src/pka/driver.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 1170 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/crypto/pka/driver.rs"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5fd5b5f3bd9f80941f0705437916602478e4b8d721ac0b0b5ca516afb8183c4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-nrf/src/uarte.rs:1012-1016 | embassy-nrf/src/uarte.rs:1268-1272 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/uarte.rs"},"region":{"startLine":1012}}}],"partialFingerprints":{"codehealthFindingId/v1":"31b51738316eeab0a97e8d8a9649b32992907319fcf8cd4026368cd60d078fa1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-rp/src/rtc/mod.rs:59-63 | embassy-rp/src/rtc/mod.rs:100-104 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/rtc/mod.rs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"d376d1d9325341d50c3c8d529a33cc452f02b1ca97368a79c378f4a42536ec08"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-rp/src/rtc/mod.rs:68-72 | embassy-rp/src/rtc/mod.rs:109-113 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/rtc/mod.rs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"11888e672a14f31d5e061ada6995288296d87ecc6de2474f90c5b6d7af0b24b8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-rp/src/usb/device.rs:42-46 | embassy-rp/src/usb/mod.rs:75-79 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/usb/device.rs"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"25f785095580319472c32233d98686b25cc10b4316d3d2b63190f095aca12d5b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-rp/src/usb/device.rs:50-54 | embassy-rp/src/usb/mod.rs:83-87 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/usb/device.rs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d6bc577aa33e21c20f7c20f772517885f52433e6849c9e54ad50aa09b60164a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-stm32/src/adc/v2.rs:555-559 | embassy-stm32/src/adc/v3.rs:595-599 \u2014 before extracting anything, compare \u0060embassy-stm32/src/adc/v2.rs\u0060 and \u0060embassy-stm32/src/adc/v3.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 78 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/adc/v2.rs"},"region":{"startLine":555}}}],"partialFingerprints":{"codehealthFindingId/v1":"616a38094fa5651ca2195333759f70784b41455dd94810eed7e870d4b8f88192"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-stm32/src/can/fdcan.rs:373-377 | embassy-stm32/src/can/fdcan.rs:740-744 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/can/fdcan.rs"},"region":{"startLine":373}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d6846f34b5f0a1df96fe5a4611a68518dbb0d98dc94d611fa2fea02a5383285"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-stm32/src/can/fdcan.rs:420-424 | embassy-stm32/src/can/fdcan.rs:766-770 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/can/fdcan.rs"},"region":{"startLine":420}}}],"partialFingerprints":{"codehealthFindingId/v1":"e29dfe5845d10365701652fc40881e8cb58ac4779612bd7d58fda0a91109491a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-stm32/src/crypto_driver.rs:159-163 | embassy-stm32/src/crypto_driver.rs:796-800 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/crypto_driver.rs"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca3ef73e8e2089f9878ea5f323ef7c40b5328ff32ed51043c300d064acf01f9e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-stm32/src/crypto_driver.rs:625-629 | embassy-stm32/src/crypto_driver.rs:688-692 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/crypto_driver.rs"},"region":{"startLine":625}}}],"partialFingerprints":{"codehealthFindingId/v1":"11a4f052686e3868f7d0fca1a74e988af3234254b71c1cde4d0631c343703404"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-stm32/src/crypto_driver.rs:649-653 | embassy-stm32/src/crypto_driver.rs:712-716 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/crypto_driver.rs"},"region":{"startLine":649}}}],"partialFingerprints":{"codehealthFindingId/v1":"d98489a7182a1b88ec5f4bfa597f20778c4a6de39fcdd6ce1f86100d869c9b2d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-stm32/src/fmac/mod.rs:256-260 | embassy-stm32/src/fmac/mod.rs:273-277 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/fmac/mod.rs"},"region":{"startLine":256}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8d4a502f0c41664296adb92b82c24219ae9db45abfe81098b9b60ca8991c7fc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (3\u20135 lines \u00D7 3): embassy-stm32/src/hash/mod.rs:450-452 | embassy-stm32/src/hash/mod.rs:512-516 | embassy-stm32/src/hash/mod.rs:574-578 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hash/mod.rs"},"region":{"startLine":450}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f031f5b7569f05c56d9394543acaafcd16e6ec9e4c33b486e98281b54cc85ce"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-stm32/src/hash/mod.rs:657-661 | embassy-stm32/src/hash/mod.rs:670-674 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hash/mod.rs"},"region":{"startLine":657}}}],"partialFingerprints":{"codehealthFindingId/v1":"d50e89a3a83163beb10803beeae75aa9e19a21059b8dd50f057b408a350b9f74"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-stm32/src/hrtim/fullbridge.rs:46-50 | embassy-stm32/src/hrtim/fullbridge.rs:158-162 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hrtim/fullbridge.rs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"82dd4425feedca6993371250dfbeb388945a37e8332938756722aae64d1ccb84"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-stm32/src/i2c/v1.rs:188-195 | embassy-stm32/src/i2c/v1.rs:551-555 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i2c/v1.rs"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"e29a788bf3c2de0247df466b1a67e5b0104db4a24c97da86d34f87c9f5e19722"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-stm32/src/i2c/v1.rs:348-352 | embassy-stm32/src/i2c/v1.rs:866-870 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i2c/v1.rs"},"region":{"startLine":348}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7bcbc57c8c54d193cfc82f0eaecdd5f5d7c851d73c72c9a28c3d6da0a88b0f0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-stm32/src/ipcc.rs:31-35 | embassy-stm32/src/ipcc.rs:87-91 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/ipcc.rs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"3227fffe19233d48b0bdf06cd614c967ddff2e656b0f32154de2ab9330281edd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-stm32/src/jpeg.rs:464-469 | embassy-stm32/src/jpeg.rs:683-687 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/jpeg.rs"},"region":{"startLine":464}}}],"partialFingerprints":{"codehealthFindingId/v1":"740cc895246b2a031a75f3c70c8efd77fc77f1e64806bd734b671893d4c7a7a1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-stm32/src/jpeg.rs:1261-1265 | embassy-stm32/src/jpeg.rs:1279-1283 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/jpeg.rs"},"region":{"startLine":1261}}}],"partialFingerprints":{"codehealthFindingId/v1":"34eca72e88f4b221c26699007e6d1ef67dd825f620ddc84ee045773695f04781"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-stm32/src/qspi/mod.rs:284-288 | embassy-stm32/src/qspi/mod.rs:408-412 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/qspi/mod.rs"},"region":{"startLine":284}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebf7a301307f5b3ea486039371cec6d8f705f93ad88668e3b9674b3be2cabc70"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-stm32/src/rcc/g0.rs:167-171 | embassy-stm32/src/rcc/g4.rs:154-158 \u2014 before extracting anything, compare \u0060embassy-stm32/src/rcc/g0.rs\u0060 and \u0060embassy-stm32/src/rcc/g4.rs\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 63 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/g0.rs"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"e57c512b460a65e6183e87fd3dd0dd741077c16c7ede0605244864b46674c7d4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-stm32/src/rcc/h.rs:422-426 | embassy-stm32/src/rcc/h.rs:435-439 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/h.rs"},"region":{"startLine":422}}}],"partialFingerprints":{"codehealthFindingId/v1":"92b2631b30b9edb68fea18114bde441f483a89613d3391db91d04f06bcfd9ee0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-stm32/src/rcc/u5.rs:638-642 | embassy-stm32/src/rcc/wba.rs:527-531 \u2014 before extracting anything, compare \u0060embassy-stm32/src/rcc/u5.rs\u0060 and \u0060embassy-stm32/src/rcc/wba.rs\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 81 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/u5.rs"},"region":{"startLine":638}}}],"partialFingerprints":{"codehealthFindingId/v1":"e823be2bf070c39bfdf9c3975eff3e1a1a63d4116fa2649046a05e16e9f28023"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-stm32/src/rcc/u5.rs:656-660 | embassy-stm32/src/rcc/wba.rs:541-545 \u2014 before extracting anything, compare \u0060embassy-stm32/src/rcc/u5.rs\u0060 and \u0060embassy-stm32/src/rcc/wba.rs\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 81 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/u5.rs"},"region":{"startLine":656}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a36ddd18e937d074fd7d8ef099271d414f2c67ae0c6ee1234c4837da975746e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-stm32/src/timer/complementary_pwm.rs:655-659 | embassy-stm32/src/timer/simple_pwm.rs:474-478 \u2014 before extracting anything, compare \u0060embassy-stm32/src/timer/complementary_pwm.rs\u0060 and \u0060embassy-stm32/src/timer/simple_pwm.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 48 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/timer/complementary_pwm.rs"},"region":{"startLine":655}}}],"partialFingerprints":{"codehealthFindingId/v1":"34f44110f34afe82e82e88c7d382b4f3128f274387c5550d50295cd9668dc391"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-stm32-wpan/src/bluetooth/gap/types.rs:174-178 | embassy-stm32-wpan/src/bluetooth/gap/types.rs:186-190 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32-wpan/src/bluetooth/gap/types.rs"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"168237a26a368664789c803dd66fada15a447ba40ee4e57ce29b53b2cf788e6b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (3\u20135 lines \u00D7 3): embassy-usb-host/src/descriptor.rs:1039-1041 | embassy-usb-host/src/descriptor.rs:1133-1137 | embassy-usb-host/src/descriptor.rs:1191-1195 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb-host/src/descriptor.rs"},"region":{"startLine":1039}}}],"partialFingerprints":{"codehealthFindingId/v1":"c339c3ef84a1eac0bea0aca8f3fb3357696dbcd7a6f62abd56ba1a9ee85374f7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 27): cyw43/src/fmt.rs:267-288 | embassy-boot-nrf/src/fmt.rs:248-269 | embassy-boot-rp/src/fmt.rs:248-269 | embassy-boot-stm32/src/fmt.rs:248-269 | embassy-boot/src/fmt.rs:248-269 | embassy-executor/src/fmt.rs:248-269 | embassy-futures/src/fmt.rs:248-269 | embassy-hal-internal/src/fmt.rs:248-269 | embassy-imxrt/src/fmt.rs:235-256 | embassy-microchip/src/fmt.rs:235-256 | embassy-mspm0/src/fmt.rs:248-269 | embassy-net-adin1110/src/fmt.rs:248-269 | embassy-net-driver-channel/src/fmt.rs:248-269 | embassy-net-enc28j60/src/fmt.rs:248-269 | embassy-net-esp-hosted/src/fmt.rs:248-269 | embassy-net-nrf91/src/fmt.rs:252-273 | embassy-net-ppp/src/fmt.rs:248-269 | embassy-net/src/fmt.rs:248-269 | embassy-nrf/src/fmt.rs:248-269 | embassy-nxp/src/fmt.rs:261-282 | embassy-rp/src/fmt.rs:248-269 | embassy-stm32/src/fmt.rs:280-301 | embassy-sync/src/fmt.rs:248-269 | embassy-time/src/fmt.rs:248-269 | embassy-usb-dfu/src/fmt.rs:248-269 | embassy-usb-synopsys-otg/src/fmt.rs:248-269 | embassy-usb/src/fmt.rs:248-269 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 27 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 27 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cyw43/src/fmt.rs"},"region":{"startLine":267}}}],"partialFingerprints":{"codehealthFindingId/v1":"903013ef0e82a9d85084fd91d66dcbfaab10c4c0029130b2ff5491fc049300d0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (641 lines \u00D7 3): embassy-nrf/src/chips/nrf54l05_app.rs:203-843 | embassy-nrf/src/chips/nrf54l10_app.rs:203-843 | embassy-nrf/src/chips/nrf54l15_app.rs:203-843 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from all 3 call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/chips/nrf54l05_app.rs"},"region":{"startLine":203}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a3796c7c73008d4737de6854c8ac28c39a9a604c1ab7c55045d1468d31405bf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (237 lines \u00D7 2): embassy-nrf/src/chips/nrf9120.rs:138-374 | embassy-nrf/src/chips/nrf9160.rs:138-374 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/chips/nrf9120.rs"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"03024ece0398406ef1d5027cc97096376d06a5c6283496a6f2a2e9d45fc938cf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (63 lines \u00D7 2): embassy-nrf/src/time.rs:11-73 | embassy-rp/src/time.rs:11-73 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/time.rs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"c152d4a36e97011549f7649e1d26cab2d09050ee6c3dea3da0f2a6ea28216fd7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): cyw43/src/bluetooth.rs:29-35 | embassy-net-esp-hosted/src/bluetooth.rs:49-55 \u2014 before extracting anything, compare \u0060cyw43/src/bluetooth.rs\u0060 and \u0060embassy-net-esp-hosted/src/bluetooth.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 55 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cyw43/src/bluetooth.rs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb7bee51aeb93bce19a1008a8adad2c7ab6256e0e46a080e2f2cdf2f5e456979"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 4): cyw43/src/structs.rs:18-27 | cyw43/src/structs.rs:31-41 | embassy-net-esp-hosted/src/lib.rs:51-60 | embassy-net-esp-hosted/src/lib.rs:63-73 \u2014 there are 4 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 4 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cyw43/src/structs.rs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"387d89f5549b08dc5d13bee92735065ecefaf19180222388f1f051feb4d7aaba"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-boot-nrf/src/lib.rs:22-30 | embassy-boot-rp/src/lib.rs:29-37 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-boot-nrf/src/lib.rs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1e8443f43a025b275a7ce0a3e02e03d52acde24dd3bac3f9dec9db267118169"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-boot-rp/src/lib.rs:42-47 | embassy-boot-stm32/src/lib.rs:36-41 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-boot-rp/src/lib.rs"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"7fa7ab3cd1be8f421b5cbcdb75ff3f80e6911130e87a1a124f446e5a51575288"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-crypto/src/ct.rs:6-15 | embassy-nrf/src/crypto/symmetric/driver.rs:40-49 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-crypto/src/ct.rs"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cdfb42b38549d5439504f1e814ebb5b619fe81862f4b815e245853902810249"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 7): embassy-executor/build_common.rs:32-36 | embassy-hal-internal/build_common.rs:32-36 | embassy-mcxa/build_common.rs:32-36 | embassy-mspm0/build_common.rs:32-36 | embassy-nxp/build_common.rs:32-36 | embassy-stm32/build_common.rs:32-36 | embassy-sync/build_common.rs:32-36 \u2014 \u0060embassy-executor/build_common.rs\u0060 and \u0060embassy-hal-internal/build_common.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 4 separate duplicated blocks between them, totalling at least 42 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-executor/build_common.rs"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"c93a7ab199ac36e450d9ebb9bdfd07d641eb3d18faa780416da582b5d3bfe3fd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 7): embassy-executor/build_common.rs:47-51 | embassy-hal-internal/build_common.rs:47-51 | embassy-mcxa/build_common.rs:47-51 | embassy-mspm0/build_common.rs:47-51 | embassy-nxp/build_common.rs:47-51 | embassy-stm32/build_common.rs:47-51 | embassy-sync/build_common.rs:47-51 \u2014 \u0060embassy-executor/build_common.rs\u0060 and \u0060embassy-hal-internal/build_common.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 4 separate duplicated blocks between them, totalling at least 42 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-executor/build_common.rs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"0364250ba566ff8bc3456e7f23696e4465e0223d64d00b1ef7d8aad1aeda9e13"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 7): embassy-executor/build_common.rs:59-65 | embassy-hal-internal/build_common.rs:59-65 | embassy-mcxa/build_common.rs:59-65 | embassy-mspm0/build_common.rs:59-65 | embassy-nxp/build_common.rs:59-65 | embassy-stm32/build_common.rs:59-65 | embassy-sync/build_common.rs:59-65 \u2014 \u0060embassy-executor/build_common.rs\u0060 and \u0060embassy-hal-internal/build_common.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 4 separate duplicated blocks between them, totalling at least 42 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-executor/build_common.rs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"08ab2e115d011bc7a8f0be2b5e8a748d24746299bd5d8a4b5fb3f71c27a5ab40"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 4): embassy-executor/src/platform/cortex_m.rs:166-171 | embassy-mspm0/src/executor.rs:181-186 | embassy-rp/src/executor.rs:187-192 | embassy-stm32/src/executor.rs:207-212 \u2014 before extracting anything, compare \u0060embassy-executor/src/platform/cortex_m.rs\u0060 and \u0060embassy-mspm0/src/executor.rs\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 44 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-executor/src/platform/cortex_m.rs"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"43daf22a34b1ef9b39bf9cb9c37ca40fe026a34cc698636b2cade669b7a41d6b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-executor/src/platform/std.rs:107-111 | embassy-time/src/driver_std.rs:92-96 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-executor/src/platform/std.rs"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b67b3a74aeb0a86b9c75600846fd2d88158f4306b2bde00b816dd38d238910d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 4): embassy-imxrt/src/flexcomm/uart.rs:872-878 | embassy-imxrt/src/flexcomm/uart.rs:970-976 | embassy-mcxa/src/lpuart/blocking.rs:294-300 | embassy-mcxa/src/lpuart/blocking.rs:367-373 \u2014 there are 4 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 4 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-imxrt/src/flexcomm/uart.rs"},"region":{"startLine":872}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d9eb6d3a78ea68d91ce7cc68c66eb942979d0189434ea4510eff4a5922a88b1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 4): embassy-imxrt/src/flexcomm/uart.rs:880-886 | embassy-imxrt/src/flexcomm/uart.rs:978-984 | embassy-mcxa/src/lpuart/blocking.rs:302-308 | embassy-mcxa/src/lpuart/blocking.rs:375-381 \u2014 there are 4 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 4 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-imxrt/src/flexcomm/uart.rs"},"region":{"startLine":880}}}],"partialFingerprints":{"codehealthFindingId/v1":"06fa9d0b95cccb2f333da5f0bdf7569bfad256a9ab20829c9f3cdc76e8a0c612"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 5): embassy-imxrt/src/lib.rs:167-175 | embassy-mspm0/src/lib.rs:240-248 | embassy-nrf/src/gpiote.rs:275-283 | embassy-nxp/src/lib.rs:195-203 | embassy-stm32/src/exti/mod.rs:78-86 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 5 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 5 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-imxrt/src/lib.rs"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"2dccf75126a7b15ab3e84639632327aea7e882c549799a6fa85d25af23206164"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): embassy-imxrt/src/time_driver.rs:272-283 | embassy-mcxa/src/ostimer.rs:37-48 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-imxrt/src/time_driver.rs"},"region":{"startLine":272}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e0b3e54ddbbe3b3076fb28cbd86ef09ed6887acab94f07997aea4710232b17a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 5): embassy-mcxa/src/gpio.rs:1003-1008 | embassy-microchip/src/gpio.rs:140-145 | embassy-mspm0/src/gpio.rs:400-405 | embassy-nxp/src/gpio/rt1xxx.rs:373-378 | embassy-rp/src/gpio.rs:125-130 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 5 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 5 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/gpio.rs"},"region":{"startLine":1003}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d658d539125c91d2434878ce6709e0002c10a013327cfa0643cc7d91bb8e37c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-mcxa/src/i2c/controller.rs:1034-1041 | embassy-mcxa/src/i2c/target.rs:715-722 \u2014 before extracting anything, compare \u0060embassy-mcxa/src/i2c/controller.rs\u0060 and \u0060embassy-mcxa/src/i2c/target.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 77 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/i2c/controller.rs"},"region":{"startLine":1034}}}],"partialFingerprints":{"codehealthFindingId/v1":"136553082caac45870fa862eef354804a70115be1891f386eed34fd718144770"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-mcxa/src/i3c/controller.rs:123-129 | embassy-mcxa/src/i3c/target.rs:137-143 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/i3c/controller.rs"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d58bd0a6b9b697dc713b13b5ec96c1ae5566c24e4017b5a249dd1fa069b01df"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-mcxa/src/lpuart/blocking.rs:177-188 | embassy-mcxa/src/lpuart/dma.rs:294-298 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/lpuart/blocking.rs"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"b021e7b7dccf7bfcb21d557ee2a2d8c3f9516e88511585d72219d8bcb115092c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-microchip/src/gpio.rs:392-403 | embassy-rp/src/gpio.rs:377-386 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-microchip/src/gpio.rs"},"region":{"startLine":392}}}],"partialFingerprints":{"codehealthFindingId/v1":"baca57d16895a89f72da0e149dd773b9fe299f6943c87772d4a26118957b7466"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-mspm0/src/gpio.rs:476-481 | embassy-nxp/src/gpio/rt1xxx.rs:441-446 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/gpio.rs"},"region":{"startLine":476}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e58f15fcea2617a1c83f368a6812848c1fcc21109aca5347453c1a39914844e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-mspm0/src/gpio.rs:546-551 | embassy-nxp/src/gpio/rt1xxx.rs:503-508 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/gpio.rs"},"region":{"startLine":546}}}],"partialFingerprints":{"codehealthFindingId/v1":"70288d7d96ba6dc9d5b455afda4302633effc32bfcdd04c9452a1c26e4cc756d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-mspm0/src/i2c_target.rs:467-476 | embassy-rp/src/i2c_slave.rs:501-510 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/i2c_target.rs"},"region":{"startLine":467}}}],"partialFingerprints":{"codehealthFindingId/v1":"d401b6652e5eb3d326e1937ac61c5aa1b10592bf2be6215adb1887e56c9b71df"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-mspm0/src/low_power/c110x.rs:61-70 | embassy-mspm0/src/low_power/h321x.rs:57-66 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/low_power/c110x.rs"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"a99a712cbf3c8e7988aa3781d04067760b4911a4146f411bd99beab73f3ae0db"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-mspm0/src/uart/buffered.rs:415-421 | embassy-mspm0/src/uart/mod.rs:418-424 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/uart/buffered.rs"},"region":{"startLine":415}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cf5993106fbe29cf3738eba4a25a3a3812749ad697492766b5fb871b858353f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-net/src/raw.rs:175-187 | embassy-net/src/udp.rs:206-219 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net/src/raw.rs"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"236747b20677d23e62ac8d49c1aee414b21048faa35a24568726fe243329390c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-net/src/raw.rs:552-558 | embassy-net/src/udp.rs:738-744 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net/src/raw.rs"},"region":{"startLine":552}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2e1605a417ab345d0d20e88f78da7c771bc8b0da0581e757af74367d39b4f81"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 4): embassy-net-esp-hosted/src/proto/fg/mod.rs:534-544 | embassy-net-esp-hosted/src/proto/fg/mod.rs:974-984 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:15946-15956 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16386-16396 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":534}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c4dfd9ce6b18a05795c480abf5cbb1a67728b5e8a3324fa3abf65b56b488624"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 4): embassy-net-esp-hosted/src/proto/fg/mod.rs:545-555 | embassy-net-esp-hosted/src/proto/fg/mod.rs:985-995 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:15957-15967 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16397-16407 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":545}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2ae9a6844d735f3de9451bfa2c8e06a4bf5472910ed74bebeff0c0d26678d7f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 84): embassy-net-esp-hosted/src/proto/fg/mod.rs:1072-1082 | embassy-net-esp-hosted/src/proto/fg/mod.rs:1212-1222 | embassy-net-esp-hosted/src/proto/fg/mod.rs:1458-1468 | embassy-net-esp-hosted/src/proto/fg/mod.rs:4310-4320 | embassy-net-esp-hosted/src/proto/fg/mod.rs:4502-4512 | embassy-net-esp-hosted/src/proto/fg/mod.rs:4642-4652 | embassy-net-esp-hosted/src/proto/fg/mod.rs:5380-5390 | embassy-net-esp-hosted/src/proto/fg/mod.rs:5576-5586 | embassy-net-esp-hosted/src/proto/fg/mod.rs:6020-6030 | embassy-net-esp-hosted/src/proto/fg/mod.rs:6270-6280 | embassy-net-esp-hosted/src/proto/fg/mod.rs:6976-6986 | embassy-net-esp-hosted/src/proto/fg/mod.rs:7778-7788 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16484-16494 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16874-16884 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17120-17130 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17260-17270 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17452-17462 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17592-17602 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17732-17742 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18186-18196 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18630-18640 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18889-18899 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19029-19039 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19343-19353 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19852-19862 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19992-20002 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20132-20142 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20272-20282 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20641-20651 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20781-20791 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21661-21671 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21801-21811 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21941-21951 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22702-22712 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:23202-23212 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:23702-23712 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24146-24156 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24392-24402 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24841-24851 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:28356-28366 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:28746-28756 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:29190-29200 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:29703-29713 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:29899-29909 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:30149-30159 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:30539-30549 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:30735-30745 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:30994-31004 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:32176-32186 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33039-33049 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33179-33189 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33529-33539 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33669-33679 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33809-33819 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38222-38232 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38418-38428 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38669-38679 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:39171-39181 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:39367-39377 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:39619-39629 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:40247-40257 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:41990-42000 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42130-42140 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42376-42386 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42516-42526 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42762-42772 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42902-42912 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43148-43158 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43288-43298 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43534-43544 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43674-43684 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43920-43930 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:44060-44070 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:44514-44524 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:44654-44664 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:44850-44860 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:45240-45250 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:45436-45446 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:45682-45692 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:45944-45954 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46140-46150 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46336-46346 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46528-46538 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46724-46734 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":1072}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3b69ca0a152ef9ea0d8724eb46c2f0b9156dc45e46e10c64c10aaf54d924209"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 84): embassy-net-esp-hosted/src/proto/fg/mod.rs:1083-1093 | embassy-net-esp-hosted/src/proto/fg/mod.rs:1223-1233 | embassy-net-esp-hosted/src/proto/fg/mod.rs:1469-1479 | embassy-net-esp-hosted/src/proto/fg/mod.rs:4321-4331 | embassy-net-esp-hosted/src/proto/fg/mod.rs:4513-4523 | embassy-net-esp-hosted/src/proto/fg/mod.rs:4653-4663 | embassy-net-esp-hosted/src/proto/fg/mod.rs:5391-5401 | embassy-net-esp-hosted/src/proto/fg/mod.rs:5587-5597 | embassy-net-esp-hosted/src/proto/fg/mod.rs:6031-6041 | embassy-net-esp-hosted/src/proto/fg/mod.rs:6281-6291 | embassy-net-esp-hosted/src/proto/fg/mod.rs:6987-6997 | embassy-net-esp-hosted/src/proto/fg/mod.rs:7789-7799 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16495-16505 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:16885-16895 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17131-17141 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17271-17281 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17463-17473 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17603-17613 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17743-17753 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18197-18207 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18641-18651 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18900-18910 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19040-19050 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19354-19364 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19863-19873 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20003-20013 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20143-20153 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20283-20293 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20652-20662 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20792-20802 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21672-21682 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21812-21822 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21952-21962 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22713-22723 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:23213-23223 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:23713-23723 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24157-24167 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24403-24413 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24852-24862 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:28367-28377 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:28757-28767 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:29201-29211 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:29714-29724 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:29910-29920 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:30160-30170 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:30550-30560 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:30746-30756 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:31005-31015 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:32187-32197 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33050-33060 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33190-33200 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33540-33550 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33680-33690 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:33820-33830 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38233-38243 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38429-38439 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38680-38690 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:39182-39192 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:39378-39388 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:39630-39640 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:40258-40268 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42001-42011 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42141-42151 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42387-42397 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42527-42537 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42773-42783 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:42913-42923 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43159-43169 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43299-43309 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43545-43555 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43685-43695 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:43931-43941 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:44071-44081 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:44525-44535 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:44665-44675 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:44861-44871 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:45251-45261 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:45447-45457 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:45693-45703 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:45955-45965 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46151-46161 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46347-46357 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46539-46549 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46735-46745 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":1083}}}],"partialFingerprints":{"codehealthFindingId/v1":"a254f906019dccc684befaabca4fb57ecee6a8320fc80ab344d5386e1a34b3d9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:4404-4414 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17354-17364 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":4404}}}],"partialFingerprints":{"codehealthFindingId/v1":"69649521f112a6e2c9b56388c0a2ba41aa71f2accddb1ee0c12d259da8066d0f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:4415-4425 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17365-17375 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":4415}}}],"partialFingerprints":{"codehealthFindingId/v1":"0920f7f516df3473854c39a5ed59fbaba5790f746f242f566e58bb37d98273d2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:8581-8591 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:36421-36431 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":8581}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5dec6557b7655fc5461e1398c9c41bc0affee5da4177822bef355dc26d929d8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-net-esp-hosted/src/proto/fg/mod.rs:8592-8602 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:36432-36442 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":8592}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e19a29ca5c41de6ba08da70578c9510c5f3245afeef5cf7d9c4347009326cdf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-nrf/src/buffered_uarte/v1.rs:821-827 | embassy-nrf/src/buffered_uarte/v2.rs:610-616 \u2014 before extracting anything, compare \u0060embassy-nrf/src/buffered_uarte/v1.rs\u0060 and \u0060embassy-nrf/src/buffered_uarte/v2.rs\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 127 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/buffered_uarte/v1.rs"},"region":{"startLine":821}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d3acd55e8e75c1d5c4f828659a11f33b360a896bc9c00104be8c1c2a893f342"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (133 lines \u00D7 2): embassy-nrf/src/crypto/pka/driver.rs:386-530 | embassy-stm32/src/pka/driver.rs:483-615 \u2014 before extracting anything, compare \u0060embassy-nrf/src/crypto/pka/driver.rs\u0060 and \u0060embassy-stm32/src/pka/driver.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 1170 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/crypto/pka/driver.rs"},"region":{"startLine":386}}}],"partialFingerprints":{"codehealthFindingId/v1":"9320e4925626b1dfb941cd8db4187dc26f4bedbeec2554ef801e930ea88aeb67"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (127 lines \u00D7 2): embassy-nrf/src/crypto/pka/driver.rs:392-530 | embassy-stm32/src/pka/driver.rs:489-615 \u2014 before extracting anything, compare \u0060embassy-nrf/src/crypto/pka/driver.rs\u0060 and \u0060embassy-stm32/src/pka/driver.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 1170 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/crypto/pka/driver.rs"},"region":{"startLine":392}}}],"partialFingerprints":{"codehealthFindingId/v1":"418a8aeab072f77100515ba32c755190dc50472118e017bd61e5cdee12ecbd97"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (121 lines \u00D7 2): embassy-nrf/src/crypto/pka/driver.rs:398-530 | embassy-stm32/src/pka/driver.rs:495-615 \u2014 before extracting anything, compare \u0060embassy-nrf/src/crypto/pka/driver.rs\u0060 and \u0060embassy-stm32/src/pka/driver.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 1170 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/crypto/pka/driver.rs"},"region":{"startLine":398}}}],"partialFingerprints":{"codehealthFindingId/v1":"edc4f7241b377787a39af33d0f776d11a9cadf7bdc926b2d3eb93f175d20fff1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (114 lines \u00D7 2): embassy-nrf/src/crypto/pka/driver.rs:405-530 | embassy-stm32/src/pka/driver.rs:502-615 \u2014 before extracting anything, compare \u0060embassy-nrf/src/crypto/pka/driver.rs\u0060 and \u0060embassy-stm32/src/pka/driver.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 1170 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/crypto/pka/driver.rs"},"region":{"startLine":405}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae2f6ddbfbd895c1723cc0bfe2f976f765a374c6b6de4a028f15a35e2739833a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-nrf/src/crypto/pka/driver.rs:433-439 | embassy-stm32/src/pka/driver.rs:530-536 \u2014 before extracting anything, compare \u0060embassy-nrf/src/crypto/pka/driver.rs\u0060 and \u0060embassy-stm32/src/pka/driver.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 1170 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/crypto/pka/driver.rs"},"region":{"startLine":433}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc53ec50713c9d57c6dddfc494677dc31b4ef9e9364f2c502db2e570d04cd8c0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (144 lines \u00D7 2): embassy-nrf/src/crypto/pka/driver.rs:386-541 | embassy-stm32/src/pka/driver.rs:483-626 \u2014 before extracting anything, compare \u0060embassy-nrf/src/crypto/pka/driver.rs\u0060 and \u0060embassy-stm32/src/pka/driver.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 1170 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/crypto/pka/driver.rs"},"region":{"startLine":386}}}],"partialFingerprints":{"codehealthFindingId/v1":"7129283872b7c6c0dc6875a7e7fb139e0a198def9093dfdce118b88039aba1bc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (138 lines \u00D7 2): embassy-nrf/src/crypto/pka/driver.rs:392-541 | embassy-stm32/src/pka/driver.rs:489-626 \u2014 before extracting anything, compare \u0060embassy-nrf/src/crypto/pka/driver.rs\u0060 and \u0060embassy-stm32/src/pka/driver.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 1170 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/crypto/pka/driver.rs"},"region":{"startLine":392}}}],"partialFingerprints":{"codehealthFindingId/v1":"10d7d856ccb1443099edd4df747f7f3018d5ad794f764e764a2390fecf21b0bf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (132 lines \u00D7 2): embassy-nrf/src/crypto/pka/driver.rs:398-541 | embassy-stm32/src/pka/driver.rs:495-626 \u2014 before extracting anything, compare \u0060embassy-nrf/src/crypto/pka/driver.rs\u0060 and \u0060embassy-stm32/src/pka/driver.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 1170 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/crypto/pka/driver.rs"},"region":{"startLine":398}}}],"partialFingerprints":{"codehealthFindingId/v1":"abca3d83cafff709498c6d77db96d59f4fb58af58044661e2657cc1eb79a8dd4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (125 lines \u00D7 2): embassy-nrf/src/crypto/pka/driver.rs:405-541 | embassy-stm32/src/pka/driver.rs:502-626 \u2014 before extracting anything, compare \u0060embassy-nrf/src/crypto/pka/driver.rs\u0060 and \u0060embassy-stm32/src/pka/driver.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 1170 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/crypto/pka/driver.rs"},"region":{"startLine":405}}}],"partialFingerprints":{"codehealthFindingId/v1":"8476e2832cfccde191b891e3d5cbee52732a6a7fbdcb457d5d268603d23cbc91"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): embassy-nrf/src/crypto/pka/driver.rs:100-107 | embassy-nrf/src/crypto/pka/mod.rs:757-764 | embassy-stm32/src/pka/driver.rs:117-124 \u2014 before extracting anything, compare \u0060embassy-nrf/src/crypto/pka/driver.rs\u0060 and \u0060embassy-stm32/src/pka/driver.rs\u0060 as WHOLE FILES: this scan already matched 13 separate duplicated blocks between them, totalling at least 1170 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/crypto/pka/driver.rs"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"281123ef3a8d0962aa7266e295aabd535c033b42f189758656949dda7ffcdb77"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-nrf/src/crypto/rng/cryptocell.rs:280-287 | embassy-nrf/src/rng.rs:224-231 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/crypto/rng/cryptocell.rs"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e0cf438358e8ade79ec38007e8eb7795f610332af3c0d86c57db2cff7afbe46"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-nrf/src/gpio.rs:226-235 | embassy-stm32/src/gpio.rs:402-410 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/gpio.rs"},"region":{"startLine":226}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd6008bcf6ac872ef38fd2b272e5fff4fb96e94638e882750caddfbe989f186a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-nrf/src/gpio.rs:544-549 | embassy-stm32/src/gpio.rs:224-229 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/gpio.rs"},"region":{"startLine":544}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c72e52761d71a64b96af781f4b981115181abdb16acf40cc90f3e1d06ddb194"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-nrf/src/qspi.rs:589-594 | embassy-nrf/src/sqspi/mod.rs:924-929 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/qspi.rs"},"region":{"startLine":589}}}],"partialFingerprints":{"codehealthFindingId/v1":"5765d897ee5a06899d94176f50096fcc49938b2316fa033725076a9d40c83082"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-nrf/src/spim.rs:275-282 | embassy-nrf/src/twim.rs:187-194 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/spim.rs"},"region":{"startLine":275}}}],"partialFingerprints":{"codehealthFindingId/v1":"51ee0451ecc4f0e62154e3d5b704a35c87b996a546ef05411863fa5eba94788f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-nxp/src/adc/lpc55.rs:299-306 | embassy-stm32/src/adc/mod.rs:803-808 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nxp/src/adc/lpc55.rs"},"region":{"startLine":299}}}],"partialFingerprints":{"codehealthFindingId/v1":"64735967e500fff1ad1e2d811bb23c882b8fa17816882ef57e5eae704c7f70c9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-rp/src/gpio.rs:670-674 | embassy-rp/src/pio/mod.rs:257-261 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/gpio.rs"},"region":{"startLine":670}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d3029605726a93eacd8683cc180a3eb4332d3453015a5faf0f694720c724dbc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-rp/src/gpio.rs:727-735 | embassy-rp/src/pio/mod.rs:294-302 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/gpio.rs"},"region":{"startLine":727}}}],"partialFingerprints":{"codehealthFindingId/v1":"874deaf51b2691f9abc7c0805f227d6ef4550a762191c23e49e92f547ec043e7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-rp/src/gpio.rs:739-747 | embassy-rp/src/pio/mod.rs:282-290 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/gpio.rs"},"region":{"startLine":739}}}],"partialFingerprints":{"codehealthFindingId/v1":"31597d287bec3f0ec47d614f9bfc643960d9a1f69f3837eb749bedd32cf043aa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-rp/src/i2c.rs:208-220 | embassy-rp/src/i2c_slave.rs:445-458 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/i2c.rs"},"region":{"startLine":208}}}],"partialFingerprints":{"codehealthFindingId/v1":"539b936aa3c4ebd34cb01f3069cbbb7207c50f2393312d3c11fcccf74bb76dcd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-stm32/src/adc/v2.rs:670-675 | embassy-stm32/src/adc/v3.rs:705-710 \u2014 before extracting anything, compare \u0060embassy-stm32/src/adc/v2.rs\u0060 and \u0060embassy-stm32/src/adc/v3.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 78 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/adc/v2.rs"},"region":{"startLine":670}}}],"partialFingerprints":{"codehealthFindingId/v1":"42976ece2242c560aed0a7bbb859386907af58e88b1bce26953f26a33ca4b830"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-stm32/src/adc/v2.rs:677-683 | embassy-stm32/src/adc/v3.rs:712-718 \u2014 before extracting anything, compare \u0060embassy-stm32/src/adc/v2.rs\u0060 and \u0060embassy-stm32/src/adc/v3.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 78 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/adc/v2.rs"},"region":{"startLine":677}}}],"partialFingerprints":{"codehealthFindingId/v1":"17f547008aadb4c1e1837fb47374937b5ee54e2f7ed63094177d81573b46457a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): embassy-stm32/src/adc/v1.rs:694-700 | embassy-stm32/src/adc/v2.rs:715-721 | embassy-stm32/src/adc/v3.rs:872-878 \u2014 before extracting anything, compare \u0060embassy-stm32/src/adc/v2.rs\u0060 and \u0060embassy-stm32/src/adc/v3.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 78 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/adc/v1.rs"},"region":{"startLine":694}}}],"partialFingerprints":{"codehealthFindingId/v1":"804c12cfd47491518f2cdf9d0035c59c32016339d3b771bdc62a20b780e217f4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-stm32/src/cacheaxi.rs:206-212 | embassy-stm32/src/icache.rs:207-213 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/cacheaxi.rs"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a49f61a9d9a6a2504b94b1898c194327a3d74ffc2f16dff7dc3746cff47560b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-stm32/src/can/bxcan/mod.rs:768-773 | embassy-stm32/src/can/fdcan.rs:590-595 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/can/bxcan/mod.rs"},"region":{"startLine":768}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e5bd52b9e65f8be789c4cd3e9618f2fd86705ed145b15842eeaf6c366a81f83"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-stm32/src/can/bxcan/mod.rs:915-920 | embassy-stm32/src/can/fdcan.rs:598-603 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/can/bxcan/mod.rs"},"region":{"startLine":915}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8b6480b49bf84d005708a1e36f509b612f0ba55cf85f398e8bbac17d7ab64b8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-stm32/src/can/bxcan/mod.rs:1124-1133 | embassy-stm32/src/can/fdcan.rs:969-978 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/can/bxcan/mod.rs"},"region":{"startLine":1124}}}],"partialFingerprints":{"codehealthFindingId/v1":"6bbe1caf6c8da5090747fe71d27d6fde63f1a5a36c3f48fba4bf4320f3605ef3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): embassy-stm32/src/dma/dma_bdma.rs:1009-1019 | embassy-stm32/src/dma/gpdma/mod.rs:915-925 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/dma/dma_bdma.rs"},"region":{"startLine":1009}}}],"partialFingerprints":{"codehealthFindingId/v1":"acee9dd114b57c945e60f213adcd4bffef7e9786039d073260fe80e1a3c6ce89"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-stm32/src/dma/gpdma/linked_list.rs:211-223 | embassy-stm32/src/dma/gpdma/two_d.rs:70-82 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/dma/gpdma/linked_list.rs"},"region":{"startLine":211}}}],"partialFingerprints":{"codehealthFindingId/v1":"88233d590b6042a6675db7012b48f0d98ede411356854ebe715c63317ecaa9af"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-stm32/src/dma/gpdma/linked_list.rs:230-242 | embassy-stm32/src/dma/gpdma/two_d.rs:89-101 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/dma/gpdma/linked_list.rs"},"region":{"startLine":230}}}],"partialFingerprints":{"codehealthFindingId/v1":"82e7056a035fcea794abc90147f674d657415694fb0f0284311af8ba95e6d96d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-stm32/src/dma2d/mod.rs:563-570 | embassy-stm32/src/dsihost/mod.rs:541-548 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/dma2d/mod.rs"},"region":{"startLine":563}}}],"partialFingerprints":{"codehealthFindingId/v1":"23568349d05b553dc73818f2a7b960e513e16e18002930f09425d8e498ecedbf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-stm32/src/eth/v1/mod.rs:139-146 | embassy-stm32/src/eth/v2/mod.rs:131-138 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/eth/v1/mod.rs"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce5b32ed4e044200ffe994e45307cfe65a2585fa38a72627a964c28e0e4c9218"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-stm32/src/eth/v1/mod.rs:432-440 | embassy-stm32/src/eth/v2/mod.rs:586-594 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/eth/v1/mod.rs"},"region":{"startLine":432}}}],"partialFingerprints":{"codehealthFindingId/v1":"e47c05158bb170d05eff481183393f4ebf399c188585a8529fb7aedde031bee5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-stm32/src/flash/asynch.rs:65-71 | embassy-stm32/src/flash/common.rs:59-65 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/asynch.rs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab7ebd8bfa7357f6dbd2accfc10983a75018168deaf7ca54f0d3226833b6dd1a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-stm32/src/gfxtim.rs:21-26 | embassy-stm32/src/gpu2d.rs:59-64 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/gfxtim.rs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"78ee773ab39ed1b0570b9e63f97d31eae4753977587ea4e1cad322c7adf9deae"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-stm32/src/hspi/enums.rs:90-98 | embassy-stm32/src/xspi/enums.rs:67-75 \u2014 \u0060embassy-stm32/src/hspi/enums.rs\u0060 and \u0060embassy-stm32/src/xspi/enums.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 4 separate duplicated blocks between them, totalling at least 106 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hspi/enums.rs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3544ba3838344845e356951caec92d9e5111973cb0a12bcebaae322e73c8188"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-stm32/src/hspi/enums.rs:205-212 | embassy-stm32/src/qspi/enums.rs:146-153 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hspi/enums.rs"},"region":{"startLine":205}}}],"partialFingerprints":{"codehealthFindingId/v1":"d32b5a62238051e6183fe5c4dd2a0c87790600819878c8f6d8981667ce9890e8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-stm32/src/rcc/u3.rs:110-118 | embassy-stm32/src/rcc/u5.rs:90-98 \u2014 before extracting anything, compare \u0060embassy-stm32/src/rcc/u3.rs\u0060 and \u0060embassy-stm32/src/rcc/u5.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 113 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/u3.rs"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"54b4de517e2f16f6dd69023a5f2d94b15005aed4f05217942d87e079c64b9436"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-stm32/src/rcc/u3.rs:533-540 | embassy-stm32/src/rcc/u5.rs:726-733 \u2014 before extracting anything, compare \u0060embassy-stm32/src/rcc/u3.rs\u0060 and \u0060embassy-stm32/src/rcc/u5.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 113 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/u3.rs"},"region":{"startLine":533}}}],"partialFingerprints":{"codehealthFindingId/v1":"19770b939e59386a24c9bb867fda0b72d85b5ec28ceb166da7b755e9bc07aba0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-stm32/src/spi/ringbuffered.rs:273-278 | embassy-stm32/src/usart/ringbuffered.rs:356-361 \u2014 \u0060embassy-stm32/src/spi/ringbuffered.rs\u0060 and \u0060embassy-stm32/src/usart/ringbuffered.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 3 separate duplicated blocks between them, totalling at least 32 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/spi/ringbuffered.rs"},"region":{"startLine":273}}}],"partialFingerprints":{"codehealthFindingId/v1":"466769f30b59d9e74da6fecf9aaf2b9b378738e881a5784414327a1078bcfddd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-stm32/src/time_driver/lptim.rs:336-340 | embassy-stm32/src/time_driver/tim.rs:316-320 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/time_driver/lptim.rs"},"region":{"startLine":336}}}],"partialFingerprints":{"codehealthFindingId/v1":"dcef173339bd1235c25a20c90daa0114ccb449f0dafcb477be9429d40b27e3b2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-stm32/src/usart/mod.rs:1454-1459 | embassy-stm32/src/usart/ringbuffered.rs:148-153 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usart/mod.rs"},"region":{"startLine":1454}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b68af58da8ae3b1028eb41bfceab4b2f5e045545f510cd0a33c6966db02d3e3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-stm32/src/usb/usb.rs:139-146 | embassy-stm32/src/usb/usb_host.rs:140-147 \u2014 before extracting anything, compare \u0060embassy-stm32/src/usb/usb.rs\u0060 and \u0060embassy-stm32/src/usb/usb_host.rs\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 53 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usb/usb.rs"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"babba5c37334e12cbbac5fbdbb9acdc7d8f50e3877cdeafe8033b3eb388ca98d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-stm32/src/usb/usb.rs:148-156 | embassy-stm32/src/usb/usb_host.rs:149-157 \u2014 before extracting anything, compare \u0060embassy-stm32/src/usb/usb.rs\u0060 and \u0060embassy-stm32/src/usb/usb_host.rs\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 53 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usb/usb.rs"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"e56abe7219c357413e5f30dc3905c725fdf37ac84b029afb1b8ac7b8e79f2bea"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-stm32/src/usb/usb.rs:232-236 | embassy-stm32/src/usb/usb_host.rs:192-197 \u2014 before extracting anything, compare \u0060embassy-stm32/src/usb/usb.rs\u0060 and \u0060embassy-stm32/src/usb/usb_host.rs\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 53 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usb/usb.rs"},"region":{"startLine":232}}}],"partialFingerprints":{"codehealthFindingId/v1":"41db72d31051259f4a84c3707d253759615d0d42d0b4ea7fbaa86b9df5835db4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 5): embassy-stm32/src/flash/f0.rs:12-17 | embassy-stm32/src/flash/f1f3.rs:12-17 | embassy-stm32/src/flash/f2.rs:22-27 | embassy-stm32/src/flash/f4.rs:35-40 | embassy-stm32/src/flash/f7.rs:18-23 \u2014 before extracting anything, compare \u0060embassy-stm32/src/flash/f0.rs\u0060 and \u0060embassy-stm32/src/flash/f1f3.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 32 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/f0.rs"},"region":{"startLine":12}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0896f0652753224f295b188509379fa22286864464ee217835081921b568a1c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-stm32/src/flash/f2.rs:29-37 | embassy-stm32/src/flash/f4.rs:63-71 \u2014 before extracting anything, compare \u0060embassy-stm32/src/flash/f2.rs\u0060 and \u0060embassy-stm32/src/flash/f4.rs\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 105 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/f2.rs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"b60dea605d6a2965fe6e8b26d0012e4994b6f505bf67be26a5baf98968e52112"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-stm32/src/flash/f2.rs:92-100 | embassy-stm32/src/flash/f4.rs:180-188 \u2014 before extracting anything, compare \u0060embassy-stm32/src/flash/f2.rs\u0060 and \u0060embassy-stm32/src/flash/f4.rs\u0060 as WHOLE FILES: this scan already matched 10 separate duplicated blocks between them, totalling at least 105 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/f2.rs"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"af06318eebf9dccadee7c6d493a946504bfa8f6fedf2627ef0b7e468d9916cf3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): embassy-stm32/src/flash/c.rs:13-22 | embassy-stm32/src/flash/g.rs:39-48 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/c.rs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"c74cd3b9298a61fc037728e7a254bc5eec56f4e4c00e1e9d520b097a8734ab0e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-stm32/src/flash/g.rs:50-59 | embassy-stm32/src/flash/l.rs:43-51 \u2014 before extracting anything, compare \u0060embassy-stm32/src/flash/g.rs\u0060 and \u0060embassy-stm32/src/flash/l.rs\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 64 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/g.rs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad7f456ab53fd11509005bf3e5ec4698de380ae60c0c8c915f1980fecb0a9662"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-stm32/src/flash/g.rs:61-68 | embassy-stm32/src/flash/l.rs:54-61 \u2014 before extracting anything, compare \u0060embassy-stm32/src/flash/g.rs\u0060 and \u0060embassy-stm32/src/flash/l.rs\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 64 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/g.rs"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2036f9003e62111bc09848e2f2672cd486e6df18cd6334e1d036b1742027196"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-sync/src/channel.rs:759-767 | embassy-sync/src/priority_channel.rs:409-417 \u2014 before extracting anything, compare \u0060embassy-sync/src/channel.rs\u0060 and \u0060embassy-sync/src/priority_channel.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 31 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-sync/src/channel.rs"},"region":{"startLine":759}}}],"partialFingerprints":{"codehealthFindingId/v1":"255cb66b9c87aea5bf655329e2bedb0693c4775a49cdbe2d87b871e7e737334f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (65 lines \u00D7 5): embassy-crypto/src/aes.rs:244-460 | embassy-crypto/src/aes.rs:244-456 | embassy-crypto/src/chacha.rs:96-168 | embassy-crypto/src/chacha.rs:96-160 | embassy-crypto/src/chacha.rs:96-164 \u2014 there are 5 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 5 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-crypto/src/aes.rs"},"region":{"startLine":244}}}],"partialFingerprints":{"codehealthFindingId/v1":"a356b54460a0ca6ad95fd2b2abbe175da8e21185c70b0d1c324fe26ecaa4ae9c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (52 lines \u00D7 5): embassy-crypto/src/aes.rs:257-460 | embassy-crypto/src/aes.rs:257-456 | embassy-crypto/src/chacha.rs:109-168 | embassy-crypto/src/chacha.rs:109-160 | embassy-crypto/src/chacha.rs:109-164 \u2014 there are 5 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 5 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-crypto/src/aes.rs"},"region":{"startLine":257}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a1ef5121ddfcd4d3c7f6b60bff1658200b6244c1543bb9753ce479840092ba4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-crypto/src/ed25519.rs:28-32 | embassy-crypto/src/x25519.rs:28-32 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-crypto/src/ed25519.rs"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bd2ab9212333e82160e9ec6d82d2c9e2fbd3c15eb641e70316d53b17006b079"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-net/src/raw.rs:562-568 | embassy-net/src/udp.rs:776-782 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net/src/raw.rs"},"region":{"startLine":562}}}],"partialFingerprints":{"codehealthFindingId/v1":"aecec3926f939cd1461d06c7dc5e5313d35844e2ad3a42c6bb9761fe8181e62f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 45): embassy-net-esp-hosted/src/proto/fg/mod.rs:5084-5091 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:1883-1887 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:2389-2396 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:2450-2457 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:2854-2861 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:4337-4341 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:4483-4490 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:5462-5469 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:5501-5505 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:7870-7874 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:8626-8630 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:15301-15305 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:15337-15341 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:17862-17866 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:18694-18698 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19117-19121 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:19553-19557 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:20340-20344 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:21390-21397 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:22321-22328 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24646-24650 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:24971-24975 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:25229-25233 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:26081-26085 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:26351-26355 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:26762-26769 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:27255-27262 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:27505-27512 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:27998-28005 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:29504-29511 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:30799-30803 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:35194-35198 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:35230-35234 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:35670-35677 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:35709-35716 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:37075-37082 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:37295-37302 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:37515-37522 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:38027-38031 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:40909-40913 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:45746-45753 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:46961-46965 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:47479-47483 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48467-48474 | embassy-net-esp-hosted/src/proto/mcu/mod.rs:48506-48513 \u2014 \u0060embassy-net-esp-hosted/src/proto/fg/mod.rs\u0060 and \u0060embassy-net-esp-hosted/src/proto/mcu/mod.rs\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 123 separate duplicated blocks between them, totalling at least 1912 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/fg/mod.rs"},"region":{"startLine":5084}}}],"partialFingerprints":{"codehealthFindingId/v1":"952714ed8621b14cadb7b6058cf5062da3cb31a3b682491de85855e1f557a11a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-net-esp-hosted/src/rpc/fg.rs:113-120 | embassy-net-esp-hosted/src/rpc/mcu.rs:168-175 \u2014 before extracting anything, compare \u0060embassy-net-esp-hosted/src/rpc/fg.rs\u0060 and \u0060embassy-net-esp-hosted/src/rpc/mcu.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 52 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/rpc/fg.rs"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"6117dc7e15651faad4d22c82a49849efbe1619ac368625d8187fb874270dedbc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-net-esp-hosted/src/rpc/fg.rs:122-126 | embassy-net-esp-hosted/src/rpc/mcu.rs:183-187 \u2014 before extracting anything, compare \u0060embassy-net-esp-hosted/src/rpc/fg.rs\u0060 and \u0060embassy-net-esp-hosted/src/rpc/mcu.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 52 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/rpc/fg.rs"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e1a1ad87917ec1abf88ecf62b6af896f774effc0e69700b927145fe42e7d40c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-net-esp-hosted/src/rpc/fg.rs:224-230 | embassy-net-esp-hosted/src/rpc/mcu.rs:315-321 \u2014 before extracting anything, compare \u0060embassy-net-esp-hosted/src/rpc/fg.rs\u0060 and \u0060embassy-net-esp-hosted/src/rpc/mcu.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 52 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/rpc/fg.rs"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"5824889b62c140b7bd56d5d1ddb19a2f1526227ab91d5285300d10b963258b7b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-nrf/src/gpio.rs:306-315 | embassy-stm32/src/gpio.rs:481-489 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/gpio.rs"},"region":{"startLine":306}}}],"partialFingerprints":{"codehealthFindingId/v1":"9685acd457a3e86eaf11a3433b3b3e7a7777f24b2839d2f606ac331faa1e6dd3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): embassy-stm32/src/cacheaxi.rs:98-107 | embassy-stm32/src/cacheaxi.rs:142-151 | embassy-stm32/src/icache.rs:152-161 \u2014 there are 3 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 3 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/cacheaxi.rs"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"0dc65e8654c438a656b18be5eaf68b2f8439c6fed2dfa0e5ed211f63f4910120"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): embassy-stm32/src/cacheaxi.rs:110-119 | embassy-stm32/src/cacheaxi.rs:154-163 | embassy-stm32/src/icache.rs:164-173 \u2014 there are 3 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 3 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/cacheaxi.rs"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6a03a470cc0d930fea57c53b1e1e911a42f89217d69fc68187d64057b901a56"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 5): embassy-stm32/src/dfsdm/detector.rs:269-274 | embassy-stm32/src/dfsdm/filter.rs:884-892 | embassy-stm32/src/dfsdm/filter.rs:895-903 | embassy-stm32/src/dfsdm/filter.rs:914-922 | embassy-stm32/src/dfsdm/filter.rs:925-933 \u2014 there are 5 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 5 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/dfsdm/detector.rs"},"region":{"startLine":269}}}],"partialFingerprints":{"codehealthFindingId/v1":"301632cd7edf027774cb61c20797b936cb99e6801cff56b9dacfd04644205a73"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-stm32/src/mdios.rs:35-42 | embassy-stm32/src/pssi.rs:76-83 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/mdios.rs"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"574df73d26e48ac65bd138f5d95b3a2c94bb1e2ebcc63519cd74e8c0acedf6f8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-stm32/src/flash/c5.rs:11-17 | embassy-stm32/src/flash/h5.rs:11-17 \u2014 before extracting anything, compare \u0060embassy-stm32/src/flash/c5.rs\u0060 and \u0060embassy-stm32/src/flash/h5.rs\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 43 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/c5.rs"},"region":{"startLine":11}}}],"partialFingerprints":{"codehealthFindingId/v1":"22a68e1e709957ab83c6e9251bc57c97ef4cffb1cf76d0a5b6de1df1b9c92713"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): embassy-stm32-wpan/src/bluetooth/gap/aci_gap.rs:326-336 | embassy-stm32-wpan/src/bluetooth/gatt/server.rs:631-640 | embassy-stm32-wpan/src/bluetooth/security/mod.rs:777-787 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 3 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32-wpan/src/bluetooth/gap/aci_gap.rs"},"region":{"startLine":326}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c6b6d5ed10749c3190949b67b0e6b3d5a21fec736b9e30ed28f05227b1aabcd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): embassy-stm32-wpan/src/bluetooth/gatt/server.rs:433-443 | embassy-stm32-wpan/src/bluetooth/security/mod.rs:718-727 | embassy-stm32-wpan/src/bluetooth/security/mod.rs:762-772 \u2014 there are 3 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 3 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32-wpan/src/bluetooth/gatt/server.rs"},"region":{"startLine":433}}}],"partialFingerprints":{"codehealthFindingId/v1":"20c37c39a25d4776e43ea14becc67ac98793654f9db36ae2ef0a7b8e87a33a83"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-stm32-wpan/src/wb/cmd.rs:67-74 | embassy-stm32-wpan/src/wb/evt.rs:93-100 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32-wpan/src/wb/cmd.rs"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf2a64ce4234ff0c0b6d4f017530b12d4cbc0657220a632259b15dbb7bccec47"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 8): embassy-mcxa/src/clocks/periph_helpers.rs:531-543 | embassy-mcxa/src/clocks/periph_helpers.rs:673-685 | embassy-mcxa/src/clocks/periph_helpers.rs:921-934 | embassy-mcxa/src/clocks/periph_helpers.rs:1005-1018 | embassy-mcxa/src/clocks/periph_helpers.rs:1310-1322 | embassy-mcxa/src/clocks/periph_helpers.rs:1490-1503 | embassy-mcxa/src/clocks/periph_helpers.rs:1669-1682 | embassy-mcxa/src/clocks/periph_helpers.rs:1808-1820 \u2014 all 8 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/periph_helpers.rs"},"region":{"startLine":531}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ec300b9dfcbdf72d38206375983fa88fb1deb60e85ae53068d7b9169c675e98"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): embassy-stm32-wpan/src/net/control.rs:97-110 | embassy-stm32-wpan/src/net/control.rs:146-159 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32-wpan/src/net/control.rs"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7be4243e82d625ce283cb2d1e7966d3caf1dd05fbcf2367780b2c18fda602e1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-stm32-wpan/src/net/control.rs:80-92 | embassy-stm32-wpan/src/net/control.rs:93-105 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32-wpan/src/net/control.rs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"b24df6c429b2f6bbe0506e4c857a3a2393ede87c6039501ab5b2242147ffe9c6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): embassy-stm32/src/sdmmc/mod.rs:2127-2139 | embassy-stm32/src/sdmmc/mod.rs:2160-2172 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/sdmmc/mod.rs"},"region":{"startLine":2127}}}],"partialFingerprints":{"codehealthFindingId/v1":"6df8a68ef8e60af52d20256e8c66d4de2b50f5941cfde115e84abc43e2085bfc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): embassy-usb-host/src/class/gip.rs:573-584 | embassy-usb-host/src/class/gip.rs:624-635 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb-host/src/class/gip.rs"},"region":{"startLine":573}}}],"partialFingerprints":{"codehealthFindingId/v1":"1aa2c642b602c821c07f9e5fb37336978eab15147c38c9974545720d7308dc5b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): cyw43/src/spi.rs:299-310 | cyw43/src/spi.rs:336-347 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cyw43/src/spi.rs"},"region":{"startLine":299}}}],"partialFingerprints":{"codehealthFindingId/v1":"f77886b7b0d82d32614873c60a3f2501308d04dcf4b49f8891ce5a5a5049d6f8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-stm32-wpan/src/wba/linklayer_plat.rs:1626-1634 | embassy-stm32-wpan/src/wba/linklayer_plat.rs:1705-1713 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32-wpan/src/wba/linklayer_plat.rs"},"region":{"startLine":1626}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4db71b63deb9111912a58cef458cfdf883d7d4485cb5426e0db49013908b051"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-nrf/src/spim.rs:702-710 | embassy-nrf/src/spis.rs:572-578 \u2014 before extracting anything, compare \u0060embassy-nrf/src/spim.rs\u0060 and \u0060embassy-nrf/src/spis.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 34 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/spim.rs"},"region":{"startLine":702}}}],"partialFingerprints":{"codehealthFindingId/v1":"d17b29b071d32828c72f21ce1a8b692990dafd3bbac5f69a7b57cc0c650ce09e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-nrf/src/twim.rs:832-840 | embassy-nrf/src/twis.rs:832-840 \u2014 before extracting anything, compare \u0060embassy-nrf/src/twim.rs\u0060 and \u0060embassy-nrf/src/twis.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 85 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/twim.rs"},"region":{"startLine":832}}}],"partialFingerprints":{"codehealthFindingId/v1":"416bf802d1b1210810f014e71426a0c4077dbdefc1bf4dd4000264148b51ecb1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-stm32/src/sdmmc/mod.rs:2146-2154 | embassy-stm32/src/sdmmc/mod.rs:2185-2193 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/sdmmc/mod.rs"},"region":{"startLine":2146}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3bb64efd05cf7c7f4955d0c4a6c172aa6b3ef8d10b71c072daa053edd3521be"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): embassy-usb/src/class/uac1/speaker.rs:540-548 | embassy-usb/src/class/uac1/speaker.rs:610-618 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb/src/class/uac1/speaker.rs"},"region":{"startLine":540}}}],"partialFingerprints":{"codehealthFindingId/v1":"36aef79f931cd0c6401448b1832100aaf4f753262ae45ec892709d7efd6e5c6f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): embassy-nrf/src/nfct.rs:327-334 | embassy-nrf/src/nfct.rs:387-394 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/nfct.rs"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e49397f5c751191af7a235b92bb54bb95d49e0c9bf21fc49b5bc65e607e6368"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-net-esp-hosted/src/rpc/fg.rs:49-55 | embassy-net-esp-hosted/src/rpc/mcu.rs:59-65 \u2014 before extracting anything, compare \u0060embassy-net-esp-hosted/src/rpc/fg.rs\u0060 and \u0060embassy-net-esp-hosted/src/rpc/mcu.rs\u0060 as WHOLE FILES: this scan already matched 6 separate duplicated blocks between them, totalling at least 52 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/rpc/fg.rs"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"15549122a37c4c4f8f9b23a8e338a9cda725d090cc8de21c33f6667abc483420"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-net-nrf91/src/lib.rs:353-359 | embassy-net-nrf91/src/lib.rs:400-406 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-nrf91/src/lib.rs"},"region":{"startLine":353}}}],"partialFingerprints":{"codehealthFindingId/v1":"9363c7f5b78eb2902dffee818e1c7df316963a8de39553fa83b972da37452e70"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-nrf/src/uarte.rs:715-720 | embassy-nrf/src/uarte.rs:834-839 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/uarte.rs"},"region":{"startLine":715}}}],"partialFingerprints":{"codehealthFindingId/v1":"b899968f95310a507ef9f8384ac3b574508158c35b219979b8215dc562bdc3c9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-net-nrf91/src/context.rs:222-227 | embassy-net-nrf91/src/context.rs:243-248 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-nrf91/src/context.rs"},"region":{"startLine":222}}}],"partialFingerprints":{"codehealthFindingId/v1":"921dce0eaceb66c43172df092ec772d081dda4a9e7cb8257a753225771f811eb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-stm32/src/usart/mod.rs:2746-2750 | embassy-stm32/src/usart/mod.rs:2762-2766 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usart/mod.rs"},"region":{"startLine":2746}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a1ddcd1c7b30a114eed10545d78f0b7e9a426f85534f3f205bbc56623ea99e4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-stm32/src/usart/mod.rs:2754-2758 | embassy-stm32/src/usart/mod.rs:2770-2774 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usart/mod.rs"},"region":{"startLine":2754}}}],"partialFingerprints":{"codehealthFindingId/v1":"5107c414e7c0c10ad107bfae15bd801454c7629d9f1ac3f61ee14ae303edffbc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-stm32/src/xspi/mod.rs:1137-1141 | embassy-stm32/src/xspi/mod.rs:1200-1204 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/xspi/mod.rs"},"region":{"startLine":1137}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd18a89d800d1ef80b830fc8ece8aafd6b5a487e769577891f788e920769d8e3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-mcxa/src/chips/mcxa2xx.rs:14-18 | embassy-mcxa/src/chips/mcxa5xx.rs:17-21 \u2014 before extracting anything, compare \u0060embassy-mcxa/src/chips/mcxa2xx.rs\u0060 and \u0060embassy-mcxa/src/chips/mcxa5xx.rs\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 47 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/chips/mcxa2xx.rs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"081fbc178599d016cb85cdd6ba082a9fa971323db180f7c54cc854e200921137"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): embassy-nrf/src/crypto/pka/cryptocell/ecc.rs:182-187 | embassy-nrf/src/crypto/pka/cryptocell/ecc.rs:212-217 | embassy-nrf/src/crypto/pka/cryptocell/ecc.rs:243-248 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/crypto/pka/cryptocell/ecc.rs"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fce9037d5639371263d4bf45b9c7a6d297e68ecb4b88d61dbe394d64e67ea6b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-nrf/src/crypto/symmetric/driver.rs:419-424 | embassy-nrf/src/crypto/symmetric/driver.rs:478-483 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/crypto/symmetric/driver.rs"},"region":{"startLine":419}}}],"partialFingerprints":{"codehealthFindingId/v1":"806193776faa941bf7a1999e872e6671fbb9b159165162e344398809e8c24c2c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-nrf/src/gpiote.rs:303-307 | embassy-nrf/src/gpiote.rs:476-480 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/gpiote.rs"},"region":{"startLine":303}}}],"partialFingerprints":{"codehealthFindingId/v1":"92258ee47f061d269f01620fedfdd82fbd6ffa45f6ff92ca325a1c5fefc3ff2e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-nrf/src/pwm.rs:490-496 | embassy-nrf/src/pwm.rs:498-504 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/pwm.rs"},"region":{"startLine":490}}}],"partialFingerprints":{"codehealthFindingId/v1":"73628907b30e19fd821eb658b0bdfef754a3bd120b9805062e6c77085f09e835"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): embassy-stm32/src/cryp/mod.rs:724-739 | embassy-stm32/src/cryp/mod.rs:1285-1300 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/cryp/mod.rs"},"region":{"startLine":724}}}],"partialFingerprints":{"codehealthFindingId/v1":"c43970229063cbfad08734bf192f0030994a8ee14fe4ad1938b85f72dd620f28"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-stm32/src/fmc.rs:39-43 | embassy-stm32/src/fmc.rs:65-69 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/fmc.rs"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"c17dbcd6c82cabb7c97d90b7c552297bd972465dcbfe199b3102ea3b43b584a7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): embassy-stm32/src/ltdc.rs:294-298 | embassy-stm32/src/ltdc.rs:354-358 | embassy-stm32/src/ltdc.rs:423-427 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/ltdc.rs"},"region":{"startLine":294}}}],"partialFingerprints":{"codehealthFindingId/v1":"a177f40a8e196d9902ae9d084120b56326340c7f4478cc44be367f38214d2dc5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-stm32/src/rcc/u3.rs:466-470 | embassy-stm32/src/rcc/u5.rs:477-481 \u2014 before extracting anything, compare \u0060embassy-stm32/src/rcc/u3.rs\u0060 and \u0060embassy-stm32/src/rcc/u5.rs\u0060 as WHOLE FILES: this scan already matched 9 separate duplicated blocks between them, totalling at least 113 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/u3.rs"},"region":{"startLine":466}}}],"partialFingerprints":{"codehealthFindingId/v1":"f25dcb1c3e286eb4dd598da980c1c8d60cc35e5dec6374652d99612d8a143d2e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-stm32/src/spi/mod.rs:439-444 | embassy-stm32/src/spi/mod.rs:474-479 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/spi/mod.rs"},"region":{"startLine":439}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f9dba94a75b1f3a186a7f6dcda73124a4082afec2fd2cd9455695f32a69ee7c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-stm32/src/usb/usb.rs:255-261 | embassy-stm32/src/usb/usb_host.rs:221-227 \u2014 before extracting anything, compare \u0060embassy-stm32/src/usb/usb.rs\u0060 and \u0060embassy-stm32/src/usb/usb_host.rs\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 53 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usb/usb.rs"},"region":{"startLine":255}}}],"partialFingerprints":{"codehealthFindingId/v1":"16c5a3e40ed65dee2e77d718f0611596237a727e6e0153c4774f8ed0e89869a6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): embassy-stm32/src/usb/usb.rs:749-754 | embassy-stm32/src/usb/usb.rs:940-945 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usb/usb.rs"},"region":{"startLine":749}}}],"partialFingerprints":{"codehealthFindingId/v1":"c74359d5a48532a395d97e24e2780f9c1e567ab2775588cae31765762c2c4883"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): embassy-stm32/src/usb/usb.rs:164-170 | embassy-stm32/src/usb/usb_host.rs:169-175 \u2014 before extracting anything, compare \u0060embassy-stm32/src/usb/usb.rs\u0060 and \u0060embassy-stm32/src/usb/usb_host.rs\u0060 as WHOLE FILES: this scan already matched 7 separate duplicated blocks between them, totalling at least 53 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usb/usb.rs"},"region":{"startLine":164}}}],"partialFingerprints":{"codehealthFindingId/v1":"79a982cc1b6fc47906fec27fde53f197ba096c940554200e1f51bc1720c5cc18"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): embassy-stm32/src/flash/u0.rs:18-22 | embassy-stm32/src/flash/u3.rs:22-26 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/u0.rs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"dba43394474858f7ea69d194cc9d48ecda02ae3831c00963c23dc03eb72072f6"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project embassy-nrf: embassy-nrf has instability 0.92 with 1 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"16a47cd0bcd6262f333c62e13d8e51f520627ed25ee00d10365240b8e816033b"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project embassy-rp: embassy-rp has instability 0.85 with 2 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"dcde8fc39bb45518f2df504ed1e1fdd0ec7bff6def5ca14cf90dd06954263174"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: embassy-futures: embassy-futures: abstractness 0.06, instability 0.00, distance 0.94 \u2014 zone of pain \u2014 concrete and depended on by 23 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"a665dc461cb65a3a497cefcaea380355ef1394d2fa465e052cbb601914d5f018"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: embassy-sync: embassy-sync: abstractness 0.08, instability 0.00, distance 0.92 \u2014 zone of pain \u2014 concrete and depended on by 26 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"50ccf48c7cfe185392f05db46f089542500c2983374570a8e2c58f21aaeaefca"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: embassy-time-queue-utils: embassy-time-queue-utils: abstractness 0.00, instability 0.09, distance 0.91 \u2014 zone of pain \u2014 concrete and depended on by 10 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"a1d24de319c96929d0315e3b4fdbd7cdbba3b958dfc57a7179c6310d31796a09"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: embassy-crypto: embassy-crypto: abstractness 0.10, instability 0.00, distance 0.90 \u2014 zone of pain \u2014 concrete and depended on by 6 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"a1b8f2c8978e62ff565f58a602e12c22738947f1b27d2ec735b51d43b9879671"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: embassy-time: embassy-time: abstractness 0.09, instability 0.09, distance 0.83 \u2014 zone of pain \u2014 concrete and depended on by 21 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"e9e8f1e4ad5e890f42ac0744887fe7f2db557df5b954600eb45da80a63d9c9d2"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: embassy-hal-internal: embassy-hal-internal: abstractness 0.20, instability 0.00, distance 0.80 \u2014 zone of pain \u2014 concrete and depended on by 11 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"3632229523f291272377c4cc1e6310b18ad177d15dae4aaf64d8deec5ce1a158"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: embassy-net-driver-channel: embassy-net-driver-channel: abstractness 0.09, instability 0.18, distance 0.73 \u2014 zone of pain \u2014 concrete and depended on by 9 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d9652234e25dd0f1e452bb009b2c5351fb4f86f16820b02eca89b2fe8eef67cd"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: embassy-rp/src/usb/host.rs: embassy-rp/src/usb/host.rs changed 33 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 18 in InterruptHandler::on_interrupt at line 1845. 7 of those changes were fix/bug commits, and the other 26 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:34:38 \u002B00:00\u0027 --until=\u00272026-09-29 01:34:38 \u002B00:00\u0027 --full-history --no-merges -- embassy-rp/src/usb/host.rs\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":"embassy-rp/src/usb/host.rs"},"region":{"startLine":1845}}}],"partialFingerprints":{"codehealthFindingId/v1":"6814469372653d47c6bd3fd922fd5be86fb914f0478ce2d2362cce8d85436a84"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: embassy-stm32/src/adc/v3.rs: embassy-stm32/src/adc/v3.rs changed 31 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 18 in Regs::configure_sequence at line 375. 8 of those changes were fix/bug commits, and the other 23 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:34:38 \u002B00:00\u0027 --until=\u00272026-09-29 01:34:38 \u002B00:00\u0027 --full-history --no-merges -- embassy-stm32/src/adc/v3.rs\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":"embassy-stm32/src/adc/v3.rs"},"region":{"startLine":375}}}],"partialFingerprints":{"codehealthFindingId/v1":"e121ad4df8706adf6cc207a2bcb8dabd6a7cf38b1c9f8d001c0e674b72b4165b"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: embassy-stm32/src/dma/dma_bdma.rs: embassy-stm32/src/dma/dma_bdma.rs changed 15 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 36 in Channel::configure at line 501. 4 of those changes were fix/bug commits, and the other 11 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:34:38 \u002B00:00\u0027 --until=\u00272026-09-29 01:34:38 \u002B00:00\u0027 --full-history --no-merges -- embassy-stm32/src/dma/dma_bdma.rs\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":"embassy-stm32/src/dma/dma_bdma.rs"},"region":{"startLine":501}}}],"partialFingerprints":{"codehealthFindingId/v1":"fda20d5d6b744d120963d04e92c4831ee6be8ad045fcb46f3bc0ddb1da298ec0"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: embassy-stm32/src/rcc/mod.rs: embassy-stm32/src/rcc/mod.rs changed 10 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 49 in embassy_stm32::rcc::init_rcc at line 667. 3 of those changes were fix/bug commits, and the other 7 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:34:38 \u002B00:00\u0027 --until=\u00272026-09-29 01:34:38 \u002B00:00\u0027 --full-history --no-merges -- embassy-stm32/src/rcc/mod.rs\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":"embassy-stm32/src/rcc/mod.rs"},"region":{"startLine":667}}}],"partialFingerprints":{"codehealthFindingId/v1":"16d0368b2c679cbbf93b2263ffaf9d0ef409d91c23291f48f4a18ce5edf0c004"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: embassy-stm32/src/comp.rs: embassy-stm32/src/comp.rs changed 11 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 34 in Comp::configure_raw at line 500. 5 of those changes were fix/bug commits, and the other 6 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:34:38 \u002B00:00\u0027 --until=\u00272026-09-29 01:34:38 \u002B00:00\u0027 --full-history --no-merges -- embassy-stm32/src/comp.rs\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":"embassy-stm32/src/comp.rs"},"region":{"startLine":500}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec5acc0498740627dd6ba92e959038a0ad70c2576fce1929eeb993f1037bd488"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: embassy-usb-synopsys-otg/src/lib.rs: embassy-usb-synopsys-otg/src/lib.rs changed 14 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 25 in embassy_usb_synopsys_otg::on_interrupt at line 38. 1 of those changes was a fix/bug commit, and the other 13 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:34:38 \u002B00:00\u0027 --until=\u00272026-09-29 01:34:38 \u002B00:00\u0027 --full-history --no-merges -- embassy-usb-synopsys-otg/src/lib.rs\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":"embassy-usb-synopsys-otg/src/lib.rs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f34caa7e80fecbbd0db199ea53525a6dd3ebc3fed183fdfb4604aabee499e91"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: embassy-stm32/src/dma/gpdma/mod.rs: embassy-stm32/src/dma/gpdma/mod.rs changed 15 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 22 in Channel::configure at line 629. 2 of those changes were fix/bug commits, and the other 13 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:34:38 \u002B00:00\u0027 --until=\u00272026-09-29 01:34:38 \u002B00:00\u0027 --full-history --no-merges -- embassy-stm32/src/dma/gpdma/mod.rs\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":"embassy-stm32/src/dma/gpdma/mod.rs"},"region":{"startLine":629}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b4e23d2bee6011e192fb42108cf3d1e9bbb70cb4aff37671021a9508c8abf31"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: embassy-stm32/src/usart/mod.rs: embassy-stm32/src/usart/mod.rs changed 14 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 21 in UartRx::inner_read_run at line 1093. 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:34:38 \u002B00:00\u0027 --until=\u00272026-09-29 01:34:38 \u002B00:00\u0027 --full-history --no-merges -- embassy-stm32/src/usart/mod.rs\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":"embassy-stm32/src/usart/mod.rs"},"region":{"startLine":1093}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff7729e3e9724a430c5dfdc6530d7606a9b93d07e9491092c2e19508644a3a2f"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: embassy-stm32/src/rcc/n6.rs: embassy-stm32/src/rcc/n6.rs changed 5 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 56 in embassy_stm32::rcc::n6::init_osc at line 890. 1 of those changes was a fix/bug commit, and the other 4 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:34:38 \u002B00:00\u0027 --until=\u00272026-09-29 01:34:38 \u002B00:00\u0027 --full-history --no-merges -- embassy-stm32/src/rcc/n6.rs\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":"embassy-stm32/src/rcc/n6.rs"},"region":{"startLine":890}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec235b5095148b35269d0b6997ee6b39d56ab000d8f262dbe7dbc34a937607a7"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: cyw43/src/runner.rs: cyw43/src/runner.rs changed 8 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 34 in Runner::rx at line 1057. 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:34:38 \u002B00:00\u0027 --until=\u00272026-09-29 01:34:38 \u002B00:00\u0027 --full-history --no-merges -- cyw43/src/runner.rs\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":"cyw43/src/runner.rs"},"region":{"startLine":1057}}}],"partialFingerprints":{"codehealthFindingId/v1":"19052f0fef2a8825571388df425ca0f9632e9f4fdc7e427a658085736278d748"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: embassy-stm32/src/low_power.rs: embassy-stm32/src/low_power.rs changed 13 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 20 in embassy_stm32::low_power::platform::exit_stop at line 201. 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:34:38 \u002B00:00\u0027 --until=\u00272026-09-29 01:34:38 \u002B00:00\u0027 --full-history --no-merges -- embassy-stm32/src/low_power.rs\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":"embassy-stm32/src/low_power.rs"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fca4f0f479d794ac4ab1d88e54fa09919c68e3c6a423ab4aac6d4715690f839"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: embassy-mcxa/src/clocks/periph_helpers.rs: embassy-mcxa/src/clocks/periph_helpers.rs changed 15 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 17 in LpuartConfig::pre_enable_config at line 1386. 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:34:38 \u002B00:00\u0027 --until=\u00272026-09-29 01:34:38 \u002B00:00\u0027 --full-history --no-merges -- embassy-mcxa/src/clocks/periph_helpers.rs\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":"embassy-mcxa/src/clocks/periph_helpers.rs"},"region":{"startLine":1386}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c43dede255bf67832b1a669a3d27b0bfad988564ec2cee058ac1e2ee1314687"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: embassy-stm32/src/usart/buffered.rs: embassy-stm32/src/usart/buffered.rs changed 8 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 26 in embassy_stm32::usart::buffered::on_interrupt at line 35. 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:34:38 \u002B00:00\u0027 --until=\u00272026-09-29 01:34:38 \u002B00:00\u0027 --full-history --no-merges -- embassy-stm32/src/usart/buffered.rs\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":"embassy-stm32/src/usart/buffered.rs"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd58e9ff1f691cad1c77a02cdf6bab275a32a8ff1f7c55cabf588dcfe26dc5c8"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: embassy-rp/src/pio/mod.rs: embassy-rp/src/pio/mod.rs changed 9 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 23 in StateMachine::set_config at line 790. 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:34:38 \u002B00:00\u0027 --until=\u00272026-09-29 01:34:38 \u002B00:00\u0027 --full-history --no-merges -- embassy-rp/src/pio/mod.rs\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":"embassy-rp/src/pio/mod.rs"},"region":{"startLine":790}}}],"partialFingerprints":{"codehealthFindingId/v1":"98b63efe46d3e4d6d3b9fac3aad810578fba6e0be39a0acd79380f65baaafb61"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: embassy-stm32/src/hash/mod.rs: embassy-stm32/src/hash/mod.rs changed 13 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in Hash::update at line 848. 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:34:38 \u002B00:00\u0027 --until=\u00272026-09-29 01:34:38 \u002B00:00\u0027 --full-history --no-merges -- embassy-stm32/src/hash/mod.rs\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":"embassy-stm32/src/hash/mod.rs"},"region":{"startLine":848}}}],"partialFingerprints":{"codehealthFindingId/v1":"01706175bbf64431346888162740134bf170f3b9c2103490dd562d55a46bfce3"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: embassy-stm32/src/i2c/v2.rs: embassy-stm32/src/i2c/v2.rs changed 10 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 18 in I2c::blocking_write_vectored at line 834. 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:34:38 \u002B00:00\u0027 --until=\u00272026-09-29 01:34:38 \u002B00:00\u0027 --full-history --no-merges -- embassy-stm32/src/i2c/v2.rs\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":"embassy-stm32/src/i2c/v2.rs"},"region":{"startLine":834}}}],"partialFingerprints":{"codehealthFindingId/v1":"59099c27e429207866973917c991afc4f0359552642f490b82d9a9bb125094a1"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: embassy-stm32/src/rcc/h.rs: embassy-stm32/src/rcc/h.rs changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 83 in embassy_stm32::rcc::h::init at line 328. 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:34:38 \u002B00:00\u0027 --until=\u00272026-09-29 01:34:38 \u002B00:00\u0027 --full-history --no-merges -- embassy-stm32/src/rcc/h.rs\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":"embassy-stm32/src/rcc/h.rs"},"region":{"startLine":328}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c6147cac93179418510d11f17f3839f6fc44bb1e6d9391acb600058cf0eafa0"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: embassy-stm32/src/rcc/c5.rs: embassy-stm32/src/rcc/c5.rs changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 27 in embassy_stm32::rcc::c5::init at line 79. 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:34:38 \u002B00:00\u0027 --until=\u00272026-09-29 01:34:38 \u002B00:00\u0027 --full-history --no-merges -- embassy-stm32/src/rcc/c5.rs\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":"embassy-stm32/src/rcc/c5.rs"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"a90ae2d8c7329b6b9ad46d9c684035f4e20a3d501e4a609a9da9c09df8acf358"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: embassy-crypto-test/src/lib.rs: embassy-crypto-test/src/lib.rs changed 5 times in last 90 days, max cyclomatic complexity 32 in embassy_crypto_test::p384::arith at line 1035. 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:34:38 \u002B00:00\u0027 --until=\u00272026-09-29 01:34:38 \u002B00:00\u0027 --full-history --no-merges -- embassy-crypto-test/src/lib.rs\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":"embassy-crypto-test/src/lib.rs"},"region":{"startLine":1035}}}],"partialFingerprints":{"codehealthFindingId/v1":"7537d8ffe1e7c6d109670e1979bcbfd0048a21d3fb077a9271ad0554a379ea05"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: embassy-net-adin1110/src/lib.rs: embassy-net-adin1110/src/lib.rs changed 7 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 21 in Runner::run at line 354. 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:34:38 \u002B00:00\u0027 --until=\u00272026-09-29 01:34:38 \u002B00:00\u0027 --full-history --no-merges -- embassy-net-adin1110/src/lib.rs\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":"embassy-net-adin1110/src/lib.rs"},"region":{"startLine":354}}}],"partialFingerprints":{"codehealthFindingId/v1":"de0a74590553c29c8f6b9fee378cfd7fbae88b83d4506edb8ab572a62ce25291"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: embassy-rp/src/clocks.rs: embassy-rp/src/clocks.rs changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 45 in embassy_rp::clocks::init at line 979. 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:34:38 \u002B00:00\u0027 --until=\u00272026-09-29 01:34:38 \u002B00:00\u0027 --full-history --no-merges -- embassy-rp/src/clocks.rs\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":"embassy-rp/src/clocks.rs"},"region":{"startLine":979}}}],"partialFingerprints":{"codehealthFindingId/v1":"51cf334d2f8055e480fc096f6062f0cf971c85417eec06f9386cabadb38b4fad"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: embassy-stm32/src/rcc/l.rs: embassy-stm32/src/rcc/l.rs changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 55 in embassy_stm32::rcc::l::init at line 178. 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:34:38 \u002B00:00\u0027 --until=\u00272026-09-29 01:34:38 \u002B00:00\u0027 --full-history --no-merges -- embassy-stm32/src/rcc/l.rs\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":"embassy-stm32/src/rcc/l.rs"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b090ff848a346bbda8cc1c3cc4281c26495cd317312760c0edd55af347950b8"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: embassy-stm32/src/rcc/bd.rs: embassy-stm32/src/rcc/bd.rs changed 3 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 33 in LsConfig::init at line 154. 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:34:38 \u002B00:00\u0027 --until=\u00272026-09-29 01:34:38 \u002B00:00\u0027 --full-history --no-merges -- embassy-stm32/src/rcc/bd.rs\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":"embassy-stm32/src/rcc/bd.rs"},"region":{"startLine":154}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab69ef01c22e69ef3b401c401795dcf442391b46c962eb34977203ad245a83ca"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: embassy-stm32/src/adc/v2.rs: embassy-stm32/src/adc/v2.rs changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in Regs::configure_sequence at line 397. 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:34:38 \u002B00:00\u0027 --until=\u00272026-09-29 01:34:38 \u002B00:00\u0027 --full-history --no-merges -- embassy-stm32/src/adc/v2.rs\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":"embassy-stm32/src/adc/v2.rs"},"region":{"startLine":397}}}],"partialFingerprints":{"codehealthFindingId/v1":"aacd819cb482efc5da6ec0ec69d30e25f5d0f41b7428d49cde241b75f3cba4f2"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: embassy-mcxa/src/i2c/target.rs: embassy-mcxa/src/i2c/target.rs changed 6 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in I2c::write_dma_chunk at line 889. 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:34:38 \u002B00:00\u0027 --until=\u00272026-09-29 01:34:38 \u002B00:00\u0027 --full-history --no-merges -- embassy-mcxa/src/i2c/target.rs\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":"embassy-mcxa/src/i2c/target.rs"},"region":{"startLine":889}}}],"partialFingerprints":{"codehealthFindingId/v1":"6802e404181e538bde142784dc9e42783aa55754c52e08c0f8fb31fbcea3a703"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: embassy-stm32/src/adc/v1.rs: embassy-stm32/src/adc/v1.rs changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 16 in Regs::configure_sequence at line 296. 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:34:38 \u002B00:00\u0027 --until=\u00272026-09-29 01:34:38 \u002B00:00\u0027 --full-history --no-merges -- embassy-stm32/src/adc/v1.rs\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":"embassy-stm32/src/adc/v1.rs"},"region":{"startLine":296}}}],"partialFingerprints":{"codehealthFindingId/v1":"d54d89778a6bbb770f0ded8ad66bbff669f5d891c368a867c7b865277494bf30"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: embassy-stm32/src/aes/common.rs: embassy-stm32/src/aes/common.rs changed 4 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 15 in embassy_stm32::aes::common::op_aad at line 336. 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:34:38 \u002B00:00\u0027 --until=\u00272026-09-29 01:34:38 \u002B00:00\u0027 --full-history --no-merges -- embassy-stm32/src/aes/common.rs\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":"embassy-stm32/src/aes/common.rs"},"region":{"startLine":336}}}],"partialFingerprints":{"codehealthFindingId/v1":"58ab6d0704e3261e1340e0b3596288e8492ffd34a286a337afb1a3abee801f52"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: cyw43/src/consts.rs: cyw43/src/consts.rs changed 3 times in last 90 days, max cyclomatic complexity 18 in EStatus::from at line 251. 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:34:38 \u002B00:00\u0027 --until=\u00272026-09-29 01:34:38 \u002B00:00\u0027 --full-history --no-merges -- cyw43/src/consts.rs\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":"cyw43/src/consts.rs"},"region":{"startLine":251}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa60586e678180e4e9efe47552ee4181134880dca6353d487212bd25af4336c4"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: embassy-stm32/src/rcc/f247.rs: embassy-stm32/src/rcc/f247.rs changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 23 in embassy_stm32::rcc::f247::init_pll at line 431. 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:34:38 \u002B00:00\u0027 --until=\u00272026-09-29 01:34:38 \u002B00:00\u0027 --full-history --no-merges -- embassy-stm32/src/rcc/f247.rs\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":"embassy-stm32/src/rcc/f247.rs"},"region":{"startLine":431}}}],"partialFingerprints":{"codehealthFindingId/v1":"815897c7cea643b0ae006a14df7ba0cd54469c31f39b6602907f45fcf54ab53f"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: embassy-stm32/src/rcc/c0.rs: embassy-stm32/src/rcc/c0.rs changed 2 times in last 90 days, and the most complex body those changes touched has cyclomatic complexity 20 in embassy_stm32::rcc::c0::init at line 99. 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:34:38 \u002B00:00\u0027 --until=\u00272026-09-29 01:34:38 \u002B00:00\u0027 --full-history --no-merges -- embassy-stm32/src/rcc/c0.rs\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":"embassy-stm32/src/rcc/c0.rs"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0b12d49113196aeb06770901f729a008529151f685bd8f78280e39be980e01b"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: embassy-stm32/src/cordic/mod.rs: embassy-stm32/src/cordic/mod.rs changed 2 times in last 90 days, max cyclomatic complexity 16 in Config::check_f64_arg1 at line 717. 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-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:34:38 \u002B00:00\u0027 --until=\u00272026-09-29 01:34:38 \u002B00:00\u0027 --full-history --no-merges -- embassy-stm32/src/cordic/mod.rs\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":"embassy-stm32/src/cordic/mod.rs"},"region":{"startLine":717}}}],"partialFingerprints":{"codehealthFindingId/v1":"12386fa916d34a4466df3bae9eb3bfe15be67039a16af51602dc9f0f200fec70"}},{"ruleId":"D15","level":"warning","message":{"text":"Repeated repair: embassy-rp/src/pio_programs/uart.rs: embassy-rp/src/pio_programs/uart.rs changed 14 times in last 90 days and 8 of those changes were fix/bug commits, so repair is the majority of this file\u0027s churn. Its max cyclomatic complexity is 3 (its worst body is PioUartTx::flush at line 132), UNDER the 15 threshold, so this is deliberately not filed as a churn \u00D7 complexity hotspot \u2014 the difficulty here is in the behaviour the file has to get right, not in its control flow, and refactoring it for complexity would be the wrong move. The repairs counted were: \u201Cfixes docs\u201D; \u201Cfix minor mistakes\u201D; \u201Cfix unused imports\u201D; \u201Cfix-wrong-baud-rate-truncation\u201D. Each one is a case this code did not handle. Before the next change lands here, check that every one of them is pinned by a test that fails without its fix; where the same area keeps coming back, the durable fix is usually at the interface that keeps being misused rather than at the line that was last corrected. Counted over 2026-07-01..2026-09-29, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-07-01 01:34:38 \u002B00:00\u0027 --until=\u00272026-09-29 01:34:38 \u002B00:00\u0027 --full-history --no-merges -- embassy-rp/src/pio_programs/uart.rs\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":"embassy-rp/src/pio_programs/uart.rs"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"1cfc3dd6c869ea75353f1aeb5138333a783c372a389d373111003eaad88f9747"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #1: If anonymized user #1 becomes unavailable, 24 significant file(s) lose their only recent owner: embassy-stm32-wpan/src/wb/shci.rs, embassy-stm32-wpan/src/wb/sub/mac.rs, embassy-stm32/src/eth/v1/descriptors.rs, cyw43/src/sdio.rs, embassy-stm32-wpan/src/wb/mod.rs, embassy-stm32-wpan/src/net/responses.rs, embassy-stm32-wpan/src/wb/unsafe_linked_list.rs, cyw43/src/fmt.rs (\u002B16 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"5bdf89c4cfcd3541ba05d09b6e294afde9993b62ce90f1af8ceb7d7ed31e2a96"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #2: If anonymized user #2 becomes unavailable, 20 significant file(s) lose their only recent owner: embassy-stm32-wpan/src/bluetooth/security/mod.rs, embassy-usb-host/src/class/hid_report.rs, embassy-stm32/src/tamp/mod.rs, embassy-stm32-wpan/src/bluetooth/gap/aci_gap.rs, embassy-stm32/src/i3c/controller.rs, embassy-stm32-wpan/src/bluetooth/gap/scanner.rs, embassy-stm32-wpan/src/bluetooth/gatt/client.rs, embassy-stm32-wpan/src/bluetooth/gap/types.rs (\u002B12 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"6cc0cc1fda4d16bf57f72d429826dd2709b3a99a3a17e83c49942d05b5748903"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #3: If anonymized user #3 becomes unavailable, 10 significant file(s) lose their only recent owner: embassy-mcxa/src/flexcan/classic/mod.rs, embassy-mcxa/src/flexcan/classic/mailbox.rs, embassy-mcxa/src/flexcan/classic/asynchronous.rs, embassy-mcxa/src/flexcan/classic/blocking.rs, embassy-mcxa/src/flexcan/classic/timing.rs, embassy-mcxa/src/flexcan/filter.rs, embassy-mcxa/src/flexcan/mod.rs, embassy-mcxa/src/flexcan/id.rs (\u002B2 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"6df59264860ddd5773f6596584b9fedd4c13909262bbf5139894846c0f3c813e"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #4: If anonymized user #4 becomes unavailable, 7 significant file(s) lose their only recent owner: embassy-net-esp-hosted/src/proto/mcu/mod.rs, embassy-net-esp-hosted/src/rpc/mcu.rs, embassy-net-esp-hosted/src/rpc/mod.rs, embassy-net-esp-hosted/src/iface/hd_spi.rs, embassy-net-esp-hosted/src/bluetooth.rs, embassy-net-esp-hosted/src/proto/mod.rs, embassy-net-esp-hosted/src/rpc/ioctl_ctx.rs. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"aafc24c63e9a3f2aad31e8bbb38a3f4bfa3b21a26947261d6510caa871e80966"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #5: If anonymized user #5 becomes unavailable, 6 significant file(s) lose their only recent owner: embassy-imxrt/src/flexcomm/uart.rs, embassy-imxrt/src/time_driver.rs, embassy-sync/src/waitqueue/atomic_waker.rs, embassy-imxrt/src/dma.rs, embassy-mcxa/src/reset_reason.rs, embassy-mcxa/src/inputmux.rs. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"f486e28a42a21b53ec51f0a69fe554e93ad7538ac3bda0b2b3312ae5fb2862e1"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #6: If anonymized user #6 becomes unavailable, 5 significant file(s) lose their only recent owner: embassy-nrf/src/sqspi/mod.rs, embassy-nrf/src/sqspi/regs.rs, embassy-net-nrf91/src/context.rs, embassy-nrf/src/vpr.rs, embassy-nrf/src/ppib.rs. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"79c62af62cf387bd42b0435c0ce90ba3e0799c88c5074857e46b3205a6212cd0"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #7: If anonymized user #7 becomes unavailable, 4 significant file(s) lose their only recent owner: embassy-mspm0/src/low_power/mod.rs, embassy-mspm0/src/low_power/full.rs, embassy-mspm0/src/low_power/c110x.rs, embassy-mspm0/src/low_power/h321x.rs. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"03f87e8e519a8279f82bf35453392669eef0db9a59a0b6a7aef7ebff072c91dc"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #8: If anonymized user #8 becomes unavailable, 3 significant file(s) lose their only recent owner: embassy-ambiq/src/gpio.rs, embassy-ambiq/src/i2c.rs, embassy-ambiq/src/iom.rs. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"727854163ec8b0d62c63c9951fec2f3d6d61887fefd44b97bcce8307dc857e06"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #9: If anonymized user #9 becomes unavailable, 3 significant file(s) lose their only recent owner: embassy-stm32/src/executor.rs, embassy-net/src/route.rs, embassy-net/src/neighbor.rs. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d031aca8e92fa7e09eeb40c04effb49fa5ca6c3c37620eabcbff329aef67e2d1"}},{"ruleId":"D16","level":"note","message":{"text":"Further sole-owners (lower concentration): 27 other contributor(s) are each the sole owner of a small amount of code below the off-boarding threshold \u2014 folded into the bus-factor score and metrics (113 single-owned of 757 analysed files in total, counted over production source files of roughly 2,400 bytes or more, excluding vendored, generated and example/demo trees and test files identified by path convention, largest first; 757 of the 918 production source files in this repository met that bar). They are anonymized user #10 (2 file(s)), anonymized user #11 (2 file(s)), anonymized user #12 (2 file(s)), anonymized user #13 (2 file(s)), anonymized user #14 (1 file(s)), anonymized user #15 (1 file(s)) (\u002B21 more) \u2014 spread or document their files in the same way, at lower priority than the named off-boarding risks above."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"6eac528f2429e724e1a97ed868f79eefbcf1888dab4af9a9e673429369bb5b2f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: C library is uint32_t val = WORD_LENGTH_32 | HIGH_SPEED_MODE| ENDIAN_BIG | INTERRUPT_POLARITY_HIGH | WAKE_UP | 0x4 \u003C\u003C (8 * SPI_RESPONSE_DELAY) | INTR_WITH_STATUS \u003C\u003C (8 * SPI_STATUS_ENABLE); \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cyw43/src/spi.rs"},"region":{"startLine":215}}}],"partialFingerprints":{"codehealthFindingId/v1":"25ac0120266c914d0d3c8ea9dc4d85f466c456188f4417f438bbe02e17666031"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: C doesn\u0027t do this? i doubt it messes anything up \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cyw43/src/spi.rs"},"region":{"startLine":234}}}],"partialFingerprints":{"codehealthFindingId/v1":"041e8ce03fb12cc067207be51a4e1709fe3042b53c0a48310dd4d6c1470bae6e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: C doesn\u0027t do this? i doubt it messes anything up \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cyw43/src/spi.rs"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a68cb4908291b827ee4c6df1ead81bab00b9dc8dd6fcb3e4352c18330977dee"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Make sure error interrupt bits are clear? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cyw43/src/spi.rs"},"region":{"startLine":250}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6dde46ad6016612329f2952814b33022ec9665f77f5b26b66dd788c646a1aa1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: why not all of these F2_F3_FIFO_RD_UNDERFLOW | F2_F3_FIFO_WR_OVERFLOW | COMMAND_ERROR | DATA_ERROR | F2_PACKET_AVAILABLE | F1_OVERFLOW | F1_INTR \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cyw43/src/spi.rs"},"region":{"startLine":261}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c2c2d840e7c9dbbdebc87beb12872769cbf47c5f7c0335fe93664a530eb2f03"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: remove this after investigation \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cyw43/src/runner.rs"},"region":{"startLine":352}}}],"partialFingerprints":{"codehealthFindingId/v1":"31ac78b80385226d61d22b0de39db2154ea3b4b1935b80838924a598676c40ec"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO do we need to sleep the bus to read the irq line, due to \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cyw43/src/runner.rs"},"region":{"startLine":415}}}],"partialFingerprints":{"codehealthFindingId/v1":"a352f5b3819754a3b8c1c547ccf9f0b6849d3ec5f6995d7d2d69ff98002d9ff5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: is this needed if we reset right after? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cyw43/src/runner.rs"},"region":{"startLine":559}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d14d853e97fb0de9ea80aff1b5f7094c9476ce6a658667304dcf738cd33cf1a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO does this len need to be rounded up to u32? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cyw43/src/runner.rs"},"region":{"startLine":833}}}],"partialFingerprints":{"codehealthFindingId/v1":"58337bcdc2948b2ee36236428149e472ce2e09871be426f7ae662a36d8d26ee4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO does this len need to be rounded up to u32? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cyw43/src/runner.rs"},"region":{"startLine":1358}}}],"partialFingerprints":{"codehealthFindingId/v1":"b77e413e83f0c4d750eb2091fbc07720bd85af10b14e71f0ae4f1663212af07c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: investigate this condition \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cyw43/src/runner.rs"},"region":{"startLine":1036}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d50010a34ebfe93bd8da305342894130ee7bb3755bea350180711da94d78094"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: propagate error instead \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cyw43/src/runner.rs"},"region":{"startLine":1075}}}],"partialFingerprints":{"codehealthFindingId/v1":"60c66be0b7d942f57ca3db88657b9105ebf3c882a292b57d9dbdaeb5ab2317fb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO fix this \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cyw43/src/ioctl.rs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"c77b1c30c964142a71e7086d21cb6b2d634ca430b14b9e1fa7227816f56b17f1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO fix this \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/ioctl.rs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b2cf46d99aa558a266896d8c620c29186b3277cf8b6c89cbd4b5bd0f6a9e865"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO this PubSub can probably be replaced with shared memory to make it a bit more efficient. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cyw43/src/events.rs"},"region":{"startLine":290}}}],"partialFingerprints":{"codehealthFindingId/v1":"6676a4635196275109d3ff57f1a6a45c164318f668b34219ef09411f1fb59897"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO this is not really working, it always returns all zeros. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cyw43/src/control.rs"},"region":{"startLine":698}}}],"partialFingerprints":{"codehealthFindingId/v1":"b05edc175c4857962a7aed25da253ab45740ce9125dc6f590a19bc35ae21a353"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: use this \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cyw43/src/bluetooth.rs"},"region":{"startLine":362}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed556a9de1036497169fdfc5649d9baf2328bb9023e067f9a2c7575b7764ed60"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: CYW43_THREAD_ENTER mutex? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cyw43/src/bluetooth.rs"},"region":{"startLine":382}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a9b95e5782b8cf65152d97f05835aa4496ee48c75a25e2c1ecccbfbdbbf2cd6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Use the value provided by NorFlash when available \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-boot/src/lib.rs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"ddcc10dbe523b9052329b9dd7eb5c28af9b38c813032db91f1cf0f6b066bfbb6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO deallocate the task instead. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-executor/src/spawner.rs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c0640949dbc918948a4c5fa3dff15136253221d15c3cd681ba079cff07c880d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: low power support. line above is leaving out write to .wakedpd_en().set_bit()) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-imxrt/src/time_driver.rs"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"114241329115a7dfe115d5aededf3a37b09e9315b9ac687e632b3cd3b13a0ebf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this is admittedly not great for power that we\u0027re generating this \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-imxrt/src/time_driver.rs"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"b048f102495fd4f0c7b13d9575af5dabd8733d21c63ea85f3d5df140e8541e02"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: additional error handling beyond logging \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-imxrt/src/time_driver.rs"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"874886b8f2c0556d553ebdd6a342df5bb5d61430cd4e5ca271ad96024732add6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Is this necessary? Could we just check once after \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-imxrt/src/rng.rs"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"f43b3fd45fb5fdbfc0bbcdb94c6baab62d1ad179a3a4635f32d578b8f3f03a1a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // todo: move ADC here \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-imxrt/src/clocks.rs"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"eedf4650cdae83c16c44c6e7394811b23227387eb2ad104899223e3902e04181"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //adc: Some(AdcConfig {}), // TODO: add config \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-imxrt/src/clocks.rs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f5599413d28786f2d9741415a0b91f922492f1a02a569e0183f701d9cedb1f5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: numerator and denominator not used but present in register \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-imxrt/src/clocks.rs"},"region":{"startLine":319}}}],"partialFingerprints":{"codehealthFindingId/v1":"234e4deb97b5ef6ee93e158d7c8b19ae7378551c2124cee7da6ad2e707c86bd5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // todo: add support for frg div/mult \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-imxrt/src/flexcomm/mod.rs"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab5a21eeae7c6d467ee7cbceaef041336e53dba391abf65e6042177628fc5890"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // todo: add support for frg div/mult \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-imxrt/src/flexcomm/mod.rs"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"52e105b1257459db469eedcac5bffec932b61d9cd457dd0be25e92905b3996c3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // todo: add support for frg div/mult \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-imxrt/src/flexcomm/mod.rs"},"region":{"startLine":193}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c674d7a8ea955dd4b03d118309332e9b22ef76cf1f901c69dada8d72b3cec87"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: FLEXCOMM 14 is untested. Enable SPI support on FLEXCOMM14 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-imxrt/src/flexcomm/mod.rs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae9c4a3af159aa5bb210c34ffab43d14544ec5b9dd7b33eb6de103d5a9d5f789"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: In the future, we may want to have more granular groupings of counters, behind \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/perf_counters.rs"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"eefcef7cee6254287080aadc6f34e1d86170632ee33b8eccc19bb5258a49499f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add dummy driver to metadata \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/lib.rs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"d80368a0c890684f3fbec21792e8dfbefe3dee976e4ce1021f0923a1d0dbe38f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO: Taken from embassy-stm32, verify this is necessary or what we want \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/executor.rs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"87e6da9f1ee27d318271fc86dce624d9d60414e82623c1b0c8b0323bf99742c7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(AJM): This is a gross, gross hack. This implements optional callbacks \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/dma.rs"},"region":{"startLine":2702}}}],"partialFingerprints":{"codehealthFindingId/v1":"a51ea747a11e4561c9c3f88b2645970f2cd4585785e24bd1a3375a353597a1df"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we need this to be an lp_osc clock \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clkout.rs"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"4cd01a0e65f093f377f47972d424eab0a3747001ae31d054ad551a19b9fcaf23"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: restore the pin to hi-z or something? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clkout.rs"},"region":{"startLine":226}}}],"partialFingerprints":{"codehealthFindingId/v1":"5854a1047dd19100e2f92c06fc7d5cc2e01b774bd117aa7f208779df7f68e420"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we may want to expose these as options to allow the slew rate \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clkout.rs"},"region":{"startLine":258}}}],"partialFingerprints":{"codehealthFindingId/v1":"39ee6cf67c5cb3d050eb8e9df74e05b466f5c4f314e7a1b45e76d4917338344b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO also clear digital output value? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/adc.rs"},"region":{"startLine":932}}}],"partialFingerprints":{"codehealthFindingId/v1":"dddbef0a62c372734ac633b92241de7a13cf45fbddc28efb9c65225936041f00"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Different for different CPUs? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/chips/mcxa2xx.rs"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"c31df010660eed5c94c3b0f2cc9d35f9895591843a77232a303cd1bf83380b85"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Restart clock monitors if necessary? Needs to be re-enabled \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/sleep.rs"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b5d9e92569a0a3c6f0ba54526288d4d94751f11417dc3360cdec7492c481e1e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Timeout? Check error fields (at least for SPLL)? Clear \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/sleep.rs"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a33783858d0fe059abbce821005e57ea49830c79aef2c8841a7805b5495bf76"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: fix PAC names for consistency \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/periph_helpers.rs"},"region":{"startLine":446}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f9b40a717c4b1217cdf959a556de80a094677d1cacddeeaee56357d3d2d9cff"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: fix PAC names for consistency \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/periph_helpers.rs"},"region":{"startLine":457}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c5971964e13f3a3b70d352ce8862dbab0b7a82dd4136398cad06c6ec90b2cb4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: fix PAC names for consistency \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/periph_helpers.rs"},"region":{"startLine":469}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b390b6354e00772f958a029e66cb07a7280eaccc2e1c5f79f26dab67d984b33"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: fix PAC names for consistency \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/periph_helpers.rs"},"region":{"startLine":480}}}],"partialFingerprints":{"codehealthFindingId/v1":"ccd770f159291025e5d09539e6a1e9c7c15c3a01bcd1a65afa731630108be645"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: fix PAC names for consistency \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/periph_helpers.rs"},"region":{"startLine":491}}}],"partialFingerprints":{"codehealthFindingId/v1":"79af4a63f3976b19b8f0c3808642191ac5c1845a9cff2665362e5af7df445bc3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: fix PAC names for consistency \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/periph_helpers.rs"},"region":{"startLine":589}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a6ae6bd333195a1b10749d16a6d2627eb4ee8d976165d8356202cd49c41987c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: fix PAC names for consistency \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/periph_helpers.rs"},"region":{"startLine":719}}}],"partialFingerprints":{"codehealthFindingId/v1":"f241d2f31ccb2efbbea4d789835d4ee202c0aa27f63b45dd5e380430a381c4de"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: fix PAC names for consistency \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/periph_helpers.rs"},"region":{"startLine":734}}}],"partialFingerprints":{"codehealthFindingId/v1":"a79e1f4ad7987546518e033793df352fc5204546149fc6d3e3fa108ab0165d58"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: fix PAC names for consistency \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/periph_helpers.rs"},"region":{"startLine":839}}}],"partialFingerprints":{"codehealthFindingId/v1":"a81429df44c133b3166e0ea253f3d3ea93f78e6d24f6f0e22766dadc3490ce02"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: fix PAC names for consistency \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/periph_helpers.rs"},"region":{"startLine":850}}}],"partialFingerprints":{"codehealthFindingId/v1":"050815483a5eef7c732d00d3ae20a7e899acde88e4b0ae433e0bfe9a951f3bba"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: fix PAC names for consistency \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/periph_helpers.rs"},"region":{"startLine":862}}}],"partialFingerprints":{"codehealthFindingId/v1":"77bdd1e55b99be09ce1881baf7f67837a835a9c871028388ad64c30afc422e99"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: fix PAC names for consistency \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/periph_helpers.rs"},"region":{"startLine":873}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7acddf55828f4293c5732f585c1126cbc30343bf966d75fc5b6d3f1fea5f348"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: fix PAC names for consistency \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/periph_helpers.rs"},"region":{"startLine":884}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc22bed1e58b1882ba0c13ff59730417f015a9d5e3939aff9e32072333219d33"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: fix PAC names for consistency \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/periph_helpers.rs"},"region":{"startLine":1402}}}],"partialFingerprints":{"codehealthFindingId/v1":"0745338652f3c2ae8c3d0123c6dd77adea037f21ed923899d81aedd2bf821aae"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: fix PAC names for consistency \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/periph_helpers.rs"},"region":{"startLine":1412}}}],"partialFingerprints":{"codehealthFindingId/v1":"e699f2a195fef958215b1b3830acfdae4987e70cb93a95325b3676054b5eec8f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: fix PAC names for consistency \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/periph_helpers.rs"},"region":{"startLine":1423}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9ca7ba84746ee5a842f754d9280da05000e75c0bc2f7e6efd9853758ae86552"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: fix PAC names for consistency \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/periph_helpers.rs"},"region":{"startLine":1435}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5aa6bd9e5a7129c4c92098cfc4eaed1173fcbd18db2705b4f0802d677b6facb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: fix PAC names for consistency \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/periph_helpers.rs"},"region":{"startLine":1445}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a5cdbcb3e3b3c26bf9c3e31517b49b087eed124a633a282d20f8610c908fd44"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: fix PAC names for consistency \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/periph_helpers.rs"},"region":{"startLine":1455}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3c66661e0343282d2c2fa5a0c51a4d6510f20c9c740e51d2d92f6bde7e827c3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: fix PAC names for consistency \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/periph_helpers.rs"},"region":{"startLine":1579}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a42da4d715b34f0ab9c61a82b20801e2fa1d0e0d0f2ef47e71d64b3d863fae3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: fix PAC names for consistency \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/periph_helpers.rs"},"region":{"startLine":1589}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3fba83e634dd8f20e687c7dafde36158e6b3bba9c3acf551a7bf8009d83119e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: fix PAC names for consistency \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/periph_helpers.rs"},"region":{"startLine":1600}}}],"partialFingerprints":{"codehealthFindingId/v1":"42f7e94c47d4c7cb4d9379d2d1f1cc0c54ecf7bfcb2c1f166faed9071c64b77b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: fix PAC names for consistency \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/periph_helpers.rs"},"region":{"startLine":1612}}}],"partialFingerprints":{"codehealthFindingId/v1":"b27733721db31e8b930f93a03088b3b0e636105528b19d8df7dc1e58c0c3d601"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: fix PAC names for consistency \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/periph_helpers.rs"},"region":{"startLine":1624}}}],"partialFingerprints":{"codehealthFindingId/v1":"de11e57fcc9fd2ef6730254d9b63005376928877000dd3badb0309e9da84b0c4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: fix PAC names for consistency \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/periph_helpers.rs"},"region":{"startLine":1634}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf2fbd7b771a1ac4d1f1cb1cd41a38257dd509efd8ea79046c4047a8d9f60ef4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: MCXA5xx uses \u0022LPOSC\u0022, which can either be clk_16k or clk_32k. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/periph_helpers.rs"},"region":{"startLine":1615}}}],"partialFingerprints":{"codehealthFindingId/v1":"735db28eb7c85eed89013fc4d28e6cf5d138ff1a20d3125e46ab9da4a8195fff"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: how to ensure disabled? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/operator.rs"},"region":{"startLine":459}}}],"partialFingerprints":{"codehealthFindingId/v1":"eced47a8e3c31d14eba62ee827e652474dd6958ab5c8ba890d0ca3a291ccf11d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //   * TODO(AJM): I\u0027m not sure which domain needs to be active for this requirement. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/operator.rs"},"region":{"startLine":473}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f669135afb9b553e837dbaa4c08595437b915cde2dda23c3aa6d39640b767ff"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(AJM): Do we need to set these to reasonable values during the \u0022startup\u0022 phase, and THEN \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/operator.rs"},"region":{"startLine":597}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a9e61c79f187f533fbfe8240a3d7f7085dc0d070903c07dcd45e23c45cc5f2e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This naming is bad \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/operator.rs"},"region":{"startLine":609}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb1711fea0283a9c4367c4f56c3b56dc497671276bca9a8930b1b5c8d6690b8d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Config for the LDO? For now, just enable \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/operator.rs"},"region":{"startLine":685}}}],"partialFingerprints":{"codehealthFindingId/v1":"454c2daa1810213a4f007baa587298d2fabba6d11c461a25b8290445c8ca8a37"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Fix PAC names here \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/operator.rs"},"region":{"startLine":718}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa0ee7f4303653a549d50c1b9520367bfcca00f518c69c53be6986c32a1dc53a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We could enable the SOSC clock monitor. There are some things to \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/operator.rs"},"region":{"startLine":756}}}],"partialFingerprints":{"codehealthFindingId/v1":"b29f98a9bff5e6d4d3446d2afa72477c2fb740747a3070545ad614a5f632e9db"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: support FRM? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/operator.rs"},"region":{"startLine":1078}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b6996b472e3dd955e6e5f5cb3175c02482e633930d2db8acbdc1a4daa448839"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Support clock monitors? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/operator.rs"},"region":{"startLine":1085}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3ec2725b15e8189b51d52ab6f862e4f41a936d0424a0998fd9ba586444ca4b0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Support Spread spectrum? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/operator.rs"},"region":{"startLine":1103}}}],"partialFingerprints":{"codehealthFindingId/v1":"78f180f53e3d103fd4c8603371d575cd62a41837b787816c0787a8615dc9490a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This calculation doesn\u0027t consider low power mode yet! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/operator.rs"},"region":{"startLine":1261}}}],"partialFingerprints":{"codehealthFindingId/v1":"945654359c39c54f63530fed77b8810b5103dcc29a5e70b163b2a4ca98ed0eb9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: (Double) check if clock is actually valid before switching? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/operator.rs"},"region":{"startLine":1269}}}],"partialFingerprints":{"codehealthFindingId/v1":"76cc1250ddfb54d24b4a787aa6e869ad3d9d4977433464b321ee878511e1a3be"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(AJM): I don\u0027t really understand this! Enforce it literally for now I guess. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/operator.rs"},"region":{"startLine":1368}}}],"partialFingerprints":{"codehealthFindingId/v1":"858cc92c8889b7685115f1c8a9ef5775e7943626e268cd776c3e1277fdc4e515"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: wait for https://github.com/rust-embedded/cortex-m/commit/1be630fdd06990bd14251eabe4cca9307bde549d"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/operator.rs"},"region":{"startLine":1552}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3d7bb0ddcc26ae72861ac1d3b43ae989dfae2cd34d942fab19a7b0b131d3484"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This *might* be required for DMA out of flash to actually work when \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/config.rs"},"region":{"startLine":212}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d3de5239aef0b7d04bdde81bc9b979f8d5f0d7e981d18b3198a87e03ef9ec40"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// ## TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/config.rs"},"region":{"startLine":247}}}],"partialFingerprints":{"codehealthFindingId/v1":"25d9145d01246b7482486cda2cba84c4a4d97301f6a79b35ab24ba6c67e648a0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: the reference manual hints that ROSC is possible, \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/config.rs"},"region":{"startLine":362}}}],"partialFingerprints":{"codehealthFindingId/v1":"0cd614a59a18154c6ad3d776b17b9207bccfdc3299b5da4915a3c2b05d2033fc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(AJM): Re-enable for MCXA5xx \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/clocks/config.rs"},"region":{"startLine":367}}}],"partialFingerprints":{"codehealthFindingId/v1":"e16ca56f78342f77f42c18e457cd17f1af9ccde394eef3d5a3b230ffa8fed8ba"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO make this a specific Bbq mode instead of using blocking \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/lpuart/bbq.rs"},"region":{"startLine":519}}}],"partialFingerprints":{"codehealthFindingId/v1":"4815ccddb9e5af29aa12503186ec76e5001ce50b779f1160fe184ae269e59f23"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO make this a specific Bbq mode instead of using blocking \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/lpuart/bbq.rs"},"region":{"startLine":752}}}],"partialFingerprints":{"codehealthFindingId/v1":"dab80729e7c7bc3bf4810efabafe692b2292d3cb9a68b0e231008b1f10abd8b0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO make this a specific Bbq mode instead of using blocking \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/lpuart/bbq.rs"},"region":{"startLine":1098}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a6a981815ce3d774af817a9b0aae17ad4ac147ba0fe5bea4628b8299169ad57"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We could probably be more clever and setup the DMA transfer request \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/lpuart/bbq.rs"},"region":{"startLine":712}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b0cb3baa0869c4969dc94b0fc917beaf2b7e32dfcb42bfab16944f371e6db5a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: We could probably be more clever and setup the DMA transfer request \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/lpuart/bbq.rs"},"region":{"startLine":1041}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d9b839daa6d9c9ded3098ca959c5f27cc5d95cd71827990ec56f107cc192dd8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we could have a version of this that gives the user the grant directly \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/lpuart/bbq.rs"},"region":{"startLine":800}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ba8d096ad5a4d92101b25fba713ca7dd1e974466aee28d5896dafe101ae0d4f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we could have a version of this that gives the user the grant directly \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/lpuart/bbq.rs"},"region":{"startLine":1172}}}],"partialFingerprints":{"codehealthFindingId/v1":"d070cb283f4d6c40ca8d5398798e7d0f39df5abbe1fac8b8372991f8f0a0447a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Right now we only do this on RX, we might want to also handle this on TX as well \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/lpuart/bbq.rs"},"region":{"startLine":1025}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1620df69607fdb205867daa1e9bbca07215f970307182f3c6bf81a310ea6c3d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Do we actually want these interrupts enabled? We probably do, so we can \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/lpuart/bbq.rs"},"region":{"startLine":1054}}}],"partialFingerprints":{"codehealthFindingId/v1":"0260a52220484bd52770f429e0762a68b0faf1776dc1f8b673e95e02e753abac"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Some other way of ensuring the DMA is completely stopped? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/lpuart/bbq.rs"},"region":{"startLine":1482}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b68eaf4042a7b30cba11620ca382a82cda758c8a1a53b16b0194a2bbba2777c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Most of this setup is redundant/repeated, we could save some effort \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/lpuart/bbq.rs"},"region":{"startLine":1572}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9de87a7e376a6b0a22ee33d2eb9cb16c6e63b0a40104b86d72484a380742bee"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Most of this setup is redundant/repeated, we could save some effort \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/lpuart/bbq.rs"},"region":{"startLine":1654}}}],"partialFingerprints":{"codehealthFindingId/v1":"ccb7c4d0dd33e73a153d8914f3c604ec67e986fd5e5f3a9435e8df56fb32d80c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: I\u0027m not sure this actually ever happens, this is a defensive check \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/lpuart/bbq.rs"},"region":{"startLine":1608}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd34542b9f53e334417c363c073e760d51c15d7caad506479f9db7c33bb275a9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // Just clear any errors - TODO, signal these to the consumer? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/lpuart/bbq.rs"},"region":{"startLine":1730}}}],"partialFingerprints":{"codehealthFindingId/v1":"f65e5c961002b21d8c61494755935b6b517462a4cb56c1dd76e5959fe1564781"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // SDK vs. RM mismatch; TODO: confirm correct value and semantics. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/rom/flexspi_nor.rs"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4b41402e138d2b5d2a034ef0c4bdd050eabc8274b2288895ce1d8cbf70930f9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Implement other operations (e.g. AES) as needed \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/sgi/mod.rs"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"934dd000ad743876c67ba713c3e086aacc35480ed534dbc25893373ae630f02d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: ensure this is done internal to the DMA methods so individual drivers \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/spi/controller.rs"},"region":{"startLine":619}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1ace6c2139e451719ac537682265b4e031f36ddbdfefa4407a3f41252307487"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: ensure this is done internal to the DMA methods so individual drivers \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/spi/controller.rs"},"region":{"startLine":644}}}],"partialFingerprints":{"codehealthFindingId/v1":"03008d1dda16736d4f38a06d4a1c3cc91b4c6e61a76b726693ab17fa4e0a7940"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: ensure this is done internal to the DMA methods so individual drivers \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/spi/controller.rs"},"region":{"startLine":709}}}],"partialFingerprints":{"codehealthFindingId/v1":"7feda232edecfec34f1427540afa74e349c43938ff9559135969be355323c2fa"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: ensure this is done internal to the DMA methods so individual drivers \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/spi/controller.rs"},"region":{"startLine":759}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ec3df10745afaa8c5f5935f857b28a7ecf8f020cc8ee9491b68fe18328609f9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: ensure this is done internal to the DMA methods so individual drivers \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/spi/controller.rs"},"region":{"startLine":798}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b7f937e98fe7a162859a81742a4039837f26a6ae8354cc2532317bf50a93f47"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: ensure this is done internal to the DMA methods so individual drivers \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/spi/controller.rs"},"region":{"startLine":848}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5975ddf80554234713736afb6394073b5288b72be41d3b7d6d12c4491196343"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO - empirically determined delay \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-microchip/src/i2c.rs"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"8376b54aad986237259d530bddd264a95886877b66e9074e186dbce36e1175a9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO - empirically determined delay \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-microchip/src/i2c.rs"},"region":{"startLine":749}}}],"partialFingerprints":{"codehealthFindingId/v1":"12afbaf81640b5cf51700eca9d8598c349b52afd1c5aa32275b75fb81cd55647"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO - empirically determined delay \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-microchip/src/i2c.rs"},"region":{"startLine":757}}}],"partialFingerprints":{"codehealthFindingId/v1":"779ef2eb0b3579d00f6f962113a998bc7ebac02d9f4812312568c4b426d49fb1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO - empirically determined delay \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-microchip/src/i2c.rs"},"region":{"startLine":765}}}],"partialFingerprints":{"codehealthFindingId/v1":"21b1b382ed8592c28840d9c4735b9540eed520269cf44157d0021768fdbbcef1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO - empirically determined delay \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-microchip/src/i2c.rs"},"region":{"startLine":768}}}],"partialFingerprints":{"codehealthFindingId/v1":"a56fab5708c625991706451705fbc74c5669956818d3824f68fb6fe916f24575"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Remove this once int group stuff is generated. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/build.rs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a9e049632ad376e196869387a38319c26b418b764cb990b1f8dc7a4fe2fc5fe"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Remove after TIMB is fixed \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/build.rs"},"region":{"startLine":315}}}],"partialFingerprints":{"codehealthFindingId/v1":"97ff4590ed7c5d24e8477f245004e7e89112fd0b8b2e84bc71fa4b093f3f40c5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Generate this more generally for other signals (e.g. FCC_IN, HFCLKIN, HFXIN, HFXOUT, etc) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/build.rs"},"region":{"startLine":337}}}],"partialFingerprints":{"codehealthFindingId/v1":"90e98892a77675f4ed3a73056667ff5cc97f3fd2c47b5fcb66828c250779ef1e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Feature gate pins that can be used as NRST \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/build.rs"},"region":{"startLine":399}}}],"partialFingerprints":{"codehealthFindingId/v1":"9418ccb5df63daa8631cd7ce0587ff1c2966f0df20b36975471d6581c9dc3b82"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Fix TIMB0 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/build.rs"},"region":{"startLine":435}}}],"partialFingerprints":{"codehealthFindingId/v1":"1dbbc83fb7d73447a73e33a2948090c9198d1bf30dbbd9a9608c48cad422d177"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: 32-bit timers are not considered yet \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/build.rs"},"region":{"startLine":461}}}],"partialFingerprints":{"codehealthFindingId/v1":"067331362f3a575f3ecdcb232e37a90f6770fd55643ca8a6f2950f321ce09e99"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: I2C unicomm \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/lib.rs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"368b3e9c20811c3ecb2d4363e45f4d2d3c46347bbadc3e2fc42cc4491367a6b9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: UART unicomm \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/lib.rs"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"e875fd6698bbe881f7002caad026b80d4892f6252d58b1eba1aee176cd0ff7a4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: OSC configuration. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/lib.rs"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"08bf4fee3b7e39937935ede58d38918bdabbd7d053d14d794a8a42e1dcebc421"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Further clock configuration \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/lib.rs"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"81ca5a2f7ef21729f8b4a96785c47c797fc4c6f3ae5a345c9deef3bf3c7d420c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Optional? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/lib.rs"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e45dc0d6d75446792446a993b293a958e4887b870dbfc75892e9dc4df446c21"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Errata PCMU_ERR_03 states that BOR thresholds other than 0 don\u0027t work in STANDBY. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/lib.rs"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b054637adcdaab94e9c57945ba935adc52ebc7a3c26cf642c1b173b5b4e1292"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: calculate BusClk more precisely. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/i2c.rs"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb8946b2a9260ea04ecd3905d4cfd37e7c91f4880233b7c388e0b9ac58c2a39e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: calculate BusClk more precisely. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/i2c.rs"},"region":{"startLine":219}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4467586f56bd1f1b9db307edb404bfa5b46b5ef5344801908e95639682d8a4b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: check if BUSCLK enabled \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/i2c.rs"},"region":{"startLine":241}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca2bcc9be6ffe4f9a6e29fc0848b2bf4830e89004244462d0bdac49002af892f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: drive strength, hysteresis, wakeup enable, wakeup compare \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/gpio.rs"},"region":{"startLine":202}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ba7289cc344053ff7aae118f7b7f5f5b4510f4a37a2a18b3fccd42e42983fa5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: u128 (LONGLONG) support. G350x does support it, but other parts do not such as C110x. More metadata is \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/dma.rs"},"region":{"startLine":247}}}],"partialFingerprints":{"codehealthFindingId/v1":"804d14f839bf6ed2a51c1ffbe34f23d71bf5ec0c4460abd097458832b35267c3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Read and write stride. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/dma.rs"},"region":{"startLine":298}}}],"partialFingerprints":{"codehealthFindingId/v1":"b02f53e9cc2424079ed76fa116fb621397ed014115e70d26524f1df0abf318f6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Stride checks \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/dma.rs"},"region":{"startLine":395}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb9d52ab8aa2133e83698419905cd2c415a2913fab51e6530883fa85d4f3eb05"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: Why did putting set_req later fix some transfers \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/dma.rs"},"region":{"startLine":555}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c1d25c17a0228f3365d12eadd92a93a74ccc620befefcacf39d0fc8e1132900"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: For chips with multiple DMAs, pick correct instance \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/dma.rs"},"region":{"startLine":621}}}],"partialFingerprints":{"codehealthFindingId/v1":"67e86dfdf13dbe3bb55858ffde881094abc1f9c207f4fe5e8dd814c1f991a99e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Handle DATAERR and ADDRERR? However we do not know which channel causes an error. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/dma.rs"},"region":{"startLine":643}}}],"partialFingerprints":{"codehealthFindingId/v1":"a01ff42f086710073db82a1d872782ddbcc56502caf945c7d016cb9dae47cdd9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: ULPCLK after clock config \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/adc.rs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d75d8f60e541a32dc05a412e187b01b77663ba75f3b4a11e52fc8644209f573"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: HFCLK after clock config (if available) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/adc.rs"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a628d5e7ce5cde0ec0ca56b4732bd781ae58b9701a7b390f610c0216fb8b154"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Bitpack a regs::Memctl for smaller size? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/adc.rs"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"2819e10ec4903b82804013702b474abbf350b978d9060e6c7924579ecef949db"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: AVG, BCS, TRIG, WINCOMP \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/adc.rs"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff07edc9a8adeddd861712d8097753a605e5d5ff1ac8271b55f6058b242c2232"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: What should these be by default? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/adc.rs"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"e82ee2889185dd2d841c51579cf1f840da0c46aabc3da7425aeea7db26291e15"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: DMA driven ADC \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/adc.rs"},"region":{"startLine":357}}}],"partialFingerprints":{"codehealthFindingId/v1":"93241efa8d0ae0065c0ef97e6c373422ded9ea139de6f76952b0782aeb72477e"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: Consider clock config \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/adc.rs"},"region":{"startLine":451}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5bc317d83470314d91d3b3b2305295d34d717f72446e33a0c40cd278d35516d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: power down config \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/adc.rs"},"region":{"startLine":455}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb4d741d8ed89db5a661d984ce63857f0007a2406cd9b8cdf34069fd0568537b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Conversion function to not be repr dependent \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/adc.rs"},"region":{"startLine":507}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6015185f66b4f9d96799ccf94ee7d98b4f4d4fa706a0b3124a9352338f10f88"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: More parameters \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/adc.rs"},"region":{"startLine":510}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8ad8f2f149f5128dda4854e375067391c3e3b419aaac133f8d9521f7dff22bd"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: This could be a problem for embassy-executor\u0027s default executor. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/low_power/mod.rs"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c273f17f8e99667328ac8f0066ef17a13628411b9865f13e60c86a778ea5456"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Use sysctl version instead \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/sysctl/mod.rs"},"region":{"startLine":10}}}],"partialFingerprints":{"codehealthFindingId/v1":"3adf92c4da3bf2ff41139cc9abba8f0aa45ca6ff350f8d50923270a15eafdb65"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Compute this once the MCLK rate can be adjusted. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/sysctl/mod.rs"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"c974b705e7e90e4a266c7dd4e57febece9a415f3cac1e107c0f0e95cf8919262"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: Config (pull, invert, etc?) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/sysctl/mod.rs"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa731a34e24bfcdb9b5f831730d16eddc9655d4d7d4ad3c8b5d13f724ae14cd6"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: Infallible operation \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/sysctl/mod.rs"},"region":{"startLine":203}}}],"partialFingerprints":{"codehealthFindingId/v1":"c11df9f48b7a471a56c89d97271c4f41c166c70b2b1bd2d8d9663bca2686cdc2"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: Wrong name from SVD \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/sysctl/h321x.rs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"dad395b4f18b055ba4ad5b213623aaa3c7484abbb341a4f742b0914353da15e5"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: Wrong name from SVD \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/sysctl/c1105_1106.rs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"391db460bf4930edcb850475fe779232de17e6e4f65755ed6c5cbc935f3b7e47"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: Wrong name from SVD \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/sysctl/c1103_1104.rs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e8e416b05f39386534f3ec7632821200648ab3ecd141db8099476fb950ae174"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: Update SVD to define _RESERVED_6 as USBFLL \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/sysctl/g511x_518x.rs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"27d0bcc7cd134e83f6456da53cce0cef198cf4eda035022ffed82224878defeb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: fractional duty cycle \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/tim/simple_pwm.rs"},"region":{"startLine":509}}}],"partialFingerprints":{"codehealthFindingId/v1":"af03543de3e1d10a0a4879d9b6909a4a963cf9a92622d3d74aa84340f3100ba8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Output polarity \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/tim/simple_pwm.rs"},"region":{"startLine":511}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8a9a1fdbef8b8c936118404956ec1fb72b046ce40872214e34baa470a518f6c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Output compare mode? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/tim/simple_pwm.rs"},"region":{"startLine":513}}}],"partialFingerprints":{"codehealthFindingId/v1":"807f73547a9a13590a198d1b23489319612c9516b5efe0e52bd8d08c23ebb2ce"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: The hardware could actually have u32::MAX here, which would be a lie when clamped to u16. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/tim/simple_pwm.rs"},"region":{"startLine":566}}}],"partialFingerprints":{"codehealthFindingId/v1":"56e44b586edfd360e068043d3b1f68b3721bda76078a352041394ea63dee94bd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: PfType config. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/tim/simple_pwm.rs"},"region":{"startLine":618}}}],"partialFingerprints":{"codehealthFindingId/v1":"86c3a1fb9adfa24a5000d51663bb3f965d1e963ea1cadda5c6e8abf60c403f48"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Bus clock when enabled for timers \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/tim/simple_pwm.rs"},"region":{"startLine":665}}}],"partialFingerprints":{"codehealthFindingId/v1":"ded35311ac4f38faf2e6d648f14f81bdbde633be94c5f3ff503394594b7d0f43"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: LCOND, ZCOND reset value is reserved? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/tim/simple_pwm.rs"},"region":{"startLine":719}}}],"partialFingerprints":{"codehealthFindingId/v1":"104e00dd251e078c803ee94b1d55f260254ec43bee92f383d75f93dc66ecba8c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: BusClk \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/tim/mod.rs"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb164e04ab8ff65d245995edac864da97ebe13111436a2f597983036e05a3d36"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Or maybe allow using them, but disable STANDBY? STOP0 will still work. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/time_driver/tim.rs"},"region":{"startLine":22}}}],"partialFingerprints":{"codehealthFindingId/v1":"20da62ee332557580edfcf2bfdb117db521a5700b5bf6f94a0f84360bf6e05e3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO: Configurable tick rate \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/time_driver/tim.rs"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"f65d791e881a677a00d24729a8134a7c012841824d89e8a8325347fb1125186c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO: Compensate for per part variance. This can supposedly be done with the FCC system. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/time_driver/tim.rs"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c24840b48cac6c1bf6432505d076aa50b47cd41a1c380e3c7eaf36a53ed7df6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO: Allow using 32-bit timers (TIMG12 and TIMG13). \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/time_driver/tim.rs"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"a18f1f132f4e28c6efd10214320fa7cf8680c337820cdc2aef6468f75cd39360"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Configurable tick rate \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/time_driver/tim.rs"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a8ea1367e0608f665be9b6bee94ffbb3be71463b350c540d0be2862820bba81"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: TIMG12 and TIMG13 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/time_driver/tim.rs"},"region":{"startLine":407}}}],"partialFingerprints":{"codehealthFindingId/v1":"78ef41d9f63a2c5b9361017f50a3f815b29a49ecc09dd097d26d72efde9f9b98"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Alternative TIMB implementation \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/time_driver/mod.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0efc7a23899ac1abc5a99a1efd266eb081ebf91771352758acabb842e0ec1a6b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Pending way to check if uart is extended \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/uart/mod.rs"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"adcde49f553b1919b2b821aedeb4f5ecb90e9f14b0dfc2aafd19e9a39032a765"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: majority voting \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/uart/mod.rs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"2de2ba3876118798598e00de6d46e287357935cf2f547f85e1d75bf240cca657"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: glitch suppression \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/uart/mod.rs"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"60963127b1e837e534f286bceaaa21193820372a8508344e6494eac981435833"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: config \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/uart/mod.rs"},"region":{"startLine":792}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a02ac3ca4fe36ad9fdb9fa8ad4b715230b029dcbf00f82d632c255b98b2b2e7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Need power domain info for other options. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/uart/mod.rs"},"region":{"startLine":798}}}],"partialFingerprints":{"codehealthFindingId/v1":"53287d47fe723a415fba649d6baa21ebbfdc8066136c22ea8f9bceadfd652abe"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Implement when dma uart is implemented. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mspm0/src/uart/mod.rs"},"region":{"startLine":1074}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6a78e558dbf99d5b3bf1eb95e354ed155b0b384adac7622419830506a4c8691"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Add proper timeout! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-adin1110/src/lib.rs"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4afd996c8702055a976d79c88b26ded8f9337385cf79afcc464d77be5cd7b5a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This is currently a workaround unit \u0060ExclusiveDevice\u0060 is moved to \u0060embedded-hal-bus\u0060 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-adin1110/src/lib.rs"},"region":{"startLine":1060}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2acaa6d4a31643759d1952cb6b75ef399a15824e1f2e68b3c1b32356c815934"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // Turn around byte, TODO: Unknown that this is. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-adin1110/src/protocol/generic_spi.rs"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c526dcc4e46648a7b469b936db45839c5a6aa5898951467335915eddb3d56c0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: ///TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":9560}}}],"partialFingerprints":{"codehealthFindingId/v1":"2695a2c2171f6897b2da0541696049aaa0490006142372215df6140b71d80d1c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO: uint32 is supported by proto? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/proto/mcu/mod.rs"},"region":{"startLine":11805}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a15d35becca624231a488542c40c094ed5772582f67f690c8bb9818d8c31be2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this should be user-configurable, either in build-time or runtime \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-esp-hosted/src/rpc/mcu.rs"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fd156d2b8471aa16df193bdfb1330e51ceec7c9e2dfdc0af9962d7abe162d80"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // todo handle WouldBlock with async \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net-tuntap/src/lib.rs"},"region":{"startLine":193}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7bea0ed368fc323c88d8f79fd19f77c5647d512adc1ff47cbe2d81e9a523eb0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // Connection reset. TODO: this can also be timeouts etc, investigate. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net/src/tcp.rs"},"region":{"startLine":1196}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bc73cffbdfebe5d04f3266e92b13c75810bcfc708c35fd214d1f8be2ed08cee"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // Connection reset. TODO: this can also be timeouts etc, investigate. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net/src/tcp.rs"},"region":{"startLine":1243}}}],"partialFingerprints":{"codehealthFindingId/v1":"6346c5195f58a82ea1daf77def9bdacf2b1ba60cae8ad527cee17ab068882b8b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // Connection reset. TODO: this can also be timeouts etc, investigate. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net/src/tcp.rs"},"region":{"startLine":1308}}}],"partialFingerprints":{"codehealthFindingId/v1":"f482eec185b522e119843563c5e1b90c4d58c02921b6b946b3ed632c1a679a88"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // Connection reset. TODO: this can also be timeouts etc, investigate. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-net/src/tcp.rs"},"region":{"startLine":1346}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec2d367c4b49f228363322bc3052ca299d1b38d7cdc88eef42bb47957750d5aa"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: check for abort \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/twis.rs"},"region":{"startLine":834}}}],"partialFingerprints":{"codehealthFindingId/v1":"08670790847df3be363dc0932e421cbe65999278a0837ef69de4c000c5801fb4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: check for abort \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/twim.rs"},"region":{"startLine":834}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3d48b477dc7abc355bae14e1b646f40d929b84c0547a12f9573d1605de728d2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Handle empty write buffer \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/twim.rs"},"region":{"startLine":582}}}],"partialFingerprints":{"codehealthFindingId/v1":"817ea158552f1172b1e228fb58945ff20fd44fb99ca311d70e7bd46cab2063a3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: is there a reason someone would want to set this lower? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/timer.rs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b59a752993ebbaae6506dbbd5eedf822f119dc2891a1bc56659eb0ec6456afc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO check for abort, wait for xxxstopped \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/spim.rs"},"region":{"startLine":704}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ac9a64b7fd0bc174a0916a03723e138c664e051c2be83e6ca21a4a32b1b8b98"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO add \u0022not in data memory\u0022 error and check for it \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/qspi.rs"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca914f283c4e0b468f0661d80c1349e3a929ff66654d5e34f0eb5a82e2a7b433"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Return these as errors instead. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/qspi.rs"},"region":{"startLine":339}}}],"partialFingerprints":{"codehealthFindingId/v1":"a37b956eb6b2f374435f094f9e4c4b384e8d292377911b51cd141102018b4439"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Return these as errors instead. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/qspi.rs"},"region":{"startLine":356}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b688192eebaac813729b440c46936886bd4ff9dbc97abe6898af4d9e1537905"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Return these as errors instead. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/qspi.rs"},"region":{"startLine":373}}}],"partialFingerprints":{"codehealthFindingId/v1":"12e25ae640208f2bd8079ceccb6c39131e245383c03500b642b68701054bb3eb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment repeated across 11 files: The identical TodoComment appears in 11 files (21 occurrences) \u2014 almost certainly one boilerplate line from a single migration or decision, not 21 independent debts. Fix the systemic cause once rather than file-by-file. Text: \u0022// TODO\u0022. Source code is not a task system: track the cleanup where tasks live. (Every occurrence still counts toward the score and metrics.)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/lib.rs"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d492560b3c388f9fe00d06e39929f562ca9c92edc6d9482f3c7874f30514abc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Handle nRF54L \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/lib.rs"},"region":{"startLine":1033}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5ce34a7136bfa89b7778b0a3e0d39b52327b304d1da4ee8d567a565c0ec34cc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO expose the other variants in \u0060pac::CCAMODE_A\u0060 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nrf/src/radio/ieee802154.rs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"def9646985a2dc2efc97054e27e4274e92df0c6ebb1aed225a977d05a5440426"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Some for USB PLLs \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nxp/src/lib.rs"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f6a8c38a611019df497a5bbf05dbc2b18ca65b0ef9a2710857fc1dc274e9a93"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: What Does PUE::KEEPER mean here? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nxp/src/gpio/rt1xxx.rs"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb0b27ef0bafcc50732f3d2f7bbbf226b7a1a71ceb750afb72789708cae254ac"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: These don\u0027t always need to be 32 entries. GPIO5 on RT1101 contains a single pin and GPIO2 only 14. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nxp/src/gpio/rt1xxx.rs"},"region":{"startLine":652}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5a74f0ff8f4ae1445634831e6d19a9197e55b212ab68f7f216dd58dc5aa3c13"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(frihetselsker): optimize nxp-pac so that \u0060set_clr\u0060 and \u0060set_set\u0060 are turned into a bit array. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nxp/src/pwm/lpc55.rs"},"region":{"startLine":203}}}],"partialFingerprints":{"codehealthFindingId/v1":"f97ca9340859c19abf652cc6345665980fa53d52cb1e5bf4dab5212035f45c2d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: write a function that updates SPI configuration (phase, polarity, frequency) settings \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nxp/src/spi/lpc55.rs"},"region":{"startLine":354}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f28ee3fdc84a441391efb8a61ed37235c97242e7a860f6539e3c2f73bcdae16"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: This forces the PIT to be driven by the oscillator. However that isn\u0027t the only option as you \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nxp/src/time_driver/pit.rs"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"39023615bc9f310791596a6b230869a816b1bb14e0634e5b2a03e9779587ff41"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(wt): This needs to be wired up in the usart driver. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nxp/src/usart/lpc55.rs"},"region":{"startLine":906}}}],"partialFingerprints":{"codehealthFindingId/v1":"510c62dcf3a44a469349364b3ee34cd60d1997232ed2455201732b30b8dc18e6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(wt): This needs to be wired up in the usart driver. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nxp/src/usart/lpc55.rs"},"region":{"startLine":913}}}],"partialFingerprints":{"codehealthFindingId/v1":"593cb82fc68957700f224737c85aeec08872e6e7dc21ff964b160478b30b74fa"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO(wt): This needs to be wired up in the usart driver. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-nxp/src/usart/lpc55.rs"},"region":{"startLine":920}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c95e71febaf207fe52391c392eab7cfa2f9e248bf128c0337f27e18a468c595"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO use the \u0022atomic clear\u0022 register version \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/reset.rs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"d30dac6a9a9f0158a129c5bc77f00141360100a41e2ea726e8b5c0c3593c4df2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO: does this interfere somehow if the user wants to use a custom MPU configuration? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/lib.rs"},"region":{"startLine":790}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad3b54493fd3b44769313ed75d29c5368625b5d5f2655502873721a917b09548"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO rp235x bank1 as gpio support \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/gpio.rs"},"region":{"startLine":1116}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d88d5a947dda5155f427b2447758f49c9bf8631a11619d56b94ef1c0cd5712c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: when run-from-ram is set, completely skip the \u0022pause cores and jumpp to RAM\u0022 dance. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/flash.rs"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"57678b55b474f518ac9f8662b45c90ea4b0ef6e409dd349fb846b8900de5a6f6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO hstx clock \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/clocks.rs"},"region":{"startLine":1327}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea5e5aa3e29ab69f01d1794421d394cb54d1a5bb943ed385855c6f2aa7276cf8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO rp235x errata E9 recommends to not enable IE if we\u0027re not \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/pio/mod.rs"},"region":{"startLine":1331}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8580e2cb7de3f817b431a7f1fcd576ba2d4ce800a37933c3caab2c3b407afc4"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME(svd): Add EPX to svd \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/usb/mod.rs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"cee6438519cad6fd6703a64be385521620d784a75dc52e681d9e9c2b972b9990"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: Compat \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/usb/mod.rs"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce54ec664d6dbc608cebe6fb0b9e31708f2383ed11fe1b8691b5395b731abc75"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: assert only in debug? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/usb/host.rs"},"region":{"startLine":526}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd67506ac3f2a7cd0b2d38586ac7bbc2fb86908529b2961668b2948fefd952b3"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: Stall derived from other place \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/usb/host.rs"},"region":{"startLine":868}}}],"partialFingerprints":{"codehealthFindingId/v1":"07bb144ace3996ced6474c6c558c2d6c973eed1fb7d62e0d09e1c8295e96793a"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: RX Timeout with LS device on hub \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/usb/host.rs"},"region":{"startLine":930}}}],"partialFingerprints":{"codehealthFindingId/v1":"f311e5de1b394bf952c10f0620ab51daa7fdd7678c5413b7aa4d407282677b25"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: implement VBUS detection. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-rp/src/usb/device.rs"},"region":{"startLine":352}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ec4b94cc5cf0bb2cb50ef1b887c1053699d3bd709debe531b442bccb7961ebf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: implement VBUS detection. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usb/usb.rs"},"region":{"startLine":584}}}],"partialFingerprints":{"codehealthFindingId/v1":"da3c65d8ff0689ef5673b45831b0f161185a9e59f5271acb3b616dbbec6931fb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Fix \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32-wpan/src/lib.rs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f1621441391b49509f94309b64a99f5e6f6cdea1448c7d6ad915152fc59264e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: respond to association requests, etc \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32-wpan/src/net/runner.rs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"626027037705b1ace1e1cf8c9a1a10ce854f7d3cf78c4408b92db83da2a6429c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: map the rest of these \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32-wpan/src/net/commands.rs"},"region":{"startLine":399}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e345898cbee71c2ca866f1be77b0c4a47e185cce1775b90c8a9b4211def940a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: use later \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32-wpan/src/wb/tables.rs"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"2997d6e00d1ab76c4ee397d11629582ae853931fd350e004779dc284d07269ee"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: use later \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32-wpan/src/wb/tables.rs"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"3515954a97cca5a922b9fdbc267279e3a62ff64ec35ba0a50efeddbfc5e1e0d1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: document what the user should do after calling init to use the mac_802_15_4 subsystem \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32-wpan/src/wb/mod.rs"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"91be32bc01e97a23b842817604198f88c0ffebce46bda780a260739b6c9a6491"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this appears to do nothing (will be optimized away) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32-wpan/src/wba/util_seq.rs"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"d82e02aa026b324afe2cc30d9f11720d2a60adf45d7593dde976eff4d9fd9fc9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Pull in update from latest stm32-generated-data \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32-wpan/src/wba/linklayer_plat.rs"},"region":{"startLine":1218}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5bab3f74e4f3d1d52db44ff8a9e7c2121256a12e7fa66c75a113b24e41ca830"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should we emit this for all peripherals? if so, we will need a list of all \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/build.rs"},"region":{"startLine":205}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4926ad4b8c326af4c90c3d19f2f5d6eaf1bfe0fde9fcea90425a0313d2a7a7e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: only for the current cpu \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/low_power.rs"},"region":{"startLine":298}}}],"partialFingerprints":{"codehealthFindingId/v1":"44e1a4cb276c2323fda90a6ec55300409a61166e9ec5adb750ed0f89313b3c87"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: does this also need a critical section, like other methods? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/gpio.rs"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"60ad4180e41981eb6b51c94571fee62a177b813a4d939826401ad2872103ff7f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// error logging (can_errors) is active. TODO: automatically enter in this mode? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/can/fdcan.rs"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"d780b17b0efbaf0c9bc73b226c00a7988681a3b16b0225a2a5d8488591de3b93"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // error reporting in this driver should have a big ol\u0027 FIXME on it \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/can/fdcan.rs"},"region":{"startLine":1079}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9d845d755fd7d2db44dd8edbe7e0f4ff0452d233e3163b82c4782987d6b2f2c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //esi.set_error_indicator(//TODO//) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/can/fd/peripheral.rs"},"region":{"startLine":703}}}],"partialFingerprints":{"codehealthFindingId/v1":"652f25ceae6d8fd4f61883fbb9f46b93bb123fbbc478521a1799436f71017c68"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //     todo!() \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/can/fd/filter.rs"},"region":{"startLine":353}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1724c4989347d73b3a5fe1f3fe3a33f668b4ad2b417e263371c3c8a84324b5d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //     todo!() \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/can/fd/filter.rs"},"region":{"startLine":377}}}],"partialFingerprints":{"codehealthFindingId/v1":"339d8ce64612295b198c2f44729f15f9525abe368a7204601c0a8f9240228c27"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/can/fd/message_ram/enums.rs"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d0169d21f5ced7c70074dc562b34cf9a3d7ba02c3dda523aeb20540cd304adc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/can/fd/message_ram/enums.rs"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"069fdc2363a15b05e9a3afabbd86c7c6b26b8fe41fe33c352e4c8d37984292c4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: /// TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/can/fd/message_ram/enums.rs"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a0692773721ea850aa2e1732bc0870cb6a4e0967db31ca6fb3ecc6e1a126f4a"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: //! FIXME: Add request_pause functionality? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/dma/gpdma/ringbuffered.rs"},"region":{"startLine":3}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a9dea91eca2fb1e09ac686a61086653938da14c05262441ec210832b6fb535d"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: //! FIXME: Stop the DMA, if a user does not queue new transfers (chain of linked-list items ends automatically). \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/dma/gpdma/ringbuffered.rs"},"region":{"startLine":4}}}],"partialFingerprints":{"codehealthFindingId/v1":"e20a30504320ac467d6488301f801a7bfaa36036aff3c15ee0ab3c9b79cfcacc"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: This might be a generic long packet, as well... \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/dsihost/mod.rs"},"region":{"startLine":297}}}],"partialFingerprints":{"codehealthFindingId/v1":"b50ea6348188b5299e9ba8a93bd769b3ebf3b7253f4262b4b61d3ef18ea88589"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Check and clear more flags \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/eth/v1/mod.rs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"afe43a814b1d9cbdde36dc894d2539bb13154fe0200531d7472b57c532929987"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Check and clear more flags \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/eth/v2/mod.rs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"5455508c9fa6e86661eaace99c83671059613c8414c4505b8be718a071a5fc10"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO properly create a set_as_input function \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/eth/v1/mod.rs"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5b330a29d7ef77abc8dc4920cfe73d72155e3cd18b43f9adb0808abceff9fec"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Carrier sense ? ECRSFD \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/eth/v1/mod.rs"},"region":{"startLine":294}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4649fbf059b61bc9866bf4d86a70077f093b4f874fb3ef1dcd6b439f995c35c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Carrier sense ? ECRSFD \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/eth/v2/mod.rs"},"region":{"startLine":440}}}],"partialFingerprints":{"codehealthFindingId/v1":"b131452662e6227edb03538f86e4eeaa5148aff98450ac0c88b86276a9340c6a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO MTU size setting not found for v1 ethernet, check if correct \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/eth/v1/mod.rs"},"region":{"startLine":328}}}],"partialFingerprints":{"codehealthFindingId/v1":"777fad70d85529606e87f19278643a1cc661d72752a54df5a97de02d5ee58e7b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: shouldn\u0027t some pins be configured as inputs? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/eth/v2/mod.rs"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"d513fc5317232b413287633043a3baac592fa4dcd5977b9ed6a8c026186b6868"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add check for bank swap \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/u5.rs"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"71f4cc0eb6715f68a9572d6012d52f5cf17eb0ee9f925bea2d7e9bad191e5afe"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add check for bank swap \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/u5.rs"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"130748fda5c230f11d116a8a07610011bd4029b225e7c5202fa4b59022876cad"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add check for bank swap \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/u3.rs"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfbb94411f62a1d9745f70c1772c23062f00c5d24dbf6e227e5b7e99fb623b64"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add check for bank swap \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/u3.rs"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed4baf5e3d19a8d1ef715181cddd2518033fcbd819e8ecfc438cdae392046390"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: check locked first \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/h5.rs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"90acbc2cab8caa1c494402d015cbb638902476403f1327703d5b867560580fbc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: check locked first \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/c5.rs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd0f97318f79b143afc06a37eba6910907a1e40bf6e2660899e23ec6b6a64fa6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: see write size \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/h5.rs"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"31f4322d9b97d93947ad74ccee3d504f4dcd6d62d11e5b692a993f6d35bd374d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: see write size \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/c5.rs"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff039a44d68e0503b20bd149fcc6604708ceefa4d5e372ddac976a660758774c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: write protection check \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/h5.rs"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cba09e3514032d26ee6eedc714e746a211f3fc7772cc22a15ac7c8675cf1cf2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: write protection check \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/flash/c5.rs"},"region":{"startLine":211}}}],"partialFingerprints":{"codehealthFindingId/v1":"9235d2f0a2958fa1b7779b21ebd56f4bee6d037d3054173c5fbe1aa04f2a5f96"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Consider adding watermark support. If so {x1,x2,y}_buf_size will need to be enlarged \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/fmac/mod.rs"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"526ad9a67cf6621c8d43e81d1b1393b5819d996ca6274728015da37c6aeb3db0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Invert a? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/fmac/mod.rs"},"region":{"startLine":254}}}],"partialFingerprints":{"codehealthFindingId/v1":"077fb186c56e8e4c956b177c051a2a80e0ab9a058ecaaadd27957ebd49bc9588"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Verify that the HRTIM gets a clock of the correct speed as input \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hrtim/stm32_hrtim.rs"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8a99cca70ed127881c39953be4dbc4ffc71859a9fdf3bc0acda15c92681e827"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: wire up HRTIM to the RCC mux infra. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hrtim/mod.rs"},"region":{"startLine":300}}}],"partialFingerprints":{"codehealthFindingId/v1":"189afb269d685fea69484c584c7b4009571664c212b83a8b2f16cd4710a15c41"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: wire up HRTIM to the RCC mux infra. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hrtim/advanced_channel.rs"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8a12bb2b19e09693d0e8ae22a83a093e53147010c8d2fcc7a166fe85a7121f7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: wire up HRTIM to the RCC mux infra. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hrtim/advanced_channel.rs"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"7fe90a5c31e349252325c6c0eee6e05fece5a3c2569499a0c7b644be08ed88a7"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Use the Prescaler setting to compute the minimum \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hrtim/fullbridge.rs"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1faa76e97bc4b92d505690b70a642b1c251597f345cecbcc340d17217d2325f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: implement this using a LinkedList DMA to offload the whole transfer off the CPU. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/hspi/mod.rs"},"region":{"startLine":899}}}],"partialFingerprints":{"codehealthFindingId/v1":"bfa24a22a618c9dccaaf06a0fe4c4be69933a7a38ec7308ccbbc89c7d49d17af"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: implement this using a LinkedList DMA to offload the whole transfer off the CPU. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/ospi/mod.rs"},"region":{"startLine":1970}}}],"partialFingerprints":{"codehealthFindingId/v1":"14aee4d2b20dce80bfe50fc190ee11ccaa9cd9d47f1348898e86387a978fea35"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: implement this using a LinkedList DMA to offload the whole transfer off the CPU. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/ospi/mod.rs"},"region":{"startLine":2045}}}],"partialFingerprints":{"codehealthFindingId/v1":"6df3f844d8468544edd2b55c93d9a9060d3acfb2acc99c9ce3a1d12e300078a2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: implement this using a LinkedList DMA to offload the whole transfer off the CPU. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/xspi/mod.rs"},"region":{"startLine":1848}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1852256326825a8e1158451e8cbc444cb6c1631382f127faca96356217fd1df"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Generate STOP condition on cancel? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i2c/v1.rs"},"region":{"startLine":514}}}],"partialFingerprints":{"codehealthFindingId/v1":"a47567242fa5bc3c74272e1a01967936325406879771882f15bac8441772fa28"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Generate STOP condition on cancel? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/i2c/v1.rs"},"region":{"startLine":745}}}],"partialFingerprints":{"codehealthFindingId/v1":"cda035f57f7927f75b78ab6d788862f4f2f99db683c63cb3528895acfeb1034b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO clean this up to select the correct MSIPLLxFAST bit \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/u3.rs"},"region":{"startLine":360}}}],"partialFingerprints":{"codehealthFindingId/v1":"6888d04288c1de73f806577f3d4f6a9013f60c8c227e715988919cb1f89c5fdb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: add wait states for low power modes \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/u3.rs"},"region":{"startLine":423}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1fd3ab618912d66296fd64868d38e0a41c14a7f113e20d72fb10a43037b78d5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: sysb, sysc, sysd must have the same clock source \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/n6.rs"},"region":{"startLine":1414}}}],"partialFingerprints":{"codehealthFindingId/v1":"9cae7cf8550f17475f27cda79a3055a47e2bad4194ffc0ff7e8ef7e129c05666"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should this be \u0060unsafe\u0060? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/mod.rs"},"region":{"startLine":297}}}],"partialFingerprints":{"codehealthFindingId/v1":"73ef6607b23fbef298b7cb4072c672568d7842861c72f210d925514b20cf4f73"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should this be \u0060unsafe\u0060? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/mod.rs"},"region":{"startLine":348}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad504a94c617f0850e6afda31c1a3e171a29763f483837c2e8da382059f6ca4b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should this be \u0060unsafe\u0060? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/mod.rs"},"region":{"startLine":383}}}],"partialFingerprints":{"codehealthFindingId/v1":"d534a35d2106d5b1e5b7f85d67c74f2873190ad28f7160827a01f5edd1324038"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should this be \u0060unsafe\u0060? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/mod.rs"},"region":{"startLine":426}}}],"partialFingerprints":{"codehealthFindingId/v1":"8bb16cbd4ebe0bf7848bc8fc4ca9d07e0ffd868d7e179283397d962ed7413312"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should this be \u0060unsafe\u0060? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/mod.rs"},"region":{"startLine":431}}}],"partialFingerprints":{"codehealthFindingId/v1":"33011460ff115122ad5172b666e7ef07c600c5561ae7fa556d0f17c79f27f18f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should this be \u0060unsafe\u0060? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/mod.rs"},"region":{"startLine":576}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9a6de2e9bfa1db765faa39c795464c16dc27c4240f9c2037f174dbea5fd2545"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should this be \u0060unsafe\u0060? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/mod.rs"},"region":{"startLine":587}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ba846b59859ecc2d58f27ad10d8c9635672c0dddfab00723b00855a525d1afe"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should this be \u0060unsafe\u0060? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/mod.rs"},"region":{"startLine":616}}}],"partialFingerprints":{"codehealthFindingId/v1":"10c0448f6106ab7f9b6092b745d9d5c7934124514a08c396969496020980dcb0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should this be \u0060unsafe\u0060? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/mod.rs"},"region":{"startLine":626}}}],"partialFingerprints":{"codehealthFindingId/v1":"619318192ff023a721bde7c67e54415be50d473b5ceda35ac132706cf427e276"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: should this be \u0060unsafe\u0060? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/mod.rs"},"region":{"startLine":636}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b0b79de6b728b944fd39f62621bf16bdf445c589903693bbf44da17c052b7e6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: how to share this config from the secondary core thats using a lp timer? (right now its not detected as missing!) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/mod.rs"},"region":{"startLine":670}}}],"partialFingerprints":{"codehealthFindingId/v1":"f09826ee87d3e1837a3aff8020e700f8305c62a39539876400933b0e99cab587"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // VCORE Range 0 (performance), others TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/l.rs"},"region":{"startLine":386}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f34a19455252a7154071d5a1d3d044a3c4f2155af8929e6559f51721498e329"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // VOS RANGE1, others TODO. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/l.rs"},"region":{"startLine":396}}}],"partialFingerprints":{"codehealthFindingId/v1":"b85be7c44bea115a6c5c6adcddafacebf012c47956ecadd3087172c99c79e76a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // VOS RANGE1, others TODO. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/l.rs"},"region":{"startLine":403}}}],"partialFingerprints":{"codehealthFindingId/v1":"c93ebdd2fd4a18db002b63cfa87e41fe17dbc7dad5094979555d728cf73050c5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // VOS RANGE1, others TODO. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/l.rs"},"region":{"startLine":412}}}],"partialFingerprints":{"codehealthFindingId/v1":"4457550aecc2c49ae332dbcafbf045999f75e1edf5c45687e0625074bc764f05"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO h5 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/h.rs"},"region":{"startLine":740}}}],"partialFingerprints":{"codehealthFindingId/v1":"f40415d48fb368ff1a7d77d760de97b4ef935e19dbedce241f56cc6e5a23bbe9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: on some F4s, PLLM is shared between all PLLs. Enforce that. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/f247.rs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"edafcb2dfa5bce73d96e2797d314a85aff445448e13410348faa1a241939f5b9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: on some F4s, add support for plli2s_src \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/f247.rs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fd1e371510c7ffbdc169328fdaae1b6f453726516ff5380bff202beb780ad66"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: check real clock speed before set VOS \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/f247.rs"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"3eaa7ca2aebc1e908c35e7799083ff080ed2359117a218f6fa30b87a3a02f1d1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO workaround until f4 rcc is fixed in stm32-data \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/f247.rs"},"region":{"startLine":369}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b5b3f88b7a003bb6b6882f8a632b871bda43be232d828038e686373f0b1c80d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: all this ADC stuff should probably go into the ADC module, not here. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/f013.rs"},"region":{"startLine":407}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4fa39428d2d762c1198cfd3d14a1504766215c4f6192f7505b2c6cb653676e6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: investigate. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rcc/bd.rs"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"8201d633f353e967abd29312dbd7f643431d538d6b331a173ee30632549bf746"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: configuration for output pins \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/rtc/v3.rs"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c0c18d29d0dfaf39ba018a026a6069f343cbd75bf9d7d82cf21652ec044e427"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: I think block_address needs to be adjusted by the partition start offset \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/sdmmc/sd.rs"},"region":{"startLine":867}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed3d780d6e132c5b9e37886c8add81e9ebbacd2c5762354e3e4e9cfa24969eeb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: I think block_address needs to be adjusted by the partition start offset \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/sdmmc/sd.rs"},"region":{"startLine":884}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9bf4358c0adf5292b06d36397d0689a9a6064ff2097ac11acb299baf9870f26"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // Write parity bit to the data register. FIXME: Add parity check. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/spdifrx/mod.rs"},"region":{"startLine":193}}}],"partialFingerprints":{"codehealthFindingId/v1":"d22d5faa1d08d1b5c1816a0f0eae8f3ff5c18078784771341728f250d76e3d96"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: we could compute the valid TICK_HZ for the valid prescalers to include in the panic message \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/time_driver/lptim.rs"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"792aedf11138714f03928ff9cb37dd663e94b4b9ed04d3029513e4ada38b6234"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: check for RMW races \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/timer/simple_pwm.rs"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"f827d036c7130b805690fd29fed70ef14ff5953e215524759df7200c84714b51"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: I hate the name \u0022split\u0022 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/timer/simple_pwm.rs"},"region":{"startLine":341}}}],"partialFingerprints":{"codehealthFindingId/v1":"afbb26bb4fefeedd145650a813f1796bce533a053739a19f57aea79df8a7ba14"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: I hate the name \u0022split\u0022 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/timer/one_pulse.rs"},"region":{"startLine":296}}}],"partialFingerprints":{"codehealthFindingId/v1":"f60f1f2fd5a3d65eaa30674212c1cfa69654f17c1f84f77592f6e6d9e5b04216"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // This read also clears the error and idle interrupt flags on v1 (TODO and v2?) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usart/ringbuffered.rs"},"region":{"startLine":392}}}],"partialFingerprints":{"codehealthFindingId/v1":"46d8603aafadee264ed64be076a55474bdf0fb49e352464aae14d863545afd0c"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO support synchronous USART \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usart/buffered.rs"},"region":{"startLine":536}}}],"partialFingerprints":{"codehealthFindingId/v1":"570f8c347f02220f579c5e136e89c5a309ab1c6b15bf2eaaa979a7532a0c2b97"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: Emit a zero length packet when ensure_transaction_end is true and the packet is of max size \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usb/usb_host.rs"},"region":{"startLine":520}}}],"partialFingerprints":{"codehealthFindingId/v1":"d35643a243ef91218d07b1c19149b219abcf8df3508ff5374ebef0678962dcad"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: Implement. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usb/usb_host.rs"},"region":{"startLine":726}}}],"partialFingerprints":{"codehealthFindingId/v1":"282b4315e5b14a4200fd515cdab2d8e3506ebdfea3e0c0b41595ef30ed8771b7"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: Bulk endpoints can be double buffered, but are not in the current implementation. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usb/usb.rs"},"region":{"startLine":383}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4f404eee4f166367c1250bf92f3a4ed3928e1b53a62db4c57de6d4b95675a92"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: unhardcode \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usb/mod.rs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"98f9ae314c4f9a183730d33b9b3f6244d36969efc02e0229e89dfb95926e454b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: unhardcode \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/usb/mod.rs"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4a01515270e27b25b5a3a1fc6a7845a84001a3126210a8d0dd5f5a3d0674849"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: allow switching between multiple chips \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32/src/xspi/mod.rs"},"region":{"startLine":190}}}],"partialFingerprints":{"codehealthFindingId/v1":"b207bd0da73ab2e9494c1d0e352cbf48a9cdf5ce02582565f0a7d488971ccbad"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: this is fixed at \u22658-byte alignment. Is there a better option? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-sync/src/rpc_service.rs"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"25b5a1fa6c40875b12e7ad3b9fc2f5a03ced54a9c64f020263c4cf375d42bf98"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: check that waking inside the lock is ok \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-sync/src/rpc_service.rs"},"region":{"startLine":336}}}],"partialFingerprints":{"codehealthFindingId/v1":"855f0fe894ab5411e60a66301a34cc573b8f1e461b8ae5b355a52d7face7b9f3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: recreating the wait future each poll... Check if ok \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-sync/src/rpc_service.rs"},"region":{"startLine":342}}}],"partialFingerprints":{"codehealthFindingId/v1":"74ea995dabf3cf47fc2845cb3fbd6101b36dabd683bf02febb7eb8f1968e5209"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //!         todo!() \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-time-driver/src/lib.rs"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"5709cc66d07f974e00eec6bf5ce0270bdfc9eda0da75f00b8aa9e449ca4e765d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //!         todo!() \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-time-driver/src/lib.rs"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"582c443b9e4fcc921a22543f6e0aacc4c3486f0b396b33993d2eeebbc943363f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //!        todo!() \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-time-driver/src/lib.rs"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"853058eedcfa274cd0a322623ec89c291aba6c505a76c45deabd7fc6bacf1a1f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: remove before releasing embassy-usb-driver v0.3 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb-driver/src/lib.rs"},"region":{"startLine":507}}}],"partialFingerprints":{"codehealthFindingId/v1":"53624f6bbadc06564695e841a49a06cf6d63f89965c705ce11a25c914dc9bce4"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME use Self::BUF_SIZE when stable is able to use constant expressions with generics \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb-host/src/descriptor.rs"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b61f05dcc5f2ee1da3f8fbe31ffeb3be6b522aee2fe23617422c4dbf2755ef8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: Encoder, decoder descriptors \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb-host/src/class/uac/descriptors.rs"},"region":{"startLine":1151}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b02635c27fea9a229bc82025753345f283802a6ce75c5052ba5a733cac22227"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: https://github.com/nfeske/dwc_otg/blob/177687793c884a9ffc2e5b08acf99cf75990a88c/dwc_otg/dwc_otg_regs.h#L724"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb-synopsys-otg/src/otg_v1.rs"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"f124fa6f10226a7d9254751748c7e6dc978dd03e9be1571f3a861fdfe3d18c00"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: enable the peripheral once enable/disable semantics are cleared up in embassy-usb \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb-synopsys-otg/src/lib.rs"},"region":{"startLine":1567}}}],"partialFingerprints":{"codehealthFindingId/v1":"52931f7e6f900f0e4e369685e6f15e8eccdba31dd3642d32a3aca65361dc5aa3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO: disable the peripheral once enable/disable semantics are cleared up in embassy-usb \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb-synopsys-otg/src/lib.rs"},"region":{"startLine":1573}}}],"partialFingerprints":{"codehealthFindingId/v1":"b877c5bb01bf4dbc01fa3354c727c44ef2430d2dc88499b24596ca5a4988d4d9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO check it is valid (not out of range) \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb/src/lib.rs"},"region":{"startLine":571}}}],"partialFingerprints":{"codehealthFindingId/v1":"82d1b85f3329616ac0c79281a4fd469b6dc24d2128857b6c564df3843a87e155"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: Configurable poll timeout, ability to add string for Vendor error \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb/src/class/dfu/dfu_mode.rs"},"region":{"startLine":192}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7c0dc2c831185d13ca1b104f01ba0ba8dec0873323c388950ff99f28f3bb62d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //TODO: FirmwareUpdater does not provide a way of reading the active partition, can\u0027t upload. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb/src/class/dfu/dfu_mode.rs"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"64a9e45db8530e05e98c7f4685555a1dfee32eb9ea8392c7f0e67d24464844f6"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: /// FIXME: Use \u0060core::mem::variant_count(...)\u0060 when stabilized. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb/src/class/uac1/mod.rs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"e19ce7acace26ee7a537d98c9a79fad2d5fe9853dcb3a306419228f4ae108351"}},{"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":"D22","level":"warning","message":{"text":"Inconsistent SPI command method naming and signatures between SpiBusCyw43 and PioSpi. SpiBusCyw43 uses \u0027cmd_write\u0027 and \u0027cmd_read\u0027, while PioSpi uses \u0027write\u0027 and \u0027cmd_read\u0027. Additionally, \u0027cmd_write\u0027 takes a slice for data, while \u0027write\u0027 also takes a slice, but the naming difference (\u0027cmd_\u0027 prefix) is inconsistent across the two bus implementations.: Unify the method names to either \u0027cmd_write\u0027/\u0027cmd_read\u0027 or \u0027write\u0027/\u0027read\u0027 across both SpiBusCyw43 and PioSpi for consistency. (signatures: SpiBusCyw43.cmd_write(write: \u0026[u32]): u32 | SpiBusCyw43.cmd_read(write: u32, read: \u0026mut [u32]): u32 | PioSpi.write(write: \u0026[u32]): u32 | PioSpi.cmd_read(cmd: u32, read: \u0026mut [u32]): u32)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"38a2f27eca6127e68477f54b5c864b48df0129b1ae6f486590e35d5b01ade7ae"}},{"ruleId":"D22","level":"warning","message":{"text":"Inconsistent naming between BootLoaderConfig and FirmwareUpdaterConfig for similar configuration loading methods. BootLoaderConfig has \u0027from_linkerfile_blocking\u0027, while FirmwareUpdaterConfig has both \u0027from_linkerfile\u0027 (non-blocking?) and \u0027from_linkerfile_blocking\u0027. The presence of both blocking and non-blocking variants in one struct but only blocking in the other is inconsistent.: Standardize the naming convention. Either both should have \u0027from_linkerfile\u0027 and \u0027from_linkerfile_blocking\u0027, or both should only have \u0027from_linkerfile_blocking\u0027 if non-blocking is not supported. (signatures: BootLoaderConfig.from_linkerfile_blocking(active_flash: NoopRawMutex, dfu_flash: NoopRawMutex, state_flash: NoopRawMutex): Self | FirmwareUpdaterConfig.from_linkerfile(dfu_flash: NoopRawMutex, state_flash: NoopRawMutex): Self | FirmwareUpdaterConfig.from_linkerfile_blocking(dfu_flash: NoopRawMutex, state_flash: NoopRawMutex): Self)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"66d25b49a40e0ac18d85017be85a2f8cf63d90f7576db824feb2e1c3760ff9d0"}},{"ruleId":"D26","level":"note","message":{"text":"Projects may be oversized for their cohesion: 9 of 48 project(s) overshoot their size bounds, lowering Project Cohesion to 6.3/10. The most over is \u0060embassy-nrf\u0060 (35040 LoC, 2944 public types across 13 directories). Review these for cohesion \u2014 draw the boundary inside the module first (group each responsibility into its own package or directory and keep the cross-boundary members non-public), since splitting a published package moves types between packages and breaks consumers."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d5a94650dc74886a0f1f08eb9fb6775f1fc395279ef7e901c970c9d26f767a72"}},{"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":"08cfcce12a21f3f545b886fdb2d861f79dd4b7b6d4130506a6bf7de84654f6ef"},"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":"0dcc84476875452e93bb282445d71094441daf6bb8f39901827c2b399bbe5a24"},"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":"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":"7da241bcd873678348dd1467cdd9df7494e9b39c447e4ae01ab40a99075ffbe5"},"taxa":[{"id":"CWE-191","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-248","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D34","level":"note","message":{"text":"Orphaned files with no living knowledge: 33 of 757 analysed file(s) have no living knowledge left \u2014 their last meaningful change has decayed away, so if one breaks, no one currently understands it (counted over production source files of roughly 2,400 bytes or more, excluding vendored, generated and example/demo trees and test files identified by path convention, largest first; 757 of the 918 production source files in this repository met that bar). None is large enough to earn a read-through of its own, so this row stands in for the per-file rows rather than raising one each \u2014 most significant first: embassy-stm32/src/can/bxcan/filter.rs, embassy-stm32/src/can/fd/message_ram/txbuffer_element.rs, embassy-net-adin1110/src/crc32.rs, embassy-stm32/src/tsc/acquisition_banks.rs, embassy-embedded-hal/src/flash/concat_flash.rs, embassy-usb-dfu/src/fmt.rs, embassy-stm32/src/can/fd/message_ram/enums.rs, embassy-stm32/src/tsc/io_pin.rs (and 25 more). Attach the read to the next change that touches one of them: have a second person review that change, and leave behind a short comment or test recording what the file is for, so the knowledge comes back at the cost of a change you were making anyway."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"ce861fd78f6935114d3a342cb90ad25870f984e1042954fcbbe27c0e23be3658"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: cdc_acm.rs \u2194 hid.rs: \u0060embassy-usb-host/src/class/cdc_acm.rs\u0060 and \u0060embassy-usb-host/src/class/hid.rs\u0060 change together 73% of the time (8 of the 11 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency between them. They sit in the same directory, but in this ecosystem each file is its own module \u2014 a sibling reference still needs an import \u2014 so the missing import edge is real: the coupling runs through shared behaviour, not a declared dependency. If they duplicate structure, extract the common part into one unit; otherwise the coupling is hidden and worth breaking. You can check this without leaving the row: of the 8 shared commits counted here, the most recent 3 are \u006026f55553\u0060 Add ConfigurationDescriptorChain.; \u0060a60be159\u0060 revert unnecessary style changes from PR #5897; \u0060e2ea7360\u0060 Simplify class driver constructors by passing EnumerationInfo \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb-host/src/class/cdc_acm.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7e9be9e7eab8d61e1759ac0049a989bbe6ff1587dfe68371318c126ab0e053b"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: sdio.rs \u2194 spi.rs: \u0060cyw43/src/sdio.rs\u0060 and \u0060cyw43/src/spi.rs\u0060 change together 73% of the time (8 of the 11 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency between them. They sit in the same directory, but in this ecosystem each file is its own module \u2014 a sibling reference still needs an import \u2014 so the missing import edge is real: the coupling runs through shared behaviour, not a declared dependency. If they duplicate structure, extract the common part into one unit; otherwise the coupling is hidden and worth breaking. You can check this without leaving the row: of the 8 shared commits counted here, the most recent 3 are \u00605f8daf96\u0060 cyw: trait cleanup; \u0060638b5ce6\u0060 cyw: pipe through buf to bus; \u00604e150249\u0060 cyw:  make func a u8 \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cyw43/src/sdio.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"27133078056e5249c0fa893b10aa0b8809984f15c1a104f93ea2d49d53622c2c"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: mailbox.rs \u2194 control.rs: \u0060embassy-mcxa/src/flexcan/classic/mailbox.rs\u0060 and \u0060embassy-mcxa/src/flexcan/control.rs\u0060 change together 73% of the time (8 of the 11 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 8 shared commits counted here, the most recent 3 are \u0060627d7fda\u0060 pulled new nxp-pac, and replaced the manual PAC extension functions w\u2026; \u00600836c5a3\u0060 filter masks; \u0060c79cf06e\u0060 pins \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-mcxa/src/flexcan/classic/mailbox.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b53d810b512199a445a64de8590b264b54f58c9dd44e980da7167b1a54dabb2"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: aci_gap.rs \u2194 mod.rs: \u0060embassy-stm32-wpan/src/bluetooth/gap/aci_gap.rs\u0060 and \u0060embassy-stm32-wpan/src/bluetooth/security/mod.rs\u0060 change together 60% of the time (6 of the 10 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency \u2014 the edge is real but nothing declares it. Read the pair before acting: if one registers itself into the other through a hook or an initialiser, the missing dependency is DELIBERATE \u2014 the registration is the link, and it is meant not to be an import \u2014 and the thing to add is a comment on each side naming the other, not a merge; if they simply belong together, co-locate them; if neither holds, the coupling is hidden and worth breaking. You can check this without leaving the row: of the 6 shared commits counted here, the most recent 3 are \u006009e7cdfe\u0060 wpan: support the LL-only stack, fix the RNG stall and add ST symbol \u2026; \u00605bf42753\u0060 wpan: update stm32-bindings to 0.3.1 and remap library features; \u00602179f09c\u0060 stm32wba6: add missing wpan BLE APIs (adv data, directed adv, RSSI, d\u2026 \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-stm32-wpan/src/bluetooth/gap/aci_gap.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d706708712133c65c5d956c213fb464e7b4eaa0baeda71d4e76147ee60a614ec"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: hub.rs \u2194 kbd.rs: \u0060embassy-usb-host/src/class/hub.rs\u0060 and \u0060embassy-usb-host/src/class/kbd.rs\u0060 change together 53% of the time (9 of the 17 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency between them. They sit in the same directory, but in this ecosystem each file is its own module \u2014 a sibling reference still needs an import \u2014 so the missing import edge is real: the coupling runs through shared behaviour, not a declared dependency. If they duplicate structure, extract the common part into one unit; otherwise the coupling is hidden and worth breaking. You can check this without leaving the row: of the 9 shared commits counted here, the most recent 3 are \u0060d81b1fd7\u0060 Add InterfaceDescriptorChain.; \u0060f091e22d\u0060 Rename USBDescriptor::SIZE to USBDescriptor::BUF_SIZE.; \u0060b7fddff2\u0060 Remove unnecessary abstractions \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-usb-host/src/class/hub.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b80135c9682d82cf68bcc31e601af88b2fd822eaf04eed12eeff57c9c4c7a11"}},{"ruleId":"D35","level":"warning","message":{"text":"Change coupling: deadline.rs \u2194 run_queue.rs: \u0060embassy-executor/src/raw/deadline.rs\u0060 and \u0060embassy-executor/src/raw/run_queue.rs\u0060 change together 50% of the time (8 of the 16 commits that touched whichever of the two files changed less often, counting a file under its earlier names as well, and counted over this repository\u0027s 10,000 most recent commits rather than its whole history \u2014 a repo-wide or module-wide sweep is evidence about the sweep rather than about any pair inside it and is left out of BOTH sides of this ratio, while a dependency bump, a formatter/rename sweep, or a commit whose edit to one of the two files was a tool directive such as //go:generate or whitespace only is left out of the shared count ONLY, so the two sides are not taken over identical commit sets) with no explicit dependency between them. They sit in the same directory, but in this ecosystem each file is its own module \u2014 a sibling reference still needs an import \u2014 so the missing import edge is real: the coupling runs through shared behaviour, not a declared dependency. If they duplicate structure, extract the common part into one unit; otherwise the coupling is hidden and worth breaking. You can check this without leaving the row: of the 8 shared commits counted here, the most recent 3 are \u0060e1209c55\u0060 executor: make Deadline actually private.; \u0060401fac6e\u0060 Make requested API changes; \u006052d17856\u0060 Introduce metadata-deadline and let the EDF scheduler use it \u2014 run \u0060git show\u0060 on any of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"embassy-executor/src/raw/deadline.rs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"01cfd3326a54ddc667cdfee9a350d95acda4b8d77ddc23188e5a671141852ac8"}},{"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":"cc682cd7167c2c692b624e54d299d32b2ea2b5b3eb72f5516f0dfab9c0ce991d"}},{"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":"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":"cfa852b10b1daca743783c7e9171073f8e8df646fce30a8d2c962f4ce5e84903"}},{"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":"D44","level":"warning","message":{"text":"End-of-life runtime: Rust 1.97: rust-toolchain.toml declares Rust 1.97 as this project\u0027s toolchain file, and Rust 1.97, superseded by 1.98 on 2026-08-20 (the Rust project patches only the current stable). An unsupported runtime receives no security patches, so every vulnerability disclosed in it since 2026-08-20 is present and unfixable without moving off it. This is a migration rather than an upgrade: there is no newer release of a runtime that has ended."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"dcf7e9d4c69a9ce8ce9aef71946a22fd4bc9a108d597e8635468e94e0aa93368"}},{"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":"P1","level":"note","message":{"text":"CI build step not evidenced: A CI pipeline exists but no build step was matched \u2014 changes may merge without the build ever running. A build step may be invoked directly as a command, or declared as a task that a runner named in the pipeline resolves."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"251015acef1a259fcc13b7c60660cc8917ccb3ae8056cb5165ae03312dd586e8"}},{"ruleId":"P2","level":"note","message":{"text":"Logging is not universal: Only 35/37 runnable modules use logging (modules with no entry point or server are excluded \u2014 they are libraries a runnable module hosts). Silent: \u0060cyw43-firmware\u0060, \u0060embassy-executor-macros\u0060."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"91a94e21d6d4d0e6a2003f94505b0b02b157176f0b24c4820f3f82b4447a97fe"}},{"ruleId":"P3","level":"note","message":{"text":"No SAST: No static application security testing detected. For this repository\u0027s stack, add cargo-audit / cargo-deny (or clippy) (or \u0060semgrep --config=auto\u0060, which runs on any language) as a CI step. What was searched, so you can tell an absence from a miss: the 4536 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"}}],"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-191","guid":"31b5d115-a84b-875f-a016-48689827db3c","name":"CWE-191","shortDescription":{"text":"CWE-191"},"helpUri":"https://cwe.mitre.org/data/definitions/191.html"},{"id":"CWE-248","guid":"64b58946-d244-a556-a48a-f82fcd4f4186","name":"CWE-248","shortDescription":{"text":"CWE-248"},"helpUri":"https://cwe.mitre.org/data/definitions/248.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-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-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":7,"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."]}]}