Lompat ke konten
cd /languages
  • JVM bertipe
  • Pemrograman
  • Dukungan AST dan simbol

Scala di Maguyva: graf kode untuk layanan JVM dan Spark

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.

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, lalu periksa matriks dukungan di halaman kompatibilitas. Untuk basis kode JVM campuran, baca juga panduan Java dan panduan Kotlin.

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.

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".