class Decode::Languages
A context for looking up languages based on file extension or name.
Constants
- REFERENCE
Public Class Methods
all()
click to toggle source
# File lib/decode/languages.rb, line 27 def self.all self.new.tap do |languages| languages.add(Language::Ruby.new) end end
new()
click to toggle source
# File lib/decode/languages.rb, line 33 def initialize @named = {} @extensions = {} end
Public Instance Methods
add(language)
click to toggle source
# File lib/decode/languages.rb, line 47 def add(language) language.names.each do |name| @named[name] = language end language.extensions.each do |extension| @extensions[extension] = language end end
fetch(name)
click to toggle source
# File lib/decode/languages.rb, line 57 def fetch(name) @named.fetch(name) do unless @named.frozen? @named[name] = Language::Generic.new(name) end end end
freeze()
click to toggle source
Calls superclass method
# File lib/decode/languages.rb, line 38 def freeze return unless frozen? @named.freeze @extensions.freeze super end
parse_reference(text, default_language: nil)
click to toggle source
Parse a language agnostic reference: e.g. `ruby MyModule::MyClass`
# File lib/decode/languages.rb, line 78 def parse_reference(text, default_language: nil) if match = REFERENCE.match(text) language = self.fetch(match[:name]) || default_language return language.reference_for(match[:identifier]) elsif default_language return default_language.reference_for(text) end end
reference_for(name, identifier)
click to toggle source
# File lib/decode/languages.rb, line 88 def reference_for(name, identifier) self.fetch(name).reference_for(identifier) end
source_for(path)
click to toggle source
# File lib/decode/languages.rb, line 65 def source_for(path) extension = File.extname(path) if language = @extensions[extension] Source.new(path, language) end end