From 228d89649aa85f17b3e5844d526bfc390cec0780 Mon Sep 17 00:00:00 2001 From: Brandon Keepers Date: Fri, 7 Nov 2014 10:27:07 -0500 Subject: [PATCH 1/4] Add Language.find_by_extension --- lib/linguist/language.rb | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/lib/linguist/language.rb b/lib/linguist/language.rb index 49c4a6be..579288eb 100644 --- a/lib/linguist/language.rb +++ b/lib/linguist/language.rb @@ -194,9 +194,21 @@ module Linguist def self.find_by_filename(filename) basename = File.basename(filename) extname = FileBlob.new(filename).extension - langs = @filename_index[basename] + - @extension_index[extname] - langs.compact.uniq + (@filename_index[basename] + find_by_extension(extname)).compact.uniq + end + + # Public: Look up Languages by file extension. + # + # extname - The extension String. + # + # Examples + # + # Language.find_by_extension('rb') + # # => [#] + # + # Returns all matching Languages or [] if none were found. + def self.find_by_extension(extname) + @extension_index[extname] end # Public: Look up Languages by shebang line. From d54f86ae5850830c1f9eb984b27a51591c643917 Mon Sep 17 00:00:00 2001 From: Adam Roben Date: Mon, 10 Nov 2014 14:12:29 -0500 Subject: [PATCH 2/4] Add some tests for Language.find_by_extension --- test/test_language.rb | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/test/test_language.rb b/test/test_language.rb index f2bbfc8b..066f577a 100644 --- a/test/test_language.rb +++ b/test/test_language.rb @@ -241,6 +241,22 @@ class TestLanguage < Test::Unit::TestCase end end + def test_find_by_extension + assert_equal [], Language.find_by_extension('.factor-rc') + assert_equal [], Language.find_by_extension('rb') + assert_equal [], Language.find_by_extension('foo.rb') + assert_equal [Language['Ruby']], Language.find_by_extension('.rb') + assert_equal [Language['M'], Language['Mathematica'], Language['Matlab'], Language['Mercury'], Language['Objective-C']], Language.find_by_extension('.m') + end + + def test_find_all_by_extension + Language.all.each do |language| + language.extensions.each do |extension| + assert_include Language.find_by_extension(extension), language + end + end + end + def test_find_by_filename assert_equal [Language['Shell']], Language.find_by_filename('PKGBUILD') assert_equal [Language['Ruby']], Language.find_by_filename('foo.rb') From ffbe95d6e5dd210f6a950c9400a7446651322cc0 Mon Sep 17 00:00:00 2001 From: Adam Roben Date: Mon, 10 Nov 2014 14:15:21 -0500 Subject: [PATCH 3/4] Fix docs --- lib/linguist/language.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/linguist/language.rb b/lib/linguist/language.rb index 579288eb..5aa1db8c 100644 --- a/lib/linguist/language.rb +++ b/lib/linguist/language.rb @@ -203,7 +203,7 @@ module Linguist # # Examples # - # Language.find_by_extension('rb') + # Language.find_by_extension('.rb') # # => [#] # # Returns all matching Languages or [] if none were found. From 97a1adcef10f9a32dbc9b899b56fb96be8095ed2 Mon Sep 17 00:00:00 2001 From: Adam Roben Date: Mon, 10 Nov 2014 14:30:37 -0500 Subject: [PATCH 4/4] Allow extensions without a leading dot This makes the API a little easier to use. --- lib/linguist/language.rb | 4 ++++ test/test_language.rb | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/linguist/language.rb b/lib/linguist/language.rb index 5aa1db8c..3f90900f 100644 --- a/lib/linguist/language.rb +++ b/lib/linguist/language.rb @@ -206,8 +206,12 @@ module Linguist # Language.find_by_extension('.rb') # # => [#] # + # Language.find_by_extension('rb') + # # => [#] + # # Returns all matching Languages or [] if none were found. def self.find_by_extension(extname) + extname = ".#{extname}" unless extname.start_with?(".") @extension_index[extname] end diff --git a/test/test_language.rb b/test/test_language.rb index 066f577a..0c7adf81 100644 --- a/test/test_language.rb +++ b/test/test_language.rb @@ -243,8 +243,8 @@ class TestLanguage < Test::Unit::TestCase def test_find_by_extension assert_equal [], Language.find_by_extension('.factor-rc') - assert_equal [], Language.find_by_extension('rb') assert_equal [], Language.find_by_extension('foo.rb') + assert_equal [Language['Ruby']], Language.find_by_extension('rb') assert_equal [Language['Ruby']], Language.find_by_extension('.rb') assert_equal [Language['M'], Language['Mathematica'], Language['Matlab'], Language['Mercury'], Language['Objective-C']], Language.find_by_extension('.m') end