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
|
# If it's a .m file, try to guess the language
|
||||||
m_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
|
# If it's a .r file, try to guess the language
|
||||||
r_language ||
|
r_language ||
|
||||||
|
|
||||||
@@ -347,6 +350,26 @@ module Linguist
|
|||||||
end
|
end
|
||||||
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.
|
# Internal: Guess language of .r files.
|
||||||
#
|
#
|
||||||
# Returns a Language.
|
# Returns a Language.
|
||||||
|
|||||||
@@ -590,6 +590,12 @@ Perl:
|
|||||||
- .perl
|
- .perl
|
||||||
- .psgi
|
- .psgi
|
||||||
|
|
||||||
|
Prolog:
|
||||||
|
major: true
|
||||||
|
extensions:
|
||||||
|
- .pro
|
||||||
|
- .prolog
|
||||||
|
|
||||||
Pure Data:
|
Pure Data:
|
||||||
major: true
|
major: true
|
||||||
lexer: Text only
|
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_equal Language['Ruby'], blob("wrong_shebang.rb").language
|
||||||
assert_nil blob("octocat.png").language
|
assert_nil blob("octocat.png").language
|
||||||
|
|
||||||
# .r disambiguation
|
# .pl disambiguation
|
||||||
assert_equal Language['R'], blob("hello-r.R").language
|
assert_equal Language['Prolog'], blob("test-prolog.pl").language
|
||||||
assert_equal Language['Rebol'], blob("hello-rebol.r").language
|
assert_equal Language['Perl'], blob("test-perl.pl").language
|
||||||
|
assert_equal Language['Perl'], blob("test-perl2.pl").language
|
||||||
|
|
||||||
# .m disambiguation
|
# .m disambiguation
|
||||||
assert_equal Language['Objective-C'], blob("Foo.m").language
|
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_function.m").language
|
||||||
assert_equal Language['Matlab'], blob("matlab_script.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
|
# ML
|
||||||
assert_equal Language['OCaml'], blob("Foo.ml").language
|
assert_equal Language['OCaml'], blob("Foo.ml").language
|
||||||
assert_equal Language['Standard ML'], blob("Foo.sig").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['Ooc'], Language['ooc'].lexer
|
||||||
assert_equal Lexer['PHP'], Language['PHP'].lexer
|
assert_equal Lexer['PHP'], Language['PHP'].lexer
|
||||||
assert_equal Lexer['Perl'], Language['Perl'].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 Traceback'], Language['Python traceback'].lexer
|
||||||
assert_equal Lexer['Python'], Language['Python'].lexer
|
assert_equal Lexer['Python'], Language['Python'].lexer
|
||||||
assert_equal Lexer['REBOL'], Language['Rebol'].lexer
|
assert_equal Lexer['REBOL'], Language['Rebol'].lexer
|
||||||
@@ -310,6 +311,7 @@ class TestLanguage < Test::Unit::TestCase
|
|||||||
assert Language['Objective-J'].major?
|
assert Language['Objective-J'].major?
|
||||||
assert Language['PHP'].major?
|
assert Language['PHP'].major?
|
||||||
assert Language['Perl'].major?
|
assert Language['Perl'].major?
|
||||||
|
assert Language['Prolog'].major?
|
||||||
assert Language['Pure Data'].major?
|
assert Language['Pure Data'].major?
|
||||||
assert Language['Python'].major?
|
assert Language['Python'].major?
|
||||||
assert Language['R'].major?
|
assert Language['R'].major?
|
||||||
|
|||||||
Reference in New Issue
Block a user