mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 09:40:21 +00:00
Add Language#find_by_lexer
This commit is contained in:
@@ -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|
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user