# Scala dalam Maguyva: graf kod untuk perkhidmatan JVM dan Spark

Canonical source: https://maguyva.ai/ms/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 menyokong Scala dengan AST, simbol dan graf, supaya ejen AI boleh menjejak trait, objek, case class dan panggilan berjenis dalam kod JVM dan Spark.

## Gambaran sokongan

- Peringkat: Sokongan AST dan simbol
- Pengaturcaraan
- Sambungan fail: .sc, .scala
- Penghuraian AST sebenar untuk carian sedar-sintaks dan konteks struktur.
- Simbol bernama menyokong carian semantik dan rujukan silang. Navigasi graf tersedia apabila pengekstrakan hubungan didayakan.
- Bahasa ini menyumbang simbol dan hubungan kepada carian berasaskan graf; jenis edge yang disokong berbeza mengikut binaan aslinya.
- Penghuraian AST dan pengekstrakan simbol kedua-duanya tersedia.

## Paling sesuai

- Perkhidmatan JVM yang ditulis dalam Scala, di mana trait, objek pengiring dan case class menyebarkan satu konsep ke banyak fail.
- Kerja Spark dan kejuruteraan data yang perlu dibaca ejen bersama pustaka dikongsi yang dipanggilnya.
- Repositori campuran Scala dan Java yang perlu dicari oleh ejen sebagai satu pangkalan kod.

## Aliran kerja ejen

- Mencari semua pemanggil kaedah perkhidmatan sebelum mengubah tandatangannya.
- Menyenaraikan kelas dan objek yang melanjutkan sesuatu trait sebelum menambah ahli abstrak.
- Menjejak bagaimana permintaan bergerak daripada laluan HTTP melalui perkhidmatan ke lapisan data.

## Di mana Scala memerangkap alat AI yang cetek

Dalam Scala, satu nama memikul banyak beban. Sebuah trait, objek pengiringnya dan sebuah case class boleh berkongsi satu konsep. Padanan corak mengikat nama baharu di dalam klausa `case`, dan kaedah yang dipanggil tanpa penerima di dalam kelas sebenarnya ialah panggilan pada `this`. Ejen yang membaca fail satu demi satu melihat nama-nama itu, tetapi tidak melihat ke mana ia diselesaikan.

Maguyva menyelesaikan lebih banyak perkara semasa pengindeksan, supaya apabila ejen bertanya siapa yang memanggil sesuatu kaedah, ia mendapat jawapan yang boleh terus diambil tindakan.

## Apa yang diekstrak oleh Maguyva daripada Scala

Maguyva merangkumi fail `.scala` dan `.sc`. Kelas, objek dan trait diekstrak sebagai jenis, dan pratetap `functions` dalam `structural_search` merangkumi pengisytiharan dan takrifan `def` serta lambda. Tandatangan merekodkan parameter berulang (`*`), dan awalan `_root_` dibuang daripada import.

Hubungan panggilan mengekalkan nama yang dilayakkan dengan kelas, dan panggilan tanpa penerima di dalam kelas diselesaikan kepada kaedah kelas itu sendiri. Penjenisan penerima menjejak parameter, parameter kelas, takrifan `val` dan `var`, corak berjenis dan corak case class dalam klausa `case`, jenis pulangan kaedah kelas, objek dan trait, alias jenis serta klausa `extends`. `new` pada jenis berhuruf besar dikira sebagai instansiasi.

Tiada jenis hubungan yang ditanda sebagai tidak berkenaan untuk Scala, jadi graf juga merekodkan pewarisan, penggantian, rujukan jenis, bacaan dan tulisan, aliran kawalan dan tepi pengecualian.

## Contoh gesaan ejen

- "Siapa yang memanggil `PaymentService.capture`, dan daripada laluan mana?" (`find_symbol`, kemudian `dependency_search` arah masuk)
- "Kelas dan objek mana yang melanjutkan `EventHandler`?" (`dependency_search`)
- "Jejaki bagaimana peristiwa pesanan sampai ke penulis lejar." (`get_task_context`)

## Had yang diketahui

- Kira-kira 320 nama pustaka standard ditapis daripada hubungan: operasi koleksi seperti `map`, `flatMap` dan `foldLeft`, serta pembantu `Option`, `Either`, `Try`, `Future` dan `Predef`. Panggilan pada `this`, atau pada nilai yang jenisnya diselesaikan kepada salah satu kelas anda, dikekalkan walaupun namanya ada dalam senarai itu. Jika seorang pemanggil masih kelihatan hilang, gunakan `text_pattern_search`.
- Parameter jenis pendek seperti `A`, `F` dan `CC` serta jenis akar seperti `Any`, `Unit` dan `Nothing` ditapis daripada rujukan jenis.

## Langkah seterusnya

Sambungkan repositori dengan [panduan permulaan pantas](/ms/docs/quickstart), kemudian semak matriks sokongan di [halaman keserasian](/ms/docs/compatibility). Untuk pangkalan kod JVM bercampur, baca juga [panduan Java](/ms/languages/java) dan [panduan Kotlin](/ms/languages/kotlin).

## Butiran enjin

- Sokongan Scala merangkumi fail `.scala` dan `.sc`. Kelas, objek dan trait ialah jenis; panggilan tanpa penerima di dalam kelas diselesaikan kepada kaedah kelas itu sendiri.
- Penjenisan penerima menjejak parameter, parameter kelas, takrifan `val` dan `var`, corak `case`, jenis pulangan kaedah dan klausa `extends`.
- Panggilan mengekalkan nama yang dilayakkan dengan kelas, `new` dikira sebagai instansiasi, dan kira-kira 320 nama pustaka standard ditapis daripada hubungan.

## Titik masuk MCP yang berguna

- `find_symbol`: Gunakan untuk trait, objek atau kaedah perkhidmatan apabila anda memerlukan takrifan dan rujukannya.
- `dependency_search`: Gunakan penelusuran arah masuk pada trait atau kaedah untuk melihat pelaksana dan pemanggil sebelum mengubah tandatangan.
- `get_task_context`: Gunakan untuk gesaan seperti "jejaki bagaimana peristiwa pesanan sampai ke penulis lejar".
