diff --git a/lib/linguist/classifier.rb b/lib/linguist/classifier.rb index 8b858e45..9e7b5319 100644 --- a/lib/linguist/classifier.rb +++ b/lib/linguist/classifier.rb @@ -18,8 +18,6 @@ module Linguist # # Returns an Array of Language objects, most probable first. def self.call(blob, possible_languages) - return [] if blob.symlink? - language_names = possible_languages.map(&:name) classify(Samples.cache, blob.data[0...CLASSIFIER_CONSIDER_BYTES], language_names).map do |name, _| Language[name] # Return the actual Language objects diff --git a/lib/linguist/file_blob.rb b/lib/linguist/file_blob.rb index bebebec6..f342d983 100644 --- a/lib/linguist/file_blob.rb +++ b/lib/linguist/file_blob.rb @@ -27,7 +27,7 @@ module Linguist end def symlink? - return @symlink if !@symlink.nil? + return @symlink if defined? @symlink @symlink = (File.symlink?(@fullpath) rescue false) end diff --git a/samples/Markdown/symlink.md b/samples/Markdown/symlink.md new file mode 120000 index 00000000..2b1c6388 --- /dev/null +++ b/samples/Markdown/symlink.md @@ -0,0 +1 @@ +README.mdown \ No newline at end of file diff --git a/test/test_heuristics.rb b/test/test_heuristics.rb index 5bcb5f08..ebf38dd2 100644 --- a/test/test_heuristics.rb +++ b/test/test_heuristics.rb @@ -13,8 +13,9 @@ class TestHeuristics < Minitest::Test end def all_fixtures(language_name, file="*") - Dir.glob("#{samples_path}/#{language_name}/#{file}") - - ["#{samples_path}/#{language_name}/filenames"] + fixs = Dir.glob("#{samples_path}/#{language_name}/#{file}") - + ["#{samples_path}/#{language_name}/filenames"] + fixs.reject { |f| File.symlink?(f) } end def test_no_match @@ -23,6 +24,10 @@ class TestHeuristics < Minitest::Test assert_equal [], results end + def test_symlink_empty + assert_equal [], Heuristics.call(file_blob("Markdown/symlink.md"), [Language["Markdown"]]) + end + def assert_heuristics(hash) candidates = hash.keys.map { |l| Language[l] } diff --git a/test/test_language.rb b/test/test_language.rb index 6589891a..ecb94ab8 100644 --- a/test/test_language.rb +++ b/test/test_language.rb @@ -473,4 +473,10 @@ class TestLanguage < Minitest::Test assert_nil Language.find_by_name(',') assert_nil Language.find_by_alias(',') end + + def test_detect_prefers_markdown_for_md + blob = Linguist::FileBlob.new(File.join(samples_path, "Markdown/symlink.md")) + match = Linguist.detect(blob) + assert_equal Language["Markdown"], match + end end