class Linguist::Language
Language names that are recognizable by GitHub. Defined languages can be highlighted, searched and listed under the Top Languages page.
Languages are defined in `lib/linguist/languages.yml`.
Constants
- TYPES
Valid Languages types
Attributes
Public: Get Ace mode
Examples
# => "text" # => "javascript" # => "c_cpp"
Returns a String name or nil
Public: Get aliases
Examples
Language['C++'].aliases # => ["cpp"]
Returns an Array of String names
Public: Get CodeMirror MIME type mode
Examples
# => "nil" # => "text/x-javascript" # => "text/x-csrc"
Returns a String name or nil
Public: Get CodeMirror mode
Maps to a directory in the `mode/` source code.
https://github.com/codemirror/CodeMirror/tree/master/mode
Examples
# => "nil" # => "javascript" # => "clike"
Returns a String name or nil
Public: Get color.
Returns a hex color String.
Public: Get extensions
Examples
# => ['.rb', '.rake', ...]
Returns the extensions Array
Public: Get filenames
Examples
# => ['Rakefile', ...]
Returns the extensions Array
Public: Get interpreters
Examples
# => ['awk', 'gawk', 'mawk' ...]
Returns the interpreters Array
Public: Get #language_id (used in GitHub search)
Examples
# => "1" # => "2" # => "3"
Returns the integer #language_id
Public: Get proper name
Examples
# => "Ruby" # => "Python" # => "Perl"
Returns the name String
Public: Get the name of a TextMate-compatible scope
Returns the scope
Public: Get type.
Returns a type Symbol or nil.
Public: Should language lines be wrapped
Returns true or false
Public Class Methods
Public: Look up Language by its name.
name - The String name of the Language
Examples
Language['Ruby'] # => #<Language name="Ruby"> Language['ruby'] # => #<Language name="Ruby">
Returns the Language or nil if none was found.
# File lib/linguist/language.rb, line 216 def self.[](name) return nil if name.to_s.empty? lang = @index[name.downcase] return lang if lang name = name.split(',').first return nil if name.to_s.empty? @index[name.downcase] end
Public: Get all Languages
Returns an Array of Languages
# File lib/linguist/language.rb, line 97 def self.all @languages end
Detect languages by a specific type
type - A symbol that exists within TYPES
Returns an array
# File lib/linguist/language.rb, line 42 def self.by_type(type) all.select { |h| h.type == type } end
Public: A List of languages with assigned colors.
Returns an Array of Languages.
# File lib/linguist/language.rb, line 255 def self.colors @colors ||= all.select(&:color).sort_by { |lang| lang.name.downcase } end
Internal: Create a new Language object
attributes - A hash of attributes
Returns a Language object
# File lib/linguist/language.rb, line 51 def self.create(attributes = {}) language = new(attributes) @languages << language # All Language names should be unique. Raise if there is a duplicate. if @name_index.key?(language.name) raise ArgumentError, "Duplicate language name: #{language.name}" end # Language name index @index[language.name.downcase] = @name_index[language.name.downcase] = language language.aliases.each do |name| # All Language aliases should be unique. Raise if there is a duplicate. if @alias_index.key?(name) raise ArgumentError, "Duplicate alias: #{name}" end @index[name.downcase] = @alias_index[name.downcase] = language end language.extensions.each do |extension| if extension !~ /^\./ raise ArgumentError, "Extension is missing a '.': #{extension.inspect}" end @extension_index[extension.downcase] << language end language.interpreters.each do |interpreter| @interpreter_index[interpreter] << language end language.filenames.each do |filename| @filename_index[filename] << language end @language_id_index[language.language_id] = language language end
Public: Look up Language by one of its aliases.
name - A String alias of the Language
Examples
Language.find_by_alias('cpp') # => #<Language name="C++">
Returns the Language or nil if none was found.
# File lib/linguist/language.rb, line 126 def self.find_by_alias(name) return nil if name.to_s.empty? name && (@alias_index[name.downcase] || @alias_index[name.split(',').first.downcase]) end
Public: Look up Languages by file extension.
The behaviour of this method recently changed. See the second example below.
filename - The path String.
Examples
Language.find_by_extension('dummy.rb') # => [#<Language name="Ruby">] Language.find_by_extension('rb') # => []
Returns all matching Languages or [] if none were found.
# File lib/linguist/language.rb, line 166 def self.find_by_extension(filename) # find the first extension with language definitions extname = FileBlob.new(filename.downcase).extensions.detect do |e| !@extension_index[e].empty? end @extension_index[extname] end
Public: Look up Languages by filename.
The behaviour of this method recently changed. See the second example below.
filename - The path String.
Examples
Language.find_by_filename('Cakefile') # => [#<Language name="CoffeeScript">] Language.find_by_filename('foo.rb') # => []
Returns all matching Languages or [] if none were found.
# File lib/linguist/language.rb, line 146 def self.find_by_filename(filename) basename = File.basename(filename) @filename_index[basename] end
Public: Look up Languages by its language_id.
#language_id - Integer of #language_id
Examples
Language.find_by_id(100) # => [#<Language name="Elixir">]
Returns the matching Language
# File lib/linguist/language.rb, line 199 def self.find_by_id(language_id) @language_id_index[language_id.to_i] end
Public: Look up Languages by interpreter.
interpreter - String of interpreter name
Examples
Language.find_by_interpreter("bash") # => [#<Language name="Bash">]
Returns the matching Language
# File lib/linguist/language.rb, line 185 def self.find_by_interpreter(interpreter) @interpreter_index[interpreter] end
Public: Look up Language by its proper name.
name - The String name of the Language
Examples
Language.find_by_name('Ruby') # => #<Language name="Ruby">
Returns the Language or nil if none was found.
# File lib/linguist/language.rb, line 111 def self.find_by_name(name) return nil if name.to_s.empty? name && (@name_index[name.downcase] || @name_index[name.split(',').first.downcase]) end
Internal: Initialize a new Language
attributes - A hash of attributes
# File lib/linguist/language.rb, line 262 def initialize(attributes = {}) # @name is required @name = attributes[:name] || raise(ArgumentError, "missing name") # Set type @type = attributes[:type] ? attributes[:type].to_sym : nil if @type && !TYPES.include?(@type) raise ArgumentError, "invalid type: #{@type}" end @color = attributes[:color] # Set aliases @aliases = [default_alias] + (attributes[:aliases] || []) # Load the TextMate scope name or try to guess one @tm_scope = attributes[:tm_scope] || begin context = case @type when :data, :markup, :prose 'text' when :programming, nil 'source' end "#{context}.#{@name.downcase}" end @ace_mode = attributes[:ace_mode] @codemirror_mode = attributes[:codemirror_mode] @codemirror_mime_type = attributes[:codemirror_mime_type] @wrap = attributes[:wrap] || false # Set the language_id @language_id = attributes[:language_id] # Set extensions or default to []. @extensions = attributes[:extensions] || [] @interpreters = attributes[:interpreters] || [] @filenames = attributes[:filenames] || [] # Set popular, and searchable flags @popular = attributes.key?(:popular) ? attributes[:popular] : false @searchable = attributes.key?(:searchable) ? attributes[:searchable] : true # If group name is set, save the name so we can lazy load it later if attributes[:group_name] @group = nil @group_name = attributes[:group_name] # Otherwise we can set it to self now else @group = self end end
Public: A List of popular languages
Popular languages are sorted to the top of language chooser dropdowns.
This list is configured in “popular.yml”.
Returns an Array of Languages.
# File lib/linguist/language.rb, line 236 def self.popular @popular ||= all.select(&:popular?).sort_by { |lang| lang.name.downcase } end
Public: A List of non-popular languages
Unpopular languages appear below popular ones in language chooser dropdowns.
This list is created from all the languages not listed in “popular.yml”.
Returns an Array of Languages.
# File lib/linguist/language.rb, line 248 def self.unpopular @unpopular ||= all.select(&:unpopular?).sort_by { |lang| lang.name.downcase } end
Public Instance Methods
# File lib/linguist/language.rb, line 488 def ==(other) eql?(other) end
Public: Get default alias name
Returns the alias name String
# File lib/linguist/language.rb, line 447 def default_alias name.downcase.gsub(/\s/, '-') end
# File lib/linguist/language.rb, line 492 def eql?(other) equal?(other) end
Public: Get URL escaped name.
Examples
"C%23" "C%2B%2B" "Common%20Lisp"
Returns the escaped String.
# File lib/linguist/language.rb, line 440 def escaped_name EscapeUtils.escape_url(name).gsub('+', '%20') end
# File lib/linguist/language.rb, line 496 def hash name.hash end
# File lib/linguist/language.rb, line 500 def inspect "#<#{self.class} name=#{name}>" end
Public: Is it popular?
Returns true or false
# File lib/linguist/language.rb, line 462 def popular? @popular end
Public: Is it searchable?
Unsearchable languages won't by indexed by solr and won't show up in the code search dropdown.
Returns true or false
# File lib/linguist/language.rb, line 479 def searchable? @searchable end
Public: Return name as String representation
# File lib/linguist/language.rb, line 484 def to_s name end
Public: Is it not popular?
Returns true or false
# File lib/linguist/language.rb, line 469 def unpopular? !popular? end