mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 17:50:22 +00:00
@@ -308,7 +308,7 @@ module Linguist
|
|||||||
# Fail fast if blob isn't viewable?
|
# Fail fast if blob isn't viewable?
|
||||||
return unless viewable?
|
return unless viewable?
|
||||||
|
|
||||||
if data && (match = data.match(/(.+)\n?/)) && (bang = match[0]) =~ /^#!/
|
if data && (match = lines[0].match(/(.+)\n?/)) && (bang = match[0]) =~ /^#!/
|
||||||
bang.sub!(/^#! /, '#!')
|
bang.sub!(/^#! /, '#!')
|
||||||
tokens = bang.split(' ')
|
tokens = bang.split(' ')
|
||||||
pieces = tokens.first.split('/')
|
pieces = tokens.first.split('/')
|
||||||
@@ -325,6 +325,16 @@ module Linguist
|
|||||||
script.sub! $1, ''
|
script.sub! $1, ''
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Check for multiline shebang hacks that exec themselves
|
||||||
|
#
|
||||||
|
# #!/bin/sh
|
||||||
|
# exec foo "$0" "$@"
|
||||||
|
#
|
||||||
|
if script == 'sh' &&
|
||||||
|
lines[0...5].any? { |l| l.match(/exec (\w+).+\$0.+\$@/) }
|
||||||
|
script = $1
|
||||||
|
end
|
||||||
|
|
||||||
script
|
script
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
7
test/fixtures/script.rkt
vendored
Normal file
7
test/fixtures/script.rkt
vendored
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#| -*- scheme -*-
|
||||||
|
exec racket -um "$0" "$@"
|
||||||
|
|#
|
||||||
|
|
||||||
|
(require racket/file racket/path racket/list racket/string
|
||||||
|
(for-syntax racket/base))
|
||||||
9
test/fixtures/script.scala
vendored
Normal file
9
test/fixtures/script.scala
vendored
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
exec scala "$0" "$@"
|
||||||
|
!#
|
||||||
|
|
||||||
|
object HelloWorld {
|
||||||
|
def main(args: Array[String]) {
|
||||||
|
println("Hello, world!")
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -286,6 +286,8 @@ class TestBlob < Test::Unit::TestCase
|
|||||||
assert_equal 'rake', blob("script.rake").shebang_script
|
assert_equal 'rake', blob("script.rake").shebang_script
|
||||||
assert_equal 'foo', blob("script.foo").shebang_script
|
assert_equal 'foo', blob("script.foo").shebang_script
|
||||||
assert_equal 'nush', blob("script.nu").shebang_script
|
assert_equal 'nush', blob("script.nu").shebang_script
|
||||||
|
assert_equal 'scala', blob("script.scala").shebang_script
|
||||||
|
assert_equal 'racket', blob("script.rkt").shebang_script
|
||||||
assert_equal nil, blob("foo.rb").shebang_script
|
assert_equal nil, blob("foo.rb").shebang_script
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -301,6 +303,8 @@ class TestBlob < Test::Unit::TestCase
|
|||||||
assert_equal Language['Ruby'], blob("script.mrb").shebang_language
|
assert_equal Language['Ruby'], blob("script.mrb").shebang_language
|
||||||
assert_equal Language['Ruby'], blob("script.rake").shebang_language
|
assert_equal Language['Ruby'], blob("script.rake").shebang_language
|
||||||
assert_equal Language['Nu'], blob("script.nu").shebang_language
|
assert_equal Language['Nu'], blob("script.nu").shebang_language
|
||||||
|
assert_equal Language['Scala'], blob("script.scala").shebang_language
|
||||||
|
assert_equal Language['Racket'], blob("script.rkt").shebang_language
|
||||||
assert_equal nil, blob("script.foo").shebang_language
|
assert_equal nil, blob("script.foo").shebang_language
|
||||||
assert_equal nil, blob("foo.rb").shebang_language
|
assert_equal nil, blob("foo.rb").shebang_language
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user