class Courgette::NameResolution

Attributes

definitions[R]

Public Class Methods

new(definitions) click to toggle source
# File lib/courgette/name_resolution.rb, line 3
def initialize definitions
  @definitions = definitions
end

Public Instance Methods

resolve(reference) click to toggle source
# File lib/courgette/name_resolution.rb, line 7
def resolve reference
  matches(reference).max do |x, y|
    x.length <=> y.length
  end
end

Private Instance Methods

match_name?(definition, reference) click to toggle source
# File lib/courgette/name_resolution.rb, line 23
def match_name? definition, reference
  definition.last == reference.name.last
end
match_scope?(definition, reference) click to toggle source
# File lib/courgette/name_resolution.rb, line 27
def match_scope? definition, reference
  (0..reference.context.length).any? do |level|
    reference.context[0...level].flatten + reference.name == definition
  end
end
matches(reference) click to toggle source
# File lib/courgette/name_resolution.rb, line 16
def matches reference
  definitions.select do |definition|
    match_name?(definition, reference) &&
      match_scope?(definition, reference)
  end
end