{"id":194026,"name":null,"description":"A Static Analyzer for Java Powered by Machine Learning: Identifies Anti-Patterns Begging for Refactoring","url":"https://github.com/cqfn/aibolit","last_synced_at":"2025-09-10T04:29:30.290Z","repository":{"id":43384856,"uuid":"237167507","full_name":"cqfn/aibolit","owner":"cqfn","description":"A Static Analyzer for Java Powered by Machine Learning: Identifies Anti-Patterns Begging for Refactoring","archived":false,"fork":false,"pushed_at":"2025-09-04T06:59:30.000Z","size":162722,"stargazers_count":87,"open_issues_count":78,"forks_count":36,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-09-04T07:28:35.369Z","etag":null,"topics":["code-quality","machine-learning","machine-learning-algorithms","python","quality-control","refactoring","static-analysis"],"latest_commit_sha":null,"homepage":"https://pypi.org/project/aibolit/","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cqfn.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-01-30T08:13:30.000Z","updated_at":"2025-09-03T08:17:58.000Z","dependencies_parsed_at":"2023-12-20T12:09:29.153Z","dependency_job_id":"42a2c40a-fa49-40c0-afff-c0874dc79ce7","html_url":"https://github.com/cqfn/aibolit","commit_stats":{"total_commits":1561,"total_committers":25,"mean_commits":62.44,"dds":0.7117232543241512,"last_synced_commit":"222277d579a792b48bcbb2de6bd57692d8b582fb"},"previous_names":["yegor256/aibolit"],"tags_count":28,"template":false,"template_full_name":null,"purl":"pkg:github/cqfn/aibolit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cqfn%2Faibolit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cqfn%2Faibolit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cqfn%2Faibolit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cqfn%2Faibolit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cqfn","download_url":"https://codeload.github.com/cqfn/aibolit/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cqfn%2Faibolit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274411810,"owners_count":25280193,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-10T02:00:12.551Z","response_time":83,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"owner":{"login":"cqfn","name":"CQFN","uuid":"67275796","kind":"organization","description":"Code Quality Foundation","email":"team@cqfn.org","website":"https://www.cqfn.org","location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/67275796?v=4","repositories_count":22,"last_synced_at":"2024-04-14T06:47:04.425Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/cqfn","funding_links":[],"total_stars":586,"followers":9,"following":0,"created_at":"2022-11-09T03:33:44.058Z","updated_at":"2024-04-14T06:47:09.055Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cqfn","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cqfn/repositories"},"packages":[],"commits":{"id":531676,"full_name":"cqfn/aibolit","default_branch":"master","committers":[{"name":"Evgeny Maslov","email":"lyriccoder@gmail.com","login":null,"count":450},{"name":"Yaroslav Kishchenko","email":"yaroslavkishchenko@gmail.com","login":null,"count":247},{"name":"Vitaly Protasov","email":"izakladno@yandex.ru","login":null,"count":183},{"name":"Anton Cheshkov","email":"anton.cheshkov@huawei.com","login":null,"count":114},{"name":"Evgeny Maslov","email":"e00533045@china.huawei.com","login":null,"count":81},{"name":"Yegor Bugayenko","email":"yegor256@gmail.com","login":null,"count":81},{"name":"ALEXEY ZORCHENKOV","email":"zorchenkov.alexey@huawei.com","login":null,"count":65},{"name":"paulodamaso","email":"pauloeduardolobo@gmail.com","login":null,"count":57},{"name":"lukyanoffpashok","email":"lukyanoffpashok@yandex.ru","login":null,"count":55},{"name":"silverCase","email":"serebrennikov.oleg.p@gmail.com","login":null,"count":47},{"name":"Anton Siluev","email":"burning2007@ya.ru","login":null,"count":43},{"name":"Anton","email":"acheshkov@gmail.com","login":null,"count":37},{"name":"Vitaly-Protasov","email":"you@example.com","login":"invalid-email-address","count":31},{"name":"Pavel Lukianov","email":"pWX906741@china.huawei.com","login":null,"count":18},{"name":"andrey gusev","email":"44449418+angusev","login":"angusev","count":18},{"name":"Vitaly-Protasov","email":"43099602+Vitaly-Protasov","login":"Vitaly-Protasov","count":10},{"name":"Andrey Gusev","email":"gusevgaa@gmail.com","login":null,"count":5},{"name":"Evgeniy.Maslov","email":"Evgeniy.Maslov@artezio.com","login":null,"count":5},{"name":"silverCase","email":"57872461+silverCase","login":"silverCase","count":4},{"name":"dz-s","email":"shulhindvst@gmail.com","login":null,"count":3},{"name":"ALEXEY ZORCHENKOV","email":"zorchenkov@gmail.com","login":null,"count":3},{"name":"lyriccoder","email":"Evgeny Maslov","login":null,"count":1},{"name":"Andrei Gusev","email":"aWX911857@china.huawei.com","login":null,"count":1},{"name":"lukyanoffpashok","email":"46167437+lukyanoffpashok","login":"lukyanoffpashok","count":1},{"name":"Alexey Zorchenkov","email":"zuoqinr@163.com","login":null,"count":1}],"total_commits":1561,"total_committers":25,"total_bot_commits":0,"total_bot_committers":0,"mean_commits":62.44,"dds":0.7117232543241512,"past_year_committers":[],"past_year_total_commits":0,"past_year_total_committers":0,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":0.0,"past_year_dds":0.0,"last_synced_at":"2024-01-26T18:07:05.886Z","last_synced_commit":"222277d579a792b48bcbb2de6bd57692d8b582fb","created_at":"2023-03-09T03:49:20.040Z","updated_at":"2024-01-26T18:07:05.887Z","commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/cqfn%2Faibolit/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2025-09-03T00:00:08.276Z","repositories_count":5480019,"commits_count":853389012,"contributors_count":31098138,"owners_count":906558,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"cqfn/aibolit","html_url":"https://github.com/cqfn/aibolit","last_synced_at":"2025-08-27T01:40:17.402Z","status":"error","issues_count":109,"pull_requests_count":95,"avg_time_to_close_issue":4499935.270588235,"avg_time_to_close_pull_request":1295176.4810126582,"issues_closed_count":85,"pull_requests_closed_count":79,"pull_request_authors_count":15,"issue_authors_count":14,"avg_comments_per_issue":1.8256880733944953,"avg_comments_per_pull_request":4.2105263157894735,"merged_pull_requests_count":68,"bot_issues_count":0,"bot_pull_requests_count":16,"past_year_issues_count":54,"past_year_pull_requests_count":38,"past_year_avg_time_to_close_issue":161096.38636363635,"past_year_avg_time_to_close_pull_request":63439.42424242424,"past_year_issues_closed_count":44,"past_year_pull_requests_closed_count":33,"past_year_pull_request_authors_count":6,"past_year_issue_authors_count":5,"past_year_avg_comments_per_issue":1.6296296296296295,"past_year_avg_comments_per_pull_request":4.473684210526316,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":33,"created_at":"2023-05-14T08:34:05.400Z","updated_at":"2025-09-01T11:15:22.496Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/cqfn%2Faibolit","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/cqfn%2Faibolit/issues","issue_labels_count":{"bug":44,"good-title":32,"pdd":11,"help wanted":10,"role/DEV":6,"Extract method":6,"good first issue":4,"scope":3,"enhancement":2,"documentation":1,"discussion":1,"refactoring":1},"pull_request_labels_count":{"dependencies":27,"python":16,"Extract method":7,"role/REV":2,"scope":1},"issue_author_associations_count":{"CONTRIBUTOR":69,"COLLABORATOR":44,"MEMBER":30,"NONE":15},"pull_request_author_associations_count":{"CONTRIBUTOR":111,"NONE":44,"MEMBER":19,"COLLABORATOR":4},"issue_authors":{"0pdd":42,"ivanovmg":32,"aravij":18,"yegor256":11,"literally-bug-creator":10,"acheshkov":9,"lyriccoder":8,"AntonProkopyev":8,"MMenshikh":3,"DvrkRain":3,"KatGarmash":2,"g4s8":2,"Vitaly-Protasov":2,"Error10556":2,"iliyasone":1,"sv-atoslav":1,"CAN4red":1,"Nexonm":1,"alchemmist":1,"lukyanoffpashok":1},"pull_request_authors":{"ivanovmg":60,"AntonProkopyev":23,"aravij":18,"dependabot[bot]":17,"lyriccoder":13,"dependabot-preview[bot]":10,"acheshkov":4,"literally-bug-creator":4,"KachanovYev":3,"Error10556":3,"Vitaly-Protasov":3,"DvrkRain":2,"MMenshikh":2,"newspec":2,"CAN4red":2,"github-actions[bot]":2,"SinbadTheSailor2005":2,"lukyanoffpashok":1,"Vitalo-bit":1,"Nexonm":1,"angusev":1,"aagumin":1,"cringoleg":1,"yegor256":1,"alchemmist":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2025-09-09T00:00:11.778Z","repositories_count":10198104,"issues_count":32234101,"pull_requests_count":101768535,"authors_count":10741840,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{"bug":43,"good-title":32,"pdd":11,"help wanted":10,"good first issue":4},"past_year_pull_request_labels_count":{"dependencies":1,"python":1},"past_year_issue_author_associations_count":{"CONTRIBUTOR":50,"COLLABORATOR":37,"NONE":12,"MEMBER":2},"past_year_pull_request_author_associations_count":{"CONTRIBUTOR":92,"NONE":18,"MEMBER":1},"past_year_issue_authors":{"0pdd":37,"ivanovmg":32,"literally-bug-creator":10,"AntonProkopyev":8,"DvrkRain":3,"MMenshikh":3,"Error10556":2,"yegor256":2,"alchemmist":1,"CAN4red":1,"iliyasone":1,"Nexonm":1},"past_year_pull_request_authors":{"ivanovmg":60,"AntonProkopyev":23,"literally-bug-creator":4,"KachanovYev":3,"Error10556":3,"newspec":2,"github-actions[bot]":2,"MMenshikh":2,"CAN4red":2,"SinbadTheSailor2005":2,"DvrkRain":2,"aagumin":1,"alchemmist":1,"Vitalo-bit":1,"dependabot[bot]":1,"Nexonm":1,"yegor256":1},"maintainers":[{"login":"0pdd","count":42,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/0pdd"},{"login":"lyriccoder","count":21,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/lyriccoder"},{"login":"acheshkov","count":13,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/acheshkov"},{"login":"yegor256","count":12,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/yegor256"},{"login":"Vitaly-Protasov","count":5,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/Vitaly-Protasov"},{"login":"KatGarmash","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/KatGarmash"},{"login":"angusev","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/angusev"},{"login":"cringoleg","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/cringoleg"}],"active_maintainers":[{"login":"0pdd","count":37,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/0pdd"},{"login":"yegor256","count":3,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/yegor256"}]},"events":{"total":{"CreateEvent":3,"CommitCommentEvent":56,"ReleaseEvent":1,"IssuesEvent":148,"WatchEvent":32,"DeleteEvent":6,"IssueCommentEvent":495,"PushEvent":1392,"PullRequestReviewEvent":205,"PullRequestReviewCommentEvent":176,"PullRequestEvent":125,"ForkEvent":15},"last_year":{"CreateEvent":3,"CommitCommentEvent":56,"ReleaseEvent":1,"IssuesEvent":148,"WatchEvent":32,"DeleteEvent":6,"IssueCommentEvent":495,"PushEvent":1392,"PullRequestReviewEvent":205,"PullRequestReviewCommentEvent":176,"PullRequestEvent":125,"ForkEvent":15}},"keywords":["code-quality","machine-learning","machine-learning-algorithms","python","quality-control","refactoring","static-analysis"],"dependencies":[{"ecosystem":"maven","filepath":"aibolit/metrics/cc/pom.xml","sha":null,"kind":"manifest","created_at":"2022-07-08T21:00:40.261Z","updated_at":"2022-07-08T21:00:40.261Z","repository_link":"https://github.com/cqfn/aibolit/blob/master/aibolit/metrics/cc/pom.xml","dependencies":[{"id":124729826,"package_name":"pmd:pmd","ecosystem":"maven","requirements":"4.2.4","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"maven","filepath":"aibolit/metrics/halsteadvolume/pom.xml","sha":null,"kind":"manifest","created_at":"2022-07-08T21:00:40.305Z","updated_at":"2022-07-08T21:00:40.305Z","repository_link":"https://github.com/cqfn/aibolit/blob/master/aibolit/metrics/halsteadvolume/pom.xml","dependencies":[{"id":124730241,"package_name":"junit:junit","ecosystem":"maven","requirements":"4.12","direct":true,"kind":"test","optional":false},{"id":124730242,"package_name":"commons-codec:commons-codec","ecosystem":"maven","requirements":"1.11","direct":true,"kind":"runtime","optional":false},{"id":124730243,"package_name":"org.eclipse.jdt:org.eclipse.jdt.core","ecosystem":"maven","requirements":"3.20.0","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"maven","filepath":"aibolit/metrics/npath/pom.xml","sha":null,"kind":"manifest","created_at":"2022-07-08T21:00:40.397Z","updated_at":"2022-07-08T21:00:40.397Z","repository_link":"https://github.com/cqfn/aibolit/blob/master/aibolit/metrics/npath/pom.xml","dependencies":[{"id":124730394,"package_name":"pmd:pmd","ecosystem":"maven","requirements":"4.2.4","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"pypi","filepath":"aibolit/metrics/cc/requirements.txt","sha":null,"kind":"manifest","created_at":"2022-07-08T21:00:40.477Z","updated_at":"2022-07-08T21:00:40.477Z","repository_link":"https://github.com/cqfn/aibolit/blob/master/aibolit/metrics/cc/requirements.txt","dependencies":[{"id":124731089,"package_name":"bs4","ecosystem":"pypi","requirements":"==0.0.1","direct":true,"kind":"runtime","optional":false},{"id":124731090,"package_name":"lxml","ecosystem":"pypi","requirements":"==4.5.0","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"pypi","filepath":"requirements.txt","sha":null,"kind":"manifest","created_at":"2022-07-08T21:00:40.534Z","updated_at":"2022-07-08T21:00:40.534Z","repository_link":"https://github.com/cqfn/aibolit/blob/master/requirements.txt","dependencies":[{"id":124731235,"package_name":"flake8","ecosystem":"pypi","requirements":"==3.7.9","direct":true,"kind":"runtime","optional":false},{"id":124731236,"package_name":"codecov","ecosystem":"pypi","requirements":"==2.0.15","direct":true,"kind":"runtime","optional":false},{"id":124731237,"package_name":"matplotlib","ecosystem":"pypi","requirements":"==3.2.1","direct":true,"kind":"runtime","optional":false},{"id":124731238,"package_name":"coverage","ecosystem":"pypi","requirements":"==5.0.3","direct":true,"kind":"runtime","optional":false},{"id":124731239,"package_name":"javalang","ecosystem":"pypi","requirements":"==0.13.0","direct":true,"kind":"runtime","optional":false},{"id":124731240,"package_name":"sphinx","ecosystem":"pypi","requirements":"==2.3.1","direct":true,"kind":"runtime","optional":false},{"id":124731241,"package_name":"beautifulsoup4","ecosystem":"pypi","requirements":"==4.8.2","direct":true,"kind":"runtime","optional":false},{"id":124731242,"package_name":"numpy","ecosystem":"pypi","requirements":"==1.18.1","direct":true,"kind":"runtime","optional":false},{"id":124731243,"package_name":"pandas","ecosystem":"pypi","requirements":"==1.0.0","direct":true,"kind":"runtime","optional":false},{"id":124731244,"package_name":"scikit-learn","ecosystem":"pypi","requirements":"==0.23.2","direct":true,"kind":"runtime","optional":false},{"id":124731245,"package_name":"scipy","ecosystem":"pypi","requirements":"==1.4.1","direct":true,"kind":"runtime","optional":false},{"id":124731246,"package_name":"mypy","ecosystem":"pypi","requirements":"==0.770","direct":true,"kind":"runtime","optional":false},{"id":124731247,"package_name":"networkx","ecosystem":"pypi","requirements":"==2.4","direct":true,"kind":"runtime","optional":false},{"id":124731248,"package_name":"catboost","ecosystem":"pypi","requirements":"==0.22","direct":true,"kind":"runtime","optional":false},{"id":124731249,"package_name":"cchardet","ecosystem":"pypi","requirements":"==2.1.6","direct":true,"kind":"runtime","optional":false},{"id":124731250,"package_name":"lxml","ecosystem":"pypi","requirements":"==4.5.0","direct":true,"kind":"runtime","optional":false},{"id":124731251,"package_name":"cached-property","ecosystem":"pypi","requirements":"==1.2.0","direct":true,"kind":"runtime","optional":false},{"id":124731252,"package_name":"deprecated","ecosystem":"pypi","requirements":"==1.2.10","direct":true,"kind":"runtime","optional":false},{"id":124731253,"package_name":"typing-extensions","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":124731254,"package_name":"tqdm","ecosystem":"pypi","requirements":"==4.32.1","direct":true,"kind":"runtime","optional":false},{"id":124731255,"package_name":"bs4","ecosystem":"pypi","requirements":"==0.0.1","direct":true,"kind":"runtime","optional":false},{"id":124731256,"package_name":"pebble","ecosystem":"pypi","requirements":"==4.5.3","direct":true,"kind":"runtime","optional":false},{"id":124731257,"package_name":"dataclasses","ecosystem":"pypi","requirements":"==0.7","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"pypi","filepath":"setup.py","sha":null,"kind":"manifest","created_at":"2023-12-20T12:09:29.064Z","updated_at":"2023-12-20T12:09:29.064Z","repository_link":"https://github.com/cqfn/aibolit/blob/master/setup.py","dependencies":[]}],"score":8.32482129876878,"created_at":"2025-09-09T03:23:09.592Z","updated_at":"2025-10-07T08:42:46.328Z","avatar_url":"https://github.com/cqfn.png","language":"Java","category":null,"sub_category":null,"monthly_downloads":0,"funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["refactorings","quality"],"project_url":"https://science.ecosyste.ms/api/v1/projects/194026","html_url":"https://science.ecosyste.ms/projects/194026"}