Przejdź do treści
cd /languages
  • Typowana JVM
  • Programowanie
  • Obsługa AST i symboli

Scala w Maguyva: grafy kodu dla serwisów JVM i Sparka

Maguyva obsługuje Scalę przez AST, symbole i graf, dzięki czemu agenci AI śledzą traity, obiekty, klasy przypadków i typowane wywołania w kodzie JVM i Sparka.

Gdzie Scala sprawia kłopot powierzchownym narzędziom AI

W Scali jedna nazwa niesie dużo. Trait, jego obiekt towarzyszący i klasa przypadku mogą współdzielić jedno pojęcie. Dopasowanie wzorców wiąże nowe nazwy w klauzulach case, a metoda wywołana bez odbiorcy wewnątrz klasy jest wywołaniem na this. Agent czytający jeden plik naraz widzi nazwy, ale nie to, do czego się rozwiązują.

Maguyva rozwiązuje więcej z tego już podczas indeksowania, więc agent może zapytać, kto wywołuje metodę, i dostać odpowiedź, na podstawie której da się działać.

Co Maguyva wyodrębnia w Scali

Maguyva obejmuje pliki .scala i .sc. Klasy, obiekty i traity są wyodrębniane jako typy, a preset functions w structural_search obejmuje deklaracje i definicje def oraz lambdy. Sygnatury zapisują parametry powtarzane (*), a importy tracą prefiks _root_.

Relacje wywołań zachowują nazwy kwalifikowane klasą, a wywołanie bez odbiorcy wewnątrz klasy jest rozwiązywane do metody tej klasy. Typowanie odbiorców śledzi parametry, parametry klasy, definicje val i var, wzorce typowane i wzorce klas przypadków w klauzulach case, typy zwracane przez metody klas, obiektów i traitów, aliasy typów oraz klauzule extends. new na typie zaczynającym się wielką literą liczy się jako tworzenie instancji.

Dla Scali żaden typ relacji nie jest oznaczony jako nie mający zastosowania, więc graf zapisuje też dziedziczenie, nadpisania, odwołania do typów, odczyty i zapisy, przepływ sterowania oraz krawędzie wyjątków.

Przykładowe prompty dla agentów

  • „Kto wywołuje PaymentService.capture i z których tras?” (find_symbol, potem dependency_search incoming)
  • „Które klasy i obiekty rozszerzają EventHandler?” (dependency_search)
  • „Prześledź, jak zdarzenie zamówienia dociera do zapisu w księdze.” (get_task_context)

Znane ograniczenia

  • Około 320 nazw z biblioteki standardowej jest odfiltrowywanych z relacji: operacje na kolekcjach, takie jak map, flatMap i foldLeft, oraz funkcje pomocnicze Option, Either, Try, Future i Predef. Wywołanie na this albo na wartości, której typ rozwiązuje się do jednej z twoich klas, jest zachowywane, nawet jeśli jego nazwa jest na tej liście. Jeśli nadal wydaje się, że brakuje wywołującego, użyj text_pattern_search.
  • Krótkie parametry typów, takie jak A, F i CC, oraz typy główne, takie jak Any, Unit i Nothing, są odfiltrowywane z odwołań do typów.

Kolejne kroki

Podłącz repozytorium za pomocą szybkiego startu, a potem sprawdź macierz obsługi na stronie zgodności. W przypadku mieszanych baz kodu JVM przeczytaj też przewodnik po Javie i przewodnik po Kotlinie.

Najlepsze dopasowanie

  • > Serwisy JVM pisane w Scali, w których traity, obiekty towarzyszące i klasy przypadków rozkładają jedno pojęcie na wiele plików.
  • > Zadania Sparka i inżynierii danych, które agenci muszą czytać razem z wywoływanymi przez nie bibliotekami współdzielonymi.
  • > Mieszane repozytoria Scali i Javy, które agenci muszą przeszukiwać jako jedną bazę kodu.

Workflow agentów

  • > Znaleźć wszystkie miejsca wywołujące metodę serwisu przed zmianą jej sygnatury.
  • > Wypisać klasy i obiekty rozszerzające trait przed dodaniem abstrakcyjnej składowej.
  • > Prześledzić, jak żądanie przechodzi od trasy HTTP przez serwisy do warstwy danych.

Szczegóły silnika

  • > Obsługa Scali obejmuje `.scala` i `.sc`. Klasy, obiekty i traity są typami, a wywołania bez odbiorcy wewnątrz klasy są rozwiązywane do jej własnych metod.
  • > Typowanie odbiorców śledzi parametry, parametry klasy, definicje `val` i `var`, wzorce `case`, typy zwracane przez metody oraz klauzule `extends`.
  • > Wywołania zachowują nazwy kwalifikowane klasą, `new` liczy się jako tworzenie instancji, a około 320 nazw z biblioteki standardowej jest odfiltrowywanych z relacji.

Przydatne punkty wejścia MCP

  • find_symbol

    Użyj go dla traitu, obiektu lub metody serwisu, gdy potrzebujesz definicji i odwołań.

  • dependency_search

    Użyj przejścia incoming na traicie lub metodzie, aby przed zmianą sygnatury zobaczyć implementacje i wywołujących.

  • get_task_context

    Użyj go do promptów takich jak „Prześledź, jak zdarzenie zamówienia dociera do zapisu w księdze”.