mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	Compare commits
	
		
			14 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					e424e8e88c | ||
| 
						 | 
					07d4f218a3 | ||
| 
						 | 
					67ed060d37 | ||
| 
						 | 
					3abe081560 | ||
| 
						 | 
					855f1a1f86 | ||
| 
						 | 
					0406a5b326 | ||
| 
						 | 
					0108ef4386 | ||
| 
						 | 
					daefff86ff | ||
| 
						 | 
					fdb962518f | ||
| 
						 | 
					6564078061 | ||
| 
						 | 
					39ea9be5f8 | ||
| 
						 | 
					152b5ade5e | ||
| 
						 | 
					c525e3fbef | ||
| 
						 | 
					88c74fa9c2 | 
							
								
								
									
										3
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							@@ -791,3 +791,6 @@
 | 
			
		||||
[submodule "vendor/grammars/language-babel"]
 | 
			
		||||
	path = vendor/grammars/language-babel
 | 
			
		||||
	url = https://github.com/github-linguist/language-babel
 | 
			
		||||
[submodule "vendor/CodeMirror"]
 | 
			
		||||
	path = vendor/CodeMirror
 | 
			
		||||
	url = https://github.com/codemirror/CodeMirror
 | 
			
		||||
 
 | 
			
		||||
@@ -267,6 +267,7 @@ module Linguist
 | 
			
		||||
    # Returns an Array of Languages.
 | 
			
		||||
    def self.ace_modes
 | 
			
		||||
      warn "This method will be deprecated in a future 5.x release. Every language now has an `ace_mode` set."
 | 
			
		||||
      warn caller
 | 
			
		||||
      @ace_modes ||= all.select(&:ace_mode).sort_by { |lang| lang.name.downcase }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
@@ -301,6 +302,7 @@ module Linguist
 | 
			
		||||
 | 
			
		||||
      @ace_mode = attributes[:ace_mode]
 | 
			
		||||
      @codemirror_mode = attributes[:codemirror_mode]
 | 
			
		||||
      @codemirror_mime_type = attributes[:codemirror_mime_type]
 | 
			
		||||
      @wrap = attributes[:wrap] || false
 | 
			
		||||
 | 
			
		||||
      # Set legacy search term
 | 
			
		||||
@@ -398,7 +400,10 @@ module Linguist
 | 
			
		||||
    # Returns a String name or nil
 | 
			
		||||
    attr_reader :ace_mode
 | 
			
		||||
 | 
			
		||||
    # Public: Get Codemirror mode
 | 
			
		||||
    # Public: Get CodeMirror mode
 | 
			
		||||
    #
 | 
			
		||||
    # Maps to a directory in the `mode/` source code.
 | 
			
		||||
    #   https://github.com/codemirror/CodeMirror/tree/master/mode
 | 
			
		||||
    #
 | 
			
		||||
    # Examples
 | 
			
		||||
    #
 | 
			
		||||
@@ -409,6 +414,17 @@ module Linguist
 | 
			
		||||
    # Returns a String name or nil
 | 
			
		||||
    attr_reader :codemirror_mode
 | 
			
		||||
 | 
			
		||||
    # Public: Get CodeMirror MIME type mode
 | 
			
		||||
    #
 | 
			
		||||
    # Examples
 | 
			
		||||
    #
 | 
			
		||||
    #  # => "nil"
 | 
			
		||||
    #  # => "text/x-javascript"
 | 
			
		||||
    #  # => "text/x-csrc"
 | 
			
		||||
    #
 | 
			
		||||
    # Returns a String name or nil
 | 
			
		||||
    attr_reader :codemirror_mime_type
 | 
			
		||||
 | 
			
		||||
    # Public: Should language lines be wrapped
 | 
			
		||||
    #
 | 
			
		||||
    # Returns true or false
 | 
			
		||||
@@ -586,6 +602,7 @@ module Linguist
 | 
			
		||||
      :tm_scope          => options['tm_scope'],
 | 
			
		||||
      :ace_mode          => options['ace_mode'],
 | 
			
		||||
      :codemirror_mode   => options['codemirror_mode'],
 | 
			
		||||
      :codemirror_mime_type => options['codemirror_mime_type'],
 | 
			
		||||
      :wrap              => options['wrap'],
 | 
			
		||||
      :group_name        => options['group'],
 | 
			
		||||
      :searchable        => options.fetch('searchable', true),
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -165,7 +165,7 @@
 | 
			
		||||
# Chart.js
 | 
			
		||||
- (^|/)Chart\.js$
 | 
			
		||||
 | 
			
		||||
# Codemirror
 | 
			
		||||
# CodeMirror
 | 
			
		||||
- (^|/)[Cc]ode[Mm]irror/(\d+\.\d+/)?(lib|mode|theme|addon|keymap|demo)
 | 
			
		||||
 | 
			
		||||
# SyntaxHighlighter - http://alexgorbatchev.com/
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,3 @@
 | 
			
		||||
module Linguist
 | 
			
		||||
  VERSION = "4.8.14"
 | 
			
		||||
  VERSION = "4.8.15"
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||
@@ -35,3 +35,11 @@ def sample_blob_memory(name)
 | 
			
		||||
  content = File.read(filepath)
 | 
			
		||||
  Linguist::Blob.new(name, content)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
def silence_warnings
 | 
			
		||||
  original_verbosity = $VERBOSE
 | 
			
		||||
  $VERBOSE = nil
 | 
			
		||||
  yield
 | 
			
		||||
ensure
 | 
			
		||||
  $VERBOSE = original_verbosity
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||
@@ -4,14 +4,18 @@ class TestBlob < Minitest::Test
 | 
			
		||||
  include Linguist
 | 
			
		||||
 | 
			
		||||
  def setup
 | 
			
		||||
    # git blobs are normally loaded as ASCII-8BIT since they may contain data
 | 
			
		||||
    # with arbitrary encoding not known ahead of time
 | 
			
		||||
    @original_external = Encoding.default_external
 | 
			
		||||
    Encoding.default_external = Encoding.find("ASCII-8BIT")
 | 
			
		||||
    silence_warnings do
 | 
			
		||||
      # git blobs are normally loaded as ASCII-8BIT since they may contain data
 | 
			
		||||
      # with arbitrary encoding not known ahead of time
 | 
			
		||||
      @original_external = Encoding.default_external
 | 
			
		||||
      Encoding.default_external = Encoding.find("ASCII-8BIT")
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def teardown
 | 
			
		||||
    Encoding.default_external = @original_external
 | 
			
		||||
    silence_warnings do
 | 
			
		||||
      Encoding.default_external = @original_external
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def script_blob(name)
 | 
			
		||||
 
 | 
			
		||||
@@ -3,15 +3,27 @@ require_relative "./helper"
 | 
			
		||||
class TestFileBlob < Minitest::Test
 | 
			
		||||
  include Linguist
 | 
			
		||||
 | 
			
		||||
  def silence_warnings
 | 
			
		||||
    original_verbosity = $VERBOSE
 | 
			
		||||
    $VERBOSE = nil
 | 
			
		||||
    yield
 | 
			
		||||
  ensure
 | 
			
		||||
    $VERBOSE = original_verbosity
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def setup
 | 
			
		||||
    # git blobs are normally loaded as ASCII-8BIT since they may contain data
 | 
			
		||||
    # with arbitrary encoding not known ahead of time
 | 
			
		||||
    @original_external = Encoding.default_external
 | 
			
		||||
    Encoding.default_external = Encoding.find("ASCII-8BIT")
 | 
			
		||||
    silence_warnings do
 | 
			
		||||
      # git blobs are normally loaded as ASCII-8BIT since they may contain data
 | 
			
		||||
      # with arbitrary encoding not known ahead of time
 | 
			
		||||
      @original_external = Encoding.default_external
 | 
			
		||||
      Encoding.default_external = Encoding.find("ASCII-8BIT")
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def teardown
 | 
			
		||||
    Encoding.default_external = @original_external
 | 
			
		||||
    silence_warnings do
 | 
			
		||||
      Encoding.default_external = @original_external
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def script_blob(name)
 | 
			
		||||
@@ -305,7 +317,7 @@ class TestFileBlob < Minitest::Test
 | 
			
		||||
    assert sample_blob("some/vendored/path/Chart.js").vendored?
 | 
			
		||||
    assert !sample_blob("some/vendored/path/chart.js").vendored?
 | 
			
		||||
 | 
			
		||||
    # Codemirror deps
 | 
			
		||||
    # CodeMirror deps
 | 
			
		||||
    assert sample_blob("codemirror/mode/blah.js").vendored?
 | 
			
		||||
    assert sample_blob("codemirror/5.0/mode/blah.js").vendored?
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -126,7 +126,7 @@ class TestGrammars < Minitest::Test
 | 
			
		||||
  private
 | 
			
		||||
 | 
			
		||||
  def submodule_paths
 | 
			
		||||
    @submodule_paths ||= `git config --list --file "#{File.join(ROOT, ".gitmodules")}"`.lines.grep(/\.path=/).map { |line| line.chomp.split("=", 2).last }
 | 
			
		||||
    @submodule_paths ||= `git config --list --file "#{File.join(ROOT, ".gitmodules")}"`.lines.grep(/\.path=/).map { |line| line.chomp.split("=", 2).last }.reject { |path| path =~ /CodeMirror/ }
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # Returns a hash of submodules in the form of submodule_path => license
 | 
			
		||||
@@ -154,7 +154,7 @@ class TestGrammars < Minitest::Test
 | 
			
		||||
 | 
			
		||||
    # Neither Licensee nor our own regex was able to detect the license, let's check the readme
 | 
			
		||||
    files = Dir[File.join(ROOT, submodule, "*")]
 | 
			
		||||
    if readme = files.find { |path| File.basename(path) =~ /\Areadme\b/i }
 | 
			
		||||
    if readme = files.find { |file| File.basename(file) =~ /\Areadme\b/i }
 | 
			
		||||
      classify_license(readme)
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 
 | 
			
		||||
@@ -345,14 +345,26 @@ class TestLanguage < Minitest::Test
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_ace_modes
 | 
			
		||||
    assert Language.ace_modes.include?(Language['Ruby'])
 | 
			
		||||
    assert Language.ace_modes.include?(Language['FORTRAN'])
 | 
			
		||||
    silence_warnings do
 | 
			
		||||
      assert Language.ace_modes.include?(Language['Ruby'])
 | 
			
		||||
      assert Language.ace_modes.include?(Language['FORTRAN'])
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_codemirror_mode
 | 
			
		||||
    assert_equal 'ruby', Language['Ruby'].codemirror_mode
 | 
			
		||||
    assert_equal 'javascript', Language['JavaScript'].codemirror_mode
 | 
			
		||||
    assert_equal 'clike', Language['C'].codemirror_mode
 | 
			
		||||
    assert_equal 'clike', Language['C++'].codemirror_mode
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_codemirror_mime_type
 | 
			
		||||
    assert_equal 'text/x-ruby', Language['Ruby'].codemirror_mime_type
 | 
			
		||||
    assert_equal 'text/javascript', Language['JavaScript'].codemirror_mime_type
 | 
			
		||||
    assert_equal 'text/x-csrc', Language['C'].codemirror_mime_type
 | 
			
		||||
    assert_equal 'text/x-c++src', Language['C++'].codemirror_mime_type
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_wrap
 | 
			
		||||
    assert_equal false, Language['C'].wrap
 | 
			
		||||
    assert_equal true, Language['Markdown'].wrap
 | 
			
		||||
@@ -440,6 +452,40 @@ class TestLanguage < Minitest::Test
 | 
			
		||||
    assert missing.empty?, message
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_codemirror_modes_present
 | 
			
		||||
    Language.all.each do |language|
 | 
			
		||||
      if language.codemirror_mode || language.codemirror_mime_type
 | 
			
		||||
        assert language.codemirror_mode, "#{language.inspect} missing CodeMirror mode"
 | 
			
		||||
        assert language.codemirror_mime_type, "#{language.inspect} missing CodeMirror MIME mode"
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_valid_codemirror_mode
 | 
			
		||||
    Language.all.each do |language|
 | 
			
		||||
      if mode = language.codemirror_mode
 | 
			
		||||
        assert File.exist?(File.expand_path("../../vendor/CodeMirror/mode/#{mode}", __FILE__)), "#{mode} isn't a valid CodeMirror mode"
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_codemirror_mode_and_mime_defined_by_meta_mapping
 | 
			
		||||
    meta = File.read(File.expand_path("../../vendor/CodeMirror/mode/meta.js", __FILE__))
 | 
			
		||||
    Language.all.each do |language|
 | 
			
		||||
      next unless language.codemirror_mode && language.codemirror_mime_type
 | 
			
		||||
      assert meta.match(/^.+#{Regexp.escape(language.codemirror_mime_type)}.+#{Regexp.escape(language.codemirror_mode)}.+$/), "#{language.inspect}: #{language.codemirror_mime_type} not defined under #{language.codemirror_mode}"
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_codemirror_mime_declared_in_mode_file
 | 
			
		||||
    Language.all.each do |language|
 | 
			
		||||
      next unless language.codemirror_mode && language.codemirror_mime_type
 | 
			
		||||
      filename = File.expand_path("../../vendor/CodeMirror/mode/#{language.codemirror_mode}/#{language.codemirror_mode}.js", __FILE__)
 | 
			
		||||
      assert File.exist?(filename), "#{filename} does not exist"
 | 
			
		||||
      assert File.read(filename).match(language.codemirror_mime_type), "#{language.inspect}: #{language.codemirror_mime_type} not defined in #{filename}"
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_all_popular_languages_exist
 | 
			
		||||
    popular = YAML.load(File.read(File.expand_path("../../lib/linguist/popular.yml", __FILE__)))
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								vendor/CodeMirror
									
									
									
									
										vendored
									
									
										Submodule
									
								
							
							
								
								
								
								
								
							
						
						
									
										1
									
								
								vendor/CodeMirror
									
									
									
									
										vendored
									
									
										Submodule
									
								
							 Submodule vendor/CodeMirror added at 562e8eff5b
									
								
							
		Reference in New Issue
	
	Block a user