Class: Linguist::Strategy::Extension

Inherits:
Object
  • Object
show all
Defined in:
lib/linguist/strategy/extension.rb

Overview

Detects language based on extension

Class Method Summary collapse

Class Method Details

.call(blob, candidates) ⇒ Object

Public: Use the file extension to detect the blob’s language.

blob - An object that quacks like a blob. candidates - A list of candidate languages.

Examples

Extension.call(FileBlob.new("path/to/file"))

Returns an array of languages associated with a blob’s file extension. Selected languages must be in the candidate list, except if it’s empty, in which case any language is a valid candidate.



20
21
22
23
24
# File 'lib/linguist/strategy/extension.rb', line 20

def self.call(blob, candidates)
  return candidates if generic? blob.name.to_s
  languages = Language.find_by_extension(blob.name.to_s)
  candidates.any? ? candidates & languages : languages
end

.generic?(filename) ⇒ Boolean

Public: Return true if filename uses a generic extension.

Returns:

  • (Boolean)


27
28
29
30
# File 'lib/linguist/strategy/extension.rb', line 27

def self.generic?(filename)
  self.load
  @generic.any? { |ext| filename.downcase.end_with? ext }
end

.loadObject

Internal: Load the contents of ‘generic.yml`



35
36
37
38
39
# File 'lib/linguist/strategy/extension.rb', line 35

def self.load()
  return if @generic.any?
  data = YAML.load_file(File.expand_path("../../generic.yml", __FILE__))
  @generic = data['extensions']
end