Class: RBS::InlineParser::CommentAssociation
| Relationships & Source Files | |
| Namespace Children | |
|
Classes:
| |
| Inherits: | Object |
| Defined in: | lib/rbs/inline_parser/comment_association.rb |
Class Method Summary
Instance Attribute Summary
- #associated_blocks readonly
- #blocks readonly
- #end_line_map readonly
- #start_line_map readonly
Instance Method Summary
Constructor Details
.new(blocks) ⇒ CommentAssociation
# File 'lib/rbs/inline_parser/comment_association.rb', line 8
def initialize(blocks) @blocks = blocks.sort_by {|block| block.start_line } @associated_blocks = Set[].compare_by_identity @start_line_map = {} @end_line_map = {} blocks.each do |block| if block.leading? end_line_map[block.end_line] = block else start_line_map[block.start_line] = block end end end
Class Method Details
.build(buffer, result)
[ GitHub ]Instance Attribute Details
#associated_blocks (readonly)
[ GitHub ]# File 'lib/rbs/inline_parser/comment_association.rb', line 6
attr_reader :blocks, :associated_blocks, :start_line_map, :end_line_map
#blocks (readonly)
[ GitHub ]# File 'lib/rbs/inline_parser/comment_association.rb', line 6
attr_reader :blocks, :associated_blocks, :start_line_map, :end_line_map
#end_line_map (readonly)
[ GitHub ]# File 'lib/rbs/inline_parser/comment_association.rb', line 6
attr_reader :blocks, :associated_blocks, :start_line_map, :end_line_map
#start_line_map (readonly)
[ GitHub ]# File 'lib/rbs/inline_parser/comment_association.rb', line 6
attr_reader :blocks, :associated_blocks, :start_line_map, :end_line_map
Instance Method Details
#each_enclosed_block(node)
[ GitHub ]# File 'lib/rbs/inline_parser/comment_association.rb', line 84
def each_enclosed_block(node) if block_given? start_line = node.location.start_line end_line = node.location.end_line if start_line+1 < end_line ((start_line + 1)...end_line).each do |line| if block = end_line_map.fetch(line, nil) unless associated_blocks.include?(block) associated_blocks << block yield block end end end end else enum_for :each_enclosed_block, node end end
#each_unassociated_block
[ GitHub ]# File 'lib/rbs/inline_parser/comment_association.rb', line 104
def each_unassociated_block if block_given? blocks.each do |block| unless associated_blocks.include?(block) yield block end end else enum_for :each_unassociated_block end end
#leading_block(node)
[ GitHub ]# File 'lib/rbs/inline_parser/comment_association.rb', line 47
def leading_block(node) start_line = node.location.start_line if block = end_line_map.fetch(start_line - 1, nil) Reference.new(block, associated_blocks) end end
#leading_block!(node)
[ GitHub ]# File 'lib/rbs/inline_parser/comment_association.rb', line 55
def leading_block!(node) if ref = leading_block(node) unless ref.associated? ref.associate!.block end end end
#trailing_block(node)
[ GitHub ]# File 'lib/rbs/inline_parser/comment_association.rb', line 63
def trailing_block(node) location = if node.is_a?(Prism::Node) node.location else node end #: Prism::Location end_line = location.end_line if block = start_line_map.fetch(end_line, nil) Reference.new(block, associated_blocks) end end
#trailing_block!(node)
[ GitHub ]# File 'lib/rbs/inline_parser/comment_association.rb', line 76
def trailing_block!(node) if ref = trailing_block(node) unless ref.associated? ref.associate!.block end end end