# Scala dans Maguyva : des graphes de code pour services JVM et Spark

Canonical source: https://maguyva.ai/fr/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 prend en charge Scala avec AST, symboles et graphe, pour que les agents IA suivent traits, objects, case classes et appels typés dans le code JVM et Spark.

## Aperçu du support

- Palier: Prise en charge de l’AST et des symboles
- Programmation
- Extensions: .sc, .scala
- Analyse AST réelle pour une recherche consciente de la syntaxe et un contexte structurel.
- Les symboles nommés alimentent la recherche sémantique et le référencement croisé. La navigation par graphe est disponible lorsque l’extraction de relations est activée.
- Ce langage fournit des symboles et des relations à la recherche tenant compte du graphe ; les types d’arêtes pris en charge varient selon ses constructions natives.
- L’analyse AST et l’extraction de symboles sont toutes deux disponibles.

## Idéal pour

- Les services JVM écrits en Scala, où traits, companion objects et case classes répartissent un même concept sur de nombreux fichiers.
- Les jobs Spark et de data engineering que les agents doivent lire avec les bibliothèques partagées qu'ils appellent.
- Les dépôts mixtes Scala et Java que les agents doivent explorer comme une seule base de code.

## Workflows d'agent

- Trouver tous les appelants d'une méthode de service avant de modifier sa signature.
- Lister les classes et objects qui étendent un trait avant d'y ajouter un membre abstrait.
- Retracer comment une requête passe d'une route HTTP aux services puis à la couche de données.

## Là où Scala fait trébucher les outils d'IA superficiels

En Scala, un nom porte beaucoup. Un trait, son companion object et une case class peuvent partager un même concept. Le pattern matching lie de nouveaux noms dans les clauses `case`, et une méthode appelée sans receveur dans une classe est un appel sur `this`. Un agent qui lit un fichier à la fois voit les noms, mais pas ce vers quoi ils se résolvent.

Maguyva résout une plus grande part de tout cela dès l'indexation : l'agent peut demander qui appelle une méthode et obtenir une réponse exploitable.

## Ce que Maguyva extrait en Scala

Maguyva couvre les fichiers `.scala` et `.sc`. Les classes, objects et traits sont extraits comme types, et le preset `functions` de `structural_search` couvre les déclarations et définitions `def` ainsi que les lambdas. Les signatures enregistrent les paramètres répétés (`*`), et les imports perdent le préfixe `_root_`.

Les relations d'appel conservent les noms qualifiés par classe, et un appel sans receveur dans une classe est résolu vers la méthode de cette classe. Le typage des receveurs suit les paramètres, les paramètres de classe, les définitions `val` et `var`, les patterns typés et de case class dans les clauses `case`, les types de retour des méthodes des classes, objects et traits, les alias de type et les clauses `extends`. `new` sur un type commençant par une majuscule compte comme une instanciation.

Aucun type de relation n'est marqué comme non applicable pour Scala : le graphe enregistre donc aussi l'héritage, les redéfinitions, les références de type, les lectures et écritures, le flux de contrôle et les arêtes d'exception.

## Exemples de prompts pour agents

- « Qui appelle `PaymentService.capture`, et depuis quelles routes ? » (`find_symbol`, puis `dependency_search` en incoming)
- « Quelles classes et quels objects étendent `EventHandler` ? » (`dependency_search`)
- « Retrace comment un événement de commande atteint le service d'écriture comptable. » (`get_task_context`)

## Limites connues

- Environ 320 noms de la bibliothèque standard sont filtrés des relations : des opérations de collection comme `map`, `flatMap` et `foldLeft`, ainsi que des helpers de `Option`, `Either`, `Try`, `Future` et `Predef`. Un appel sur `this`, ou sur une valeur dont le type se résout vers l'une de vos classes, est conservé même si son nom figure dans cette liste. Utilisez `text_pattern_search` si un appelant semble encore manquer.
- Les paramètres de type courts comme `A`, `F` et `CC`, et les types racines comme `Any`, `Unit` et `Nothing`, sont filtrés des références de type.

## Étapes suivantes

Connectez un dépôt avec le [démarrage rapide](/fr/docs/quickstart), puis consultez la matrice de prise en charge sur la [page de compatibilité](/fr/docs/compatibility). Pour les bases de code JVM mixtes, lisez aussi le [guide Java](/fr/languages/java) et le [guide Kotlin](/fr/languages/kotlin).

## Détails du moteur

- La prise en charge de Scala couvre `.scala` et `.sc`. Classes, objects et traits sont des types, et les appels sans receveur dans une classe sont résolus vers ses propres méthodes.
- Le typage des receveurs suit les paramètres, les paramètres de classe, les définitions `val` et `var`, les patterns `case`, les types de retour des méthodes et les clauses `extends`.
- Les appels conservent les noms qualifiés par classe, `new` compte comme instanciation, et environ 320 noms de la bibliothèque standard sont filtrés des relations.

## Points d'entrée MCP utiles

- `find_symbol`: Utilisez-le pour un trait, un object ou une méthode de service quand vous avez besoin de la définition et des références.
- `dependency_search`: Utilisez la traversée incoming sur un trait ou une méthode pour voir implémentations et appelants avant de changer une signature.
- `get_task_context`: Utilisez-le pour des prompts comme « retrace comment un événement de commande atteint le service d'écriture comptable ».
