Class: Ruby::Rego::Parser::BracketMatcher

Inherits:
Object
  • Object
show all
Defined in:
lib/ruby/rego/parser/rules.rb

Overview

Finds matching closing brackets for rule head path segments.

Constant Summary collapse

BRACKET_DEPTH_DELTA =
{
  TokenType::LBRACKET => 1,
  TokenType::RBRACKET => -1
}.freeze

Instance Method Summary collapse

Constructor Details

#initialize(token_provider:) ⇒ BracketMatcher

Returns a new instance of BracketMatcher.

Parameters:

  • token_provider (#call)


361
362
363
# File 'lib/ruby/rego/parser/rules.rb', line 361

def initialize(token_provider:)
  @token_provider = token_provider
end

Instance Method Details

#matching_index(start_index) ⇒ Integer?

:reek:FeatureEnvy

Parameters:

  • start_index (Integer)

Returns:

  • (Integer, nil)


368
369
370
371
372
373
374
375
376
377
378
379
380
# File 'lib/ruby/rego/parser/rules.rb', line 368

def matching_index(start_index)
  depth = 0

  loop do
    token_type = token_provider.call(start_index).type
    return nil if token_type == TokenType::EOF

    depth += BRACKET_DEPTH_DELTA.fetch(token_type, 0)
    return start_index if token_type == TokenType::RBRACKET && depth.zero?

    start_index += 1
  end
end