Hoppa till innehåll
cd /languages
  • Typad JVM
  • Programmering
  • Stöd för AST och symboler

Scala i Maguyva: kodgrafer för JVM-tjänster och Spark

Maguyva stöder Scala med AST, symboler och graf, så att AI-agenter kan följa traits, objects, case classes och typade anrop i JVM- och Spark-kod.

Där Scala får ytliga AI-verktyg att snubbla

I Scala bär ett namn mycket. En trait, dess companion object och en case class kan dela ett begrepp. Mönstermatchning binder nya namn i case-satser, och en metod som anropas utan mottagare inne i en klass är ett anrop på this. En agent som läser en fil i taget ser namnen men inte vad de pekar på.

Maguyva löser upp mer av det redan vid indexeringen, så att en agent kan fråga vem som anropar en metod och få ett svar den kan agera på.

Vad Maguyva extraherar i Scala

Maguyva täcker .scala- och .sc-filer. Klasser, objects och traits extraheras som typer, och presetet functions i structural_search omfattar def-deklarationer, -definitioner och lambdor. Signaturer registrerar upprepade (*) parametrar, och importer tappar prefixet _root_.

Anropsrelationer behåller klasskvalificerade namn, och ett anrop utan mottagare inne i en klass slås upp till klassens egen metod. Mottagartypningen följer parametrar, klassparametrar, val- och var-definitioner, typade mönster och case class-mönster i case-satser, returtyper för metoder på klasser, objects och traits, typalias samt extends-satser. new på en typ med stor begynnelsebokstav räknas som instansiering.

För Scala är ingen relationstyp markerad som ej tillämplig, så grafen registrerar också arv, overrides, typreferenser, läsningar och skrivningar, kontrollflöde och undantagskanter.

Exempel på prompter för agenter

  • “Vem anropar PaymentService.capture, och från vilka routes?” (find_symbol, sedan dependency_search incoming)
  • “Vilka klasser och objects utökar EventHandler?” (dependency_search)
  • “Spåra hur en orderhändelse når huvudboksskrivaren.” (get_task_context)

Kända begränsningar

  • Omkring 320 namn från standardbiblioteket filtreras bort från relationerna: samlingsoperationer som map, flatMap och foldLeft, plus hjälpare från Option, Either, Try, Future och Predef. Ett anrop på this, eller på ett värde vars typ slås upp till en av dina klasser, behålls även om namnet finns på listan. Använd text_pattern_search om en anropare fortfarande verkar saknas.
  • Korta typparametrar som A, F och CC, och rottyper som Any, Unit och Nothing, filtreras bort från typreferenserna.

Nästa steg

Anslut ett repo med snabbstarten och kontrollera sedan stödmatrisen på kompatibilitetssidan. För blandade JVM-kodbaser, läs även guiden för Java och guiden för Kotlin.

Bäst lämpad för

  • > JVM-tjänster skrivna i Scala, där traits, companion objects och case classes sprider ett begrepp över många filer.
  • > Spark- och data engineering-jobb som agenter måste läsa tillsammans med de delade bibliotek de anropar.
  • > Blandade Scala- och Java-repon som agenter behöver söka i som en enda kodbas.

Agentarbetsflöden

  • > Hitta alla anropare av en tjänstemetod innan dess signatur ändras.
  • > Lista vilka klasser och objects som utökar en trait innan en abstrakt medlem läggs till.
  • > Spåra hur en förfrågan går från en HTTP-route via tjänster till datalagret.

Motordetaljer

  • > Scala-stödet omfattar `.scala` och `.sc`. Klasser, objects och traits är typer, och anrop utan mottagare inne i en klass slås upp till dess egna metoder.
  • > Mottagartypningen följer parametrar, klassparametrar, `val`- och `var`-definitioner, `case`-mönster, metoders returtyper och `extends`-satser.
  • > Anrop behåller klasskvalificerade namn, `new` räknas som instansiering, och omkring 320 namn från standardbiblioteket filtreras bort från relationerna.

Användbara MCP-ingångar

  • find_symbol

    Använd det för en trait, ett object eller en tjänstemetod när du behöver definitionen och referenserna.

  • dependency_search

    Använd incoming-traversering på en trait eller metod för att se implementationer och anropare inför en signaturändring.

  • get_task_context

    Använd det för prompter som "spåra hur en orderhändelse når huvudboksskrivaren".