mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 17:50:22 +00:00
Separate filename and extension configuration
This commit is contained in:
@@ -8,6 +8,7 @@ module Linguist
|
||||
@name_index = {}
|
||||
@alias_index = {}
|
||||
@extension_index = {}
|
||||
@filename_index = {}
|
||||
|
||||
# Internal: Create a new Language object
|
||||
#
|
||||
@@ -37,6 +38,10 @@ module Linguist
|
||||
end
|
||||
|
||||
language.extensions.each do |extension|
|
||||
if extension !~ /^\./
|
||||
warn "Extension is missing a '.': #{extension.inspect}"
|
||||
end
|
||||
|
||||
# All Language extensions should be unique. Warn if there is a
|
||||
# duplicate.
|
||||
if @extension_index.key?(extension)
|
||||
@@ -47,7 +52,11 @@ module Linguist
|
||||
@extension_index[extension] = language
|
||||
|
||||
# Index the extension without a leading ".": "rb"
|
||||
@extension_index[extension.sub(/^./, '')] = language
|
||||
@extension_index[extension.sub(/^\./, '')] = language
|
||||
end
|
||||
|
||||
language.filenames.each do |filename|
|
||||
@filename_index[filename] = language
|
||||
end
|
||||
|
||||
language
|
||||
@@ -102,6 +111,21 @@ module Linguist
|
||||
@extension_index[extension]
|
||||
end
|
||||
|
||||
# Public: Look up Language by filename.
|
||||
#
|
||||
# filename - The path String.
|
||||
#
|
||||
# Examples
|
||||
#
|
||||
# Language.find_by_filename('foo.rb')
|
||||
# # => #<Language name="Ruby">
|
||||
#
|
||||
# Returns the Language or nil if none was found.
|
||||
def self.find_by_filename(filename)
|
||||
basename, extname = File.basename(filename), File.extname(filename)
|
||||
@filename_index[basename] || @extension_index[extname]
|
||||
end
|
||||
|
||||
# Public: Look up Language by its name or lexer.
|
||||
#
|
||||
# name - The case-insensitive String name of the Language
|
||||
@@ -163,6 +187,7 @@ module Linguist
|
||||
# Set extensions or default to [].
|
||||
# Consider using `@lexer.extensions`
|
||||
@extensions = attributes[:extensions] || []
|
||||
@filenames = attributes[:filenames] || []
|
||||
|
||||
# Set popular, common, and searchable flags
|
||||
@popular = attributes.key?(:popular) ? attributes[:popular] : false
|
||||
@@ -211,11 +236,20 @@ module Linguist
|
||||
#
|
||||
# Examples
|
||||
#
|
||||
# # => ['.rb', '.rake', 'Rakefile', ...]
|
||||
# # => ['.rb', '.rake', ...]
|
||||
#
|
||||
# Returns the extensions Array
|
||||
attr_reader :extensions
|
||||
|
||||
# Public: Get filenames
|
||||
#
|
||||
# Examples
|
||||
#
|
||||
# # => ['Rakefile', ...]
|
||||
#
|
||||
# Returns the extensions Array
|
||||
attr_reader :filenames
|
||||
|
||||
# Internal: Get default alias name
|
||||
#
|
||||
# Returns the alias name String
|
||||
@@ -302,6 +336,7 @@ module Linguist
|
||||
:searchable => options.key?(:searchable) ? options[:searchable] : true,
|
||||
:search_term => options[:search_term],
|
||||
:extensions => options[:ext],
|
||||
:filenames => options[:filenames],
|
||||
:popular => popular.include?(name),
|
||||
:common => common.include?(name)
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user