diff --git a/lib/linguist/language.rb b/lib/linguist/language.rb index 71ddf61b..a528e0b9 100644 --- a/lib/linguist/language.rb +++ b/lib/linguist/language.rb @@ -222,6 +222,13 @@ module Linguist @overrides = attributes[:overrides] || [] @filenames = attributes[:filenames] || [] + @primary_extension = default_primary_extension || extensions.first + + # Prepend primary extension unless its already included + if primary_extension && !extensions.include?(primary_extension) + @extensions = [primary_extension] + extensions + end + # Set popular, and searchable flags @popular = attributes.key?(:popular) ? attributes[:popular] : false @searchable = attributes.key?(:searchable) ? attributes[:searchable] : true @@ -288,6 +295,14 @@ module Linguist # Returns the extensions Array attr_reader :extensions + # Public: Get primary extension + # + # Defaults to the first extension but can be overriden + # in the languages.yml. + # + # Returns the extension String. + attr_reader :primary_extension + # Internal: Get overridden extensions. # # Returns the extensions Array. @@ -309,6 +324,13 @@ module Linguist name.downcase.gsub(/\s/, '-') end + # Internal: Get default primary extension. + # + # Returns the extension String. + def default_primary_extension + extensions.first + end + # Public: Get Language group # # Returns a Language diff --git a/test/test_language.rb b/test/test_language.rb index 7dc1755c..1906763b 100644 --- a/test/test_language.rb +++ b/test/test_language.rb @@ -273,6 +273,12 @@ class TestLanguage < Test::Unit::TestCase assert Language['Ruby'].extensions.include?('.rb') end + def test_primary_extension + assert_equal '.pl', Language['Perl'].primary_extension + assert_equal '.py', Language['Python'].primary_extension + assert_equal '.rb', Language['Ruby'].primary_extension + end + def test_eql assert Language['Ruby'].eql?(Language['Ruby']) assert !Language['Ruby'].eql?(Language['Python'])