Μετάβαση στο περιεχόμενο

Συμβατότητα με το 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.