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