Langkau ke kandungan
cd /languages
  • Kod natif berskala besar
  • Pengaturcaraan
  • Sokongan AST dan simbol

C++ dalam Maguyva: graf kelas dan panggilan untuk pangkalan kod besar

Maguyva menyokong C++ dengan AST, simbol dan graf, supaya ejen AI boleh menjejak kelas, ruang nama, penggantian maya dan pemanggil dalam pangkalan kod C++ yang besar.

Mengapa C++ memerlukan struktur, bukan carian teks

Dalam C++, nama tidak unik. send boleh jadi fungsi bebas, ahli tiga kelas dan penggantian dalam kelas keempat. Ruang nama, templat dan definisi di luar kelas, seperti Socket::send dalam fail .cpp, memecahkan satu jenis ke banyak fail. Carian teks mengembalikan setiap padanan, tetapi tidak memberitahu ejen yang mana dicapai oleh sesuatu panggilan.

Maguyva mengindeks kelas, ahli dan panggilan bersama pemiliknya, supaya ejen mengikuti struktur sebenar sebelum menyunting.

Apa yang diekstrak oleh Maguyva daripada C++

Maguyva meliputi sambungan fail sumber dan pengepala C++ yang biasa, termasuk .cpp, .cc, .cxx, .hpp, .hh dan .hxx. Kelas, struct dan fungsi diekstrak, dan definisi di luar kelas seperti void Socket::send() dikaitkan dengan kelas pemilik dan ruang namanya. Ahli maya direkodkan, dan parameter templat menjadi sebahagian daripada tandatangan.

Penentuan jenis penerima mengikut parameter, pengisytiharan setempat, medan, gelung for berasaskan julat dan auto, serta melihat ke dalam unique_ptr, shared_ptr dan optional, jadi panggilan seperti conn->send() diselesaikan kepada kelas yang betul. Klausa kelas asas mengisi pewarisan, dan ungkapan new dikira sebagai penginstansian.

Penopengan makro eksport dan anotasi yang sama seperti C turut digunakan. Kira-kira 273 nama pustaka standard (std::cout, std::endl, printf dan seumpamanya) ditapis daripada hubungan. Graf merekodkan panggilan, include, pewarisan, penggantian, penginstansian, rujukan jenis, bacaan dan tulisan, serta tepi throw.

Contoh gesaan ejen

  • “Kelas mana yang menggantikan Renderer::draw, dan siapa yang memanggilnya?” (dependency_search)
  • “Tunjukkan OrderBook::match dan setiap pemanggilnya.” (find_symbol)
  • “Terangkan cara mesej data pasaran sampai ke enjin strategi.” (get_task_context)

Had yang diketahui

  • .h muncul dalam senarai sambungan C, C++ dan Objective-C, jadi dalam pepohon yang mencampurkan C dan C++, pengepala dibahagikan antara profil-profil ini.
  • Badan makro seperti objek tidak dihuraikan, dan panggilan kepada nama pustaka standard yang ditapis bukan tepi graf. Gunakan text_pattern_search untuk makro dan penggunaan std::.

Langkah seterusnya

Sambungkan repositori dengan panduan permulaan pantas, kemudian semak matriks sokongan di halaman keserasian. Jika sebahagian pepohon ialah C tulen, baca juga panduan C.

Paling sesuai

  • > Enjin permainan, sistem dagangan, pelayar dan pangkalan kod C++ besar yang lain, tempat perubahan satu pengepala membina semula separuh pepohon.
  • > Hierarki kelas dengan kaedah maya, tempat kaedah yang berjalan ditakrifkan di tempat lain daripada tempat ia dipanggil.
  • > Pemfaktoran semula dibantu ejen yang memerlukan pemanggil dan penggantian sebelum tandatangan berubah.

Aliran kerja ejen

  • > Mencari setiap penggantian sesuatu kaedah maya sebelum kelas asas berubah.
  • > Menyenaraikan pemanggil fungsi atau kaedah kelas beruang nama, seperti `net::Socket::send`, di seluruh pangkalan kod.
  • > Menjejak tempat sesuatu kelas dicipta dengan `new` dan ahli yang disentuhnya selepas itu.

Butiran enjin

  • > Definisi di luar kelas seperti `void Socket::send()` dikaitkan dengan kelas pemilik dan ruang namanya, dan ahli maya direkodkan.
  • > Penentuan jenis penerima mengikut parameter, pemboleh ubah setempat, medan, `for` berasaskan julat dan `auto`, serta melihat ke dalam `unique_ptr`, `shared_ptr` dan `optional`.
  • > Klausa kelas asas mengisi pewarisan, ungkapan `new` dikira sebagai penginstansian, dan kira-kira 273 nama pustaka standard ditapis daripada hubungan.

Titik masuk MCP yang berguna

  • find_symbol

    Gunakan dengan nama yang dilayakkan sepenuhnya seperti `OrderBook::match` apabila anda memerlukan definisi dan pemanggil.

  • dependency_search

    Sebelum tandatangan berubah, gunakan pada kelas asas atau kaedah maya untuk mencari penggantian dan pemanggil.

  • get_task_context

    Gunakan untuk gesaan seperti “terangkan cara mesej data pasaran sampai ke enjin strategi”.