Class: Rage::OpenAPI::Collector

Inherits:
Prism::Visitor
  • Object
show all
Defined in:
lib/rage/openapi/collector.rb

Overview

Collect all global comments or comments attached to methods in a class. At this point we don’t care whether these are Rage OpenAPI comments or not.

Instance Method Summary collapse

Constructor Details

#initialize(comments) ⇒ Collector

Returns a new instance of Collector.

Parameters:

  • comments (Array<Prism::InlineComment>)


9
10
11
12
# File 'lib/rage/openapi/collector.rb', line 9

def initialize(comments)
  @comments = comments.dup
  @method_comments = {}
end

Instance Method Details

#dangling_commentsObject



14
15
16
# File 'lib/rage/openapi/collector.rb', line 14

def dangling_comments
  @comments
end

#method_comments(method_name) ⇒ Object



18
19
20
# File 'lib/rage/openapi/collector.rb', line 18

def method_comments(method_name)
  @method_comments[method_name.to_s]
end

#visit_def_node(node) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/rage/openapi/collector.rb', line 22

def visit_def_node(node)
  method_comments = []
  start_line = node.location.start_line - 1

  loop do
    comment_i = @comments.find_index { |comment| comment.location.start_line == start_line }
    if comment_i
      comment = @comments.delete_at(comment_i)
      method_comments << comment
      start_line -= 1
    end

    break unless comment
  end

  @method_comments[node.name.to_s] = method_comments.reverse

  # reject comments inside methods
  @comments.reject! do |comment|
    comment.location.start_line >= node.location.start_line && comment.location.start_line <= node.location.end_line
  end
end