Spring til indhold
cd /languages
  • Typet JVM
  • Programmering
  • AST- og symbolunderstøttelse

Scala i Maguyva: kodegrafer til JVM-services og Spark

Maguyva understøtter Scala med AST, symboler og graf, så AI-agenter kan følge traits, objects, case classes og typede kald i JVM- og Spark-kode.

Hvor Scala får overfladiske AI-værktøjer til at snuble

I Scala bærer ét navn meget. En trait, dens companion object og en case class kan dele ét begreb. Mønstermatchning binder nye navne inde i case-led, og en metode, der kaldes uden modtager inde i en klasse, er et kald på this. En agent, der læser én fil ad gangen, ser navnene, men ikke hvad de peger på.

Maguyva løser mere af det allerede ved indeksering, så en agent kan spørge, hvem der kalder en metode, og få et svar, den kan handle på.

Hvad Maguyva udtrækker i Scala

Maguyva dækker .scala- og .sc-filer. Klasser, objects og traits udtrækkes som typer, og presettet functions i structural_search dækker def-deklarationer, -definitioner og lambdaer. Signaturer registrerer gentagne (*) parametre, og imports mister præfikset _root_.

Kaldrelationer beholder klassekvalificerede navne, og et kald uden modtager inde i en klasse slås op til klassens egen metode. Modtagertypningen følger parametre, klasseparametre, val- og var-definitioner, typede mønstre og case class-mønstre i case-led, returtyper for metoder på klasser, objects og traits, typealiaser og extends-led. new på en type med stort begyndelsesbogstav tæller som instansiering.

For Scala er ingen relationstype markeret som ikke relevant, så grafen registrerer også nedarvning, overrides, typereferencer, læsninger og skrivninger, kontrolflow og undtagelseskanter.

Eksempler på prompts til agenter

  • “Hvem kalder PaymentService.capture, og fra hvilke routes?” (find_symbol, derefter dependency_search incoming)
  • “Hvilke klasser og objects udvider EventHandler?” (dependency_search)
  • “Spor hvordan en ordrehændelse når hovedbogsskriveren.” (get_task_context)

Kendte begrænsninger

  • Omkring 320 navne fra standardbiblioteket filtreres fra relationerne: samlingsoperationer som map, flatMap og foldLeft plus hjælpere fra Option, Either, Try, Future og Predef. Et kald på this, eller på en værdi, hvis type slås op til en af dine klasser, beholdes, også selvom navnet står på listen. Brug text_pattern_search, hvis en kalder stadig ser ud til at mangle.
  • Korte typeparametre som A, F og CC og roottyper som Any, Unit og Nothing filtreres fra typereferencerne.

Næste skridt

Tilslut et repository med hurtigstarten, og se derefter understøttelsesmatricen på kompatibilitetssiden. For blandede JVM-kodebaser kan du også læse guiden til Java og guiden til Kotlin.

Bedst egnet til

  • > JVM-services skrevet i Scala, hvor traits, companion objects og case classes spreder ét begreb over mange filer.
  • > Spark- og data engineering-jobs, som agenter skal læse sammen med de delte biblioteker, de kalder.
  • > Blandede Scala- og Java-repositories, som agenter skal søge i som én kodebase.

Agent-arbejdsgange

  • > Finde alle kaldere af en servicemetode, før dens signatur ændres.
  • > Liste hvilke klasser og objects der udvider en trait, før et abstrakt medlem tilføjes.
  • > Spore hvordan en forespørgsel går fra en HTTP-route via services til datalaget.

Motordetaljer

  • > Scala-understøttelsen dækker `.scala` og `.sc`. Klasser, objects og traits er typer, og kald uden modtager inde i en klasse slås op til dens egne metoder.
  • > Modtagertypningen følger parametre, klasseparametre, `val`- og `var`-definitioner, `case`-mønstre, metoders returtyper og `extends`-led.
  • > Kald beholder klassekvalificerede navne, `new` tæller som instansiering, og omkring 320 navne fra standardbiblioteket filtreres fra relationerne.

Nyttige MCP-indgange

  • find_symbol

    Brug det til en trait, et object eller en servicemetode, når du har brug for definitionen og referencerne.

  • dependency_search

    Brug incoming-traversering på en trait eller metode for at se implementeringer og kaldere før en signaturændring.

  • get_task_context

    Brug det til prompts som "spor hvordan en ordrehændelse når hovedbogsskriveren".