class Decode::Language::Reference
An reference which can be resolved to zero or more definitions.
Attributes
identifier[R]
The identifier part of the reference. @attribute [String]
language[R]
The language associated with this reference. @attribute [Language::Generic]
Public Class Methods
new(identifier, language, lexical_path = nil)
click to toggle source
Initialize the reference. @parameter identifier [String] The identifier part of the reference.
# File lib/decode/language/reference.rb, line 27 def initialize(identifier, language, lexical_path = nil) @identifier = identifier @language = language @lexical_path = lexical_path @path = nil end
Public Instance Methods
absolute?()
click to toggle source
Whether the reference starts at the base of the lexical tree.
# File lib/decode/language/reference.rb, line 52 def absolute? !self.relative? end
best(definitions)
click to toggle source
# File lib/decode/language/reference.rb, line 80 def best(definitions) prefix, name = lexical_path.last first = nil without_prefix = nil definitions.each do |definition| first ||= definition next unless definition.language == @language if prefix.nil? without_prefix ||= definition elsif definition.start_with?(prefix) return definition end end return without_prefix || first end
inspect()
click to toggle source
# File lib/decode/language/reference.rb, line 39 def inspect "\#<#{self.class} {#{self.identifier}}>" end
lexical_path()
click to toggle source
# File lib/decode/language/reference.rb, line 66 def lexical_path @lexical_path ||= self.split(@identifier) end
path()
click to toggle source
The lexical path of the reference. @returns [Array(String)]
# File lib/decode/language/reference.rb, line 103 def path @path ||= self.lexical_path.map{|_, name| name.to_sym} end
priority(definition, prefix)
click to toggle source
# File lib/decode/language/reference.rb, line 70 def priority(definition, prefix) if prefix.nil? return 1 elsif definition.start_with?(prefix) return 0 else return 2 end end
relative?()
click to toggle source
# File lib/decode/language/reference.rb, line 56 def relative? prefix, name = self.lexical_path.first return prefix.nil? end
split(identifier)
click to toggle source
# File lib/decode/language/reference.rb, line 62 def split(identifier) identifier.scan(/(\W+)?(\w+)/) end
to_s()
click to toggle source
# File lib/decode/language/reference.rb, line 35 def to_s "{#{self.language} #{self.identifier}}" end