# Scala di Maguyva: graf kode untuk layanan JVM dan Spark

Canonical source: https://maguyva.ai/id/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 mendukung Scala dengan AST, simbol, dan graf, sehingga agen AI dapat menelusuri trait, objek, case class, dan panggilan bertipe di seluruh kode JVM dan Spark.

## Snapshot dukungan

- Tier: Dukungan AST dan simbol
- Pemrograman
- Ekstensi: .sc, .scala
- Parsing AST sungguhan untuk pencarian sadar-syntax dan konteks struktural.
- Simbol bernama menggerakkan pencarian semantik dan cross-reference. Navigasi graf tersedia saat ekstraksi relasi diaktifkan.
- Bahasa ini menyumbangkan simbol dan relasi ke pencarian berbasis graf; jenis edge yang didukung bervariasi sesuai konstruk bawaan bahasa tersebut.
- Parsing AST dan ekstraksi simbol sama-sama tersedia.

## Paling cocok untuk

- Layanan JVM yang ditulis dengan Scala, tempat trait, objek pendamping, dan case class menyebarkan satu konsep ke banyak berkas.
- Job Spark dan rekayasa data yang perlu dibaca agen bersama pustaka bersama yang dipanggilnya.
- Repositori campuran Scala dan Java yang perlu dicari agen sebagai satu basis kode.

## Workflow agent

- Menemukan semua pemanggil metode layanan sebelum mengubah tanda tangannya.
- Mendaftar kelas dan objek yang memperluas sebuah trait sebelum menambahkan anggota abstrak.
- Menelusuri bagaimana permintaan bergerak dari rute HTTP melalui layanan ke lapisan data.

## Di mana Scala menjebak alat AI yang dangkal

Di Scala, satu nama memikul banyak beban. Sebuah trait, objek pendampingnya, dan sebuah case class dapat berbagi satu konsep. Pencocokan pola mengikat nama baru di dalam klausa `case`, dan metode yang dipanggil tanpa penerima di dalam kelas sebenarnya adalah panggilan pada `this`. Agen yang membaca berkas satu per satu melihat nama-nama itu, tetapi tidak melihat ke mana nama itu diselesaikan.

Maguyva menyelesaikan lebih banyak hal saat pengindeksan, sehingga ketika agen bertanya siapa yang memanggil sebuah metode, ia mendapat jawaban yang bisa langsung ditindaklanjuti.

## Apa yang diekstrak Maguyva dari Scala

Maguyva mencakup berkas `.scala` dan `.sc`. Kelas, objek, dan trait diekstrak sebagai tipe, dan preset `functions` di `structural_search` mencakup deklarasi dan definisi `def` serta lambda. Tanda tangan mencatat parameter berulang (`*`), dan prefiks `_root_` dihapus dari impor.

Relasi panggilan mempertahankan nama yang dikualifikasi kelas, dan panggilan tanpa penerima di dalam kelas diselesaikan ke metode milik kelas itu sendiri. Penentuan tipe penerima melacak parameter, parameter kelas, definisi `val` dan `var`, pola bertipe dan pola case class dalam klausa `case`, tipe kembalian metode kelas, objek, dan trait, alias tipe, serta klausa `extends`. `new` pada tipe berhuruf kapital dihitung sebagai instansiasi.

Tidak ada tipe relasi yang ditandai tidak berlaku untuk Scala, sehingga graf juga mencatat pewarisan, penimpaan, referensi tipe, pembacaan dan penulisan, alur kendali, dan tepi pengecualian.

## Contoh prompt agen

- "Siapa yang memanggil `PaymentService.capture`, dan dari rute mana saja?" (`find_symbol`, lalu `dependency_search` incoming)
- "Kelas dan objek mana saja yang memperluas `EventHandler`?" (`dependency_search`)
- "Telusuri bagaimana peristiwa pesanan mencapai penulis buku besar." (`get_task_context`)

## Batasan yang diketahui

- Sekitar 320 nama pustaka standar difilter dari relasi: operasi koleksi seperti `map`, `flatMap`, dan `foldLeft`, serta pembantu `Option`, `Either`, `Try`, `Future`, dan `Predef`. Panggilan pada `this`, atau pada nilai yang tipenya diselesaikan ke salah satu kelas Anda, tetap dipertahankan meskipun namanya ada di daftar itu. Jika sebuah pemanggil masih tampak hilang, gunakan `text_pattern_search`.
- Parameter tipe pendek seperti `A`, `F`, dan `CC` serta tipe akar seperti `Any`, `Unit`, dan `Nothing` difilter dari referensi tipe.

## Langkah berikutnya

Hubungkan repositori dengan [panduan memulai cepat](/id/docs/quickstart), lalu periksa matriks dukungan di [halaman kompatibilitas](/id/docs/compatibility). Untuk basis kode JVM campuran, baca juga [panduan Java](/id/languages/java) dan [panduan Kotlin](/id/languages/kotlin).

## Detail engine

- Dukungan Scala mencakup berkas `.scala` dan `.sc`. Kelas, objek, dan trait adalah tipe; panggilan tanpa penerima di dalam kelas diselesaikan ke metode kelas itu sendiri.
- Penentuan tipe penerima melacak parameter, parameter kelas, definisi `val` dan `var`, pola `case`, tipe kembalian metode, dan klausa `extends`.
- Panggilan mempertahankan nama yang dikualifikasi kelas, `new` dihitung sebagai instansiasi, dan sekitar 320 nama pustaka standar difilter dari relasi.

## Titik masuk MCP yang berguna

- `find_symbol`: Gunakan untuk trait, objek, atau metode layanan saat Anda membutuhkan definisi dan referensinya.
- `dependency_search`: Gunakan penelusuran incoming pada trait atau metode untuk melihat pengimplementasi dan pemanggil sebelum mengubah tanda tangan.
- `get_task_context`: Gunakan untuk prompt seperti "telusuri bagaimana peristiwa pesanan mencapai penulis buku besar".
