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. | ||||
|     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 | ||||
|       extensions.last || "" | ||||
|     end | ||||
|  | ||||
|     # Public: Return an array of the file extensions | ||||
|     # | ||||
|     #     >> Linguist::FileBlob.new("app/views/things/index.html.erb").extensions | ||||
|     #     => [".html.erb", ".erb"] | ||||
|     # | ||||
|     # 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 | ||||
|   | ||||
| @@ -192,8 +192,8 @@ module Linguist | ||||
|     # Returns all matching Languages or [] if none were found. | ||||
|     def self.find_by_filename(filename) | ||||
|       basename = File.basename(filename) | ||||
|       extname = FileBlob.new(filename).extension | ||||
|       (@filename_index[basename] + find_by_extension(extname)).compact.uniq | ||||
|       exts = FileBlob.new(filename).extensions.map {|extname| find_by_extension(extname)} | ||||
|       (@filename_index[basename] + exts.flatten).compact.uniq | ||||
|     end | ||||
|  | ||||
|     # 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['HTML+Django']], Language.find_by_filename('index.jinja') | ||||
|     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 | ||||
|  | ||||
|   def test_find_by_shebang | ||||
|   | ||||
		Reference in New Issue
	
	Block a user