Zum Inhalt springen
cd /languages
  • Typisierte JVM
  • Programmierung
  • AST- und Symbol-Support

Scala in Maguyva: Code-Graphen für JVM-Services und Spark

Maguyva unterstützt Scala mit AST, Symbolen und Graph, damit KI-Agenten Traits, Objects, Case Classes und typisierte Aufrufe über JVM- und Spark-Code hinweg verfolgen.

Wo Scala oberflächliche KI-Tools ins Stolpern bringt

In Scala trägt ein Name viel. Ein Trait, sein Companion Object und eine Case Class können sich ein Konzept teilen. Pattern Matching bindet in case-Klauseln neue Namen, und eine Methode, die innerhalb einer Klasse ohne Receiver aufgerufen wird, ist ein Aufruf auf this. Ein Agent, der eine Datei nach der anderen liest, sieht die Namen, aber nicht, wohin sie aufgelöst werden.

Maguyva löst mehr davon schon beim Indexieren auf, sodass ein Agent fragen kann, wer eine Methode aufruft, und eine Antwort bekommt, mit der er arbeiten kann.

Was Maguyva in Scala extrahiert

Maguyva deckt .scala- und .sc-Dateien ab. Klassen, Objects und Traits werden als Typen extrahiert, und das Preset functions in structural_search umfasst def-Deklarationen, -Definitionen und Lambdas. Signaturen erfassen wiederholte (*) Parameter, und Importe verlieren das Präfix _root_.

Aufrufbeziehungen behalten klassenqualifizierte Namen, und ein Aufruf ohne Receiver innerhalb einer Klasse wird zur eigenen Methode dieser Klasse aufgelöst. Die Receiver-Typisierung folgt Parametern, Klassenparametern, val- und var-Definitionen, typisierten und Case-Class-Patterns in case-Klauseln, den Rückgabetypen von Methoden auf Klassen, Objects und Traits, Typaliasen sowie extends-Klauseln. new auf einem großgeschriebenen Typ zählt als Instanziierung.

Für Scala ist kein Beziehungstyp als nicht anwendbar markiert, daher erfasst der Graph außerdem Vererbung, Overrides, Typreferenzen, Lese- und Schreibzugriffe, Kontrollfluss und Exception-Kanten.

Beispiel-Prompts für Agenten

  • „Wer ruft PaymentService.capture auf, und aus welchen Routen?“ (find_symbol, dann dependency_search incoming)
  • „Welche Klassen und Objects erweitern EventHandler?“ (dependency_search)
  • „Verfolge, wie ein Order-Event den Ledger-Writer erreicht.“ (get_task_context)

Bekannte Grenzen

  • Etwa 320 Namen der Standardbibliothek werden aus den Beziehungen gefiltert: Collection-Operationen wie map, flatMap und foldLeft sowie Helfer aus Option, Either, Try, Future und Predef. Ein Aufruf auf this oder auf einem Wert, dessen Typ zu einer deiner Klassen aufgelöst wird, bleibt erhalten, auch wenn sein Name auf dieser Liste steht. Verwende text_pattern_search, wenn ein Aufrufer trotzdem zu fehlen scheint.
  • Kurze Typparameter wie A, F und CC sowie Wurzeltypen wie Any, Unit und Nothing werden aus den Typreferenzen gefiltert.

Nächste Schritte

Verbinde ein Repository über den Schnellstart und prüfe dann die Unterstützungsmatrix auf der Kompatibilitätsseite. Für gemischte JVM-Codebasen lies auch den Java-Leitfaden und den Kotlin-Leitfaden.

Am besten geeignet

  • > In Scala geschriebene JVM-Services, in denen Traits, Companion Objects und Case Classes ein Konzept über viele Dateien verteilen.
  • > Spark- und Data-Engineering-Jobs, die Agenten zusammen mit den aufgerufenen gemeinsamen Bibliotheken lesen müssen.
  • > Gemischte Scala- und Java-Repositories, die Agenten als eine Codebasis durchsuchen müssen.

Agentenabläufe

  • > Alle Aufrufer einer Service-Methode finden, bevor sich ihre Signatur ändert.
  • > Auflisten, welche Klassen und Objects einen Trait erweitern, bevor ein abstrakter Member hinzukommt.
  • > Verfolgen, wie ein Request von einer HTTP-Route über Services in die Datenschicht gelangt.

Engine-Einordnung

  • > Die Scala-Unterstützung umfasst `.scala` und `.sc`. Klassen, Objects und Traits sind Typen, und Aufrufe ohne Receiver innerhalb einer Klasse werden zu ihren eigenen Methoden aufgelöst.
  • > Die Receiver-Typisierung folgt Parametern, Klassenparametern, `val`- und `var`-Definitionen, `case`-Patterns, Rückgabetypen von Methoden und `extends`-Klauseln.
  • > Aufrufe behalten klassenqualifizierte Namen, `new` zählt als Instanziierung, und etwa 320 Namen der Standardbibliothek werden aus den Beziehungen gefiltert.

Nützliche MCP-Einstiegspunkte

  • find_symbol

    Nutz es für einen Trait, ein Object oder eine Service-Methode, wenn du Definition und Referenzen brauchst.

  • dependency_search

    Nutz die eingehende Traversierung auf einem Trait oder einer Methode, um vor einer Signaturänderung Implementierungen und Aufrufer zu sehen.

  • get_task_context

    Nutz es für Prompts wie „verfolge, wie ein Order-Event den Ledger-Writer erreicht“.