1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/thoughtworks-coca

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Инструментарий Coca для рефакторинга и анализа систем

GitHub release (latest SemVer) Статус сборки Устойчивость codecov GitHub go.mod Go версия Go

Coca — это инструментарий, предназначенный для рефакторинга и анализа старых систем, включает анализ графа вызовов, концептуальный анализ, дерево API, предложения по использованию паттернов проектирования. Coca является инструментарием для системы рефакторинга, системной миграции и анализа систем. Он может анализировать тестовые плохие запахи в коде, модульный анализ, статистику строк кода, анализ вызова и зависимости, анализ Git и автоматическое рефакторинг.

Связанные инструменты: Coco — эффективный инструмент анализа DevOps и автоматических рекомендаций.

Руководство по миграции (китайская версия): 《Руководство по системному рефакторингу и миграции

Вдохновлено: newlee & Tequila

Переход с Ant на Maven: Merry

Моделирование рефакторинга:

Моделирование рефакторинга - [ ] Поддержка языков - [x] Java (полностью поддерживаются все возможности) - [x] Golang (поддержка: анализ, todo, концепт, Git, рекомендации) - [x] TypeScript / JavaScript (в процессе реализации) - [x] Python (поддержка: анализ, todo, концепт, Git, рекомендации)Список возможностей:``` Доступные команды: analysis анализ кода api сканирование HTTP API с помощью аннотаций arch визуализация пакетов проекта bs генерация списка плохих запахов и рекомендаций call отображение графа вызовов с конкретным методом cloc подсчёт строк кода с оценкой сложности concept создание доменного концепта из исходного кода count подсчёт наиболее часто используемых функций evaluate оценка состояния кода и усилий на рефакторинг git анализ истории коммитов Git для подсчёта ревизий, сводки и рекомендаций help получение справки по любой команде rcall визуализация обратного графа вызовов refactor автоматический рефакторинг кода suggest поиск применимых шаблонов проектирования в коде tbs генерация списка плохих запахов тестов todo сканирование всех задач "todo" и вывод списка с временем version версия


1. [graphviz](https://www.graphviz.org/) для преобразования файлов dot в изображения (например, svg, png)


## Начало работы

Самый простой способ получить Coca — использование одного из предварительно скомпилированных бинарников, доступных для macOS, Linux и Windows на странице с [релизами](https://github.com/phodal/coca/releases).

Вы также можете установить самостоятельно:

```bash
go get -u github.com/phodal/coca

Использование### Анализ

coca analysis

Архитектура

coca arch

Модуль Android Studio Gradle DSL (слияние заголовков):

команда: coca arch -x "com.android.tools.idea.gradle.dsl" -H true

Пример Gradle

Элементы модуля Android Studio Gradle DSL:

команда: coca arch -x "com.android.tools.idea.gradle.dsl.parser.elements"

Пример Gradle

Поиск плохих запахов

coca bs -s type

Примеры результатов:

{
   "dataClass": [
      {
         "Файл": "examples/api/BookController.java",
         "BS": "dataClass"
      }
   ],
   "lazyElement": [
      {
         "Файл": "examples/api/model/BookRepresentation.java",
         "BS": "lazyElement"
      }
   ]
}

Подсчет строк кода

coca cloc
``````markdown
 ───────────────────────────────────────────────────────────────────────────────
 Язык                  Файлы     Строки   Пустые строки  Комментарии     Код Complexity
 ───────────────────────────────────────────────────────────────────────────────
 Go                          58     31763     7132       890    23741       2847
 Java                        44       971      208        21      742         62
 Markdown                     8       238       75         0      163          0
 Gherkin Specification        2        32        2        16       14          0
 Document Type Definition     1       293       36         0      257          0
 License                      1       201       32         0      169          0
 SQL                          1         2        0         0        2          0
 SVG                          1       199        0        34      165          0
 Shell                        1         3        1         1        1          0
 XML                          1        13        0         0       13          0
 gitignore                    1        61        8         4       49          0
 ───────────────────────────────────────────────────────────────────────────────
 Общее                      119     33776     7494       966    25316       2909
 ───────────────────────────────────────────────────────────────────────────────
 Приближенная стоимость разработки $803,822
 Приближённый временной объём работы 14. 120551 месяцев
 Приближённое количество необходимых специалистов 6. 743156
───────────────────────────────────────────────────────────────────────────────
Результаты в JSON```
coca cloc --by-file --format json

Cloc по директориям

coca cloc ~/intellij-community/android/ --by-directory --include-ext=java,kt --not-match=".*(Test|Tests)\.(kt|java)"

результаты CSV:

модуль,общее количество
adt-branding,169
adt-testutils,257
adt-ui,21987
adt-ui-model,3450
android,361270
android-adb,497
android-common,3280
android-debuggers,3030
android-kotlin,8816
android-lang,24796
android-lang-databinding,6392
android-layout-inspector,2533
...

Вершины файла Cloc

coca cloc ~/intellij-community/android/designer/src/com/android/tools/idea --top-file --top-size 10

вывод в: coca_reporter/sort_cloc.json и также:

| ДЛИНА | КОМПЛЕКСНОСТЬ |                         ЛОКАЦИЯ                          |
|-------|--------------|-----------------------------------------------------------|
|    1642 |         236 | ConstraintLayoutHandler.java                             |
|    1492 |         375 | ConstraintComponentUtilities.java                        |
|    1189 |         166 | CommonActions.java                                       |
|    1184 |         325 | ConstraintWidget.java                                    |
|    1169 |         129 | SingleWidgetView.java                                    |
|    1115 |         213 | ScoutArrange.java                                        |
|    1097 |         281 | ScoutWidget.java                                         |
|    1081 |         224 | 3d/Rasterize.java                                        |
|    1016 |         159 | LayoutlibSceneManager.java                               |
|    1014 |         220 | TimeLinePanel.java                                       |

Построение дерева зависимостей

coca call -c com.phodal.pholedge.book.BookController.createBook -r com.phodal.pholedge.

Примеры результатов:

Демо вызова

Определение API Spring

coca api -f

Демо API

С подсчетом

coca api -r com.phodal.pholedge. -c 

или несколько пакетов:```markdown `coca api -r com.macro.mall.demo.controller.,com.zheng.cms.admin.,com.phodal.pholedge -c````bash +------+--------+------------------------------------------------+------------------------------------------------------------------------+ | РАЗМЕР | МЕТОД | URI | ВЫЗОВ | +------+--------+------------------------------------------------+------------------------------------------------------------------------+ | 36 | GET | /aliyun/oss/policy | com.macro.mall.demo.controller.OssController.policy | | 21 | POST | /aliyun/osscallback | com.macro.mall.demo.controller.OssController.callback | | 17 | GET | /subject/list | com.zheng.cms.admin.controller.CmsSubjectController.getList | | 17 | GET | /esProduct/search | com.zheng.cms.admin.search.controller.EsProductController.search | | 17 | GET | /order/list | com.macro.mall.demo.controller.OmsOrderController.list | | 17 | GET | /productAttribute/list/{cid} | com.macro.mall.demo.controller.PmsProductAttributeController.getList | | 17 | GET | /productCategory/list/{parentId} | com.macro.mall.demo.controller.PmsProductCategoryController.getList | | 17 | GET | /brand/list | com.macro.mall.demo.controller.PmsBrandController.getList | | 17 | GET | /esProduct/search/simple | com.zheng.cms.admin.search.controller.EsProductController.search | +------+--------+------------------------------------------------+------------------------------------------------------------------------+

coca git -t


```bash
  +---------------------------------------------------------------------------------------------------------------------+-----------+-------------+
  |                                                     ENTITYNAME                                                      | REVSCOUNT | AUTHORCOUNT |
  +---------------------------------------------------------------------------------------------------------------------+-----------+-------------+
  | build.gradle                                                                                                        |      1326 |          36 |
  | src/asciidoc/index.adoc                                                                                             |       239 |          20 |
  | build-spring-framework/resources/changelog.txt                                                                     |       187 |          10 |
  | spring-core/src/main/java/org/springframework/core/annotation/AnnotationUtils.java                                  |       170 |          10 |
  | spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java                |       159 |          15 |
  | src/docs/asciidoc/web/webmvc.adoc                                                                                   |       121 |          24 |
  | spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java                   |       118 |           9 |
  | src/dist/changelog.txt                                                                                              |       118 |           9 |
  | spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java       |       116 |          15 |
  | spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractAutowireCapableBeanFactory.java        |       113 |          15 |
  | spring-web/src/main/java/org/springframework/http/HttpHeaders.java                                                  |       111 |          18 |
  | src/docs/asciidoc/web/webflux.adoc                                                                                  |       108 |          21 |
  | spring-core/src/main/java/org/springframework/core/annotation/AnnotatedElementUtils.java                             |       107 |           9 |
  | spring-test/spring-test
```gradle                                                                                      |       105 |           7 |
 | spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerAdapter.java     |       105 |          13 |
 | spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompBrokerRelayMessageHandler.java             |       101 |          12 |
 | spring-web/src/main/java/org/springframework/web/client/RestTemplate.java                                              |        98 |          17 |
 | spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceHttpRequestHandler.java                    |        96 |          14 |
 | org.springframework.core/src/main/java/org/springframework/core/convert/TypeDescriptor.java                             |        93 |           4 |
 | spring-core/src/main/java/org/springframework/core/ResolvableType.java                                                |        92 |          10 |
 +------------------------------------------------------------------------------------------------------------------------+-----------+-------------+
 ```### Концепт анализатор``````
кока концепт

Примеры результатов:

+------------------+----------+
|      СЛОВА       | КОЛИЧЕСТВО |
+------------------+----------+
| контекст         |    590    |
| решить            |    531    |
| путь              |    501    |
| содержание       |    423    |
| код               |    416    |
| ресурс            |    373    |
| свойство         |    372    |
| сессия           |    364    |
| атрибут           |    349    |
| свойства          |    343    |
| заголовки        |    330    |
+------------------+----------+

Подсчет ссылок

кока счет
```Результаты:

+------------+----------------------------------------------------------------------------------+ | Количество основанных на управлении | Метод | +------------+----------------------------------------------------------------------------------+ | 2 | com.phodal.pholedge.book.BookRepository.byId | | 2 | com.phodal.pholedge.book.model.Book.toRepresentation | | 2 | com.phodal.pholedge.book.BookRepository.save | | 2 | com.phodal.coca.analysis.JavaCallApp.parse | | 2 | com.phodal.pholedge.book.BookRepository.save | | 2 | com.phodal.coca.analysis.JavaCallApp.parse | | 1 | com.phodal.pholedge.book.model.Book.save | | 1 | evolution.analysis.jv.calls.JavaCallVisitor.parseNewType | | 1 | evolution.analysis.jv.calls.JavaCallVisitor.isNotSpecialNewWord | | 1 | com.phodal.pholedge.book.BookMapper.byId | | 1 | com.phodal.pholedge.book.BookService.updateBook | | 1 | com.phodal.pholedge.book.BookService.getBooksLists | | 1 | com.phodal.pholedge.book.BookService.getBookById | | 1 | com.phodal.pholedge.book.BookMapper.doSave | | 1 | com.phodal.pholedge.book.BookMapper.list | | 1 | com.phodal.pholedge.book.BookService.createBook | | 1 | com.phodal.pholedge.book.BookFactory.create | | 1 | com.phodal.pholedge.book.BookRepository.list | | 1 | com.phodal.pholedge.book.model.Book.create | +------------+----------------------------------------------------------------------------------+

### Обратный граф вызовов```
coca rcall -c org.bytedeco.javacpp.tools.TokenIndexer.get

Результаты:

digraph G {
edge [dir="back"];

"org.bytedeco.javacpp.tools.Parser.extern" -> "org.bytedeco.javacpp.tools.Parser.declarations";
"org.bytedeco.javacpp.tools.Parser.declarations" -> "org.bytedeco.javacpp.tools.Parser.extern";
...
}

Пример RCall

Автоматическая рефакторизация

Поддержка:

  • переименование
  • перемещение
  • удаление ненужных импортов
  • удаление ненужных классов
coca refactor -R rename.coca -p src/main
coca refactor -m move.config -p .

Оценка

coca evaluate

Результаты Arduino (Старая версия):

+--------------------------------+-------+-----------------------+-------+-----------+
|              ТИП               | КОЛ-ВО|           УРОВЕНЬ    | ВСЕГО |   ДОЛЯ    |
+--------------------------------+-------+-----------------------+-------+-----------+
| Nullable / Вернуть null        |     0 | Метод                 |  1615 | 0.00%     |
| Utils                          |     7 | Класс                 |   252 | 2.78%     |
| Статический метод              |     0 | Метод                 |  1615 | 0.43%     |
| Среднее количество методов     |  1615 | Метод/Класс           |   252 |  6.41     |
| Стандартное отклонение количества методов / Стандартное отклонение |  1615 | Класс      | -     |  7.344917 |
| Средняя длина метода           | 13654 | Без геттеров/сеттеров |  1100 | 12.412727 |
| Стандартное отклонение длины метода / Стандартное отклонение |  1615 | Метод      | -     | 20.047092 |
+--------------------------------+-------+-----------------------+-------+-----------+
ТИП КОЛ-ВО ТИПОВ УРОВЕНЬ ВСЕГО УРОВНЕЙ ЗНАЧЕНИЕ = КОЛ-ВО / ВСЕГО
Nullable / Вернуть null 0 Метод 6 0.00%
Utils 0 Класс 14 0.00%
Статический метод 1 Метод 6 0.00%
Среднее количество методов 6 Метод/Класс 14 0.428571
Стандартное отклонение количества методов / Standard Deviation 6 Класс - 0.646206
Средняя длина метода 0 Без getter/setter 0 NaN
Стандартное отклонение длины метода / Standard Deviation 0 Метод - NaN
Оценка.json примерыjson
{
"Nullable": {
	"Items": [
		"nonnull.Name.testNull",
		"nonnull.Name.orElseNull",
		"org.ofbiz.base.util.UtilURL.fromResource",
		"org.ofbiz.base.util.UtilURL.getOfbizHomeRelativeLocationFromFilePath",
		"study.huhao.demo.adapters.outbound.persistence.blog.BlogPO.toDomainModel",
		"study.huhao.demo.adapters.outbound.persistence.blog.BlogPO.toDomainModel",
		"study.huhao.demo.adapters.outbound.persistence.blog.BlogPO.of",
		"study.huhao.demo.infrastructure.persistence.blog.BlogPO.convertDomain"
	]
},
"ServiceSummary": {
	"LifecycleMap": null,
	"ReturnTypeMap": {
		"BookRepresentation": [
			"com.phodal.pholedge.book.BookService.getBookById",
			"com.phodal.pholedge.book.BookService.updateBook"
		]
	},
	"RelatedMethod": null
},
"UtilsSummary": {},
"Summary": {
	"UtilsCount": 1,
	"ClassCount": 64,
	"MethodCount": 161,
	"StaticMethodCount": 19
}

}


### Задачи

выполнить все задачи результаты: +------------+-----------------+--------------------------------+--------------------------------------------------------------------------------------+------+ | ДАТА | АВТОР | СООБЩЕНИЯ | НАЗВАНИЕ_ФАЙЛА | СТРОК | +------------+-----------------+--------------------------------+--------------------------------------------------------------------------------------+------+ | 2019-12-09 | Cristian Maglie | Происходит на macOSX, причины | app/src/cc/arduino/contributions/libraries/ui/ContributedLibraryTableCellJPanel.java | 118 | | | | неизвестны | | | | 2019-12-09 | Cristian Maglie | Преобразуйте это в метод темы | app/src/cc/arduino/contributions/libraries/ui/ContributedLibraryTableCellJPanel.java | 233 | | 2019-12-09 | Cristian Maglie | Улучшите обновление | app/src/cc/arduino/contributions/libraries/ui/LibraryManagerUI.java | 241 | | | | только необходимых элементов | | | | 2019-12-09 | Cristian Maglie | Улучшите обновление | app/src/cc/arduino/contributions/libraries/ui/LibraryManagerUI.java | 273 | | | | только необходимых элементов | | | | 2019-12-09 | Cristian Maglie | Преобразуйте это в метод темы | app/src/cc/arduino/contributions/libraries/ui/MultiLibraryInstallDialog.java | 149 | | 2019-12-09 | Cristian Maglie | Происходит на macOSX, причины | app/src/cc/arduino/contributions/packages/ui/ContributedPlatformTableCellJPanel.java | 183 | | | | неизвестны | | | | 2019-12-09 | Cristian Maglie | Отображение ошибки | app/src/processing/app/Base.java | | +------------+-----------------+--------------------------------+--------------------------------------------------------------------------------------+------+

  | 2019-12-09 | Cristian Maglie | Ошибка при импорте. игнорировать | app/src/processing/app/Base.java                                                       | 2423 |
 ```|            |                 | :-(                            |                                                                                      |      |
 | 2019-12-09 | Cristian Maglie | Улучшить / переместить обработку ошибок | app/src/processing/app/Editor.java                                                     | 1541 |
 | 2019-12-09 | Cristian Maglie | Должна ли это быть тема значения?       | app/src/processing/app/EditorHeader.java                                               |   78 |
 | 2019-12-09 | Cristian Maglie | Должна ли это быть тема значения?       | app/src/processing/app/EditorStatus.java                                               |   73 |
 | 2019-12-09 | Cristian Maglie | Улучшить декомпозицию               | app/src/processing/app/EditorTab.java                                                  |  465 |
 +------------+-----------------+--------------------------------+--------------------------------------------------------------------------------------+------+```### Предложения```
coca suggest

результаты:

+--------+------------------+--------------------------------+
| КЛАСС  | ШАБЛОН           | ПРИЧИНА                         |
+--------+------------------+--------------------------------+
| Насекомое | фабрика        | слишком много конструкторов   |
| Пчела   | фабрика, строитель | сложный конструктор, слишком много конструкторов, слишком много параметров |
+--------+------------------+--------------------------------+

Тест нежелательных ароматов

coca tbs

результаты```bash +---------------------+---------------------------------------------------------------+------+ | ТИП | ИМЯ ФАЙЛА | СТРОКА | +---------------------+---------------------------------------------------------------+------+ | Дублирующий тест утверждения | app/test/cc/arduino/i18n/ExternalProcessOutputParserTest.java | 107 | | Дублирующий тест утверждения | app/test/cc/arduino/i18n/ExternalProcessOutputParserTest.java | 41 | | Дублирующий тест утверждения | app/test/cc/arduino/i18n/ExternalProcessOutputParserTest.java | 63 | | Избыточный тест вывода | app/test/cc/arduino/i18n/I18NTest.java | 71 | | Избыточный тест вывода | app/test/cc/arduino/i18n/I18NTest.java | 72 | | Избыточный тест вывода | app/test/cc/arduino/i18n/I18NTest.java | 77 | | Дублирующий тест утверждения | app/test/cc/arduino/net/PACSupportMethodsTest.java | 19 | | Дублирующий тест утверждения | app/test/processing/app/macosx/SystemProfilerParserTest.java | 51 | | Дублирующий тест утверждения | app/test/processing/app/syntax/PdeKeywordsTest.java | 41 | | Дублирующий тест утверждения | app/test/processing/app/tools/ZipDeflaterTest.java | 57 | | Дублирующий тест утверждения | app/test/processing/app/tools/ZipDeflaterTest.java | 83 | | Дублирующий тест утверждения | app/test/processing/app/tools/ZipDeflaterTest.java | 109 | +---------------------+---------------------------------------------------------------+------+

coca deps -p _fixtures/deps/maven_sample


результаты:

+---------------------------+----------------------------------------+---------+ | ГРУППА | АРТИФАКТ | ОБЛАСТЬ | +---------------------------+----------------------------------------+---------+ | org.flywaydb | flyway-core | | | mysql | mysql-connector-java | runtime | | org.springframework.cloud | spring-cloud-starter-contract-verifier | test | +---------------------------+----------------------------------------+---------+


## Примеры использования

Примеры анализа Android Studio. Вызов с помощью `lookup`: `coca call -l`

![Примеры вызова](showcases/android-studio-call.svg)## План развития — Поддержка плохого запаха кода
     - [x] сортировка размера метода
     - тип
       - [x] длинный список параметров
       - [x] длинный метод
       - [x] повторяющиеся операторы switch
       - [x] сложный if
       - [x] большой класс
       - [x] отклонённый запрос
       - [x] класс данных
   - CLOC
   - Визуализация HTTP API
      - [x] поддержка Spring
      - [x] поддержка @Service
      - [x] размер вызова API
   - Git
      - [x] количество ревизий
      - [x] сводка
      - [ ] [git-quick-stats](https://github.com/arzzen/git-quick-stats)
   - Концепция
      - [x] слова NLP
      - [ ] до домена
   - Граф вызовов и rcall
      - [x] подсчёт ссылок
   - Автоматическое рефакторинг
     - [x] удаление ненужного
     - [x] перемещение файлов
   - Оценка
     - [x] подсчёт nullable
     - [x] подсчёт статического
     - [x] подсчёт количества методов / длины метода
   - Обзор задач
      - [x] задачи с историей и автором
   - Предложение API для шаблонов проектирования
     - [x] фабричный шаблон
     - [x] стратегия
     - [x] билдер
     - [ ] циклические зависимости -> адаптер / агентство
     - [ ] плохие шаблоны
         - [ ] Singleton
   - Оценка API
      - [x] средняя длина метода
      - [x] среднее количество методов в классе
   - Тесты
      - [ ] Тестируемость?
      - [x] тестовый плохой запах -> список [https://testsmells.github.io/pages/testsmells.html]
        - [x] игнорируемые тесты: @Ignore
        - [x] пустые тесты: нет вызова в тесте
        - [x] избыточные печатные тесты: System.out.println
        - [x] спящие тесты: Time.sleep
        - [x] избыточные утверждения тестов: assertTrue(True)       - [x] неизвестные тесты: нет утверждений
        - [x] повторяющиеся утверждения тестов: assert > 5
        - [ ] тесты только для тестирования: метод вызывается только тестами
        - [ ] границы тестирования: тестовый метод, который не находится в системе
        - [ ] общее оборудование: классы JUnit, имеющие хотя бы один метод, не использующий полное тестовое оборудование, определённое в методе setUp()
   - Архитектура
      - [x] визуализация архитектуры
      - [ ] защита архитектуры
        - [ ] дизайн DSL
   - Долги в коде
      - [ ] автоматическое создание истории
   - TBD
      - Анализ комментариев
        - [ ] неверный комментарий?   <http://das.encs.concordia.ca/uploads/2018/02/Maldonado_thesis.pdf>
   - ~~Онлайн анализ кода~~
      - [x] ~~поддержка WASM~~
      - [ ] ~~экспонирование API WASM~~
      - [ ] ~~поиск кода GitHub~~
   - [ ] ~~Плагины~~
      - [ ] ~~поддержка плагинов (вопросы Windows)~~
   - [x] Анализ зависимостей
      - [ ] связанные счетчики зависимостей
      - [x] анализ третьих сторон XML или Groovy скриптов
      - [x] поддержка Groovy
        - [x] миграция в стиль Go
   - [ ] Команда истории
      - [ ] автоматическое создание истории рефакторинга
   - [ ] Советы по чистому коду
    - [ ] Версия на JavaScript [clean-code-javascript](https://github.com/ryanmcdermott/clean-code-javascript)
   - [ ] Больше CodeSmells
      - [ ] Исходник [DesigniteJava](https://github.com/tushartushar/DesigniteJava)Документы Todo: - [ ] Документация
    - [ ] Цикл жизни новых проектов: оценка (cloc, плохой запах, API, git, todo) -> проектирование -> паттерны (предложения) -> рефакторинг ()

 - Коллекция данных

    - [ ] монолитная
    - [ ] микросервисная 
    - [ ] большие данные

Финансовый долг

 - Тест для Windows
 - Дублирование кода
   - cmd/ -> использовать конструктор пользователя для рефакторинга

## Разработка

Установка Go

```bash
brew install go

Среда

export GOROOT=/usr/local/opt/go/libexec
export GOPATH=$HOME/.go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

Клонирование

git clone https://github.com/phodal/coca

Тестовые фреймворки

go get github.com/onsi/ginkgo
go get github.com/onsi/gomega

Лицензия

Архитектура основана на Tequila

Анализ Git вдохновлен Code Maat

Примеры нежелательных тестовых ароматов вдохновлены Test Smell Examples

Идея Phodal

© 2019 A Phodal Huang's Idea. Этот код распространяется под лицензией MPL. Смотрите LICENSE в этой директории.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Кока — это набор инструментов для рефакторинга, миграции и анализа систем. Он может анализировать запахи кода, подсчитывать строки, анализировать вызовы и зависимости, проводить анализ Git, а также автоматизировать рефакторинг и т. д. Развернуть Свернуть
MPL-2.0
Отмена

Обновления (1)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/thoughtworks-coca.git
git@api.gitlife.ru:oschina-mirror/thoughtworks-coca.git
oschina-mirror
thoughtworks-coca
thoughtworks-coca
master