Separate lexer and lexer_name

This commit is contained in:
Joshua Peek
2011-05-19 23:45:34 -05:00
parent 7b45e5c9f5
commit 0f0f6d282b
7 changed files with 68 additions and 30 deletions

View File

@@ -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

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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