diff --git a/lib/linguist/heuristics.rb b/lib/linguist/heuristics.rb index 8871f118..a89f7c70 100644 --- a/lib/linguist/heuristics.rb +++ b/lib/linguist/heuristics.rb @@ -6,33 +6,19 @@ module Linguist # Public: Given an array of String language names, a # apply all heuristics against the given data and return an array # of matching languages, or nil. + # # data - Array of tokens or String data to analyze. # languages - Array of language name Strings to restrict to. - + # # Returns an array of language name Strings, or [] def self.find_by_heuristics(data, languages) - if languages.all? { |l| ["pod", "perl"].include?(l.downcase) } - disambiguate_pod(data, languages) - elsif languages.all? { |l| ["objective-c", "c++"].include?(l.downcase) } + if languages.all? { |l| ["Objective-C", "C++"].include?(l) } disambiguate_h(data, languages) end end - # Internal: Initialize a Heuristics class - def initialize - end - - # .pod extensions are ambigious between perl and pod. - # - # Returns an array of still-possible languages, or nil - def self.disambiguate_pod(data, languages) - matches = [] - matches << Language["Perl"] if data.include?("my $") - matches - end - # .h extensions are ambigious between C, C++, and Objective-C. - # We want to look for Objective-C. + # We want to shortcut look for Objective-C. def self.disambiguate_h(data, languages) matches = [] matches << Language["Objective-C"] if data.include?("@interface") diff --git a/test/test_heuristics.rb b/test/test_heuristics.rb index eb5f251c..871e9878 100644 --- a/test/test_heuristics.rb +++ b/test/test_heuristics.rb @@ -20,4 +20,9 @@ class TestHeuristcs < Test::Unit::TestCase results = Heuristics.find_by_heuristics(fixture("Objective-C/StyleViewController.h"), languages) assert_equal Language["Objective-C"], results.first end + + def test_detect_still_works_if_nothing_matches + match = Language.detect("Hello.m", fixture("Objective-C/hello.m")) + assert_equal Language["Objective-C"], match + end end