A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://ruby-syntax-tree.github.io/syntax_tree/SyntaxTree/MutationVisitor.html below:

class SyntaxTree::MutationVisitor - RDoc Documentation

  1. SyntaxTree::
  2. MutationVisitor
class SyntaxTree::MutationVisitor

This visitor walks through the tree and copies each node as it is being visited. This is useful for mutating the tree before it is formatted.

Attributes Public Class Methods

Source

def initialize
  @mutations = []
end
Public Instance Methods

Source

def mutate(query, &block)
  mutations << [Pattern.new(query).compile, block]
end

Create a new mutation based on the given query that will mutate the node using the given block. The block should return a new node that will take the place of the given node in the tree. These blocks frequently make use of the ‘copy` method on nodes to create a new node with the same properties as the original node.

Source

def visit(node)
  return unless node
  result = node.accept(self)

  mutations.each do |(pattern, mutation)|
    result = mutation.call(result) if pattern.call(result)
  end

  result
end

This is the base visit method for each node in the tree. It first creates a copy of the node using the visit_* methods defined below. Then it checks each mutation in sequence and calls it if it finds a match.

Source

def visit_BEGIN(node)
  node.copy(
    lbrace: visit(node.lbrace),
    statements: visit(node.statements)
  )
end

Visit a BEGINBlock node.

Source

def visit_CHAR(node)
  node.copy
end

Visit a CHAR node.

Source

def visit_END(node)
  node.copy(
    lbrace: visit(node.lbrace),
    statements: visit(node.statements)
  )
end

Visit a ENDBlock node.

Source

def visit___end__(node)
  node.copy
end

Visit a EndContent node.

Source

def visit_alias(node)
  node.copy(left: visit(node.left), right: visit(node.right))
end

Visit a AliasNode node.

Source

def visit_aref(node)
  node.copy(index: visit(node.index))
end

Visit a ARef node.

Source

def visit_aref_field(node)
  node.copy(index: visit(node.index))
end

Visit a ARefField node.

Source

def visit_arg_block(node)
  node.copy(value: visit(node.value))
end

Visit a ArgBlock node.

Source

def visit_arg_paren(node)
  node.copy(arguments: visit(node.arguments))
end

Visit a ArgParen node.

Source

def visit_arg_star(node)
  node.copy(value: visit(node.value))
end

Visit a ArgStar node.

Source

def visit_args(node)
  node.copy(parts: visit_all(node.parts))
end

Visit a Args node.

Source

def visit_args_forward(node)
  node.copy
end

Visit a ArgsForward node.

Source

def visit_array(node)
  node.copy(
    lbracket: visit(node.lbracket),
    contents: visit(node.contents)
  )
end

Visit a ArrayLiteral node.

Source

def visit_aryptn(node)
  node.copy(
    constant: visit(node.constant),
    requireds: visit_all(node.requireds),
    rest: visit(node.rest),
    posts: visit_all(node.posts)
  )
end

Visit a AryPtn node.

Source

def visit_assign(node)
  node.copy(target: visit(node.target))
end

Visit a Assign node.

Source

def visit_assoc(node)
  node.copy
end

Visit a Assoc node.

Source

def visit_assoc_splat(node)
  node.copy
end

Visit a AssocSplat node.

Source

def visit_backref(node)
  node.copy
end

Visit a Backref node.

Source

def visit_backtick(node)
  node.copy
end

Visit a Backtick node.

Source

def visit_bare_assoc_hash(node)
  node.copy(assocs: visit_all(node.assocs))
end

Visit a BareAssocHash node.

Source

def visit_begin(node)
  node.copy(bodystmt: visit(node.bodystmt))
end

Visit a Begin node.

Source

def visit_binary(node)
  node.copy
end

Visit a Binary node.

Source

def visit_block(node)
  node.copy(
    opening: visit(node.opening),
    block_var: visit(node.block_var),
    bodystmt: visit(node.bodystmt)
  )
end

Visit a Block node.

Source

def visit_block_var(node)
  node.copy(params: visit(node.params), locals: visit_all(node.locals))
end

Visit a BlockVar node.

Source

def visit_blockarg(node)
  node.copy(name: visit(node.name))
end

Visit a BlockArg node.

Source

def visit_bodystmt(node)
  node.copy(
    statements: visit(node.statements),
    rescue_clause: visit(node.rescue_clause),
    else_clause: visit(node.else_clause),
    ensure_clause: visit(node.ensure_clause)
  )
end

Visit a BodyStmt node.

Source

def visit_break(node)
  node.copy(arguments: visit(node.arguments))
end

Visit a Break node.

Source

def visit_call(node)
  node.copy(
    receiver: visit(node.receiver),
    operator: node.operator == :"::" ? :"::" : visit(node.operator),
    message: node.message == :call ? :call : visit(node.message),
    arguments: visit(node.arguments)
  )
end

Visit a Call node.

Source

def visit_case(node)
  node.copy(
    keyword: visit(node.keyword),
    value: visit(node.value),
    consequent: visit(node.consequent)
  )
end

Visit a Case node.

Source

def visit_class(node)
  node.copy(
    constant: visit(node.constant),
    superclass: visit(node.superclass),
    bodystmt: visit(node.bodystmt)
  )
end

Visit a ClassDeclaration node.

Source

def visit_comma(node)
  node.copy
end

Visit a Comma node.

Source

def visit_command(node)
  node.copy(
    message: visit(node.message),
    arguments: visit(node.arguments),
    block: visit(node.block)
  )
end

Visit a Command node.

Source

def visit_command_call(node)
  node.copy(
    operator: node.operator == :"::" ? :"::" : visit(node.operator),
    message: visit(node.message),
    arguments: visit(node.arguments),
    block: visit(node.block)
  )
end

Visit a CommandCall node.

Source

def visit_const(node)
  node.copy
end

Visit a Const node.

Source

def visit_const_path_field(node)
  node.copy(constant: visit(node.constant))
end

Visit a ConstPathField node.

Source

def visit_const_path_ref(node)
  node.copy(constant: visit(node.constant))
end

Visit a ConstPathRef node.

Source

def visit_const_ref(node)
  node.copy(constant: visit(node.constant))
end

Visit a ConstRef node.

Source

def visit_cvar(node)
  node.copy
end

Visit a CVar node.

Source

def visit_def(node)
  node.copy(
    target: visit(node.target),
    operator: visit(node.operator),
    name: visit(node.name),
    params: visit(node.params),
    bodystmt: visit(node.bodystmt)
  )
end

Visit a Def node.

Source

def visit_defined(node)
  node.copy
end

Visit a Defined node.

Source

def visit_dyna_symbol(node)
  node.copy(parts: visit_all(node.parts))
end

Visit a DynaSymbol node.

Source

def visit_else(node)
  node.copy(
    keyword: visit(node.keyword),
    statements: visit(node.statements)
  )
end

Visit a Else node.

Source

def visit_elsif(node)
  node.copy(
    statements: visit(node.statements),
    consequent: visit(node.consequent)
  )
end

Visit a Elsif node.

Source

def visit_embdoc(node)
  node.copy
end

Visit a EmbDoc node.

Source

def visit_embexpr_beg(node)
  node.copy
end

Visit a EmbExprBeg node.

Source

def visit_embexpr_end(node)
  node.copy
end

Visit a EmbExprEnd node.

Source

def visit_embvar(node)
  node.copy
end

Visit a EmbVar node.

Source

def visit_ensure(node)
  node.copy(
    keyword: visit(node.keyword),
    statements: visit(node.statements)
  )
end

Visit a Ensure node.

Source

def visit_excessed_comma(node)
  node.copy
end

Visit a ExcessedComma node.

Source

def visit_field(node)
  node.copy(
    operator: node.operator == :"::" ? :"::" : visit(node.operator),
    name: visit(node.name)
  )
end

Visit a Field node.

Source

def visit_float(node)
  node.copy
end

Visit a FloatLiteral node.

Source

def visit_fndptn(node)
  node.copy(
    constant: visit(node.constant),
    left: visit(node.left),
    values: visit_all(node.values),
    right: visit(node.right)
  )
end

Visit a FndPtn node.

Source

def visit_for(node)
  node.copy(index: visit(node.index), statements: visit(node.statements))
end

Visit a For node.

Source

def visit_gvar(node)
  node.copy
end

Visit a GVar node.

Source

def visit_hash(node)
  node.copy(lbrace: visit(node.lbrace), assocs: visit_all(node.assocs))
end

Visit a HashLiteral node.

Source

def visit_heredoc(node)
  node.copy(
    beginning: visit(node.beginning),
    ending: visit(node.ending),
    parts: visit_all(node.parts)
  )
end

Visit a Heredoc node.

Source

def visit_heredoc_beg(node)
  node.copy
end

Visit a HeredocBeg node.

Source

def visit_heredoc_end(node)
  node.copy
end

Visit a HeredocEnd node.

Source

def visit_hshptn(node)
  node.copy(
    constant: visit(node.constant),
    keywords:
      node.keywords.map { |label, value| [visit(label), visit(value)] },
    keyword_rest: visit(node.keyword_rest)
  )
end

Visit a HshPtn node.

Source

def visit_ident(node)
  node.copy
end

Visit a Ident node.

Source

def visit_if(node)
  node.copy(
    predicate: visit(node.predicate),
    statements: visit(node.statements),
    consequent: visit(node.consequent)
  )
end

Visit a IfNode node.

Source

def visit_if_op(node)
  node.copy
end

Visit a IfOp node.

Source

def visit_imaginary(node)
  node.copy
end

Visit a Imaginary node.

Source

def visit_in(node)
  node.copy(
    statements: visit(node.statements),
    consequent: visit(node.consequent)
  )
end

Visit a In node.

Source

def visit_int(node)
  node.copy
end

Visit a Int node.

Source

def visit_ivar(node)
  node.copy
end

Visit a IVar node.

Source

def visit_kw(node)
  node.copy
end

Visit a Kw node.

Source

def visit_kwrest_param(node)
  node.copy(name: visit(node.name))
end

Visit a KwRestParam node.

Source

def visit_label(node)
  node.copy
end

Visit a Label node.

Source

def visit_label_end(node)
  node.copy
end

Visit a LabelEnd node.

Source

def visit_lambda(node)
  node.copy(
    params: visit(node.params),
    statements: visit(node.statements)
  )
end

Visit a Lambda node.

Source

def visit_lambda_var(node)
  node.copy(params: visit(node.params), locals: visit_all(node.locals))
end

Visit a LambdaVar node.

Source

def visit_lbrace(node)
  node.copy
end

Visit a LBrace node.

Source

def visit_lbracket(node)
  node.copy
end

Visit a LBracket node.

Source

def visit_lparen(node)
  node.copy
end

Visit a LParen node.

Source

def visit_massign(node)
  node.copy(target: visit(node.target))
end

Visit a MAssign node.

Source

def visit_method_add_block(node)
  node.copy(call: visit(node.call), block: visit(node.block))
end

Visit a MethodAddBlock node.

Source

def visit_mlhs(node)
  node.copy(parts: visit_all(node.parts))
end

Visit a MLHS node.

Source

def visit_mlhs_paren(node)
  node.copy(contents: visit(node.contents))
end

Visit a MLHSParen node.

Source

def visit_module(node)
  node.copy(
    constant: visit(node.constant),
    bodystmt: visit(node.bodystmt)
  )
end

Visit a ModuleDeclaration node.

Source

def visit_mrhs(node)
  node.copy(parts: visit_all(node.parts))
end

Visit a MRHS node.

Source

def visit_next(node)
  node.copy(arguments: visit(node.arguments))
end

Visit a Next node.

Source

def visit_not(node)
  node.copy(statement: visit(node.statement))
end

Visit a Not node.

Source

def visit_op(node)
  node.copy
end

Visit a Op node.

Source

def visit_opassign(node)
  node.copy(target: visit(node.target), operator: visit(node.operator))
end

Visit a OpAssign node.

Source

def visit_params(node)
  node.copy(
    requireds: visit_all(node.requireds),
    optionals:
      node.optionals.map { |ident, value| [visit(ident), visit(value)] },
    rest: visit(node.rest),
    posts: visit_all(node.posts),
    keywords:
      node.keywords.map { |ident, value| [visit(ident), visit(value)] },
    keyword_rest:
      node.keyword_rest == :nil ? :nil : visit(node.keyword_rest),
    block: visit(node.block)
  )
end

Visit a Params node.

Source

def visit_paren(node)
  node.copy(lparen: visit(node.lparen), contents: visit(node.contents))
end

Visit a Paren node.

Source

def visit_period(node)
  node.copy
end

Visit a Period node.

Source

def visit_pinned_begin(node)
  node.copy
end

Visit a PinnedBegin node.

Source

def visit_pinned_var_ref(node)
  node.copy(value: visit(node.value))
end

Visit a PinnedVarRef node.

Source

def visit_program(node)
  node.copy(statements: visit(node.statements))
end

Visit a Program node.

Source

def visit_qsymbols(node)
  node.copy(
    beginning: visit(node.beginning),
    elements: visit_all(node.elements)
  )
end

Visit a QSymbols node.

Source

def visit_qsymbols_beg(node)
  node.copy
end

Visit a QSymbolsBeg node.

Source

def visit_qwords(node)
  node.copy(
    beginning: visit(node.beginning),
    elements: visit_all(node.elements)
  )
end

Visit a QWords node.

Source

def visit_qwords_beg(node)
  node.copy
end

Visit a QWordsBeg node.

Source

def visit_range(node)
  node.copy(
    left: visit(node.left),
    operator: visit(node.operator),
    right: visit(node.right)
  )
end

Visit a RangeNode node.

Source

def visit_rassign(node)
  node.copy(operator: visit(node.operator))
end

Visit a RAssign node.

Source

def visit_rbrace(node)
  node.copy
end

Visit a RBrace node.

Source

def visit_rbracket(node)
  node.copy
end

Visit a RBracket node.

Source

def visit_redo(node)
  node.copy
end

Visit a Redo node.

Source

def visit_regexp_beg(node)
  node.copy
end

Visit a RegexpBeg node.

Source

def visit_regexp_content(node)
  node.copy(parts: visit_all(node.parts))
end

Visit a RegexpContent node.

Source

def visit_regexp_end(node)
  node.copy
end

Visit a RegexpEnd node.

Source

def visit_regexp_literal(node)
  node.copy(parts: visit_all(node.parts))
end

Visit a RegexpLiteral node.

Source

def visit_rescue(node)
  node.copy(
    keyword: visit(node.keyword),
    exception: visit(node.exception),
    statements: visit(node.statements),
    consequent: visit(node.consequent)
  )
end

Visit a Rescue node.

Source

def visit_rescue_ex(node)
  node.copy(variable: visit(node.variable))
end

Visit a RescueEx node.

Source

def visit_rescue_mod(node)
  node.copy
end

Visit a RescueMod node.

Source

def visit_rest_param(node)
  node.copy(name: visit(node.name))
end

Visit a RestParam node.

Source

def visit_retry(node)
  node.copy
end

Visit a Retry node.

Source

def visit_return(node)
  node.copy(arguments: visit(node.arguments))
end

Visit a Return node.

Source

def visit_rparen(node)
  node.copy
end

Visit a RParen node.

Source

def visit_sclass(node)
  node.copy(bodystmt: visit(node.bodystmt))
end

Visit a SClass node.

Source

def visit_statements(node)
  node.copy(body: visit_all(node.body))
end

Visit a Statements node.

Source

def visit_string_concat(node)
  node.copy(left: visit(node.left), right: visit(node.right))
end

Visit a StringConcat node.

Source

def visit_string_content(node)
  node.copy(parts: visit_all(node.parts))
end

Visit a StringContent node.

Source

def visit_string_dvar(node)
  node.copy(variable: visit(node.variable))
end

Visit a StringDVar node.

Source

def visit_string_embexpr(node)
  node.copy(statements: visit(node.statements))
end

Visit a StringEmbExpr node.

Source

def visit_string_literal(node)
  node.copy(parts: visit_all(node.parts))
end

Visit a StringLiteral node.

Source

def visit_super(node)
  node.copy(arguments: visit(node.arguments))
end

Visit a Super node.

Source

def visit_symbeg(node)
  node.copy
end

Visit a SymBeg node.

Source

def visit_symbol_content(node)
  node.copy(value: visit(node.value))
end

Visit a SymbolContent node.

Source

def visit_symbol_literal(node)
  node.copy(value: visit(node.value))
end

Visit a SymbolLiteral node.

Source

def visit_symbols(node)
  node.copy(
    beginning: visit(node.beginning),
    elements: visit_all(node.elements)
  )
end

Visit a Symbols node.

Source

def visit_symbols_beg(node)
  node.copy
end

Visit a SymbolsBeg node.

Source

def visit_tlambda(node)
  node.copy
end

Visit a TLambda node.

Source

def visit_tlambeg(node)
  node.copy
end

Visit a TLamBeg node.

Source

def visit_top_const_field(node)
  node.copy(constant: visit(node.constant))
end

Visit a TopConstField node.

Source

def visit_top_const_ref(node)
  node.copy(constant: visit(node.constant))
end

Visit a TopConstRef node.

Source

def visit_tstring_beg(node)
  node.copy
end

Visit a TStringBeg node.

Source

def visit_tstring_content(node)
  node.copy
end

Visit a TStringContent node.

Source

def visit_tstring_end(node)
  node.copy
end

Visit a TStringEnd node.

Source

def visit_unary(node)
  node.copy
end

Visit a Unary node.

Source

def visit_undef(node)
  node.copy(symbols: visit_all(node.symbols))
end

Visit a Undef node.

Source

def visit_unless(node)
  node.copy(
    predicate: visit(node.predicate),
    statements: visit(node.statements),
    consequent: visit(node.consequent)
  )
end

Visit a UnlessNode node.

Source

def visit_until(node)
  node.copy(
    predicate: visit(node.predicate),
    statements: visit(node.statements)
  )
end

Visit a UntilNode node.

Source

def visit_var_field(node)
  node.copy(value: visit(node.value))
end

Visit a VarField node.

Source

def visit_var_ref(node)
  node.copy(value: visit(node.value))
end

Visit a VarRef node.

Source

def visit_vcall(node)
  node.copy(value: visit(node.value))
end

Visit a VCall node.

Source

def visit_void_stmt(node)
  node.copy
end

Visit a VoidStmt node.

Source

def visit_when(node)
  node.copy(
    arguments: visit(node.arguments),
    statements: visit(node.statements),
    consequent: visit(node.consequent)
  )
end

Visit a When node.

Source

def visit_while(node)
  node.copy(
    predicate: visit(node.predicate),
    statements: visit(node.statements)
  )
end

Visit a WhileNode node.

Source

def visit_word(node)
  node.copy(parts: visit_all(node.parts))
end

Visit a Word node.

Source

def visit_words(node)
  node.copy(
    beginning: visit(node.beginning),
    elements: visit_all(node.elements)
  )
end

Visit a Words node.

Source

def visit_words_beg(node)
  node.copy
end

Visit a WordsBeg node.

Source

def visit_xstring(node)
  node.copy(parts: visit_all(node.parts))
end

Visit a XString node.

Source

def visit_xstring_literal(node)
  node.copy(parts: visit_all(node.parts))
end

Visit a XStringLiteral node.

Source

def visit_yield(node)
  node.copy(arguments: visit(node.arguments))
end

Visit a YieldNode node.

Source

def visit_zsuper(node)
  node.copy
end

Visit a ZSuper node.


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4