Skip to content

Como funciona

pfranccino edited this page Jun 7, 2026 · 1 revision

Cómo funciona internamente

Detección de módulos

  1. Si existe settings.gradle.kts o settings.gradle en la raíz, se usa como fuente de verdad (extrae los include(":module")).
  2. Si no, rglob() busca todos los build.gradle* como fallback.
  3. Paths → nombres: payments/homepayments:home.

Extracción de dependencias

  1. Lee cada build.gradle / build.gradle.kts.
  2. Para .kts: usa tree-sitter (si está instalado) para obtener un AST real — maneja multilínea, comentarios y parámetros nombrados. Si no está disponible, cae en regex.
  3. Para .gradle: preprocesa el contenido (elimina comentarios // y /* */, colapsa declaraciones multilínea) y aplica regex.
  4. Soporta formato clásico (project(":foo:bar")) y type-safe accessors (projects.foo.barBaz).
  5. Matching exacto contra la lista de módulos conocidos — sin heurísticas de prefijo.

El motor dinámico (--engine dynamic) reemplaza los pasos 1–4 ejecutando Gradle y leyendo lo que resuelve. Ver Motor estático vs dinámico.

Generación de diagramas

  1. Clasifica módulos por tipo (common, gateway, features).
  2. Aplica colores según clasificación.
  3. Genera PlantUML/Mermaid agrupados por categoría visual.
  4. Marca en rojo los módulos involucrados en ciclos.

Ajustar espaciado de diagramas

En gradle_analyzer.py, función generate_plantuml():

"skinparam nodesep 150",    # Horizontal
"skinparam ranksep 150",    # Vertical
"skinparam padding 30",     # Interno
Estilo nodesep / ranksep / padding
Compacto 60 / 60 / 10
Balanceado 100 / 100 / 20
Espacioso 150 / 150 / 30

Estructura del proyecto

android-gradle-analyzer/
├── README.md
├── EXAMPLES.md
├── CHANGELOG.md · LICENSE · CONTRIBUTING.md
├── pyproject.toml               ← fuente única de dependencias
├── menu.py                      ← wrapper: python3 menu.py
├── menu/                        ← paquete del menú interactivo
│   ├── actions.py · branding.py · exporter.py
│   ├── prompts.py · state.py · ui.py
├── analyzer_utils.py            ← utilidades compartidas
├── dependency_engine.py         ← motor dinámico (vía Gradle)
├── analyzer_config.example.json ← config de ejemplo
├── gradle_analyzer.py           ← script 1: dependencias internas
├── external_callers.py          ← script 2: llamadas externas
├── gradle_sanity.py             ← script 3: sanidad + score
├── gradle_impact.py             ← script 4: impacto de cambios
├── examples/
│   └── github-actions-dependency-health.yml
├── scripts/
│   ├── bump_version.py          ← sincroniza versión y guía el release
│   └── extract_changelog.py
└── tests/                       ← suite + fixtures reproducibles

Clone this wiki locally