mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	Merge branch 'detect-prolog' of https://github.com/tautologico/linguist into tautologico-detect-prolog
Conflicts: lib/linguist/blob_helper.rb test/test_blob.rb
This commit is contained in:
		@@ -281,6 +281,9 @@ module Linguist
 | 
			
		||||
        # If it's a .m file, try to guess the language
 | 
			
		||||
        m_language ||
 | 
			
		||||
 | 
			
		||||
        # If it's a .pl file, try to guess the language
 | 
			
		||||
        pl_language ||
 | 
			
		||||
 | 
			
		||||
        # If it's a .r file, try to guess the language
 | 
			
		||||
        r_language ||
 | 
			
		||||
 | 
			
		||||
@@ -347,6 +350,26 @@ module Linguist
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Internal: Guess language of .pl files
 | 
			
		||||
    #
 | 
			
		||||
    # Returns a Language.
 | 
			
		||||
    def pl_language
 | 
			
		||||
      return unless extname == '.pl'
 | 
			
		||||
 | 
			
		||||
      # The rules for disambiguation are:
 | 
			
		||||
      #
 | 
			
		||||
      # 1. Many perl files begin with a shebang
 | 
			
		||||
      # 2. Most Prolog source files have a rule somewhere (marked by the :- operator)
 | 
			
		||||
      # 3. Default to Perl, because it is more popular
 | 
			
		||||
      if shebang_script == 'perl'
 | 
			
		||||
        Language['Perl']
 | 
			
		||||
      elsif lines.grep(/:-/).any?
 | 
			
		||||
        Language['Prolog']
 | 
			
		||||
      else
 | 
			
		||||
        Language['Perl']
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Internal: Guess language of .r files.
 | 
			
		||||
    #
 | 
			
		||||
    # Returns a Language.
 | 
			
		||||
 
 | 
			
		||||
@@ -590,6 +590,12 @@ Perl:
 | 
			
		||||
  - .perl
 | 
			
		||||
  - .psgi
 | 
			
		||||
 | 
			
		||||
Prolog:
 | 
			
		||||
  major: true
 | 
			
		||||
  extensions:
 | 
			
		||||
  - .pro
 | 
			
		||||
  - .prolog
 | 
			
		||||
 | 
			
		||||
Pure Data:
 | 
			
		||||
  major: true
 | 
			
		||||
  lexer: Text only
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								test/fixtures/test-perl.pl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								test/fixtures/test-perl.pl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
#!/usr/bin/perl
 | 
			
		||||
print "Hello, world!\n";
 | 
			
		||||
							
								
								
									
										3
									
								
								test/fixtures/test-perl2.pl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								test/fixtures/test-perl2.pl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
 | 
			
		||||
# Perl file without shebang
 | 
			
		||||
print "Hello, world!\n";
 | 
			
		||||
							
								
								
									
										12
									
								
								test/fixtures/test-prolog.pl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								test/fixtures/test-prolog.pl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
			
		||||
/* Prolog test file */
 | 
			
		||||
male(john).
 | 
			
		||||
male(peter).
 | 
			
		||||
 | 
			
		||||
female(vick).
 | 
			
		||||
female(christie).
 | 
			
		||||
 | 
			
		||||
parents(john, peter, christie).
 | 
			
		||||
parents(vick, peter, christie).
 | 
			
		||||
 | 
			
		||||
/* X is a brother of Y */
 | 
			
		||||
brother(X, Y) :- male(X), parents(X, F, M), parents(Y, F, M).
 | 
			
		||||
@@ -230,9 +230,10 @@ class TestBlob < Test::Unit::TestCase
 | 
			
		||||
    assert_equal Language['Ruby'],        blob("wrong_shebang.rb").language
 | 
			
		||||
    assert_nil blob("octocat.png").language
 | 
			
		||||
 | 
			
		||||
    # .r disambiguation
 | 
			
		||||
    assert_equal Language['R'],           blob("hello-r.R").language
 | 
			
		||||
    assert_equal Language['Rebol'],       blob("hello-rebol.r").language
 | 
			
		||||
    # .pl disambiguation
 | 
			
		||||
    assert_equal Language['Prolog'],      blob("test-prolog.pl").language
 | 
			
		||||
    assert_equal Language['Perl'],        blob("test-perl.pl").language
 | 
			
		||||
    assert_equal Language['Perl'],        blob("test-perl2.pl").language
 | 
			
		||||
 | 
			
		||||
    # .m disambiguation
 | 
			
		||||
    assert_equal Language['Objective-C'], blob("Foo.m").language
 | 
			
		||||
@@ -240,6 +241,10 @@ class TestBlob < Test::Unit::TestCase
 | 
			
		||||
    assert_equal Language['Matlab'], blob("matlab_function.m").language
 | 
			
		||||
    assert_equal Language['Matlab'], blob("matlab_script.m").language
 | 
			
		||||
 | 
			
		||||
    # .r disambiguation
 | 
			
		||||
    assert_equal Language['R'],           blob("hello-r.R").language
 | 
			
		||||
    assert_equal Language['Rebol'],       blob("hello-rebol.r").language
 | 
			
		||||
 | 
			
		||||
    # ML
 | 
			
		||||
    assert_equal Language['OCaml'],       blob("Foo.ml").language
 | 
			
		||||
    assert_equal Language['Standard ML'], blob("Foo.sig").language
 | 
			
		||||
 
 | 
			
		||||
@@ -81,6 +81,7 @@ class TestLanguage < Test::Unit::TestCase
 | 
			
		||||
    assert_equal Lexer['Ooc'], Language['ooc'].lexer
 | 
			
		||||
    assert_equal Lexer['PHP'], Language['PHP'].lexer
 | 
			
		||||
    assert_equal Lexer['Perl'], Language['Perl'].lexer
 | 
			
		||||
    assert_equal Lexer['Prolog'], Language['Prolog'].lexer
 | 
			
		||||
    assert_equal Lexer['Python Traceback'], Language['Python traceback'].lexer
 | 
			
		||||
    assert_equal Lexer['Python'], Language['Python'].lexer
 | 
			
		||||
    assert_equal Lexer['REBOL'], Language['Rebol'].lexer
 | 
			
		||||
@@ -310,6 +311,7 @@ class TestLanguage < Test::Unit::TestCase
 | 
			
		||||
    assert Language['Objective-J'].major?
 | 
			
		||||
    assert Language['PHP'].major?
 | 
			
		||||
    assert Language['Perl'].major?
 | 
			
		||||
    assert Language['Prolog'].major?
 | 
			
		||||
    assert Language['Pure Data'].major?
 | 
			
		||||
    assert Language['Python'].major?
 | 
			
		||||
    assert Language['R'].major?
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user