{"results":{"result":{"added-files":{"code-health":0.0,"old-code-health":0.0,"files":[]},"external-review-url":"https://github.com/SasView/sasdata/pull/152","old-code-health":9.564300027068034,"modified-files":{"code-health":9.6119724740369,"old-code-health":9.564300027068034,"files":[{"file":"sasdata/data.py","loc":101,"old-loc":52,"code-health":9.6882083290695,"old-code-health":9.6882083290695},{"file":"test/sasdataloader/utest_sasdataload.py","loc":87,"old-loc":65,"code-health":10.0,"old-code-health":10.0},{"file":"sasdata/metadata.py","loc":470,"old-loc":205,"code-health":9.6882083290695,"old-code-health":9.6882083290695},{"file":"sasdata/quantities/unit_parser.py","loc":163,"old-loc":153,"code-health":8.997354731618337,"old-code-health":8.997354731618337},{"file":"test/utest_unit_parser.py","loc":59,"old-loc":61,"code-health":10.0,"old-code-health":10.0}]},"removed-files":{"code-health":0.0,"old-code-health":0.0,"files":[]},"external-review-id":"152","analysis-time":"2025-08-12T10:45:35Z","negative-impact-count":0,"suppressions":{"number-of-types":0,"number-of-files-touched":0,"findings":[]},"affected-hotspots":0,"commits":["4add2fae549184868992c7d98a33389825150633","d16bf6f24b1a3e2fa791fc0709395ab9c9dfe4f2","15d719600a87bbba61af9408dc169300a85bedb3","096b03bfb6833f2c2c888aeed0e3c4cb83a22738","1235ccf83fc0d094c2f5b594a76e887f42501891","3ba42ff0a3baf85264d294d061fe2d6fe20896a4","f7c3e2f767f1b350fee2b84857cfe305a863e6d5","736a992b9ce74f1d305e82d113f611fa43ea050e","83ce0b3eb8a670d2251765231333cd8cf03bb4f9","e45fb3d22ef6caaddbf63384acf9174d15a9c516","269014a20d39fffcace4141f047040101700a8df","01b7287844e1c98dead417ad25c996252be0b241","302bf7268c04e2fd77383aa80b88a5685c7b7ee8","2d7cc01a0b6eccae16dc0bd36ef5afb542989860","958c2531b0bcea7728ee2626006b1c435087a852","3576ccc5ff9b2869220dbb7ec5e46f58fc8c13ce","6c2107b87114e99f9b64ce0372bde8b11fc784cb","d029048f1d343293cf69373b12fb1f753363386c","345744e69edbfb560f4d03b26bc4856c1b00761c","9d1a05289f820214c94230209fae5ea1932108f1","25c3f66f605c222deca48d3f9b20736e52c7d6ca"],"is-negative-review":false,"negative-findings":{"number-of-types":0,"number-of-files-touched":0,"findings":[]},"positive-impact-count":1,"repo":"sasdata","code-health":9.6119724740369,"version":"3.0","authors":["Adam Washington","pre-commit-ci-lite[bot]"],"directives":{"added":[],"removed":[]},"positive-findings":{"number-of-types":1,"number-of-files-touched":1,"findings":[{"name":"Overall Code Complexity","file":"sasdata/quantities/unit_parser.py","change-type":"improved","change-level":"improvement","is-hotspot?":false,"why-it-occurs":"Overall Code Complexity is measured by the mean cyclomatic complexity across all functions in the file. The lower the number, the better.\n\nCyclomatic complexity is a function level metric that measures the number of logical branches (if-else, loops, etc.). Cyclomatic complexity is a rough complexity measure, but useful as a way of estimating the minimum number of unit tests you would need. As such, prefer functions with low cyclomatic complexity (2-3 branches).","how-to-fix":"You address the overall cyclomatic complexity by a) modularizing the code, and b) abstract away the complexity. Let's look at some examples:\n\nModularizing the Code: Do an X-Ray and inspect the local hotspots. Are there any complex conditional expressions? If yes, then do a [DECOMPOSE CONDITIONAL](https://refactoring.com/catalog/decomposeConditional.html) refactoring. Extract the conditional logic into a separate function and put a good name on that function. This clarifies the intent and makes the original function easier to read. Repeat until all complex conditional expressions have been simplified.\n\n","what-changed":"The mean cyclomatic complexity decreases from 4.82 to 4.67, threshold = 4"}]},"notices":{"number-of-types":0,"number-of-files-touched":0,"findings":[]},"external-review-provider":"GitHub"},"analysistime":"2025-08-12T10:45:35.000Z","project-name":"sasdata","repository":"https://github.com/SasView/sasdata.git"}}