Naar inhoud springen
cd /languages
  • Getypeerde JVM
  • Programmeren
  • AST- en symboolondersteuning

Scala in Maguyva: codegrafen voor JVM-services en Spark

Maguyva ondersteunt Scala met AST, symbolen en graaf, zodat AI-agents traits, objects, case classes en getypeerde aanroepen volgen in JVM- en Spark-code.

Waar Scala oppervlakkige AI-tools laat struikelen

In Scala draagt één naam veel. Een trait, zijn companion object en een case class kunnen één concept delen. Pattern matching bindt nieuwe namen in case-clausules, en een methode die binnen een klasse zonder receiver wordt aangeroepen, is een aanroep op this. Een agent die één bestand tegelijk leest, ziet de namen maar niet waarnaar ze verwijzen.

Maguyva lost daar meer van op bij het indexeren, zodat een agent kan vragen wie een methode aanroept en een antwoord krijgt waarmee hij verder kan.

Wat Maguyva in Scala extraheert

Maguyva dekt .scala- en .sc-bestanden. Klassen, objects en traits worden als types geëxtraheerd, en de preset functions in structural_search omvat def-declaraties, -definities en lambda’s. Signaturen leggen herhaalde (*) parameters vast, en imports verliezen het prefix _root_.

Aanroeprelaties behouden klasse-gekwalificeerde namen, en een aanroep zonder receiver binnen een klasse wordt opgelost naar de eigen methode van die klasse. Receiver-typering volgt parameters, klasseparameters, val- en var-definities, getypeerde en case-class-patterns in case-clausules, de returntypes van methoden op klassen, objects en traits, type-aliassen en extends-clausules. new op een type met een hoofdletter telt als instantiatie.

Voor Scala is geen relatietype als niet van toepassing gemarkeerd, dus de graaf legt ook overerving, overrides, typereferenties, lees- en schrijfacties, control flow en exception-edges vast.

Voorbeeldprompts voor agents

  • “Wie roept PaymentService.capture aan, en vanuit welke routes?” (find_symbol, daarna dependency_search incoming)
  • “Welke klassen en objects breiden EventHandler uit?” (dependency_search)
  • “Volg hoe een order-event de grootboekschrijver bereikt.” (get_task_context)

Bekende beperkingen

  • Ongeveer 320 namen uit de standaardbibliotheek worden uit de relaties gefilterd: collectie-operaties zoals map, flatMap en foldLeft, plus helpers uit Option, Either, Try, Future en Predef. Een aanroep op this, of op een waarde waarvan het type naar een van je eigen klassen wordt opgelost, blijft behouden, ook als de naam op die lijst staat. Gebruik text_pattern_search als een aanroeper nog steeds lijkt te ontbreken.
  • Korte typeparameters zoals A, F en CC, en roottypes zoals Any, Unit en Nothing, worden uit de typereferenties gefilterd.

Volgende stappen

Koppel een repository via de snelstart en bekijk daarna de ondersteuningsmatrix op de compatibiliteitspagina. Lees voor gemengde JVM-codebases ook de Java-gids en de Kotlin-gids.

Beste toepassing

  • > JVM-services in Scala waarin traits, companion objects en case classes één concept over veel bestanden verspreiden.
  • > Spark- en data-engineeringjobs die agents samen met de gedeelde bibliotheken moeten lezen die ze aanroepen.
  • > Gemengde Scala- en Java-repositories die agents als één codebase moeten doorzoeken.

Agentworkflows

  • > Alle aanroepers van een servicemethode vinden voordat de signatuur verandert.
  • > Opsommen welke klassen en objects een trait uitbreiden voordat er een abstract member bij komt.
  • > Volgen hoe een request van een HTTP-route via services naar de datalaag gaat.

Enginedetails

  • > Scala-ondersteuning omvat `.scala` en `.sc`. Klassen, objects en traits zijn types, en aanroepen zonder receiver binnen een klasse worden opgelost naar de eigen methoden.
  • > Receiver-typering volgt parameters, klasseparameters, `val`- en `var`-definities, `case`-patterns, returntypes van methoden en `extends`-clausules.
  • > Aanroepen behouden klasse-gekwalificeerde namen, `new` telt als instantiatie, en ongeveer 320 namen uit de standaardbibliotheek worden uit de relaties gefilterd.

Nuttige MCP-instappunten

  • find_symbol

    Gebruik het voor een trait, object of servicemethode wanneer je de definitie en referenties nodig hebt.

  • dependency_search

    Gebruik incoming-traversal op een trait of methode om implementaties en aanroepers te zien voor een signatuurwijziging.

  • get_task_context

    Gebruik het voor prompts als "volg hoe een order-event de grootboekschrijver bereikt."