Maguyva의 PHP 지원: 무작정 수정 없이 오래된 웹 앱 다루기
PHP 코드베이스가 여전히 매출을 내고 있지만, 누구도 에이전트가 제멋대로 손대는 것을 원하지 않을 때 유용합니다.
확장자
.php, .php3, .php4, .php5, +2개 더보기
Ruby는 관례와 메타프로그래밍에 크게 기댑니다. 메서드는 attr_accessor로 생성되고, 클래스는 다른 파일에서 다시 열리며, 네임스페이스는 여러 단계의 모듈로 중첩됩니다. 읽기 쉬운 표면 뒤에서 호출이 실제로 어느 메서드에 닿는지가 가려지고, 무딘 텍스트 검색은 앱 안의 모든 call과 perform을 돌려줍니다.
Maguyva는 클래스, 모듈, 메서드, 그리고 그 호출자를 구조로 에이전트에게 건네므로, 추측하지 않고 앱 전체에서 변경을 따라갈 수 있습니다.
Maguyva는 .rb, .rbw, .rake, .gemspec 파일과 함께 Gemfile과 Rakefile을 지원합니다. 인스턴스 메서드와 싱글턴 메서드(def self.call)가 추출되며, 싱글턴 메서드는 static으로 표시됩니다. attr_reader, attr_writer, attr_accessor 선언은 접근자 메서드로 계산되고, 심볼은 모듈과 클래스 네임스페이스로 한정됩니다.
ClassName.new와 Namespace::ClassName.new는 인스턴스화로 계산되고, 리시버 타입 추론은 지역 대입과 @instance_variables를 따라가므로, 대입된 객체에 대한 호출을 그 클래스로 해석할 수 있습니다. 그래프에는 상속, 모듈 포함, 오버라이드, raise와 rescue 엣지, 읽기와 쓰기도 기록됩니다.
메타프로그래밍 호출(define_method, send, method_missing, class_eval 등), Sorbet의 T:: 타입 헬퍼, 흔한 Enumerable 호출(each, collect, reject 등)은 관계에서 걸러지므로 애플리케이션 코드가 더 잘 드러납니다.
Billing::ChargeCustomer.call을 누가 호출하고, 어떤 잡과 컨트롤러에서 호출하나요?” (find_symbol, 그다음 dependency_search incoming)ApplicationRecord를 상속하고 Auditable을 include하는 모델은 무엇인가요?” (dependency_search)get_task_context)require와 load는 일반 메서드 호출이므로, structural_search의 imports 프리셋은 아무것도 선택하지 않습니다. 이들을 나열하려면 text_pattern_search를 사용하세요.define_method로 런타임에 만들어지거나 method_missing이 처리하는 메서드는 심볼로 추출되지 않으며, 그런 호출은 메타프로그래밍 잡음으로 걸러집니다.빠른 시작으로 저장소를 연결한 다음, 호환성 페이지에서 지원 매트릭스를 확인하세요. 다른 동적 언어 저장소라면 Python 가이드와 비교해 보세요.
가장 적합한 경우
에이전트 워크플로
엔진 세부 정보
유용한 MCP 진입점
`Billing::ChargeCustomer.call` 같은 네임스페이스가 붙은 클래스, 모듈, 메서드에 쓰세요.
변경 전에 모델이나 서비스 객체에 incoming 탐색을 써서 호출자와 서브클래스를 확인하세요.
`require` 경로, 라우트 문자열, 그래프가 볼 수 없는 동적으로 정의된 메서드에 쓰세요.
관련 가이드
PHP 코드베이스가 여전히 매출을 내고 있지만, 누구도 에이전트가 제멋대로 손대는 것을 원하지 않을 때 유용합니다.
확장자
.php, .php3, .php4, .php5, +2개 더보기
Python 코드베이스가 서비스, 스크립트, 타입 스텁, 운영용 연결 코드 전반에 뻗어 있을 때 유용합니다.
확장자
.py, .pyi, .pyw