Vai al contenuto
cd /languages
  • Scripting sulla JVM
  • Programmazione
  • Supporto AST e simboli

Groovy in Maguyva: grafi del codice per Gradle e Jenkins

Maguyva supporta Groovy con AST, simboli e grafo, così gli agenti IA seguono classi, closure e chiamate in app Groovy, build Gradle e Jenkinsfile.

Dove Groovy fa inciampare gli strumenti di IA superficiali

Groovy spesso si legge come una configurazione. In una build Gradle, dependencies { implementation ... } è una catena di chiamate di metodo con closure, e un Jenkinsfile dichiarativo pure. I builder trasformano qualsiasi nome in una chiamata, e il GDK aggiunge metodi come each e collect a ogni oggetto. Uno strumento che registra ogni chiamata annega in questo rumore.

Maguyva filtra lo strato DSL e GDK, così risaltano i tuoi metodi e le tue classi.

Cosa estrae Maguyva in Groovy

Maguyva copre i file .groovy e .gradle, oltre a Jenkinsfile. Vengono estratti classi, funzioni e metodi, e gli import normalizzano gli alias import static e as. I nomi delle chiamate vengono ripuliti dai blocchi di closure finali e dall’operatore di navigazione sicura ?., quindi repo?.save(order) { ... } viene registrato come chiamata a save. Una chiamata senza receiver dentro una classe si risolve sul metodo della classe stessa.

Il rumore viene filtrato a strati:

  • Circa 140 nomi della libreria standard, di Gradle e di Spock, come dependencies, implementation, task, given, when, then e Mock.
  • Circa 260 metodi del GDK, come each, collect, inject e eachLine.
  • I nomi dei DSL dei builder, compresi step di Jenkins come pipeline, stage, steps e sh, quando sono usati in stile builder invece che chiamati con le parentesi.
  • Le annotazioni di trasformazione dell’AST e dei framework come @CompileStatic, @Immutable e @Autowired, che non vengono mai registrate come chiamate.

Il grafo registra anche ereditarietà, istanziazione e letture e scritture.

Esempi di prompt per agenti

  • “Chi chiama deployToStaging, e da quali pipeline?” (find_symbol, poi dependency_search incoming)
  • “Quali classi ereditano da BaseIntegrationSpec?” (dependency_search)
  • “Spiega come il task di release costruisce e pubblica gli artefatti.” (get_task_context)

Limiti noti

  • In Groovy metodi e funzioni libere condividono lo stesso nodo sintattico, quindi il preset methods di structural_search non seleziona nulla. Usa invece il preset functions o find_symbol.
  • Un tuo metodo che ha lo stesso nome di un metodo del GDK o di un DSL, come collect o stage, può essere filtrato insieme a questi. Usa text_pattern_search quando sembra mancare un chiamante.

Prossimi passi

Collega un repository con la guida rapida, poi consulta la matrice di supporto nella pagina di compatibilità. Per il codice JVM compilato dalle tue build, leggi la guida a Java e la guida a Kotlin.

Il più adatto per

  • > Build Gradle scritte in Groovy, in cui la logica condivisa vive in molti file `.gradle`.
  • > Pipeline Jenkins e shared library che gli agenti devono leggere prima di cambiare la CI.
  • > Applicazioni Groovy e suite di test Spock sulla JVM.

Workflow degli agenti

  • > Trovare tutti i chiamanti di uno step di shared library prima di cambiarne gli argomenti.
  • > Tracciare quali script di build chiamano un helper definito in un file `.gradle` comune.
  • > Mappare quali classi ereditano da una classe base prima di un refactoring.

Dettagli del motore

  • > Il supporto a Groovy copre `.groovy`, `.gradle` e `Jenkinsfile`. I nomi delle chiamate perdono i blocchi di closure e la navigazione sicura `?.`.
  • > Circa 140 nomi della libreria standard, di Gradle e di Spock, e circa 260 metodi del GDK, vengono filtrati dalle relazioni.
  • > I nomi dei DSL dei builder, compresi step di Jenkins come `stage` e `sh`, vengono filtrati in stile builder, e le annotazioni non vengono mai registrate come chiamate.

Punti di ingresso MCP utili

  • find_symbol

    Usalo per uno step di shared library, un helper di build o una classe quando ti servono definizione e chiamanti.

  • dependency_search

    Usa l'attraversamento incoming su un helper di build per vedere quali script e pipeline lo chiamano.

  • text_pattern_search

    Usalo per chiamate dei DSL e metodi del GDK, che vengono filtrati dal grafo.