节点模式 Rubocop
Node Pattern Rubocop
无法弄清楚如何匹配枚举选项的节点模式。
我要匹配的代码,具有前缀的枚举:true(或范围:对于更高版本为 true):
enum bla: { active: 0, not_active: 1 }, _prefix:true
将得到 node 作为:
ruby-parse -e 'enum bla: { active: 0, not_active: 1 }, _prefix:true'
(send nil :enum
(hash
(pair
(sym :bla)
(hash
(pair
(sym :active)
(int 0))
(pair
(sym :not_active)
(int 1))))
(pair
(sym :_prefix)
(true))))
我的模式:
'(send nil? :enum (hash (pair (sym {:_prefix :true}))))'
尝试了一堆没有sym和nil/_的版本。
我在这个匹配中做错了什么?是否需要跳过前缀节点之前的节点?[=13=]
您想使用 any order <>
进行关键字参数查找:
(send nil? :enum (hash <(pair (sym :_prefix) true) ...>))
此外,此模式中的 true
表示节点为 true_type?
,因此节点对应于 Ruby 中的文字 true
。
可以看到it in action
无法弄清楚如何匹配枚举选项的节点模式。
我要匹配的代码,具有前缀的枚举:true(或范围:对于更高版本为 true):
enum bla: { active: 0, not_active: 1 }, _prefix:true
将得到 node 作为:
ruby-parse -e 'enum bla: { active: 0, not_active: 1 }, _prefix:true'
(send nil :enum
(hash
(pair
(sym :bla)
(hash
(pair
(sym :active)
(int 0))
(pair
(sym :not_active)
(int 1))))
(pair
(sym :_prefix)
(true))))
我的模式:
'(send nil? :enum (hash (pair (sym {:_prefix :true}))))'
尝试了一堆没有sym和nil/_的版本。
我在这个匹配中做错了什么?是否需要跳过前缀节点之前的节点?[=13=]
您想使用 any order <>
进行关键字参数查找:
(send nil? :enum (hash <(pair (sym :_prefix) true) ...>))
此外,此模式中的 true
表示节点为 true_type?
,因此节点对应于 Ruby 中的文字 true
。
可以看到it in action