Class: CodeMiner::Parser

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from AssignmentProcessor

#on_assign, #on_massign, #on_opassign

Methods included from CallProcessor

#on_aref, #on_aref_field, #on_call, #on_fcall, #on_vcall

Methods included from ClassProcessor

#on_class, #on_module, #on_sclass

Methods included from MethodProcessor

#on_arg_paren, #on_blockarg, #on_brace_block, #on_def, #on_defs, #on_do_block, #on_lambda, #on_method_add_arg, #on_method_add_block, #on_tlambda

Methods included from RegexpProcessor

#on_regexp_add, #on_regexp_beg, #on_regexp_literal, #on_regexp_new

Methods included from TokenProcessor

#on_kw, #on_lbrace, #on_lbracket, #on_lparen, tokens

Methods included from StringProcessor

#on_embexpr_beg, #on_heredoc_beg, #on_heredoc_end, #on_string_add, #on_string_concat, #on_string_content, #on_string_embexpr, #on_string_literal, #on_tstring_beg, #on_tstring_content, #on_tstring_end, #on_xstring_add, #on_xstring_literal, #on_xstring_new

Methods included from ConditionProcessor

#on_case, #on_else, #on_elsif, #on_if, #on_if_mod, #on_ifop, #on_unless, #on_unless_mod, #on_when

Methods included from BinaryProcessor

#on_binary

Methods included from ReturnProcessor

#on_return, #on_return0

Methods included from ParamsProcessor

#on_block_var, #on_mlhs_add, #on_mlhs_new, #on_mlhs_paren, #on_mrhs_add, #on_mrhs_add_star, #on_mrhs_new, #on_mrhs_new_from_args, #on_params, #on_paren, #on_rest_param

Methods included from ArgumentProcessor

#on_args_add, #on_args_add_block, #on_args_add_star, #on_args_new

Methods included from HashProcessor

#on_assoc_new, #on_assoclist_from_args, #on_bare_assoc_hash, #on_hash, #on_label

Methods included from SymbolProcessor

#on_dyna_symbol, #on_symbeg, #on_symbol, #on_symbol_literal

Methods included from VariableProcessor

#on_backref, #on_const_path_ref, #on_cvar, #on_field, #on_gvar, #on_ivar, #on_top_const_ref, #on_var_ref

Methods included from ArrayProcessor

#on_array, #on_qsymbols_add, #on_qsymbols_beg, #on_qsymbols_new, #on_qwords_add, #on_qwords_beg, #on_qwords_new, #on_symbols_add, #on_symbols_beg, #on_symbols_new, #on_word_add, #on_word_new, #on_words_add, #on_words_beg, #on_words_new

Methods included from CommandProcessor

#on_command, #on_command_call

Methods included from LoopProcessor

#on_for, #on_until, #on_until_mod, #on_while, #on_while_mod

Methods included from RangeProcessor

#on_dot2, #on_dot3

Constructor Details

#initialize(src, *args) ⇒ Parser

Returns a new instance of Parser.



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/codeminer/parser.rb', line 39

def initialize(src, *args)
  @src = src
  @keywords = []
  @begin_regex = []
  @embexpr = []
  @string_begin = []
  @string_end = []
  @symbol_begin = []
  @string_content = []
  @parens_begin = []
  @qwords = []
  @qsymbols = []
  @lambda = []
  @symbols = []
  @words = []
  @processors = []
  @lbrace = []
  @formatters = {}
  super
end

Instance Attribute Details

#formattersObject

Returns the value of attribute formatters.



37
38
39
# File 'lib/codeminer/parser.rb', line 37

def formatters
  @formatters
end

#processorsObject

Returns the value of attribute processors.



37
38
39
# File 'lib/codeminer/parser.rb', line 37

def processors
  @processors
end

Class Method Details

.process(rb, processors) ⇒ Object



60
61
62
63
64
65
# File 'lib/codeminer/parser.rb', line 60

def self.process(rb, processors)
  parser = new(rb).extend(ExpressionProcessor)
  parser.processors = processors
  parser.parse
  processors
end

.sexp(rb, formatters = {}) ⇒ Object



67
68
69
70
71
# File 'lib/codeminer/parser.rb', line 67

def self.sexp(rb, formatters={})
  parser = new(rb).extend(SexpProcessor)
  parser.formatters = formatters
  parser.parse
end

Instance Method Details

#compile_error(msg) ⇒ Object



173
174
175
# File 'lib/codeminer/parser.rb', line 173

def compile_error(msg)
  raise CodeMiner::ParseError, msg
end

#on_alias(left, right) ⇒ Object



99
100
101
# File 'lib/codeminer/parser.rb', line 99

def on_alias(left, right)
  AliasExpression.new(left, right, extract_src_by_token(pop_keyword('alias')))
end

#on_begin(body) ⇒ Object



128
129
130
# File 'lib/codeminer/parser.rb', line 128

def on_begin(body)
  BeginExpression.new(body, extract_src_by_token(pop_keyword('begin')))
end

#on_bodystmt(body, rescue_exp, else_exp, ensure_exp) ⇒ Object



143
144
145
# File 'lib/codeminer/parser.rb', line 143

def on_bodystmt(body, rescue_exp, else_exp, ensure_exp)
  BodystmtExpression.new(body, rescue_exp, else_exp, ensure_exp, src: extract_src_by_tokens(body, body))
end

#on_break(args) ⇒ Object



73
74
75
# File 'lib/codeminer/parser.rb', line 73

def on_break(args)
  BreakExpression.new(args, extract_src_by_token(pop_keyword('break')))
end

#on_defined(body) ⇒ Object



156
157
158
# File 'lib/codeminer/parser.rb', line 156

def on_defined(body)
  DefinedExpression.new(body, extract_src_by_tokens(pop_keyword('defined?'),body))
end

#on_ensure(body) ⇒ Object



139
140
141
# File 'lib/codeminer/parser.rb', line 139

def on_ensure(body)
  EnsureExpression.new(body, extract_src_by_tokens(pop_keyword('ensure'), body))
end

#on_intObject



115
116
117
118
# File 'lib/codeminer/parser.rb', line 115

def on_int(*)
  token = super
  IntExpression.new(token, extract_src_by_tokens(token))
end

#on_magic_comment(key, value) ⇒ Object



169
170
171
# File 'lib/codeminer/parser.rb', line 169

def on_magic_comment(key, value)
  MagicCommentExpression.new(key, value, extract_src(lineno(), column()))
end

#on_next(args) ⇒ Object



77
78
79
# File 'lib/codeminer/parser.rb', line 77

def on_next(args)
  NextExpression.new(args, extract_src_by_token(pop_keyword('next')))
end

#on_operator_ambiguous(value, msg) ⇒ Object



164
165
166
167
# File 'lib/codeminer/parser.rb', line 164

def on_operator_ambiguous(value, msg)
  token = Token.new(:op, value.to_s, extract_src_by_value(value))
  AmbiguousOperatorExpression.new(token, msg, extract_src_by_token(token))
end

#on_program(body) ⇒ Object



160
161
162
# File 'lib/codeminer/parser.rb', line 160

def on_program(body)
  RootExpression.new(body, @src)
end

#on_redoObject



81
82
83
# File 'lib/codeminer/parser.rb', line 81

def on_redo
  RedoExpression.new(extract_src_by_token(pop_keyword('redo')))
end

#on_rescue(constants, assign, body, d) ⇒ Object



132
133
134
135
136
137
# File 'lib/codeminer/parser.rb', line 132

def on_rescue(constants, assign, body, d)
  constants ||= []
  rescue_body = RescueBodyExpression.wrap(body)
  src = extract_src_by_tokens(pop_keyword('rescue'), rescue_body)
  RescueExpression.new(constants.each.to_a, assign, rescue_body, d, src)
end

#on_retryObject



85
86
87
# File 'lib/codeminer/parser.rb', line 85

def on_retry
  RetryExpression.new(extract_src_by_token(pop_keyword('retry')))
end

#on_stmts_add(body, statement) ⇒ Object



151
152
153
154
# File 'lib/codeminer/parser.rb', line 151

def on_stmts_add(body, statement)
  assert body.kind_of?(BodyExpression), "Expected body #{body} to be type of BodyExpression"
  body.add(statement)
end

#on_stmts_newObject



147
148
149
# File 'lib/codeminer/parser.rb', line 147

def on_stmts_new
  BodyExpression.new(extract_src(lineno(), column()))
end

#on_super(body) ⇒ Object



94
95
96
97
# File 'lib/codeminer/parser.rb', line 94

def on_super(body)
  token = pop_keyword('super')
  SuperExpression.new(body, extract_src_by_tokens(*[token, body].compact))
end

#on_unary(value, receiver) ⇒ Object



120
121
122
# File 'lib/codeminer/parser.rb', line 120

def on_unary(value, receiver)
  UnaryExpression.new(value.to_s.chomp('@'), receiver, extract_src(receiver.line, receiver.column - value.length - unary_offset(value), receiver.end_line, receiver.end_column))
end

#on_undef(symbols) ⇒ Object



111
112
113
# File 'lib/codeminer/parser.rb', line 111

def on_undef(symbols)
  UndefExpression.new(symbols, extract_src_by_token(pop_keyword('undef')))
end

#on_void_stmtObject



124
125
126
# File 'lib/codeminer/parser.rb', line 124

def on_void_stmt
  VoidExpression.new(extract_src(lineno(), column()))
end

#on_yield(args) ⇒ Object



103
104
105
# File 'lib/codeminer/parser.rb', line 103

def on_yield(args)
  YieldExpression.new(args, extract_src_by_token(pop_keyword('yield')))
end

#on_yield0Object



107
108
109
# File 'lib/codeminer/parser.rb', line 107

def on_yield0
  YieldExpression.new(nil, extract_src_by_token(pop_keyword('yield')))
end

#on_zsuperObject



89
90
91
92
# File 'lib/codeminer/parser.rb', line 89

def on_zsuper
  token = pop_keyword('super')
  SuperExpression.new(nil, extract_src_by_token(token))
end