Συμβατότητα με το sg
Το vendor/bin/sg είναι ένα επίπεδο συμβατότητας τύπου ast-grep. Δέχεται τις συνηθέστερες σημαίες ast-grep και χρησιμοποιεί τον ίδιο μηχανισμό Greph\Ast\AstSearcher με το vendor/bin/greph -p. Η επαληθευμένη επιφάνεια αναπαράγεται από δοκιμαστικές εκτελέσεις με το ανάντη εκτελέσιμο sg και βρίσκεται στην ενότητα Για προχωρημένους / Πίνακας δυνατοτήτων.
Πότε να το χρησιμοποιήσετε
Χρησιμοποιήστε το περιτύλιγμα όταν:
- Έχετε ήδη κάποιο εργαλείο, πράκτορα ή σενάριο που καλεί το
sg. - Θέλετε μια άμεση αντικατάσταση που λειτουργεί σε περιβάλλοντα όπου δεν μπορείτε να εγκαταστήσετε το ίδιο το
ast-grep. - Θέλετε την ευκολία χρήσης του ast-grep σε εγκατάσταση μόνο με Composer.
Χρησιμοποιήστε το εγγενές vendor/bin/greph -p όταν:
- Γράφετε νέο κώδικα και δεν χρειάζεστε τη μορφή ast-grep CLI.
- Θέλετε το ίδιο σύνολο σημαιών με τη λειτουργία κειμένου (το εγγενές εκτελέσιμο ενοποιεί και τις δύο).
Χρήση
sg run --pattern PATTERN [options] [path...]
sg scan -p PATTERN [options] [path...]
sg rewrite -p PATTERN -r TEMPLATE [options] [path...]
Το run είναι η κανονική εντολή ast-grep. Τα scan και rewrite είναι ψευδώνυμα μόνο του περιτυλίγματος που αντιστοιχούν στη συνήθη χρήση. Μια απλή κλήση εκτελεί αναζήτηση μίας φοράς:
./vendor/bin/sg --pattern 'array($$$ITEMS)' src
Μοτίβα
Η γραμματική μοτίβων είναι ίδια με εκείνη της εγγενούς αναζήτησης AST. Δείτε την ενότητα Λειτουργίες / Αναζήτηση AST για την πλήρη αναφορά.
./vendor/bin/sg run --pattern 'array($$$ITEMS)' src
./vendor/bin/sg run --pattern '$obj->$method($$$ARGS)' src
./vendor/bin/sg run --pattern 'new $CLASS()' src
Αναδιατυπώσεις
Το περιτύλιγμα υποστηρίζει την ίδια ροή εργασίας δοκιμαστικής εκτέλεσης / διαδραστικής χρήσης / εγγραφής με την εγγενή αναδιατύπωση, με ονόματα σημαιών ast-grep:
# Preview only (default)
./vendor/bin/sg run --pattern 'array($$$ITEMS)' --rewrite '[$$$ITEMS]' src
# Apply without confirmation
./vendor/bin/sg run --pattern 'array($$$ITEMS)' --rewrite '[$$$ITEMS]' --update-all src
# Confirm each match
./vendor/bin/sg run --pattern 'array($$$ITEMS)' --rewrite '[$$$ITEMS]' --interactive src
# Wrapper-only aliases
./vendor/bin/sg rewrite -p 'array($$$ITEMS)' -r '[$$$ITEMS]' --dry-run src
./vendor/bin/sg rewrite -p 'array($$$ITEMS)' -r '[$$$ITEMS]' --interactive src
Έξοδος JSON
Το --json παράγει δεδομένα JSON σε μορφή ast-grep. Υποστηρίζονται τρία στυλ:
./vendor/bin/sg run --json --pattern 'dispatch($EVENT)' src
./vendor/bin/sg run --json=stream --pattern 'dispatch($EVENT)' src
./vendor/bin/sg run --json=compact --pattern 'dispatch($EVENT)' src
| Στυλ | Μορφή |
|---|---|
--json (προεπιλεγμένη μορφή pretty) |
Ένας πίνακας JSON με όμορφη μορφοποίηση |
--json=stream |
Μία αντιστοίχιση ανά γραμμή, με JSON οριοθετημένο από αλλαγές γραμμής |
--json=compact |
Ένας συμπαγής πίνακας JSON |
Επαληθευμένη επιφάνεια
Οι ακόλουθες σημαίες έχουν επαληθευτεί με το ανάντη εκτελέσιμο sg στον πίνακα δυνατοτήτων. Όταν μια σημαία έχει δύο γραφές (-p και --pattern, --glob και --globs), η δοκιμή χρησιμοποιεί τη μία και το περιτύλιγμα αναλύει και τις δύο ως την ίδια επιλογή.
Σημαίες μοτίβων
--pattern PATTERN(στο ανώτατο επίπεδο και μέσα στοrun)-p PATTERN(ψευδώνυμο)--rewrite TEMPLATE-r TEMPLATE--lang NAME,-l NAME
Σημαίες αντιστοίχισης
--files-with-matches--json(pretty,stream,compact)--update-all,-U
Σημαίες διάσχισης
--no-ignore hidden(συνδυασμένη μορφή)--glob GLOB,--globs GLOB
Σημαίες εργατών
-j N,--threads N
Αποδεκτές χωρίς δοκιμή
Το περιτύλιγμα δέχεται επίσης τις εξής σημαίες, αλλά δεν καλύπτονται ακόμη από δοκιμή του πίνακα δυνατοτήτων:
--no-ignoreμεμονωμένα ή με τιμή διαφορετική απόhidden--type NAME,--type-not NAME
Πρόσθετες λειτουργίες μόνο του περιτυλίγματος
Το περιτύλιγμα παρέχει ορισμένα βοηθητικά εργαλεία που δεν διαθέτει το ίδιο το ast-grep:
- Ψευδώνυμα
scanκαιrewriteγια τοrun - Σημαία
--hidden(το ast-grep την ενσωματώνει στο--no-ignore hidden) - Ψευδώνυμο
--dry-runγια προεπισκόπηση αναδιατύπωσης - Ροή επιβεβαίωσης αναδιατύπωσης
--interactive
Περιορισμοί
Το περιτύλιγμα sg του Greph καλύπτει τις λειτουργίες δομικής αναζήτησης και αναδιατύπωσης που χρησιμοποιούν τα περισσότερα εργαλεία και οι πράκτορες. Προς το παρόν δεν παρέχει τις εξής λειτουργίες ast-grep:
- Αρχεία κανόνων YAML (
--rule,--config) - Σάρωση πολλών γλωσσών πέρα από την PHP
- Μετασχηματιστές που δεν βασίζονται σε μοτίβα (
--debug-query,--inspect) - Ενσωμάτωση LSP
Αν συναντήσετε σημαία που λείπει, αναφέρετε το πρόβλημα μαζί με τη δοκιμή που εκτελέσατε στο ανάντη sg και την αναμενόμενη έξοδο.
Ισοτιμία συμπεριφοράς
Το περιτύλιγμα επιδιώκει ισοτιμία συμπεριφοράς, όχι ισοτιμία byte. Η έξοδος είναι σημασιολογικά ισοδύναμη, αλλά μπορεί να διαφέρει σε αισθητικές λεπτομέρειες. Οι δοκιμές του πίνακα δυνατοτήτων ελέγχουν την ισοδυναμία των πεδίων που αφορούν τον αναλυτή (διαδρομή αρχείου, αριθμός γραμμής, καταγεγραμμένος κώδικας, καταγραφές, μορφή JSON), όχι της ροής byte.