mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 17:50:22 +00:00
Support for multiple file extension segments
This commit is contained in:
@@ -57,14 +57,20 @@ module Linguist
|
|||||||
#
|
#
|
||||||
# Returns a String.
|
# Returns a String.
|
||||||
def extension
|
def extension
|
||||||
# File.extname returns nil if the filename is an extension.
|
extensions.last || ""
|
||||||
extension = File.extname(name)
|
end
|
||||||
basename = File.basename(name)
|
|
||||||
# Checks if the filename is an extension.
|
# Public: Return an array of the file extensions
|
||||||
if extension.empty? && basename[0] == "."
|
#
|
||||||
basename
|
# >> Linguist::FileBlob.new("app/views/things/index.html.erb").extensions
|
||||||
else
|
# => [".html.erb", ".erb"]
|
||||||
extension
|
#
|
||||||
|
# Returns an Array
|
||||||
|
def extensions
|
||||||
|
basename, *segments = File.basename(name).split(".")
|
||||||
|
|
||||||
|
segments.map.with_index do |segment, index|
|
||||||
|
"." + segments[index..-1].join(".")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -192,8 +192,8 @@ module Linguist
|
|||||||
# Returns all matching Languages or [] if none were found.
|
# Returns all matching Languages or [] if none were found.
|
||||||
def self.find_by_filename(filename)
|
def self.find_by_filename(filename)
|
||||||
basename = File.basename(filename)
|
basename = File.basename(filename)
|
||||||
extname = FileBlob.new(filename).extension
|
exts = FileBlob.new(filename).extensions.map {|extname| find_by_extension(extname)}
|
||||||
(@filename_index[basename] + find_by_extension(extname)).compact.uniq
|
(@filename_index[basename] + exts.flatten).compact.uniq
|
||||||
end
|
end
|
||||||
|
|
||||||
# Public: Look up Languages by file extension.
|
# Public: Look up Languages by file extension.
|
||||||
|
|||||||
10
test/test_file_blob.rb
Normal file
10
test/test_file_blob.rb
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
require 'linguist/file_blob'
|
||||||
|
require 'test/unit'
|
||||||
|
|
||||||
|
class TestFileBlob < Test::Unit::TestCase
|
||||||
|
def test_extensions
|
||||||
|
assert_equal [".gitignore"], Linguist::FileBlob.new(".gitignore").extensions
|
||||||
|
assert_equal [".xml"], Linguist::FileBlob.new("build.xml").extensions
|
||||||
|
assert_equal [".html.erb", ".erb"], Linguist::FileBlob.new("dotted.dir/index.html.erb").extensions
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -222,6 +222,7 @@ class TestLanguage < Test::Unit::TestCase
|
|||||||
assert_equal [Language['Clojure']], Language.find_by_filename('riemann.config')
|
assert_equal [Language['Clojure']], Language.find_by_filename('riemann.config')
|
||||||
assert_equal [Language['HTML+Django']], Language.find_by_filename('index.jinja')
|
assert_equal [Language['HTML+Django']], Language.find_by_filename('index.jinja')
|
||||||
assert_equal [Language['Chapel']], Language.find_by_filename('examples/hello.chpl')
|
assert_equal [Language['Chapel']], Language.find_by_filename('examples/hello.chpl')
|
||||||
|
assert_equal [Language['Ant Build System']], Language.find_by_filename('build.ant.xml')
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_find_by_shebang
|
def test_find_by_shebang
|
||||||
|
|||||||
Reference in New Issue
Block a user