# encoding: utf-8 module Mutant symbolset = ->(strings) { strings.map(&:to_sym).to_set.freeze } SCOPE_OPERATOR = '::'.freeze CBASE_PATTERN = /\A#{SCOPE_OPERATOR}/.freeze # Set of nodes that cannot be on the LHS of an assignment NOT_ASSIGNABLE = symbolset.(%w[int float str dstr class module self]) # Set of op-assign types OP_ASSIGN = symbolset.call(%w[or_asgn and_asgn op_asgn]) # Set of node types that are not valid when emitted standalone NOT_STANDALONE = symbolset.(%w[ splat restarg block_pass]) INDEX_OPERATORS = symbolset.(%w[[] []=]) UNARY_METHOD_OPERATORS = symbolset.(%w[~@ +@ -@ !]) # Operators ruby implementeds as methods METHOD_OPERATORS = symbolset.(%w[ <=> === []= [] <= >= == !~ != =~ << >> ** * % / | ^ & < > + - ~@ +@ -@ ! ]) BINARY_METHOD_OPERATORS = ( METHOD_OPERATORS - (INDEX_OPERATORS + UNARY_METHOD_OPERATORS) ).to_set.freeze OPERATOR_METHODS = ( METHOD_OPERATORS + INDEX_OPERATORS + UNARY_METHOD_OPERATORS ).to_set.freeze # Nodes that are NOT handled by mutant. # # not - 1.8 only, mutant does not support 1.8 # NODE_BLACKLIST = symbolset.(%w[not]) # Nodes that are NOT generated by parser but used by mutant / unparser. NODE_EXTRA = symbolset.(%w[empty]) NODE_TYPES = ((Parser::Meta::NODE_TYPES + NODE_EXTRA) - NODE_BLACKLIST).to_set.freeze end # Mutant