# Scala-tuki Maguyva-palvelussa: koodigraafit JVM-palveluille ja Sparkille

Canonical source: https://maguyva.ai/fi/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 tukee Scalaa AST-jäsennyksellä, symboleilla ja graafilla, jotta tekoälyagentit voivat seurata traitteja, olioita, case-luokkia ja tyypitettyjä kutsuja JVM- ja Spark-koodissa.

## Tukikatsaus

- Taso: AST- ja symbolituki
- Ohjelmointi
- Päätteet: .sc, .scala
- Oikea AST-jäsennys syntaksitietoiseen hakuun ja rakenteelliseen kontekstiin.
- Nimetyt symbolit syöttävät semanttista hakua ja ristiviittauksia. Graafinavigointi on käytettävissä, kun suhteiden poiminta on käytössä.
- Tämä kieli tuo symboleja ja suhteita graafia hyödyntävään hakuun; tuetut reunatyypit vaihtelevat kielen omien rakenteiden mukaan.
- Sekä AST-jäsennys että symbolien poiminta ovat käytettävissä.

## Parhaiten sopii

- Scalalla kirjoitetut JVM-palvelut, joissa traitit, kumppanioliot ja case-luokat levittävät yhden käsitteen moneen tiedostoon.
- Spark- ja datatekniikan työt, jotka agenttien on luettava yhdessä niiden kutsumien jaettujen kirjastojen kanssa.
- Scalan ja Javan sekarepositoriot, joita agenttien on haettava yhtenä koodikantana.

## Agenttien työnkulut

- Löytää palvelumetodin kaikki kutsujat ennen sen allekirjoituksen muuttamista.
- Listata traitin laajentavat luokat ja oliot ennen abstraktin jäsenen lisäämistä.
- Jäljittää, miten pyyntö kulkee HTTP-reitiltä palvelujen kautta datakerrokseen.

## Missä Scala kampittaa pinnallisia tekoälytyökaluja

Scalassa yksi nimi kantaa paljon. Trait, sen kumppaniolio ja case-luokka voivat jakaa saman käsitteen. Hahmonsovitus sitoo uusia nimiä `case`-lausekkeiden sisällä, ja luokan sisällä ilman vastaanottajaa kutsuttu metodi on kutsu kohteelle `this`. Agentti, joka lukee yhden tiedoston kerrallaan, näkee nimet mutta ei sitä, mihin ne ratkeavat.

Maguyva ratkaisee tästä enemmän jo indeksoinnissa, joten agentti voi kysyä, kuka kutsuu metodia, ja saada vastauksen, jonka perusteella voi toimia.

## Mitä Maguyva poimii Scalasta

Maguyva kattaa `.scala`- ja `.sc`-tiedostot. Luokat, oliot ja traitit poimitaan tyyppeinä, ja `structural_search`-työkalun esiasetus `functions` kattaa `def`-esittelyt ja -määritelmät sekä lambdat. Allekirjoituksiin tallentuvat toistuvat (`*`) parametrit, ja tuonneista poistetaan etuliite `_root_`.

Kutsusuhteet säilyttävät luokalla tarkennetut nimet, ja luokan sisäinen vastaanottajaton kutsu ratkeaa luokan omaksi metodiksi. Vastaanottajan tyypitys seuraa parametreja, luokkaparametreja, `val`- ja `var`-määritelmiä, tyypitettyjä hahmoja ja case-luokkahahmoja `case`-lausekkeissa, luokkien, olioiden ja traittien metodien paluutyyppejä, tyyppialiaksia sekä `extends`-lausekkeita. `new` isolla alkukirjaimella alkavalle tyypille lasketaan instanssin luonniksi.

Scalassa yhtään suhdetyyppiä ei ole merkitty soveltumattomaksi, joten graafi tallentaa myös perinnän, ohitukset, tyyppiviittaukset, luvut ja kirjoitukset, ohjausvuon sekä poikkeusten kaaret.

## Esimerkkikehotteita agenteille

- ”Kuka kutsuu metodia `PaymentService.capture` ja miltä reiteiltä?” (`find_symbol`, sitten `dependency_search` incoming)
- ”Mitkä luokat ja oliot laajentavat traitia `EventHandler`?” (`dependency_search`)
- ”Jäljitä, miten tilaustapahtuma päätyy pääkirjan kirjoittajalle.” (`get_task_context`)

## Tunnetut rajoitukset

- Noin 320 standardikirjaston nimeä suodatetaan pois suhteista: kokoelmaoperaatiot kuten `map`, `flatMap` ja `foldLeft` sekä `Option`-, `Either`-, `Try`-, `Future`- ja `Predef`-apufunktiot. Kutsu kohteelle `this` tai arvolle, jonka tyyppi ratkeaa johonkin omista luokistasi, säilytetään, vaikka sen nimi olisi listalla. Käytä `text_pattern_search`-työkalua, jos jokin kutsuja näyttää edelleen puuttuvan.
- Lyhyet tyyppiparametrit kuten `A`, `F` ja `CC` sekä juurityypit kuten `Any`, `Unit` ja `Nothing` suodatetaan pois tyyppiviittauksista.

## Seuraavat vaiheet

Yhdistä repositorio [pikaoppaan](/fi/docs/quickstart) avulla ja tarkista sitten tukimatriisi [yhteensopivuussivulta](/fi/docs/compatibility). JVM-sekakoodikannoissa lue myös [Java-opas](/fi/languages/java) ja [Kotlin-opas](/fi/languages/kotlin).

## Moottorin yksityiskohdat

- Scala-tuki kattaa `.scala`- ja `.sc`-tiedostot. Luokat, oliot ja traitit ovat tyyppejä, ja luokan sisäiset vastaanottajattomat kutsut ratkeavat sen omiksi metodeiksi.
- Vastaanottajan tyypitys seuraa parametreja, luokkaparametreja, `val`- ja `var`-määritelmiä, `case`-hahmoja, metodien paluutyyppejä ja `extends`-lausekkeita.
- Kutsut säilyttävät luokalla tarkennetut nimet, `new` lasketaan instanssin luonniksi, ja noin 320 standardikirjaston nimeä suodatetaan pois suhteista.

## Hyödylliset MCP-liittymäkohdat

- `find_symbol`: Käytä sitä traitille, oliolle tai palvelumetodille, kun tarvitset määritelmän ja viittaukset.
- `dependency_search`: Käytä incoming-läpikäyntiä traitille tai metodille nähdäksesi toteutukset ja kutsujat ennen allekirjoituksen muutosta.
- `get_task_context`: Käytä sitä kehotteisiin kuten ”jäljitä, miten tilaustapahtuma päätyy pääkirjan kirjoittajalle”.
