phodal•Mar 21, 2025
coca
Coca - toolbox for system refactoring and analysis
!GitHub release (latest SemVer)
!GitHub go.mod Go version
Coca is a toolbox which is design for legacy system refactoring and analysis, includes call graph, concept analysis, api tree, design patterns suggest.
Coca 是一个用于系统重构、系统迁移和系统分析的工具箱。它可以分析代码中的测试坏味道、模块化分析、行数统计、分析调用与依赖、Git 分析以及自动化重构等。
Related Tools: Coco is an effective DevOps analysis and auto-suggest tool.
Kotlin version: Chapi
Migration Guide (Chinese Version): 《系统重构与迁移指南》
Inspired by: newlee & Tequila
Refactoring Modeling:
!Refactoring Modeling
Languages Support: Java (full features)
Features List:
Getting started
Requirements: graphviz for dot file to image (such as svg, png)
The easiest way to get coca is to use one of the pre-built release binaries which are available for OSX, Linux, Windows on the release page.
You can also install yourself :
Usage
Analysis
Arch
Android Studio Gradle DSL Module (merge header)
command: coca arch -x "com.android.tools.idea.gradle.dsl" -H true
!Gradle Demo
Android Studio Gradle DSL Module Elements Part:
command: coca arch -x "com.android.tools.idea.gradle.dsl.parser.elements"
!Gradle Demo
Find Bad Smells
Examples Result:
Code Line Count
Results:
Results to json
Cloc by directory
results csv:
Cloc Top File
output to: cocareporter/sortcloc.json and also:
Build Deps Tree
Examples Results:
!Call Demo
Identify Spring API
!API Demo
With Count
or multi package:
coca api -r com.macro.mall.demo.controller.,com.zheng.cms.admin.,com.phodal.pholedge -c
Git Analysis
Results:
Concept Analyser
Results Examples:
Count Refs
Results:
Reverse Call Graph
Results:
!RCall Demo
Auto Refactor
support:
rename
move
remove unused import
remove unused class
Evaluate
Arduino Results(Old Version):
New Version:
Evaluate.json examples
Todo
results:
coca suggest
+--------+------------------+--------------------------------+
| CLASS | PATTERN | REASON |
+--------+------------------+--------------------------------+
| Insect | factory | too many constructor |
| Bee | factory, builder | complex constructor, too |
| | | many constructor, too many |
| | | parameters |
+--------+------------------+--------------------------------+
coca tbs
bash
+---------------------+---------------------------------------------------------------+------+
| TYPE | FILENAME | LINE |
+---------------------+---------------------------------------------------------------+------+
| DuplicateAssertTest | app/test/cc/arduino/i18n/ExternalProcessOutputParserTest.java | 107 |
| DuplicateAssertTest | app/test/cc/arduino/i18n/ExternalProcessOutputParserTest.java | 41 |
| DuplicateAssertTest | app/test/cc/arduino/i18n/ExternalProcessOutputParserTest.java | 63 |
| RedundantPrintTest | app/test/cc/arduino/i18n/I18NTest.java | 71 |
| RedundantPrintTest | app/test/cc/arduino/i18n/I18NTest.java | 72 |
| RedundantPrintTest | app/test/cc/arduino/i18n/I18NTest.java | 77 |
| DuplicateAssertTest | app/test/cc/arduino/net/PACSupportMethodsTest.java | 19 |
| DuplicateAssertTest | app/test/processing/app/macosx/SystemProfilerParserTest.java | 51 |
| DuplicateAssertTest | app/test/processing/app/syntax/PdeKeywordsTest.java | 41 |
| DuplicateAssertTest | app/test/processing/app/tools/ZipDeflaterTest.java | 57 |
| DuplicateAssertTest | app/test/processing/app/tools/ZipDeflaterTest.java | 83 |
| DuplicateAssertTest | app/test/processing/app/tools/ZipDeflaterTest.java | 109 |
+---------------------+---------------------------------------------------------------+------+
coca deps -p fixtures/deps/mavensample
+---------------------------+----------------------------------------+---------+
| GROUPID | ARTIFACTID | SCOPE |
+---------------------------+----------------------------------------+---------+
| org.flywaydb | flyway-core | |
| mysql | mysql-connector-java | runtime |
| org.springframework.cloud | spring-cloud-starter-contract-verifier | test |
+---------------------------+----------------------------------------+---------+
bash
brew install go
bash
export GOROOT=/usr/local/opt/go/libexec
export GOPATH=$HOME/.go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
git clone https://github.com/modernizing/coca
go get github.com/onsi/ginkgo
go get github.com/onsi/gomega
``
License
Arch based on Tequila
Git Analysis inspired by Code Maat
Test bad smells inspired by Test Smell Examples
@ 2019 A Phodal Huang's Idea. This code is distributed under the MPL license. See LICENSE` in this directory.