mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 17:50:22 +00:00
@@ -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.
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user