Sha256: 629cae8d9c3a03ff3d05b6fbe8c47c754467c5bc293380dbade80a332298e7ff

Contents?: true

Size: 1.79 KB

Versions: 3

Compression:

Stored size: 1.79 KB

Contents

# frozen_string_literal: true

# NodeQuery defines a node query language, which is a css like syntax for matching nodes.
#
# It supports the following selectors:
#
# * AST node type: +.class+, +.send+
# * attribute value: +.send[receiver = nil]+, +.send[message = create]+
# * attribute regex: <code>.send[key=~/\A:([^'"]+)\z/]</code>, <code>.send[key!~/\A:([^'"]+)\z/]</code>
# * attribute conditions: +.send[message != nil]+, +.send[value > 1]+, +.send[value >= 1]+, +.send[value < 1]+, +.send[value <= 1]+
# * nested attribute: +.send[caller.message = map]+, +.send[arguments.size = 2]+
# * first or last child: +.def:first-child+, +.send:last-child+
# * nth-child or nth-last-child: +.def:nth-child(2)+, +.send:nth-last-child(2)+
# * descendant: +.class .send+
# * child: +.class > .def+
# * following sibling: <code>.def:first-child + .def</code>
# * subsequnt sibling: +.def:first-child ~ .def+
# * has: +.class:has(.def)+
#
# It also supports some custom selectors:
#
# * not_has: +.class:not_has(.def)+, it's same as +:not(:has())+ in css, just to make implementation easy.
# * nested selector: +.send[arguments = [size = 2][first = .sym][last = .hash]]+
# * array value: +.send[arguments = (a b)]+
# * IN operator: +.send[message IN (try try!)]+
# * NOT IN operator: +.send[message NOT IN (create build)]+
# * INCLUDES operator: +.send[arguments INCLUDES &block]+
# * dynamic attribute value: +.hash > .pair[key={{value}}]+
#
# @example
#   # it matches methods call nodes, like `puts message` or `p message`
#   Synvert::Core::NodeQuery::Parser.parse('.send[receiver = nil][message IN (puts, p)]').query_nodes(node)
module Synvert::Core::NodeQuery
  autoload :Compiler, 'synvert/core/node_query/compiler'
  autoload :Lexer, 'synvert/core/node_query/lexer.rex'
  autoload :Parser, 'synvert/core/node_query/parser.racc'
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
synvert-core-1.3.1 lib/synvert/core/node_query.rb
synvert-core-1.3.0 lib/synvert/core/node_query.rb
synvert-core-1.2.1 lib/synvert/core/node_query.rb