Class: Ibex::Frontend::RuleDocumentation

Inherits:
Object
  • Object
show all
Defined in:
lib/ibex/frontend/rule_documentation.rb

Overview

Attaches immediately preceding lossless line-comment blocks to parsed rules.

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(document) ⇒ RuleDocumentation

Returns a new instance of RuleDocumentation.



16
17
18
19
20
21
# File 'lib/ibex/frontend/rule_documentation.rb', line 16

def initialize(document)
  @segments_by_line = index_segments(document) #: Hash[Integer, Array[Segment]]
  @inline_lines = document.tokens.filter_map do |token|
    token.location.line if token.type == :inline
  end #: Array[Integer]
end

Class Method Details

.enrich(node, document) ⇒ Object



11
12
13
# File 'lib/ibex/frontend/rule_documentation.rb', line 11

def self.enrich(node, document)
  new(document).enrich(node)
end

Instance Method Details

#enrich(node) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
# File 'lib/ibex/frontend/rule_documentation.rb', line 24

def enrich(node)
  rules = node.rules.map { |rule| documented_rule(rule) }
  if node.is_a?(AST::Root)
    AST::Root.new(
      class_name: node.class_name, superclass: node.superclass, declarations: node.declarations,
      rules: rules, user_code: node.user_code, loc: node.loc, extended: node.extended, cst: node.cst
    )
  else
    AST::Fragment.new(declarations: node.declarations, rules: rules, loc: node.loc)
  end
end