class Linguist::Strategy::Modeline
Constants
- EMACS_MODELINE
- MODELINES
- SEARCH_SCOPE
Scope of the search for modelines Number of lines to check at the beginning and at the end of the file
- VIM_MODELINE_1
First form vim modeline [text]white}{vi:|vim:|ex:{options} ex: 'vim: syntax=ruby'
- VIM_MODELINE_2
Second form vim modeline (compatible with some versions of Vi)
- text]white}{vi:|vim:|Vim:|ex:se[t
-
{options}:[text]
ex: 'vim set syntax=ruby:'
Public Class Methods
call(blob, _ = nil)
click to toggle source
Public: Detects language based on Vim and Emacs modelines
blob - An object that quacks like a blob.
Examples
Modeline.call(FileBlob.new("path/to/file"))
Returns an Array with one Language if the blob has a Vim or Emacs modeline that matches a Language name or alias. Returns an empty array if no match.
# File lib/linguist/strategy/modeline.rb, line 32 def self.call(blob, _ = nil) header = blob.lines.first(SEARCH_SCOPE).join("\n") footer = blob.lines.last(SEARCH_SCOPE).join("\n") Array(Language.find_by_alias(modeline(header + footer))) end
modeline(data)
click to toggle source
Public: Get the modeline from the first n-lines of the file
Returns a String or nil
# File lib/linguist/strategy/modeline.rb, line 41 def self.modeline(data) match = MODELINES.map { |regex| data.match(regex) }.reject(&:nil?).first match[1] if match end