Class: Linguist::Strategy::Modeline
- Inherits:
-
Object
- Object
- Linguist::Strategy::Modeline
- Defined in:
- lib/linguist/strategy/modeline.rb
Constant Summary collapse
- EMACS_MODELINE =
/-\*-\s*(?:(?!mode)[\w-]+\s*:\s*(?:[\w+-]+)\s*;?\s*)*(?:mode\s*:)?\s*([\w+-]+)\s*(?:;\s*(?!mode)[\w-]+\s*:\s*[\w+-]+\s*)*;?\s*-\*-/i- VIM_MODELINE_1 =
First form vim modeline [text]whitevi:|vim:|ex:options ex: ‘vim: syntax=ruby’
/(?:vim|vi|ex):\s*(?:ft|filetype|syntax)=(\w+)\s?/i- VIM_MODELINE_2 =
Second form vim modeline (compatible with some versions of Vi)
- text]whitevi:|vim:|Vim:|ex:se[t
-
options:[text]
ex: ‘vim set syntax=ruby:’
/(?:vim|vi|Vim|ex):\s*se(?:t)?.*\s(?:ft|filetype|syntax)=(\w+)\s?.*:/i- MODELINES =
[EMACS_MODELINE, VIM_MODELINE_1, VIM_MODELINE_2]
- SEARCH_SCOPE =
Scope of the search for modelines Number of lines to check at the beginning and at the end of the file
5
Class Method Summary collapse
-
.call(blob, _ = nil) ⇒ Object
Public: Detects language based on Vim and Emacs modelines.
-
.modeline(data) ⇒ Object
Public: Get the modeline from the first n-lines of the file.
Class Method Details
.call(blob, _ = nil) ⇒ Object
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.
32 33 34 35 36 |
# File 'lib/linguist/strategy/modeline.rb', line 32 def self.call(blob, _ = nil) header = blob.lines.first(SEARCH_SCOPE).join("\n") = blob.lines.last(SEARCH_SCOPE).join("\n") Array(Language.find_by_alias(modeline(header + ))) end |
.modeline(data) ⇒ Object
Public: Get the modeline from the first n-lines of the file
Returns a String or nil
41 42 43 44 |
# 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 |