Detect language from shebang script

This commit is contained in:
Joshua Peek
2011-05-13 16:18:30 -05:00
parent 74b26fdfc9
commit 5edd3a02be
22 changed files with 155 additions and 0 deletions

View File

@@ -1,3 +1,4 @@
require 'linguist/language'
require 'linguist/mime'
require 'linguist/pathname'
@@ -77,5 +78,65 @@ module Linguist
def viewable?
!file? && !large?
end
def language
if text?
shebang_language || name.language
else
Language['Text']
end
end
def lexer
language.lexer
end
def shebang_script
return if !text? || large?
if (match = data.match(/(.+)\n?/)) && (bang = match[0]) =~ /^#!/
bang.sub!(/^#! /, '#!')
tokens = bang.split(' ')
pieces = tokens.first.split('/')
if pieces.size > 1
script = pieces.last
else
script = pieces.first.sub('#!', '')
end
script = script == 'env' ? tokens[1] : script
# python2.4 => python
if script =~ /((?:\d+\.?)+)/
script.sub! $1, ''
end
script
end
end
def shebang_language
if script = shebang_script
case script
when 'bash'
Language['Shell']
when 'groovy'
Language['Java']
when 'macruby'
Language['Ruby']
when 'node'
Language['JavaScript']
when 'rake'
Language['Ruby']
when 'sh'
Language['Shell']
when 'zsh'
Language['Shell']
else
lang = Language.find_by_lexer(shebang_script)
lang != Language['Text'] ? lang : nil
end
end
end
end
end