Class: Linguist::Shebang
- Inherits:
-
Object
- Object
- Linguist::Shebang
- Defined in:
- lib/linguist/shebang.rb
Class Method Summary collapse
-
.call(blob, _ = nil) ⇒ Object
Public: Use shebang to detect language of the blob.
-
.interpreter(data) ⇒ Object
Public: Get the interpreter from the shebang.
Class Method Details
.call(blob, _ = nil) ⇒ Object
Public: Use shebang to detect language of the blob.
blob - An object that quacks like a blob.
Examples
Shebang.call(FileBlob.new("path/to/file"))
Returns an Array with one Language if the blob has a shebang with a valid interpreter, or empty if there is no shebang.
13 14 15 |
# File 'lib/linguist/shebang.rb', line 13 def self.call(blob, _ = nil) Language.find_by_interpreter interpreter(blob.data) end |
.interpreter(data) ⇒ Object
Public: Get the interpreter from the shebang
Returns a String or nil
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/linguist/shebang.rb', line 20 def self.interpreter(data) lines = data.lines return unless match = /^#! ?(.*)$/.match(lines.first) tokens = match[1].split(' ') script = tokens.first.split('/').last script = tokens[1] if script == 'env' # If script has an invalid shebang, we might get here return unless script # "python2.6" -> "python2" script.sub! $1, '' if script =~ /(\.\d+)$/ # Check for multiline shebang hacks that call `exec` if script == 'sh' && lines.first(5).any? { |l| l.match(/exec (\w+).+\$0.+\$@/) } script = $1 end File.basename(script) end |