Merge pull request #20 from earl/disambiguate-r

Guess if .r is R or REBOL
This commit is contained in:
Joshua Peek
2011-06-28 21:26:24 -07:00
4 changed files with 29 additions and 0 deletions

View File

@@ -259,6 +259,9 @@ module Linguist
# If its a header file (.h) try to guess the language
header_language ||
# If it's a .r file, try to guess the language
r_language ||
# See if there is a Language for the extension
pathname.language ||
@@ -288,6 +291,19 @@ module Linguist
end
end
# Internal: Guess language of .r files.
#
# Returns a Language.
def r_language
return unless extname == '.r'
if lines.grep(/(rebol|(:\s+func|make\s+object!|^\s*context)\s*\[)/i).any?
Language['Rebol']
else
Language['R']
end
end
# Internal: Extract the script name from the shebang line
#
# Requires Blob#data

4
test/fixtures/hello-r.R vendored Normal file
View File

@@ -0,0 +1,4 @@
hello <- function() {
print("hello, world!")
}
hello()

5
test/fixtures/hello-rebol.r vendored Normal file
View File

@@ -0,0 +1,5 @@
REBOL []
hello: func [] [
print "hello, world!"
]
hello

View File

@@ -224,6 +224,10 @@ class TestBlob < Test::Unit::TestCase
assert_equal Language['Ruby'], blob("wrong_shebang.rb").language
assert_nil blob("octocat.png").language
# .r disambiguation
assert_equal Language['R'], blob("hello-r.R").language
assert_equal Language['Rebol'], blob("hello-rebol.r").language
# ML
assert_equal Language['OCaml'], blob("Foo.ml").language
assert_equal Language['Standard ML'], blob("Foo.sig").language