diff --git a/lib/linguist/file_blob.rb b/lib/linguist/file_blob.rb index 7e7f1acd..bc475023 100644 --- a/lib/linguist/file_blob.rb +++ b/lib/linguist/file_blob.rb @@ -52,5 +52,20 @@ module Linguist def size File.size(@path) end + + # Public: Get file extension. + # + # Returns a String. + def extension + # File.extname returns nil if the filename is an extension. + extension = File.extname(name) + basename = File.basename(name) + # Checks if the filename is an extension. + if extension.empty? && basename[0] == "." + basename + else + extension + end + end end end diff --git a/lib/linguist/language.rb b/lib/linguist/language.rb index a8e7a33c..e9144217 100644 --- a/lib/linguist/language.rb +++ b/lib/linguist/language.rb @@ -103,7 +103,8 @@ module Linguist # A bit of an elegant hack. If the file is executable but extensionless, # append a "magic" extension so it can be classified with other # languages that have shebang scripts. - if File.extname(name).empty? && mode && (mode.to_i(8) & 05) == 05 + extension = FileBlob.new(name).extension() + if extension.empty? && mode && (mode.to_i(8) & 05) == 05 name += ".script!" end @@ -183,7 +184,8 @@ module Linguist # # Returns all matching Languages or [] if none were found. def self.find_by_filename(filename) - basename, extname = File.basename(filename), File.extname(filename) + basename = File.basename(filename) + extname = FileBlob.new(filename).extension() langs = @filename_index[basename] + @extension_index[extname] langs.compact.uniq