节点模式 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