遊び場 |チュートリアル |ドキュメント
GritQL は、ソース コードを検索および変更するための宣言型クエリ言語です。
ドキュメントやインタラクティブなチュートリアルを読むか、 grit --help
を実行します。
Grit 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
実行して、パターンをカスタム lint として適用します。
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 はすべての言語パーサーにツリーシッターを使用しており、Rust エコシステムから大きな恩恵を受けています。
GritQL は MIT ライセンスに基づいてリリースされています。
貢献は大歓迎です。まず、貢献ガイドラインを確認してください。
Discordに参加することもできます。