놀이터 | 튜토리얼 | 문서
GritQL은 소스 코드를 검색하고 수정하기 위한 선언적 쿼리 언어입니다.
문서나 대화형 튜토리얼을 읽거나 grit --help
실행하세요.
그릿 CLI를 설치합니다:
curl -fsSL https://docs.grit.io/install | bash
원하는 패턴을 백틱 안에 넣어 모든 console.log
호출을 검색하세요.
grit apply '`console.log($_)`'
재작성을 생성하려면 =>
사용하여 console.log
winston.log
로 바꿉니다.
grit apply '`console.log($msg)` => `winston.log($msg)`'
패턴을 grit.yaml
파일에 저장하고 where 절에서 테스트 사례를 제외합니다.
cat << 'EOF' > .grit/grit.yaml
patterns:
- name: use_winston
level: error
body: |
`console.log($msg)` => `winston.log($msg)` where {
$msg <: not within or { `it($_, $_)`, `test($_, $_)`, `describe($_, $_)` }
}
EOF
grit apply use_winston
패턴을 사용자 정의 린트로 적용하려면 grit check
실행하세요.
grit check
console.log
호출을 제거합니다. `console.log($log)` => . where {
$log <: not within `try { $_ } catch { $_ }`
}
`$instance.oldMethod($args)` => `$instance.newMethod($args)` where {
$program <: contains `$instance = new TargetClass($_)`
}
더 많은 예제는 GritQL 표준 라이브러리에서 찾을 수 있습니다.
패턴을 결합하여 대규모 리팩터링을 포함한 복잡한 쿼리를 생성할 수 있습니다.
GritQL은 대규모 리팩터링 및 마이그레이션을 수행한 경험에서 비롯되었습니다.
일반적으로 마이그레이션은 문제의 범위를 파악하기 위한 탐색 작업으로 시작되며, 종종 간단한 grep 검색을 사용합니다. 시작하기 쉽지만 대부분의 마이그레이션에서는 올바른 패키지를 가져왔는지 확인하고 실행 가능한 마이그레이션 경로가 없는 경우를 제외하는 등의 추가 요구 사항이 누적됩니다.
결국 복잡한 마이그레이션은 결국 jscodeshift와 같은 도구를 사용하여 작성된 전체 codemod 프로그램이 됩니다. 여기에는 자체적인 문제가 있습니다.
GritQL은 강력한 중간 지점을 개발하려는 우리의 시도입니다.
$metavariables
사용하기만 하면 됩니다.GritQL은 모든 언어 파서에 tree-sitter를 사용하며 Rust 생태계의 이점을 크게 활용합니다.
GritQL은 MIT 라이선스로 출시됩니다.
기여를 환영합니다. 시작하려면 기여 지침을 확인하세요.
Discord 에서도 참여할 수 있습니다.