Siirry sisältöön
cd /languages
  • JVM-skriptaus
  • Ohjelmointi
  • AST- ja symbolituki

Groovy-tuki Maguyva-palvelussa: koodigraafit Gradle- ja Jenkins-koodille

Maguyva tukee Groovya AST-jäsennyksellä, symboleilla ja graafilla, jotta tekoälyagentit voivat seurata luokkia, sulkeumia ja kutsuja Groovy-sovelluksissa, Gradle-buildeissa ja Jenkinsfile-tiedostoissa.

Missä Groovy kampittaa pinnallisia tekoälytyökaluja

Groovy näyttää usein konfiguraatiolta. Gradle-buildissa dependencies { implementation ... } on sulkeumia sisältävä metodikutsujen ketju, ja deklaratiivinen Jenkinsfile on samanlainen. Builderit muuttavat mitä tahansa nimiä kutsuiksi, ja GDK lisää jokaiseen olioon metodeja kuten each ja collect. Työkalu, joka tallentaa jokaisen kutsun, hukkuu tähän kohinaan.

Maguyva suodattaa DSL- ja GDK-kerroksen pois, jotta omat metodisi ja luokkasi erottuvat.

Mitä Maguyva poimii Groovysta

Maguyva kattaa .groovy- ja .gradle-tiedostot sekä Jenkinsfile-tiedostot. Luokat, funktiot ja metodit poimitaan, ja tuonnit normalisoivat import static- ja as-aliakset. Kutsujen nimistä poistetaan loppuun jäävät sulkeumalohkot ja turvallisen navigoinnin operaattori ?., joten repo?.save(order) { ... } tallentuu kutsuksi save. Vastaanottajaton kutsu luokan sisällä ratkeaa luokan omaksi metodiksi.

Kohina suodatetaan kerroksittain:

  • Noin 140 standardikirjaston, Gradlen ja Spockin nimeä, kuten dependencies, implementation, task, given, when, then ja Mock.
  • Noin 260 GDK-metodia, kuten each, collect, inject ja eachLine.
  • Builder-DSL:n nimet, myös Jenkins-askeleet kuten pipeline, stage, steps ja sh, kun niitä käytetään builder-tyylisesti eikä kutsuta sulkeiden kanssa.
  • AST-muunnosten ja kehysten annotaatiot, kuten @CompileStatic, @Immutable ja @Autowired, joita ei koskaan tallenneta kutsuiksi.

Graafi tallentaa myös perinnän, instanssien luonnit sekä luvut ja kirjoitukset.

Esimerkkikehotteita agenteille

  • ”Kuka kutsuu funktiota deployToStaging ja mistä putkista?” (find_symbol, sitten dependency_search incoming)
  • ”Mitkä luokat perivät luokasta BaseIntegrationSpec?” (dependency_search)
  • ”Selitä, miten julkaisutehtävä rakentaa ja julkaisee artefaktit.” (get_task_context)

Tunnetut rajoitukset

  • Groovyn metodit ja vapaat funktiot jakavat saman syntaksisolmun, joten structural_search-työkalun esiasetus methods ei valitse mitään. Käytä sen sijaan esiasetusta functions tai find_symbol-työkalua.
  • Oma metodi, jolla on sama nimi kuin GDK- tai DSL-metodilla, kuten collect tai stage, voi suodattua pois niiden mukana. Käytä text_pattern_search-työkalua, jos jokin kutsuja näyttää puuttuvan.

Seuraavat vaiheet

Yhdistä repositorio pikaoppaan avulla ja tarkista sitten tukimatriisi yhteensopivuussivulta. Buildiesi kääntämää JVM-koodia varten lue Java-opas ja Kotlin-opas.

Parhaiten sopii

  • > Groovylla kirjoitetut Gradle-buildit, joissa jaettu build-logiikka on hajallaan monessa `.gradle`-tiedostossa.
  • > Jenkins-putket ja jaetut kirjastot, jotka agenttien on luettava ennen CI:n muuttamista.
  • > Groovy-sovellukset ja Spock-testisarjat JVM:llä.

Agenttien työnkulut

  • > Löytää jaetun kirjaston askeleen kaikki kutsujat ennen sen argumenttien muuttamista.
  • > Jäljittää, mitkä build-skriptit kutsuvat yhteisessä `.gradle`-tiedostossa määriteltyä apufunktiota.
  • > Kartoittaa ennen refaktorointia, mitkä luokat perivät kantaluokasta.

Moottorin yksityiskohdat

  • > Groovy-tuki kattaa `.groovy`- ja `.gradle`-tiedostot sekä `Jenkinsfile`-tiedostot. Kutsujen nimistä poistetaan sulkeumalohkot ja `?.`-turvanavigointi.
  • > Noin 140 standardikirjaston, Gradlen ja Spockin nimeä sekä noin 260 GDK-metodia suodatetaan pois suhteista.
  • > Builder-DSL:n nimet, myös Jenkins-askeleet kuten `stage` ja `sh`, suodatetaan builder-tyylissä, eikä annotaatioita koskaan tallenneta kutsuiksi.

Hyödylliset MCP-liittymäkohdat

  • find_symbol

    Käytä sitä jaetun kirjaston askeleelle, build-apufunktiolle tai luokalle, kun tarvitset määritelmän ja kutsujat.

  • dependency_search

    Käytä incoming-läpikäyntiä build-apufunktiolle nähdäksesi, mitkä skriptit ja putket kutsuvat sitä.

  • text_pattern_search

    Käytä sitä DSL-kutsuihin ja GDK-metodeihin, jotka suodatetaan pois graafista.