{"schema_version":"2","scorer_version":"0.1.0","scoring_version":"prov-5+qual-2+sec-2","generated_at":"2026-11-14T14:52:06.148209Z","repo":{"ref":{"host":"github.com","owner":"loopeer","name":"code-reader"},"default_branch":"master","clone_url":"https://github.com/loopeer/code-reader.git","html_url":"https://github.com/loopeer/code-reader","description":"One Multi program language code reader","stars":932,"forks":134,"is_fork":false,"is_archived":false,"is_private":false,"size_kb":16813,"primary_language":"Kotlin","license_spdx":null,"created_at":"2016-08-03T10:22:44Z","pushed_at":"2017-09-22T06:58:12Z","security_policy_url":null,"distribution":{"owner_created_at":"2015-07-24T09:36:26Z","owner_type":"Organization","release_assets":[{"name":"app-fir-release.apk","size":3665083,"download_count":8426,"release_tag":"v1.1.0","url":"https://github.com/loopeer/code-reader/releases/download/v1.1.0/app-fir-release.apk"},{"name":"app-fir-release.apk","size":3054423,"download_count":1271,"release_tag":"V1.0.2-9","url":"https://github.com/loopeer/code-reader/releases/download/V1.0.2-9/app-fir-release.apk"},{"name":"app-fir-release.apk","size":2933169,"download_count":109,"release_tag":"V1.0.2-8","url":"https://github.com/loopeer/code-reader/releases/download/V1.0.2-8/app-fir-release.apk"},{"name":"app-fir-release.apk","size":2933064,"download_count":45,"release_tag":"V1.0.2-7","url":"https://github.com/loopeer/code-reader/releases/download/V1.0.2-7/app-fir-release.apk"},{"name":"app-fir-release.apk","size":2932393,"download_count":33,"release_tag":"V1.0.2-6","url":"https://github.com/loopeer/code-reader/releases/download/V1.0.2-6/app-fir-release.apk"},{"name":"app-fir-release.apk","size":2931246,"download_count":29,"release_tag":"V1.0.2-5","url":"https://github.com/loopeer/code-reader/releases/download/V1.0.2-5/app-fir-release.apk"},{"name":"app-fir-release.apk","size":2930961,"download_count":38,"release_tag":"V1.0.2-4","url":"https://github.com/loopeer/code-reader/releases/download/V1.0.2-4/app-fir-release.apk"},{"name":"app-fir-release.apk","size":2914242,"download_count":31,"release_tag":"V1.0.1-3","url":"https://github.com/loopeer/code-reader/releases/download/V1.0.1-3/app-fir-release.apk"},{"name":"app-fir-release.apk","size":2913104,"download_count":492,"release_tag":"V1.0.1","url":"https://github.com/loopeer/code-reader/releases/download/V1.0.1/app-fir-release.apk"}]}},"commit_sha":"075007d1827b39280111dbe767a1d64484f816f6","profile":{"lines_by_language":{"Kotlin":10536,"Java":5277,"JavaScript":2040},"files_by_category":{"source":140,"config":89,"binary":39,"other":23,"oversized":7,"test":2,"docs":1,"vendored":1},"source_lines":17810,"test_lines":43},"pillars":{"ai_provenance":{"score":0.0,"confidence":0.65,"coverage":1.0,"label":"none-detected","breakdown":{"attributed_share":0.0,"suspected_share":0.0,"estimated_share":0.0,"ai_artifacts":0.0,"flagged_work_units":0.0,"flagged_releases":0.0,"style_index":0.056},"summary":"No AI attribution or AI-consistent velocity signals detected."},"quality":{"score":55.3,"confidence":0.9,"coverage":1.0,"label":"weak","breakdown":{"complexity":81.2,"duplication":59.5,"lint":84.5,"testing":20.6,"docs":40.0,"type_safety":null,"process":null},"summary":"Code quality is weak: test-to-source ratio 0.00, no CI test run detected; 7% of function code in complex or long functions; 9% duplicated lines. Weakest area: testing."},"security":{"score":80.3,"confidence":0.85,"coverage":1.0,"label":"adequate","breakdown":{"secrets":100.0,"sast":95.8,"dependencies":null,"ci_actions":null,"posture":0.0,"scorecard":null},"summary":"Security posture is adequate: no high-impact findings. Weakest area: posture."}},"analyzer_results":[{"analyzer":"sec-scorecard","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":"no published OpenSSF Scorecard result for this repo"},{"analyzer":"sec-registry","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":"no registry dependencies declared"},{"analyzer":"ai-attribution","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"commits":401.0,"attributed_commits":0.0,"attributed_commit_share":0.0,"effective_loc":67955.0,"attributed_loc":0.0,"attributed_loc_share":0.0,"tools_detected":0.0},"findings":[],"evidence":[],"data":{"attributed_loc_by_commit":{},"tools":{},"monthly":{"2016-08":{"loc":22151,"attributed_loc":0},"2016-09":{"loc":1574,"attributed_loc":0},"2016-11":{"loc":14,"attributed_loc":0},"2017-04":{"loc":1,"attributed_loc":0},"2017-08":{"loc":44215,"attributed_loc":0},"2017-09":{"loc":0,"attributed_loc":0}}},"error":null},{"analyzer":"ai-artifacts","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"artifacts":0.0,"workflow_agents":0.0,"tools_configured":0.0},"findings":[],"evidence":[],"data":{"artifacts":[],"workflows":[],"tools":[]},"error":null},{"analyzer":"ai-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"work_units":161.0,"flagged_units":0.0,"pre_ai_era_bursts":8.0,"pre_ai_era_measured_loc":61872.0,"pre_ai_era_burst_loc":35973.0,"measured_loc":61872.0,"flagged_loc":0.0,"flagged_loc_share":0.0,"max_loc_per_hour":2933.0,"median_loc_per_hour":109.49554896142433,"pr_timed_units":0.0,"excluded_import_loc":6083.0},"findings":[],"evidence":[],"data":{"flagged_loc_by_commit":{},"excluded_import_commits":["d482be95b99507ae2895671eedb6debde5da3d87"]},"error":null},{"analyzer":"ai-release-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"releases":8.0,"flagged_releases":0.0,"max_loc_per_day":432.0},"findings":[],"evidence":[],"data":{"releases":[{"from":"V1.0.1","to":"V1.0.1-3","loc":188,"days":2.3,"loc_per_day":81.8,"flagged":false},{"from":"V1.0.1-3","to":"V1.0.2-4","loc":761,"days":3.83,"loc_per_day":198.5,"flagged":false},{"from":"V1.0.2-4","to":"V1.0.2-5","loc":18,"days":3.98,"loc_per_day":4.5,"flagged":false},{"from":"V1.0.2-5","to":"V1.0.2-6","loc":12,"days":0.04,"loc_per_day":288.0,"flagged":false},{"from":"V1.0.2-6","to":"V1.0.2-7","loc":18,"days":0.04,"loc_per_day":432.0,"flagged":false},{"from":"V1.0.2-7","to":"V1.0.2-8","loc":29,"days":0.94,"loc_per_day":30.8,"flagged":false},{"from":"V1.0.2-8","to":"V1.0.2-9","loc":51,"days":75.85,"loc_per_day":0.7,"flagged":false},{"from":"V1.0.2-9","to":"v1.1.0","loc":45502,"days":282.16,"loc_per_day":161.3,"flagged":false}]},"error":null},{"analyzer":"ai-stylometry","pillar":"ai_provenance","status":"ok","tool_version":null,"metrics":{"lines_scanned":17810.0,"index":0.056,"count:narrated_steps":1.0,"per_kloc:narrated_steps":0.056,"files:narrated_steps":1.0,"count:placeholder":0.0,"per_kloc:placeholder":0.0,"files:placeholder":0.0,"count:emoji_in_code":0.0,"per_kloc:emoji_in_code":0.0,"files:emoji_in_code":0.0,"count:assistant_voice":0.0,"per_kloc:assistant_voice":0.0,"files:assistant_voice":0.0},"findings":[],"evidence":[{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: // First, look for nested blocks, e.g.:","ref":"libraries/markdownj/src/main/java/com/todou/markdownj/MarkdownProcessor.java:248","url":"https://github.com/loopeer/code-reader/blob/075007d1827b39280111dbe767a1d64484f816f6/libraries/markdownj/src/main/java/com/todou/markdownj/MarkdownProcessor.java#L248","weight":0.0}],"data":{},"error":null},{"analyzer":"sec-secrets","pillar":"security","status":"ok","tool_version":"gitleaks 8.30.1","metrics":{"secrets_current":0.0,"secrets_history":0.0,"secrets_nonprod":0.0,"secrets_low_confidence":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-sast","pillar":"security","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":6.0,"findings_high":0.0,"findings_medium":6.0,"findings_low":0.0,"weighted_findings":2.2,"scanned_lines":17810.0,"parse_errors":0.0},"findings":[{"rule_id":"opengrep/java.android.security.exported_activity","severity":"medium","message":"The application exports an activity. Any application on the device can launch the exported activity which may compromise the integrity of your application or its data.  Ensure that any exported activities do not have privileged access to your application's control plane. [confidence medium]","path":"code-reader-kt/src/main/AndroidManifest.xml","line":22,"fingerprint":"java.android.security.exported_activity:code-reader-kt/src/main/AndroidManifest.xml:22"},{"rule_id":"opengrep/java.android.security.exported_activity","severity":"medium","message":"The application exports an activity. Any application on the device can launch the exported activity which may compromise the integrity of your application or its data.  Ensure that any exported activities do not have privileged access to your application's control plane. [confidence medium]","path":"code-reader-kt/src/main/AndroidManifest.xml","line":82,"fingerprint":"java.android.security.exported_activity:code-reader-kt/src/main/AndroidManifest.xml:82"},{"rule_id":"opengrep/javascript.browser.security.eval-detected","severity":"medium","message":"Detected the use of eval(). eval() can be dangerous if used to evaluate dynamic content. If this content can be input from outside the program, this may be a code injection vulnerability. Ensure evaluated content is not definable by external sources. [confidence low]","path":"code-reader-kt/src/main/assets/scripts/shCore.js","line":17,"fingerprint":"javascript.browser.security.eval-detected:code-reader-kt/src/main/assets/scripts/shCore.js:17"},{"rule_id":"opengrep/javascript.lang.security.audit.detect-non-literal-regexp","severity":"medium","message":"RegExp() called with a `c` function argument, this might allow an attacker to cause a Regular Expression Denial-of-Service (ReDoS) within your application as RegExP blocks the main thread. For this reason, it is recommended to use hardcoded regexes instead. If your regex is run on user-controlled in [confidence low]","path":"code-reader-kt/src/main/assets/scripts/shCore.js","line":17,"fingerprint":"javascript.lang.security.audit.detect-non-literal-regexp:code-reader-kt/src/main/assets/scripts/shCore.js:17"},{"rule_id":"opengrep/javascript.browser.security.eval-detected","severity":"medium","message":"Detected the use of eval(). eval() can be dangerous if used to evaluate dynamic content. If this content can be input from outside the program, this may be a code injection vulnerability. Ensure evaluated content is not definable by external sources. [confidence low]","path":"code-reader-kt/src/main/assets/scripts/shLegacy.js","line":17,"fingerprint":"javascript.browser.security.eval-detected:code-reader-kt/src/main/assets/scripts/shLegacy.js:17"},{"rule_id":"opengrep/javascript.lang.security.audit.detect-non-literal-regexp","severity":"medium","message":"RegExp() called with a `c` function argument, this might allow an attacker to cause a Regular Expression Denial-of-Service (ReDoS) within your application as RegExP blocks the main thread. For this reason, it is recommended to use hardcoded regexes instead. If your regex is run on user-controlled in [confidence low]","path":"code-reader-kt/src/main/assets/scripts/shLegacy.js","line":17,"fingerprint":"javascript.lang.security.audit.detect-non-literal-regexp:code-reader-kt/src/main/assets/scripts/shLegacy.js:17"}],"evidence":[],"data":{"rulesets":["kotlin","java","javascript"]},"error":null},{"analyzer":"sec-deps","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-actions","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-posture","pillar":"security","status":"ok","tool_version":null,"metrics":{"check:security_policy":0.0,"check:dependency_updates":0.0,"check:signed_commits":0.0,"check:lockfiles":1.0,"signed_commit_share":0.0,"unpinned_manifests":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-distribution","pillar":"security","status":"ok","tool_version":null,"metrics":{"signals":1.0,"binary_assets":9.0,"suspicious":0.0},"findings":[],"evidence":[{"kind":"binary-release-asset","description":"release v1.1.0 ships app-fir-release.apk (8426 downloads)","ref":"app-fir-release.apk","url":"https://github.com/loopeer/code-reader/releases/download/v1.1.0/app-fir-release.apk","weight":0.0},{"kind":"binary-release-asset","description":"release V1.0.2-9 ships app-fir-release.apk (1271 downloads)","ref":"app-fir-release.apk","url":"https://github.com/loopeer/code-reader/releases/download/V1.0.2-9/app-fir-release.apk","weight":0.0},{"kind":"binary-release-asset","description":"release V1.0.2-8 ships app-fir-release.apk (109 downloads)","ref":"app-fir-release.apk","url":"https://github.com/loopeer/code-reader/releases/download/V1.0.2-8/app-fir-release.apk","weight":0.0},{"kind":"binary-release-asset","description":"release V1.0.2-7 ships app-fir-release.apk (45 downloads)","ref":"app-fir-release.apk","url":"https://github.com/loopeer/code-reader/releases/download/V1.0.2-7/app-fir-release.apk","weight":0.0},{"kind":"binary-release-asset","description":"release V1.0.2-6 ships app-fir-release.apk (33 downloads)","ref":"app-fir-release.apk","url":"https://github.com/loopeer/code-reader/releases/download/V1.0.2-6/app-fir-release.apk","weight":0.0}],"data":{"signals":["binary-release-assets"],"suspicious":false,"unusual_traction":false,"metadata":true},"error":null},{"analyzer":"qual-complexity","pillar":"quality","status":"ok","tool_version":"lizard 1.25.1","metrics":{"functions":967.0,"function_nloc":9172.0,"mean_ccn":2.23,"p90_ccn":4.0,"complex_functions":6.0,"long_functions":3.0,"many_param_functions":1.0,"risky_nloc_share":0.0696},"findings":[],"evidence":[{"kind":"complex-function","description":"onTouchEvent in code-reader-kt/src/main/java/com/loopeer/codereaderkt/ui/view/NestHorizontalScrollView.kt: complexity 34, 117 lines","ref":"code-reader-kt/src/main/java/com/loopeer/codereaderkt/ui/view/NestHorizontalScrollView.kt","url":"https://github.com/loopeer/code-reader/blob/075007d1827b39280111dbe767a1d64484f816f6/code-reader-kt/src/main/java/com/loopeer/codereaderkt/ui/view/NestHorizontalScrollView.kt#L571","weight":0.5666666666666667},{"kind":"complex-function","description":"intercept in code-reader-kt/src/main/java/com/loopeer/codereaderkt/api/HttpJsonLoggingInterceptor.kt: complexity 31, 126 lines","ref":"code-reader-kt/src/main/java/com/loopeer/codereaderkt/api/HttpJsonLoggingInterceptor.kt","url":"https://github.com/loopeer/code-reader/blob/075007d1827b39280111dbe767a1d64484f816f6/code-reader-kt/src/main/java/com/loopeer/codereaderkt/api/HttpJsonLoggingInterceptor.kt#L115","weight":0.5166666666666667},{"kind":"complex-function","description":"onMeasure in code-reader-kt/src/main/java/com/loopeer/codereaderkt/ui/view/DrawerLayout.kt: complexity 22, 82 lines","ref":"code-reader-kt/src/main/java/com/loopeer/codereaderkt/ui/view/DrawerLayout.kt","url":"https://github.com/loopeer/code-reader/blob/075007d1827b39280111dbe767a1d64484f816f6/code-reader-kt/src/main/java/com/loopeer/codereaderkt/ui/view/DrawerLayout.kt#L865","weight":0.36666666666666664},{"kind":"complex-function","description":"Callback::chooseDropTarget in libraries/itemtouchhelperextension/src/main/java/com/loopeer/itemtouchhelperextension/ItemTouchHelperExtension.java: complexity 18, 54 lines","ref":"libraries/itemtouchhelperextension/src/main/java/com/loopeer/itemtouchhelperextension/ItemTouchHelperExtension.java","url":"https://github.com/loopeer/code-reader/blob/075007d1827b39280111dbe767a1d64484f816f6/libraries/itemtouchhelperextension/src/main/java/com/loopeer/itemtouchhelperextension/ItemTouchHelperExtension.java#L1834","weight":0.3},{"kind":"complex-function","description":"drawChild in code-reader-kt/src/main/java/com/loopeer/codereaderkt/ui/view/DrawerLayout.kt: complexity 17, 55 lines","ref":"code-reader-kt/src/main/java/com/loopeer/codereaderkt/ui/view/DrawerLayout.kt","url":"https://github.com/loopeer/code-reader/blob/075007d1827b39280111dbe767a1d64484f816f6/code-reader-kt/src/main/java/com/loopeer/codereaderkt/ui/view/DrawerLayout.kt#L1181","weight":0.2833333333333333},{"kind":"complex-function","description":"getDrawerLockMode in code-reader-kt/src/main/java/com/loopeer/codereaderkt/ui/view/DrawerLayout.kt: complexity 16, 54 lines","ref":"code-reader-kt/src/main/java/com/loopeer/codereaderkt/ui/view/DrawerLayout.kt","url":"https://github.com/loopeer/code-reader/blob/075007d1827b39280111dbe767a1d64484f816f6/code-reader-kt/src/main/java/com/loopeer/codereaderkt/ui/view/DrawerLayout.kt#L548","weight":0.26666666666666666},{"kind":"complex-function","description":"init in code-reader-kt/src/main/java/com/loopeer/codereaderkt/utils/BrushMap.kt: complexity 1, 150 lines","ref":"code-reader-kt/src/main/java/com/loopeer/codereaderkt/utils/BrushMap.kt","url":"https://github.com/loopeer/code-reader/blob/075007d1827b39280111dbe767a1d64484f816f6/code-reader-kt/src/main/java/com/loopeer/codereaderkt/utils/BrushMap.kt#L22","weight":0.016666666666666666}],"data":{},"error":null},{"analyzer":"qual-duplication","pillar":"quality","status":"ok","tool_version":"repotrust-dup-w6","metrics":{"compared_lines":11263.0,"duplicated_lines":975.0,"duplicated_share":0.0866,"files":140.0},"findings":[],"evidence":[{"kind":"duplicate-code","description":"6+ duplicated lines: code-reader-kt/src/main/assets/scripts/shBrushAS3.js:2 and code-reader-kt/src/main/assets/scripts/shBrushAppleScript.js:2","ref":"code-reader-kt/src/main/assets/scripts/shBrushAS3.js","url":"https://github.com/loopeer/code-reader/blob/075007d1827b39280111dbe767a1d64484f816f6/code-reader-kt/src/main/assets/scripts/shBrushAS3.js#L2","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: code-reader-kt/src/main/assets/scripts/shBrushArduino.js:15 and code-reader-kt/src/main/assets/scripts/shBrushCpp.js:15","ref":"code-reader-kt/src/main/assets/scripts/shBrushArduino.js","url":"https://github.com/loopeer/code-reader/blob/075007d1827b39280111dbe767a1d64484f816f6/code-reader-kt/src/main/assets/scripts/shBrushArduino.js#L15","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: code-reader-kt/src/main/assets/scripts/shBrushCss.js:15 and code-reader-kt/src/main/assets/scripts/shBrushSass.js:15","ref":"code-reader-kt/src/main/assets/scripts/shBrushCss.js","url":"https://github.com/loopeer/code-reader/blob/075007d1827b39280111dbe767a1d64484f816f6/code-reader-kt/src/main/assets/scripts/shBrushCss.js#L15","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: code-reader-kt/src/main/java/com/loopeer/codereaderkt/sync/DownloadRepoService.kt:122 and code-reader-kt/src/main/java/com/loopeer/codereaderkt/sync/DownloadRepoService.kt:160","ref":"code-reader-kt/src/main/java/com/loopeer/codereaderkt/sync/DownloadRepoService.kt","url":"https://github.com/loopeer/code-reader/blob/075007d1827b39280111dbe767a1d64484f816f6/code-reader-kt/src/main/java/com/loopeer/codereaderkt/sync/DownloadRepoService.kt#L122","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: code-reader-kt/src/main/java/com/loopeer/codereaderkt/ui/activity/BaseActivity.kt:114 and code-reader-kt/src/main/java/com/loopeer/codereaderkt/ui/fragment/BaseFragment.kt:59","ref":"code-reader-kt/src/main/java/com/loopeer/codereaderkt/ui/activity/BaseActivity.kt","url":"https://github.com/loopeer/code-reader/blob/075007d1827b39280111dbe767a1d64484f816f6/code-reader-kt/src/main/java/com/loopeer/codereaderkt/ui/activity/BaseActivity.kt#L114","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: code-reader-kt/src/main/java/com/loopeer/codereaderkt/ui/decoration/DividerItemDecoration.kt:2 and code-reader-kt/src/main/java/com/loopeer/codereaderkt/ui/decoration/DividerItemDecorationMainList.kt:2","ref":"code-reader-kt/src/main/java/com/loopeer/codereaderkt/ui/decoration/DividerItemDecoration.kt","url":"https://github.com/loopeer/code-reader/blob/075007d1827b39280111dbe767a1d64484f816f6/code-reader-kt/src/main/java/com/loopeer/codereaderkt/ui/decoration/DividerItemDecoration.kt#L2","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: code-reader-kt/src/main/java/com/loopeer/codereaderkt/ui/view/DrawerLayout.kt:295 and code-reader-kt/src/main/java/com/loopeer/codereaderkt/ui/view/DrawerLayout.kt:336","ref":"code-reader-kt/src/main/java/com/loopeer/codereaderkt/ui/view/DrawerLayout.kt","url":"https://github.com/loopeer/code-reader/blob/075007d1827b39280111dbe767a1d64484f816f6/code-reader-kt/src/main/java/com/loopeer/codereaderkt/ui/view/DrawerLayout.kt#L295","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: code-reader-kt/src/main/java/com/loopeer/codereaderkt/ui/view/DrawerLayoutCompatApi21.kt:26 and code-reader-kt/src/main/java/com/loopeer/codereaderkt/ui/view/DrawerLayoutCompatApi21.kt:40","ref":"code-reader-kt/src/main/java/com/loopeer/codereaderkt/ui/view/DrawerLayoutCompatApi21.kt","url":"https://github.com/loopeer/code-reader/blob/075007d1827b39280111dbe767a1d64484f816f6/code-reader-kt/src/main/java/com/loopeer/codereaderkt/ui/view/DrawerLayoutCompatApi21.kt#L26","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: code-reader-kt/src/main/java/com/loopeer/codereaderkt/ui/view/ForegroundRelativeLayout.kt:2 and libraries/directoryandfilechooser/src/main/java/com/loopeer/directorychooser/ForegroundLinearLayout.java:2","ref":"code-reader-kt/src/main/java/com/loopeer/codereaderkt/ui/view/ForegroundRelativeLayout.kt","url":"https://github.com/loopeer/code-reader/blob/075007d1827b39280111dbe767a1d64484f816f6/code-reader-kt/src/main/java/com/loopeer/codereaderkt/ui/view/ForegroundRelativeLayout.kt#L2","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: code-reader-kt/src/main/java/com/loopeer/codereaderkt/utils/Base64.kt:109 and code-reader-kt/src/main/java/com/loopeer/codereaderkt/utils/Base64.kt:147","ref":"code-reader-kt/src/main/java/com/loopeer/codereaderkt/utils/Base64.kt","url":"https://github.com/loopeer/code-reader/blob/075007d1827b39280111dbe767a1d64484f816f6/code-reader-kt/src/main/java/com/loopeer/codereaderkt/utils/Base64.kt#L109","weight":0.3}],"data":{},"error":null},{"analyzer":"qual-lint","pillar":"quality","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":4.0,"weighted_findings":12.0,"scanned_lines":17810.0,"category:correctness":4.0},"findings":[{"rule_id":"opengrep/java.lang.correctness.hardcoded-conditional","severity":"high","message":"This if statement will always have the same behavior and is therefore unnecessary.","path":"libraries/itemtouchhelperextension/src/main/java/com/loopeer/itemtouchhelperextension/ItemTouchHelperExtension.java","line":274,"fingerprint":"java.lang.correctness.hardcoded-conditional:libraries/itemtouchhelperextension/src/main/java/com/loopeer/itemtouchhelperextension/ItemTouchHelperExtension.java:274"},{"rule_id":"opengrep/java.lang.correctness.hardcoded-conditional","severity":"high","message":"This if statement will always have the same behavior and is therefore unnecessary.","path":"libraries/itemtouchhelperextension/src/main/java/com/loopeer/itemtouchhelperextension/ItemTouchHelperExtension.java","line":311,"fingerprint":"java.lang.correctness.hardcoded-conditional:libraries/itemtouchhelperextension/src/main/java/com/loopeer/itemtouchhelperextension/ItemTouchHelperExtension.java:311"},{"rule_id":"opengrep/java.lang.correctness.hardcoded-conditional","severity":"high","message":"This if statement will always have the same behavior and is therefore unnecessary.","path":"libraries/itemtouchhelperextension/src/main/java/com/loopeer/itemtouchhelperextension/ItemTouchHelperExtension.java","line":327,"fingerprint":"java.lang.correctness.hardcoded-conditional:libraries/itemtouchhelperextension/src/main/java/com/loopeer/itemtouchhelperextension/ItemTouchHelperExtension.java:327"},{"rule_id":"opengrep/java.lang.correctness.hardcoded-conditional","severity":"high","message":"This if statement will always have the same behavior and is therefore unnecessary.","path":"libraries/itemtouchhelperextension/src/main/java/com/loopeer/itemtouchhelperextension/ItemTouchHelperExtension.java","line":2367,"fingerprint":"java.lang.correctness.hardcoded-conditional:libraries/itemtouchhelperextension/src/main/java/com/loopeer/itemtouchhelperextension/ItemTouchHelperExtension.java:2367"}],"evidence":[],"data":{},"error":null},{"analyzer":"qual-testing","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:has_tests":1.0,"check:test_ratio":0.0048,"check:ci_present":0.0,"check:ci_runs_tests":0.0,"check:ci_runs_lint":0.0,"check:tests_cochange":0.049,"test_lines":43.0,"source_lines":17810.0,"test_ratio":0.0024,"ci_files":0.0,"cochange_share":0.0122,"cochange_commits":245.0},"findings":[],"evidence":[],"data":{"test_commands":[],"lint_commands":[]},"error":null},{"analyzer":"qual-docs","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:readme":1.0,"check:license":0.0,"check:contributing":0.0,"check:changelog":0.0,"readme_lines":46.0},"findings":[],"evidence":[{"kind":"docs","description":"README.md","ref":"README.md","url":null,"weight":0.0}],"data":{},"error":null},{"analyzer":"qual-type-safety","pillar":"quality","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null}],"flags":[]}