Class: SyntaxTree::Index::ParserBackend::IndexVisitor

Inherits:
Visitor show all
Defined in:
lib/syntax_tree/index.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from BasicVisitor

#visit, #visit_all, #visit_child_nodes, visit_method, visit_methods

Constructor Details

#initializeIndexVisitor

Returns a new instance of IndexVisitor.



254
255
256
257
258
# File 'lib/syntax_tree/index.rb', line 254

def initialize
  @results = []
  @nesting = []
  @statements = nil
end

Instance Attribute Details

#nestingObject (readonly)

Returns the value of attribute nesting.



252
253
254
# File 'lib/syntax_tree/index.rb', line 252

def nesting
  @nesting
end

#resultsObject (readonly)

Returns the value of attribute results.



252
253
254
# File 'lib/syntax_tree/index.rb', line 252

def results
  @results
end

#statementsObject (readonly)

Returns the value of attribute statements.



252
253
254
# File 'lib/syntax_tree/index.rb', line 252

def statements
  @statements
end

Instance Method Details

#visit_class(node) ⇒ Object



260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
# File 'lib/syntax_tree/index.rb', line 260

def visit_class(node)
  name = visit(node.constant).to_sym
  location =
    Location.new(node.location.start_line, node.location.start_column)

  results << ClassDefinition.new(
    nesting.dup,
    name,
    location,
    comments_for(node)
  )

  nesting << name
  super
  nesting.pop
end

#visit_const_ref(node) ⇒ Object



277
278
279
# File 'lib/syntax_tree/index.rb', line 277

def visit_const_ref(node)
  node.constant.value
end

#visit_def(node) ⇒ Object



281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
# File 'lib/syntax_tree/index.rb', line 281

def visit_def(node)
  name = node.name.value.to_sym
  location =
    Location.new(node.location.start_line, node.location.start_column)

  results << if node.target.nil?
    MethodDefinition.new(
      nesting.dup,
      name,
      location,
      comments_for(node)
    )
  else
    SingletonMethodDefinition.new(
      nesting.dup,
      name,
      location,
      comments_for(node)
    )
  end
end

#visit_module(node) ⇒ Object



303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
# File 'lib/syntax_tree/index.rb', line 303

def visit_module(node)
  name = visit(node.constant).to_sym
  location =
    Location.new(node.location.start_line, node.location.start_column)

  results << ModuleDefinition.new(
    nesting.dup,
    name,
    location,
    comments_for(node)
  )

  nesting << name
  super
  nesting.pop
end

#visit_program(node) ⇒ Object



320
321
322
323
# File 'lib/syntax_tree/index.rb', line 320

def visit_program(node)
  super
  results
end

#visit_statements(node) ⇒ Object



325
326
327
328
# File 'lib/syntax_tree/index.rb', line 325

def visit_statements(node)
  @statements = node
  super
end