# Scala in Maguyva: grafi del codice per servizi JVM e Spark

Canonical source: https://maguyva.ai/it/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 supporta Scala con AST, simboli e grafo, così gli agenti IA seguono trait, object, case class e chiamate tipizzate nel codice JVM e Spark.

## Istantanea del supporto

- Livello: Supporto AST e simboli
- Programmazione
- Estensioni: .sc, .scala
- Analisi AST reale per ricerca sintattica e contesto strutturale.
- I simboli nominati alimentano la ricerca semantica e i riferimenti incrociati. La navigazione del grafo è disponibile quando è abilitata l’estrazione delle relazioni.
- Questo linguaggio contribuisce con simboli e relazioni alla ricerca basata sul grafo; i tipi di arco supportati variano in base ai suoi costrutti nativi.
- Sono disponibili sia l’analisi AST sia l’estrazione dei simboli.

## Il più adatto per

- Servizi JVM scritti in Scala, in cui trait, companion object e case class distribuiscono un concetto su molti file.
- Job Spark e di data engineering che gli agenti devono leggere insieme alle librerie condivise che chiamano.
- Repository misti Scala e Java che gli agenti devono esplorare come un'unica base di codice.

## Workflow degli agenti

- Trovare tutti i chiamanti di un metodo di servizio prima di cambiarne la firma.
- Elencare quali classi e object estendono un trait prima di aggiungere un membro astratto.
- Tracciare come una richiesta passa da una route HTTP ai servizi fino al livello dati.

## Dove Scala fa inciampare gli strumenti di IA superficiali

In Scala un nome porta con sé molto. Un trait, il suo companion object e una case class possono condividere un concetto. Il pattern matching lega nuovi nomi dentro le clausole `case`, e un metodo chiamato senza receiver dentro una classe è una chiamata su `this`. Un agente che legge un file alla volta vede i nomi, ma non ciò a cui si risolvono.

Maguyva ne risolve una parte maggiore in fase di indicizzazione, così un agente può chiedere chi chiama un metodo e ottenere una risposta su cui agire.

## Cosa estrae Maguyva in Scala

Maguyva copre i file `.scala` e `.sc`. Classi, object e trait vengono estratti come tipi, e il preset `functions` di `structural_search` copre dichiarazioni e definizioni `def`, oltre alle lambda. Le firme registrano i parametri ripetuti (`*`), e gli import perdono il prefisso `_root_`.

Le relazioni di chiamata mantengono i nomi qualificati dalla classe, e una chiamata senza receiver dentro una classe si risolve sul metodo di quella classe. La tipizzazione dei receiver segue parametri, parametri di classe, definizioni `val` e `var`, pattern tipizzati e di case class nelle clausole `case`, i tipi di ritorno dei metodi di classi, object e trait, gli alias di tipo e le clausole `extends`. `new` su un tipo con iniziale maiuscola conta come istanziazione.

Per Scala nessun tipo di relazione è marcato come non applicabile, quindi il grafo registra anche ereditarietà, override, riferimenti di tipo, letture e scritture, flusso di controllo e archi di eccezione.

## Esempi di prompt per agenti

- "Chi chiama `PaymentService.capture`, e da quali route?" (`find_symbol`, poi `dependency_search` incoming)
- "Quali classi e object estendono `EventHandler`?" (`dependency_search`)
- "Traccia come un evento d'ordine raggiunge lo scrittore del libro mastro." (`get_task_context`)

## Limiti noti

- Circa 320 nomi della libreria standard vengono filtrati dalle relazioni: operazioni sulle collezioni come `map`, `flatMap` e `foldLeft`, più helper di `Option`, `Either`, `Try`, `Future` e `Predef`. Una chiamata su `this`, o su un valore il cui tipo si risolve in una delle tue classi, viene mantenuta anche se il nome è in quell'elenco. Usa `text_pattern_search` se un chiamante sembra ancora mancare.
- I parametri di tipo brevi come `A`, `F` e `CC`, e i tipi radice come `Any`, `Unit` e `Nothing`, vengono filtrati dai riferimenti di tipo.

## Prossimi passi

Collega un repository con la [guida rapida](/it/docs/quickstart), poi consulta la matrice di supporto nella [pagina di compatibilità](/it/docs/compatibility). Per basi di codice JVM miste, leggi anche la [guida a Java](/it/languages/java) e la [guida a Kotlin](/it/languages/kotlin).

## Dettagli del motore

- Il supporto a Scala copre `.scala` e `.sc`. Classi, object e trait sono tipi, e le chiamate senza receiver dentro una classe si risolvono sui suoi metodi.
- La tipizzazione dei receiver segue parametri, parametri di classe, definizioni `val` e `var`, pattern `case`, tipi di ritorno dei metodi e clausole `extends`.
- Le chiamate mantengono i nomi qualificati dalla classe, `new` conta come istanziazione e circa 320 nomi della libreria standard vengono filtrati dalle relazioni.

## Punti di ingresso MCP utili

- `find_symbol`: Usalo per un trait, un object o un metodo di servizio quando ti servono definizione e riferimenti.
- `dependency_search`: Usa l'attraversamento incoming su un trait o un metodo per vedere implementazioni e chiamanti prima di cambiare una firma.
- `get_task_context`: Usalo per prompt come "traccia come un evento d'ordine raggiunge lo scrittore del libro mastro".
