Heuristic rules to distinguish .sc files between SuperCollider and Scala

This commit is contained in:
Paul Chaignon
2014-10-23 14:22:12 -04:00
parent b6a9993c97
commit fd707ddf7e
2 changed files with 26 additions and 0 deletions

View File

@@ -25,6 +25,9 @@ module Linguist
if languages.all? { |l| ["Common Lisp", "OpenCL"].include?(l) }
result = disambiguate_cl(data, languages)
end
if languages.all? { |l| ["Scala", "SuperCollider"].include?(l) }
result = disambiguate_sc(data, languages)
end
return result
end
end
@@ -88,6 +91,17 @@ module Linguist
matches
end
def self.disambiguate_sc(data, languages)
matches = []
if (/\^(this|super)\./.match(data) or /^\s*(\+|\*)\s*\w+\s*{/.match(data) or /^\s*~\w+\s*=\./.match(data))
matches << Language["SuperCollider"]
end
if (/^\s*import (scala|java)\./.match(data) or /^\s*val\s+\w+\s*=/.match(data) or /^\s*class\b/.match(data))
matches << Language["Scala"]
end
matches
end
def self.active?
!!ACTIVE
end

View File

@@ -98,4 +98,16 @@ class TestHeuristcs < Test::Unit::TestCase
end
end
end
def test_sc_supercollider_by_heuristics
languages = ["Scala", "SuperCollider"]
results = Heuristics.disambiguate_sc(fixture("SuperCollider/WarpPreset.sc"), languages)
assert_equal Language["SuperCollider"], results.first
end
def test_sc_scala_by_heuristics
languages = ["Scala", "SuperCollider"]
results = Heuristics.disambiguate_sc(fixture("Scala/node11.sc"), languages)
assert_equal Language["Scala"], results.first
end
end