# Maguyva의 Dart 지원: Flutter와 Dart 앱을 위한 코드 그래프

Canonical source: https://maguyva.ai/ko/languages/dart

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는 AST, 심볼, 그래프로 Dart를 지원하여, AI 에이전트가 Flutter와 Dart 코드 전반에서 클래스, 믹스인, 확장, 생성자를 따라갈 수 있게 합니다.

## 지원 현황 요약

- 등급: AST 및 심볼 지원
- 프로그래밍
- 확장자: .dart
- 구문 인식 검색과 구조적 컨텍스트를 위한 실제 AST 파싱을 제공합니다.
- 이름이 지정된 심볼은 시맨틱 조회와 상호 참조에 활용됩니다. 관계 추출이 활성화된 경우 그래프 내비게이션을 사용할 수 있습니다.
- 이 언어는 그래프 인식 검색에 심볼과 관계를 제공합니다. 지원되는 에지 유형은 언어 고유의 구문 구조에 따라 다릅니다.
- AST 파싱과 심볼 추출을 모두 지원합니다.

## 가장 적합한 경우

- 위젯, 상태 클래스, 리포지토리, 서비스가 많은 파일에 걸쳐 서로 호출하는 Flutter 앱.
- 믹스인과 확장 메서드로 다른 곳에서 정의된 타입에 동작을 더하는 Dart 패키지.
- Flutter 클라이언트와 모델을 공유하는 서버 측 및 명령줄 Dart.

## 에이전트 워크플로

- 리포지토리나 서비스 메서드의 API를 바꾸기 전에 모든 호출자를 찾습니다.
- 인터페이스에 멤버를 추가하기 전에 그 인터페이스를 구현하는 클래스를 나열합니다.
- 위젯의 탭이 네트워크 계층까지 어떻게 이어지는지 추적합니다.

## Dart가 얕은 AI 도구를 넘어뜨리는 지점

Dart는 하나의 타입을 여러 구문에 나누어 담습니다. 클래스는 하나의 기반 클래스를 상속하고, 여러 인터페이스를 구현하고, `with` 믹스인으로 동작을 섞어 넣을 수 있습니다. 확장 메서드는 다른 곳에서 정의된 타입에 멤버를 붙이고, 명명된 생성자와 `factory` 생성자는 실제로 어떤 클래스가 만들어지는지 숨깁니다. 텍스트 검색은 이름은 찾아도 그 뒤의 구조는 찾지 못합니다.

Maguyva는 에이전트에게 그 구조를 제공하므로, 에이전트가 위젯에서 의존하는 서비스까지 변경 사항을 따라갈 수 있습니다.

## Maguyva가 Dart에서 추출하는 것

Maguyva는 `.dart` 파일을 지원합니다. 클래스, 믹스인, 확장은 타입으로 추출됩니다. `structural_search`의 `functions` 프리셋은 함수, 메서드, 로컬 함수, 람다, 그리고 생성형, `const`, `factory` 생성자를 다룹니다. 시그니처에는 선택적 위치 매개변수 그룹과 명명된 매개변수 그룹, `static` 멤버가 기록되고, 정의 이름에서는 끝의 `?`와 `!`가 제거됩니다.

임포트는 `import`, `part`, `library` 지시문을 정규화하고 `show`, `hide`, `as` 절을 제거합니다. `import 'package:http/http.dart' as http` 뒤의 `http.get`처럼 임포트 접두사를 통한 호출은 그래프에 남습니다.

리시버 타입 추론은 매개변수, 타입이 지정되거나 초기화된 변수, 게터, 그리고 리스트, 세트, 이터러블을 도는 `for`-`in` 루프를 따라가며, `var`와 `dynamic`는 추론된 타입으로 취급합니다. 상속된 멤버를 해석할 때는 `extends`, `implements`, `with` 절을 따라갑니다. 그래프에는 인스턴스화, 타입 참조, 읽기와 쓰기, 예외 엣지도 기록됩니다.

## 에이전트 프롬프트 예시

- "`CartRepository.addItem`를 누가 호출하고, 어떤 위젯에서 호출하나요?" (`find_symbol`, 그다음 `dependency_search` incoming)
- "`PaymentGateway`를 구현하는 클래스는 무엇인가요?" (`dependency_search`)
- "결제 버튼이 결제 API까지 어떻게 이어지는지 추적해 줘." (`get_task_context`)

## 알려진 한계

- 약 200개의 Dart 코어 라이브러리 이름은 관계에서 걸러집니다. `map`, `where`, `forEach` 같은 컬렉션 헬퍼, `then`와 `listen` 같은 `Future` 및 `Stream` 메서드, 그리고 `dart:` 라이브러리가 여기에 포함됩니다. 이런 호출에는 `text_pattern_search`를 사용하세요.
- Dart의 시그니처 노드는 본문을 형제 노드로 두기 때문에, `structural_search` 결과에서 로컬 함수나 람다가 그것을 포함하는 호출 가능 항목과 겹칠 수 있고, 게터와 세터는 메서드 시그니처로 표시됩니다.

## 다음 단계

[빠른 시작](/ko/docs/quickstart)으로 저장소를 연결한 다음, [호환성 페이지](/ko/docs/compatibility)에서 지원 매트릭스를 확인하세요. 다른 모바일 코드베이스라면 [Kotlin 가이드](/ko/languages/kotlin)와 [Swift 가이드](/ko/languages/swift)를 읽어 보세요.

## 엔진 세부 정보

- Dart 지원은 `.dart`를 다룹니다. 클래스, 믹스인, 확장은 타입이며, 생성자에는 생성형, `const`, `factory` 형식이 포함됩니다.
- 임포트는 `import`, `part`, `library` 지시문을 정규화하며, 임포트 접두사를 통한 호출은 그래프에 남습니다.
- 리시버 타입 추론은 매개변수, 변수, 게터, `for`-`in` 루프를 따라가며, 약 200개의 코어 라이브러리 이름은 관계에서 걸러집니다.

## 유용한 MCP 진입점

- `find_symbol`: 위젯, 리포지토리, 서비스 클래스의 정의와 참조가 필요할 때 사용하세요.
- `dependency_search`: API를 바꾸기 전에 리포지토리 메서드나 인터페이스에 incoming 탐색을 사용해 호출자와 구현체를 확인하세요.
- `get_task_context`: "결제 버튼이 결제 API까지 어떻게 이어지는지 추적해 줘" 같은 프롬프트에 사용하세요.
