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

Canonical source: https://maguyva.ai/de/languages/scala

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

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.

## Unterstützungsüberblick

- Stufe: AST- und Symbol-Support
- Programmierung
- Dateiendungen: .sc, .scala
- Echtes AST-Parsing für syntaxbewusste Suche und strukturellen Kontext.
- Benannte Symbole speisen semantisches Lookup und Cross-Referenzierung. Graph-Navigation ist verfügbar, wenn die Beziehungsextraktion aktiviert ist.
- Diese Sprache liefert Symbole und Beziehungen für die graphgestützte Suche; die unterstützten Kantentypen variieren je nach nativen Konstrukten der Sprache.
- AST-Parsing und Symbolextraktion sind beide verfügbar.

## 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.

## 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](/de/docs/quickstart) und prüfe dann die Unterstützungsmatrix auf der [Kompatibilitätsseite](/de/docs/compatibility). Für gemischte JVM-Codebasen lies auch den [Java-Leitfaden](/de/languages/java) und den [Kotlin-Leitfaden](/de/languages/kotlin).

## 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“.
