mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	Add Language#find_by_lexer
This commit is contained in:
		| @@ -3,6 +3,7 @@ require 'yaml' | |||||||
| module Linguist | module Linguist | ||||||
|   class Language |   class Language | ||||||
|     @name_index      = {} |     @name_index      = {} | ||||||
|  |     @lexer_index     = {} | ||||||
|     @extension_index = {} |     @extension_index = {} | ||||||
|  |  | ||||||
|     def self.create(attributes = {}) |     def self.create(attributes = {}) | ||||||
| @@ -10,6 +11,10 @@ module Linguist | |||||||
|  |  | ||||||
|       @name_index[language.name.downcase] = language |       @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| |       language.extensions.each do |extension| | ||||||
|         @extension_index[extension] = language |         @extension_index[extension] = language | ||||||
|         @extension_index[extension.sub(/^./, '')] = language |         @extension_index[extension.sub(/^./, '')] = language | ||||||
| @@ -44,6 +49,10 @@ module Linguist | |||||||
|       find_by_extension(ext) |       find_by_extension(ext) | ||||||
|     end |     end | ||||||
|  |  | ||||||
|  |     def self.find_by_lexer(lexer) | ||||||
|  |       @lexer_index[lexer] | ||||||
|  |     end | ||||||
|  |  | ||||||
|     def initialize(attributes = {}) |     def initialize(attributes = {}) | ||||||
|       @name       = attributes[:name] || raise(ArgumentError, "missing name") |       @name       = attributes[:name] || raise(ArgumentError, "missing name") | ||||||
|       @lexer      = attributes[:lexer] || default_lexer |       @lexer      = attributes[:lexer] || default_lexer | ||||||
| @@ -55,6 +64,10 @@ module Linguist | |||||||
|     def default_lexer |     def default_lexer | ||||||
|       name.downcase.gsub(/\s/, '-') |       name.downcase.gsub(/\s/, '-') | ||||||
|     end |     end | ||||||
|  |  | ||||||
|  |     def default_lexer? | ||||||
|  |       lexer == default_lexer | ||||||
|  |     end | ||||||
|   end |   end | ||||||
|  |  | ||||||
|   YAML.load_file(File.expand_path("../extensions.yml", __FILE__)).each do |name, options| |   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') |     assert_equal ruby, Language.find_by_filename('./Rakefile') | ||||||
|   end |   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 |   def test_name | ||||||
|     assert_equal "Perl",   Language['Perl'].name |     assert_equal "Perl",   Language['Perl'].name | ||||||
|     assert_equal "Python", Language['Python'].name |     assert_equal "Python", Language['Python'].name | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user