Basic Matlab detection

Fixes #15
This commit is contained in:
Joshua Peek
2011-07-05 09:34:33 -05:00
parent cc3692b320
commit 5ecc4421d7
2 changed files with 40 additions and 0 deletions

View File

@@ -278,6 +278,9 @@ module Linguist
# If its a header file (.h) try to guess the language # If its a header file (.h) try to guess the language
header_language || header_language ||
# If it's a .m file, try to guess the language
m_language ||
# If it's a .r file, try to guess the language # If it's a .r file, try to guess the language
r_language || r_language ||
@@ -310,6 +313,37 @@ module Linguist
end end
end end
# Internal: Guess language of .m files.
#
# Objective-C heuristics:
# * Keywords
#
# Matlab heuristics:
# * Leading function keyword
# * "%" comments
#
# Returns a Language.
def m_language
return unless extname == '.m'
# Objective-C keywords
if lines.grep(/^#import|@(interface|implementation|property|synthesize|end)/).any?
Language['Objective-C']
# File function
elsif lines.first.to_s =~ /^function /
Language['Matlab']
# Matlab comment
elsif lines.grep(/^%/).any?
Language['Matlab']
# Fallback to Objective-C, don't want any Matlab false positives
else
Language['Objective-C']
end
end
# Internal: Guess language of .r files. # Internal: Guess language of .r files.
# #
# Returns a Language. # Returns a Language.

View File

@@ -234,6 +234,12 @@ class TestBlob < Test::Unit::TestCase
assert_equal Language['R'], blob("hello-r.R").language assert_equal Language['R'], blob("hello-r.R").language
assert_equal Language['Rebol'], blob("hello-rebol.r").language assert_equal Language['Rebol'], blob("hello-rebol.r").language
# .m disambiguation
assert_equal Language['Objective-C'], blob("Foo.m").language
assert_equal Language['Objective-C'], blob("hello.m").language
assert_equal Language['Matlab'], blob("matlab_function.m").language
# assert_equal Language['Matlab'], blob("matlab_script.m").language
# ML # ML
assert_equal Language['OCaml'], blob("Foo.ml").language assert_equal Language['OCaml'], blob("Foo.ml").language
assert_equal Language['Standard ML'], blob("Foo.sig").language assert_equal Language['Standard ML'], blob("Foo.sig").language