diff --git a/lib/linguist/language.rb b/lib/linguist/language.rb index 70d8104c..3e96145b 100644 --- a/lib/linguist/language.rb +++ b/lib/linguist/language.rb @@ -3,6 +3,7 @@ require 'yaml' module Linguist class Language @name_index = {} + @lexer_index = {} @extension_index = {} def self.create(attributes = {}) @@ -10,6 +11,10 @@ module Linguist @name_index[language.name.downcase] = language + if language.default_lexer? || !@lexer_index.key?(language.lexer) + @lexer_index[language.lexer] = language + end + language.extensions.each do |extension| @extension_index[extension] = language @extension_index[extension.sub(/^./, '')] = language @@ -44,6 +49,10 @@ module Linguist find_by_extension(ext) end + def self.find_by_lexer(lexer) + @lexer_index[lexer] + end + def initialize(attributes = {}) @name = attributes[:name] || raise(ArgumentError, "missing name") @lexer = attributes[:lexer] || default_lexer @@ -55,6 +64,10 @@ module Linguist def default_lexer name.downcase.gsub(/\s/, '-') end + + def default_lexer? + lexer == default_lexer + end end YAML.load_file(File.expand_path("../extensions.yml", __FILE__)).each do |name, options| diff --git a/test/test_language.rb b/test/test_language.rb index 0b1d4bc4..f84f682e 100644 --- a/test/test_language.rb +++ b/test/test_language.rb @@ -32,6 +32,15 @@ class TestLanguage < Test::Unit::TestCase assert_equal ruby, Language.find_by_filename('./Rakefile') end + def test_find_by_lexer + assert_equal Language['Perl'], Language.find_by_lexer('perl') + assert_equal Language['Python'], Language.find_by_lexer('python') + assert_equal Language['Ruby'], Language.find_by_lexer('ruby') + assert_equal Language['C++'], Language.find_by_lexer('cpp') + assert_equal Language['JavaScript'], Language.find_by_lexer('javascript') + assert_equal Language['Scheme'], Language.find_by_lexer('scheme') + end + def test_name assert_equal "Perl", Language['Perl'].name assert_equal "Python", Language['Python'].name