gogrep
1.0.0
GO111MODULE=on go get mvdan.cc/gogrep
ابحث عن كود Go باستخدام أشجار بناء الجملة.
gogrep -x 'if $x != nil { return $x, $*_ }'
لاحظ أن هذا المشروع لم يعد قيد التطوير . انظر رقم 64 لمزيد من التفاصيل.
usage: gogrep commands [packages]
الأمر على شكل "-A Pattern"، حيث -A هو أحد:
-x find all nodes matching a pattern
-g discard nodes not matching a pattern
-v discard nodes matching a pattern
-a filter nodes by certain attributes
-s substitute with a given syntax tree
-w write source back to disk or stdout
النمط هو جزء من كود Go والذي قد يتضمن أحرف البدل. يمكن أن يكون:
a statement (many if split by semicolons)
an expression (many if split by commas)
a type expression
a top-level declaration (var, func, const)
an entire file
تتكون أحرف البدل من $
واسم. يجب أن تتطابق كافة أحرف البدل التي لها نفس الاسم داخل التعبير مع نفس العقدة، باستثناء "_". مثال:
$x.$_ = $x // assignment of self to a field in self
إذا كانت *
قبل الاسم، فسوف تتطابق مع أي عدد من العقد. مثال:
fmt.Fprintf(os.Stdout, $*_) // all Fprintfs on stdout
*
يمكن استخدامه أيضًا لمطابقة العقد الاختيارية، مثل:
for $*_ { $*_ } // will match all for loops
if $*_; $b { $*_ } // will match all ifs with condition $b
ستتم طباعة العقد الناتجة عن تطبيق الأوامر سطرًا تلو الآخر إلى الإخراج القياسي.
فيما يلي مثالان بسيطان للمعامل -a:
gogrep -x '$x + $y' // will match both numerical and string "+" operations
gogrep -x '$x + $y' -a 'type(string)' // matches only string concatenations