mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 17:50:22 +00:00
Added detection for Prolog and disambiguation for .pl files
This commit is contained in:
@@ -262,6 +262,9 @@ module Linguist
|
||||
# If it's a .r file, try to guess the language
|
||||
r_language ||
|
||||
|
||||
# If it's a .pl file, try to guess the language
|
||||
pl_language ||
|
||||
|
||||
# See if there is a Language for the extension
|
||||
pathname.language ||
|
||||
|
||||
@@ -304,6 +307,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: Extract the script name from the shebang line
|
||||
#
|
||||
# Requires Blob#data
|
||||
|
||||
@@ -589,6 +589,12 @@ Perl:
|
||||
- .perl
|
||||
- .psgi
|
||||
|
||||
Prolog:
|
||||
major: true
|
||||
extensions:
|
||||
- .pro
|
||||
- .prolog
|
||||
|
||||
Pure Data:
|
||||
major: true
|
||||
lexer: Text only
|
||||
|
||||
@@ -228,6 +228,11 @@ class TestBlob < Test::Unit::TestCase
|
||||
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
|
||||
|
||||
# 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