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

Canonical source: https://maguyva.ai/pl/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 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.

## Migawka wsparcia

- Poziom: Obsługa AST i symboli
- Programowanie
- Rozszerzenia: .sc, .scala
- Prawdziwe parsowanie AST dla wyszukiwania świadomego składni i kontekstu strukturalnego.
- Nazwane symbole zasilają wyszukiwanie semantyczne i wzajemne odwołania. Nawigacja po grafie jest dostępna po włączeniu ekstrakcji relacji.
- Ten język dostarcza symbole i relacje do wyszukiwania uwzględniającego graf; obsługiwane typy krawędzi zależą od jego rodzimych konstrukcji.
- Dostępne są zarówno parsowanie AST, jak i ekstrakcja symboli.

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

## 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](/pl/docs/quickstart), a potem sprawdź macierz obsługi na [stronie zgodności](/pl/docs/compatibility). W przypadku mieszanych baz kodu JVM przeczytaj też [przewodnik po Javie](/pl/languages/java) i [przewodnik po Kotlinie](/pl/languages/kotlin).

## 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”.
