mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 17:50:22 +00:00
Allow classifier to run on symlinks as usual (#3948)
* Fixups for symlink detection, incl. test * assert the heuristics return none for symlink
This commit is contained in:
@@ -18,8 +18,6 @@ module Linguist
|
|||||||
#
|
#
|
||||||
# Returns an Array of Language objects, most probable first.
|
# Returns an Array of Language objects, most probable first.
|
||||||
def self.call(blob, possible_languages)
|
def self.call(blob, possible_languages)
|
||||||
return [] if blob.symlink?
|
|
||||||
|
|
||||||
language_names = possible_languages.map(&:name)
|
language_names = possible_languages.map(&:name)
|
||||||
classify(Samples.cache, blob.data[0...CLASSIFIER_CONSIDER_BYTES], language_names).map do |name, _|
|
classify(Samples.cache, blob.data[0...CLASSIFIER_CONSIDER_BYTES], language_names).map do |name, _|
|
||||||
Language[name] # Return the actual Language objects
|
Language[name] # Return the actual Language objects
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ module Linguist
|
|||||||
end
|
end
|
||||||
|
|
||||||
def symlink?
|
def symlink?
|
||||||
return @symlink if !@symlink.nil?
|
return @symlink if defined? @symlink
|
||||||
@symlink = (File.symlink?(@fullpath) rescue false)
|
@symlink = (File.symlink?(@fullpath) rescue false)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
1
samples/Markdown/symlink.md
Symbolic link
1
samples/Markdown/symlink.md
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
README.mdown
|
||||||
@@ -13,8 +13,9 @@ class TestHeuristics < Minitest::Test
|
|||||||
end
|
end
|
||||||
|
|
||||||
def all_fixtures(language_name, file="*")
|
def all_fixtures(language_name, file="*")
|
||||||
Dir.glob("#{samples_path}/#{language_name}/#{file}") -
|
fixs = Dir.glob("#{samples_path}/#{language_name}/#{file}") -
|
||||||
["#{samples_path}/#{language_name}/filenames"]
|
["#{samples_path}/#{language_name}/filenames"]
|
||||||
|
fixs.reject { |f| File.symlink?(f) }
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_no_match
|
def test_no_match
|
||||||
@@ -23,6 +24,10 @@ class TestHeuristics < Minitest::Test
|
|||||||
assert_equal [], results
|
assert_equal [], results
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_symlink_empty
|
||||||
|
assert_equal [], Heuristics.call(file_blob("Markdown/symlink.md"), [Language["Markdown"]])
|
||||||
|
end
|
||||||
|
|
||||||
def assert_heuristics(hash)
|
def assert_heuristics(hash)
|
||||||
candidates = hash.keys.map { |l| Language[l] }
|
candidates = hash.keys.map { |l| Language[l] }
|
||||||
|
|
||||||
|
|||||||
@@ -473,4 +473,10 @@ class TestLanguage < Minitest::Test
|
|||||||
assert_nil Language.find_by_name(',')
|
assert_nil Language.find_by_name(',')
|
||||||
assert_nil Language.find_by_alias(',')
|
assert_nil Language.find_by_alias(',')
|
||||||
end
|
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
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user