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