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