From 0f0f6d282b1b8d4f21079389d0245cdf0b39ebc7 Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Thu, 19 May 2011 23:45:34 -0500 Subject: [PATCH] Separate lexer and lexer_name --- lib/linguist/blob_helper.rb | 4 ++++ lib/linguist/language.rb | 17 ++++++++++------- lib/linguist/lexer.rb | 4 ++-- lib/linguist/pathname.rb | 4 ++++ test/test_blob.rb | 27 ++++++++++++++++++--------- test/test_language.rb | 21 +++++++++++++++------ test/test_pathname.rb | 21 +++++++++++++++------ 7 files changed, 68 insertions(+), 30 deletions(-) diff --git a/lib/linguist/blob_helper.rb b/lib/linguist/blob_helper.rb index 865e14d6..f1659da5 100644 --- a/lib/linguist/blob_helper.rb +++ b/lib/linguist/blob_helper.rb @@ -81,6 +81,10 @@ module Linguist end end + def lexer_name + language.lexer_name + end + def lexer language.lexer end diff --git a/lib/linguist/language.rb b/lib/linguist/language.rb index e3e02056..1ad021ce 100644 --- a/lib/linguist/language.rb +++ b/lib/linguist/language.rb @@ -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) diff --git a/lib/linguist/lexer.rb b/lib/linguist/lexer.rb index 9f9ac26c..ab03a815 100644 --- a/lib/linguist/lexer.rb +++ b/lib/linguist/lexer.rb @@ -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 diff --git a/lib/linguist/pathname.rb b/lib/linguist/pathname.rb index 0ea04b67..3211246c 100644 --- a/lib/linguist/pathname.rb +++ b/lib/linguist/pathname.rb @@ -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 diff --git a/test/test_blob.rb b/test/test_blob.rb index b7c13038..0473e828 100644 --- a/test/test_blob.rb +++ b/test/test_blob.rb @@ -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 diff --git a/test/test_language.rb b/test/test_language.rb index 86413cc4..dbb2fda2 100644 --- a/test/test_language.rb +++ b/test/test_language.rb @@ -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 diff --git a/test/test_pathname.rb b/test/test_pathname.rb index c84931dc..95cfd5ce 100644 --- a/test/test_pathname.rb +++ b/test/test_pathname.rb @@ -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