mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	Separate lexer and lexer_name
This commit is contained in:
		| @@ -81,6 +81,10 @@ module Linguist | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     def lexer_name | ||||
|       language.lexer_name | ||||
|     end | ||||
|  | ||||
|     def lexer | ||||
|       language.lexer | ||||
|     end | ||||
|   | ||||
| @@ -1,3 +1,5 @@ | ||||
| require 'linguist/lexer' | ||||
|  | ||||
| require 'yaml' | ||||
|  | ||||
| module Linguist | ||||
| @@ -12,10 +14,10 @@ module Linguist | ||||
|       @name_index[language.name.downcase] = language | ||||
|  | ||||
|       if attributes[:default_lexer] || language.default_lexer? | ||||
|         @lexer_index[language.lexer.downcase] = language | ||||
|         @lexer_index[language.lexer_name.downcase] = language | ||||
|       end | ||||
|  | ||||
|       @lexer_index[language.lexer.downcase] ||= language | ||||
|       @lexer_index[language.lexer_name.downcase] ||= language | ||||
|  | ||||
|       language.extensions.each do |extension| | ||||
|         @extension_index[extension] = language | ||||
| @@ -51,19 +53,20 @@ module Linguist | ||||
|  | ||||
|     def initialize(attributes = {}) | ||||
|       @name       = attributes[:name] || raise(ArgumentError, "missing name") | ||||
|       @lexer      = attributes[:lexer] || default_lexer | ||||
|       @lexer_name = attributes[:lexer_name] || default_lexer_name | ||||
|       @lexer      = Lexer.find_by_alias(@lexer_name) | ||||
|       @extensions = attributes[:extensions] || [] | ||||
|       @popular    = attributes[:popular] || false | ||||
|     end | ||||
|  | ||||
|     attr_reader :name, :lexer, :extensions | ||||
|     attr_reader :name, :lexer_name, :lexer, :extensions | ||||
|  | ||||
|     def default_lexer | ||||
|     def default_lexer_name | ||||
|       name.downcase.gsub(/\s/, '-') | ||||
|     end | ||||
|  | ||||
|     def default_lexer? | ||||
|       lexer == default_lexer | ||||
|       lexer_name == default_lexer_name | ||||
|     end | ||||
|  | ||||
|     def popular? | ||||
| @@ -88,7 +91,7 @@ module Linguist | ||||
|   YAML.load_file(File.expand_path("../extensions.yml", __FILE__)).each do |name, options| | ||||
|     Language.create( | ||||
|       :name => name, | ||||
|       :lexer => options[:lexer], | ||||
|       :lexer_name => options[:lexer], | ||||
|       :default_lexer => options[:default_lexer], | ||||
|       :extensions => options[:ext], | ||||
|       :popular => popular.include?(name) | ||||
|   | ||||
| @@ -10,7 +10,7 @@ module Linguist | ||||
|     end | ||||
|  | ||||
|     def self.find_by_alias(name) | ||||
|       @alias_index[name.downcase] | ||||
|       @alias_index[name] | ||||
|     end | ||||
|  | ||||
|     def self.[](name) | ||||
| @@ -32,7 +32,7 @@ module Linguist | ||||
|     YAML.load_file(File.expand_path("../lexers.yml", __FILE__)).each do |lexer| | ||||
|       @name_index[lexer.name.downcase] = lexer | ||||
|       lexer.aliases.each do |name| | ||||
|         @alias_index[name.downcase] = lexer | ||||
|         @alias_index[name] = lexer | ||||
|       end | ||||
|     end | ||||
|   end | ||||
|   | ||||
| @@ -25,6 +25,10 @@ module Linguist | ||||
|       Language.find_by_extension(extname) || Language['Text'] | ||||
|     end | ||||
|  | ||||
|     def lexer_name | ||||
|       language.lexer_name | ||||
|     end | ||||
|  | ||||
|     def lexer | ||||
|       language.lexer | ||||
|     end | ||||
|   | ||||
| @@ -116,16 +116,25 @@ class TestBlob < Test::Unit::TestCase | ||||
|     assert_equal Language['Text'], blob("octocat.png").language | ||||
|   end | ||||
|  | ||||
|   def test_lexer | ||||
|     assert_equal 'ruby', blob("grit.rb").lexer | ||||
|     assert_equal 'text', blob("README").lexer | ||||
|     assert_equal 'diff', blob("dude-thing-okay--001.patch").lexer | ||||
|     assert_equal 'scheme', blob("dude.el").lexer | ||||
|     assert_equal 'javascript', blob("dude.js").lexer | ||||
|     assert_equal 'ruby', blob("Capfile").lexer | ||||
|   def test_lexer_name | ||||
|     assert_equal 'ruby', blob("grit.rb").lexer_name | ||||
|     assert_equal 'text', blob("README").lexer_name | ||||
|     assert_equal 'diff', blob("dude-thing-okay--001.patch").lexer_name | ||||
|     assert_equal 'scheme', blob("dude.el").lexer_name | ||||
|     assert_equal 'javascript', blob("dude.js").lexer_name | ||||
|     assert_equal 'ruby', blob("Capfile").lexer_name | ||||
|  | ||||
|     assert_equal 'ruby', blob("Rakefile").lexer | ||||
|     assert_equal 'ruby', blob("subdir/Rakefile").lexer | ||||
|     assert_equal 'ruby', blob("Rakefile").lexer_name | ||||
|     assert_equal 'ruby', blob("subdir/Rakefile").lexer_name | ||||
|   end | ||||
|  | ||||
|   def test_lexer | ||||
|     assert_equal Lexer['Ruby'], blob("grit.rb").lexer | ||||
|     assert_equal Lexer['Text only'], blob("README").lexer | ||||
|     assert_equal Lexer['Diff'], blob("dude-thing-okay--001.patch").lexer | ||||
|     assert_equal Lexer['Scheme'], blob("dude.el").lexer | ||||
|     assert_equal Lexer['JavaScript'], blob("dude.js").lexer | ||||
|     assert_equal Lexer['Ruby'], blob("Capfile").lexer | ||||
|   end | ||||
|  | ||||
|   def test_shebang_script | ||||
|   | ||||
| @@ -58,13 +58,22 @@ class TestLanguage < Test::Unit::TestCase | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   def test_lexer_name | ||||
|     assert_equal 'perl',   Language['Perl'].lexer_name | ||||
|     assert_equal 'python', Language['Python'].lexer_name | ||||
|     assert_equal 'ruby',   Language['Ruby'].lexer_name | ||||
|     assert_equal 'cpp',    Language['C++'].lexer_name | ||||
|     assert_equal 'bash',   Language['Gentoo Ebuild'].lexer_name | ||||
|     assert_equal 'scheme', Language['Nu'].lexer_name | ||||
|   end | ||||
|  | ||||
|   def test_lexer | ||||
|     assert_equal 'perl',   Language['Perl'].lexer | ||||
|     assert_equal 'python', Language['Python'].lexer | ||||
|     assert_equal 'ruby',   Language['Ruby'].lexer | ||||
|     assert_equal 'cpp',    Language['C++'].lexer | ||||
|     assert_equal 'bash',   Language['Gentoo Ebuild'].lexer | ||||
|     assert_equal 'scheme', Language['Nu'].lexer | ||||
|     assert_equal Lexer['Perl'],   Language['Perl'].lexer | ||||
|     assert_equal Lexer['Python'], Language['Python'].lexer | ||||
|     assert_equal Lexer['Ruby'],   Language['Ruby'].lexer | ||||
|     assert_equal Lexer['C++'],    Language['C++'].lexer | ||||
|     assert_equal Lexer['Bash'],   Language['Gentoo Ebuild'].lexer | ||||
|     assert_equal Lexer['Scheme'], Language['Nu'].lexer | ||||
|   end | ||||
|  | ||||
|   def test_extensions | ||||
|   | ||||
| @@ -42,13 +42,22 @@ class TestPathname < Test::Unit::TestCase | ||||
|     assert_equal Language['Text'], Pathname.new("defun.kt").language | ||||
|   end | ||||
|  | ||||
|   def test_lexer_name | ||||
|     assert_equal 'ruby',   Pathname.new("file.rb").lexer_name | ||||
|     assert_equal 'ruby',   Pathname.new("Rakefile").lexer_name | ||||
|     assert_equal 'bash',   Pathname.new("file.ebuild").lexer_name | ||||
|     assert_equal 'python', Pathname.new("itty.py").lexer_name | ||||
|     assert_equal 'scheme', Pathname.new("itty.nu").lexer_name | ||||
|     assert_equal 'text',   Pathname.new("defun.kt").lexer_name | ||||
|   end | ||||
|  | ||||
|   def test_lexer | ||||
|     assert_equal 'ruby',   Pathname.new("file.rb").lexer | ||||
|     assert_equal 'ruby',   Pathname.new("Rakefile").lexer | ||||
|     assert_equal 'bash',   Pathname.new("file.ebuild").lexer | ||||
|     assert_equal 'python', Pathname.new("itty.py").lexer | ||||
|     assert_equal 'scheme', Pathname.new("itty.nu").lexer | ||||
|     assert_equal 'text',   Pathname.new("defun.kt").lexer | ||||
|     assert_equal Lexer['Ruby'],      Pathname.new("file.rb").lexer | ||||
|     assert_equal Lexer['Ruby'],      Pathname.new("Rakefile").lexer | ||||
|     assert_equal Lexer['Bash'],      Pathname.new("file.ebuild").lexer | ||||
|     assert_equal Lexer['Python'],    Pathname.new("itty.py").lexer | ||||
|     assert_equal Lexer['Scheme'],    Pathname.new("itty.nu").lexer | ||||
|     assert_equal Lexer['Text Only'], Pathname.new("defun.kt").lexer | ||||
|   end | ||||
|  | ||||
|   def test_mime_type | ||||
|   | ||||
		Reference in New Issue
	
	Block a user