본문으로 건너뛰기
cd /languages
  • 크로스플랫폼 UI
  • 프로그래밍
  • AST 및 심볼 지원

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

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

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 결과에서 로컬 함수나 람다가 그것을 포함하는 호출 가능 항목과 겹칠 수 있고, 게터와 세터는 메서드 시그니처로 표시됩니다.

다음 단계

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

가장 적합한 경우

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

에이전트 워크플로

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

엔진 세부 정보

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

유용한 MCP 진입점

  • find_symbol

    위젯, 리포지토리, 서비스 클래스의 정의와 참조가 필요할 때 사용하세요.

  • dependency_search

    API를 바꾸기 전에 리포지토리 메서드나 인터페이스에 incoming 탐색을 사용해 호출자와 구현체를 확인하세요.

  • get_task_context

    "결제 버튼이 결제 API까지 어떻게 이어지는지 추적해 줘" 같은 프롬프트에 사용하세요.