diff --git a/lib/linguist/heuristics.rb b/lib/linguist/heuristics.rb index f02f4b73..3fc27858 100644 --- a/lib/linguist/heuristics.rb +++ b/lib/linguist/heuristics.rb @@ -93,15 +93,23 @@ module Linguist end disambiguate ".pl" do |data| - if data.include?("use v6") + if /^(use v6|(my )?class|module)/.match(data) Language["Perl6"] - elsif data.match(/use strict|use\s+v?5\./) + elsif /use strict|use\s+v?5\./.match(data) Language["Perl"] elsif /^[^#]+:-/.match(data) Language["Prolog"] end end + disambiguate ".pm" do |data| + if /^(use v6|(my )?class|module)/.match(data) + Language["Perl6"] + elsif /use strict|use\s+v?5\./.match(data) + Language["Perl"] + end + end + disambiguate ".ecl" do |data| if /^[^#]+:-/.match(data) Language["Prolog"] diff --git a/test/test_heuristics.rb b/test/test_heuristics.rb index 4b766bce..da4dc6c8 100644 --- a/test/test_heuristics.rb +++ b/test/test_heuristics.rb @@ -49,15 +49,23 @@ class TestHeuristcs < Minitest::Test assert_equal Language["Objective-C"], match end - # Candidate languages = ["Perl", "Prolog"] + # Candidate languages = ["Perl", "Perl6", "Prolog"] def test_pl_prolog_perl_by_heuristics assert_heuristics({ "Prolog" => all_fixtures("Prolog", "*.pl"), - "Perl" => all_fixtures("Perl", "*.pl"), + "Perl" => ["Perl/oo1.pl", "Perl/oo2.pl", "Perl/oo3.pl", "Perl/fib.pl", "Perl/use5.pl"], "Perl6" => all_fixtures("Perl6", "*.pl") }) end + # Candidate languages = ["Perl", "Perl6"] + def test_pm_perl_by_heuristics + assert_heuristics({ + "Perl" => all_fixtures("Perl", "*.pm"), + "Perl6" => all_fixtures("Perl6", "*.pm") + }) + end + # Candidate languages = ["ECL", "Prolog"] def test_ecl_prolog_by_heuristics assert_heuristics({