mirror of
https://github.com/KevinMidboe/linguist.git
synced 2026-01-10 11:25:32 +00:00
Separate filename and extension configuration
This commit is contained in:
@@ -260,7 +260,7 @@ module Linguist
|
|||||||
language
|
language
|
||||||
|
|
||||||
# See if there is a Language for the extension
|
# See if there is a Language for the extension
|
||||||
elsif language = Language.find_by_extension(extname)
|
elsif language = Language.find_by_filename(pathname.to_s)
|
||||||
language
|
language
|
||||||
|
|
||||||
# Try to detect Language from shebang line
|
# Try to detect Language from shebang line
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ module Linguist
|
|||||||
@name_index = {}
|
@name_index = {}
|
||||||
@alias_index = {}
|
@alias_index = {}
|
||||||
@extension_index = {}
|
@extension_index = {}
|
||||||
|
@filename_index = {}
|
||||||
|
|
||||||
# Internal: Create a new Language object
|
# Internal: Create a new Language object
|
||||||
#
|
#
|
||||||
@@ -37,6 +38,10 @@ module Linguist
|
|||||||
end
|
end
|
||||||
|
|
||||||
language.extensions.each do |extension|
|
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
|
# All Language extensions should be unique. Warn if there is a
|
||||||
# duplicate.
|
# duplicate.
|
||||||
if @extension_index.key?(extension)
|
if @extension_index.key?(extension)
|
||||||
@@ -47,7 +52,11 @@ module Linguist
|
|||||||
@extension_index[extension] = language
|
@extension_index[extension] = language
|
||||||
|
|
||||||
# Index the extension without a leading ".": "rb"
|
# 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
|
end
|
||||||
|
|
||||||
language
|
language
|
||||||
@@ -102,6 +111,21 @@ module Linguist
|
|||||||
@extension_index[extension]
|
@extension_index[extension]
|
||||||
end
|
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.
|
# Public: Look up Language by its name or lexer.
|
||||||
#
|
#
|
||||||
# name - The case-insensitive String name of the Language
|
# name - The case-insensitive String name of the Language
|
||||||
@@ -163,6 +187,7 @@ module Linguist
|
|||||||
# Set extensions or default to [].
|
# Set extensions or default to [].
|
||||||
# Consider using `@lexer.extensions`
|
# Consider using `@lexer.extensions`
|
||||||
@extensions = attributes[:extensions] || []
|
@extensions = attributes[:extensions] || []
|
||||||
|
@filenames = attributes[:filenames] || []
|
||||||
|
|
||||||
# Set popular, common, and searchable flags
|
# Set popular, common, and searchable flags
|
||||||
@popular = attributes.key?(:popular) ? attributes[:popular] : false
|
@popular = attributes.key?(:popular) ? attributes[:popular] : false
|
||||||
@@ -211,11 +236,20 @@ module Linguist
|
|||||||
#
|
#
|
||||||
# Examples
|
# Examples
|
||||||
#
|
#
|
||||||
# # => ['.rb', '.rake', 'Rakefile', ...]
|
# # => ['.rb', '.rake', ...]
|
||||||
#
|
#
|
||||||
# Returns the extensions Array
|
# Returns the extensions Array
|
||||||
attr_reader :extensions
|
attr_reader :extensions
|
||||||
|
|
||||||
|
# Public: Get filenames
|
||||||
|
#
|
||||||
|
# Examples
|
||||||
|
#
|
||||||
|
# # => ['Rakefile', ...]
|
||||||
|
#
|
||||||
|
# Returns the extensions Array
|
||||||
|
attr_reader :filenames
|
||||||
|
|
||||||
# Internal: Get default alias name
|
# Internal: Get default alias name
|
||||||
#
|
#
|
||||||
# Returns the alias name String
|
# Returns the alias name String
|
||||||
@@ -302,6 +336,7 @@ module Linguist
|
|||||||
:searchable => options.key?(:searchable) ? options[:searchable] : true,
|
:searchable => options.key?(:searchable) ? options[:searchable] : true,
|
||||||
:search_term => options[:search_term],
|
:search_term => options[:search_term],
|
||||||
:extensions => options[:ext],
|
:extensions => options[:ext],
|
||||||
|
:filenames => options[:filenames],
|
||||||
:popular => popular.include?(name),
|
:popular => popular.include?(name),
|
||||||
:common => common.include?(name)
|
:common => common.include?(name)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -105,6 +105,7 @@ Clojure:
|
|||||||
CoffeeScript:
|
CoffeeScript:
|
||||||
:ext:
|
:ext:
|
||||||
- .coffee
|
- .coffee
|
||||||
|
:filenames:
|
||||||
- Cakefile
|
- Cakefile
|
||||||
ColdFusion:
|
ColdFusion:
|
||||||
:lexer: ColdFusion HTML
|
:lexer: ColdFusion HTML
|
||||||
@@ -249,9 +250,10 @@ Haskell:
|
|||||||
INI:
|
INI:
|
||||||
:ext:
|
:ext:
|
||||||
- .cfg
|
- .cfg
|
||||||
- .gitconfig
|
|
||||||
- .ini
|
- .ini
|
||||||
- .properties
|
- .properties
|
||||||
|
:filenames:
|
||||||
|
- .gitconfig
|
||||||
IRC log:
|
IRC log:
|
||||||
:lexer: IRC logs
|
:lexer: IRC logs
|
||||||
:search_term: irc
|
:search_term: irc
|
||||||
@@ -277,11 +279,12 @@ JavaScript:
|
|||||||
:ext:
|
:ext:
|
||||||
- .js
|
- .js
|
||||||
- .sjs
|
- .sjs
|
||||||
- Jakefile
|
|
||||||
- .jss
|
- .jss
|
||||||
- .ssjs
|
- .ssjs
|
||||||
- .jsx
|
- .jsx
|
||||||
- .jake
|
- .jake
|
||||||
|
:filenames:
|
||||||
|
- Jakefile
|
||||||
JSON:
|
JSON:
|
||||||
:lexer: javascript
|
:lexer: javascript
|
||||||
:search_term: javascript
|
:search_term: javascript
|
||||||
@@ -303,6 +306,7 @@ Lua:
|
|||||||
Makefile:
|
Makefile:
|
||||||
:ext:
|
:ext:
|
||||||
- .mak
|
- .mak
|
||||||
|
:filenames:
|
||||||
- Makefile
|
- Makefile
|
||||||
Mako:
|
Mako:
|
||||||
:ext:
|
:ext:
|
||||||
@@ -341,6 +345,7 @@ Nu:
|
|||||||
- nush
|
- nush
|
||||||
:ext:
|
:ext:
|
||||||
- .nu
|
- .nu
|
||||||
|
:filenames:
|
||||||
- Nukefile
|
- Nukefile
|
||||||
NumPy:
|
NumPy:
|
||||||
:ext:
|
:ext:
|
||||||
@@ -451,16 +456,17 @@ Ruby:
|
|||||||
- .rb
|
- .rb
|
||||||
- .ru
|
- .ru
|
||||||
- .builder
|
- .builder
|
||||||
- Capfile
|
|
||||||
- .rbw
|
- .rbw
|
||||||
- .rbx
|
- .rbx
|
||||||
- .god
|
- .god
|
||||||
- .rake
|
- .rake
|
||||||
- .gemspec
|
- .gemspec
|
||||||
- Rakefile
|
|
||||||
- .irbrc
|
- .irbrc
|
||||||
- Thorfile
|
|
||||||
- .thor
|
- .thor
|
||||||
|
:filenames:
|
||||||
|
- Capfile
|
||||||
|
- Rakefile
|
||||||
|
- Thorfile
|
||||||
- Gemfile
|
- Gemfile
|
||||||
SQL:
|
SQL:
|
||||||
:searchable: false
|
:searchable: false
|
||||||
@@ -491,10 +497,11 @@ Shell:
|
|||||||
- zsh
|
- zsh
|
||||||
:ext:
|
:ext:
|
||||||
- .bash
|
- .bash
|
||||||
|
- .sh
|
||||||
|
:filenames:
|
||||||
- .bash_profile
|
- .bash_profile
|
||||||
- .bashrc
|
- .bashrc
|
||||||
- .profile
|
- .profile
|
||||||
- .sh
|
|
||||||
- .zlogin
|
- .zlogin
|
||||||
- .zsh
|
- .zsh
|
||||||
- .zshrc
|
- .zshrc
|
||||||
@@ -548,6 +555,7 @@ VimL:
|
|||||||
- vim
|
- vim
|
||||||
:ext:
|
:ext:
|
||||||
- .vim
|
- .vim
|
||||||
|
:filenames:
|
||||||
- .vimrc
|
- .vimrc
|
||||||
- .gvimrc
|
- .gvimrc
|
||||||
Visual Basic:
|
Visual Basic:
|
||||||
@@ -583,6 +591,7 @@ YAML:
|
|||||||
:ext:
|
:ext:
|
||||||
- .yml
|
- .yml
|
||||||
- .yaml
|
- .yaml
|
||||||
|
:filenames:
|
||||||
- .gemrc
|
- .gemrc
|
||||||
Java Server Pages:
|
Java Server Pages:
|
||||||
:lexer: Java Server Page
|
:lexer: Java Server Page
|
||||||
|
|||||||
@@ -39,18 +39,9 @@ module Linguist
|
|||||||
# Pathname.new('file.rb').extname
|
# Pathname.new('file.rb').extname
|
||||||
# # => '.rb'
|
# # => '.rb'
|
||||||
#
|
#
|
||||||
# Pathname.new('Rakefile').extname
|
|
||||||
# # => 'Rakefile'
|
|
||||||
#
|
|
||||||
# Returns a String.
|
# Returns a String.
|
||||||
def extname
|
def extname
|
||||||
if basename[0] == ?.
|
File.extname(@path)
|
||||||
basename
|
|
||||||
elsif basename.include?('.')
|
|
||||||
File.extname(basename)
|
|
||||||
else
|
|
||||||
basename
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# Public: Get the language of the path
|
# Public: Get the language of the path
|
||||||
@@ -65,7 +56,7 @@ module Linguist
|
|||||||
#
|
#
|
||||||
# Returns a Langauge.
|
# Returns a Langauge.
|
||||||
def language
|
def language
|
||||||
Language.find_by_extension(extname) || Language['Text']
|
Language.find_by_filename(@path) || Language['Text']
|
||||||
end
|
end
|
||||||
|
|
||||||
# Internal: Has a language.
|
# Internal: Has a language.
|
||||||
@@ -74,7 +65,7 @@ module Linguist
|
|||||||
#
|
#
|
||||||
# Returns true or false.
|
# Returns true or false.
|
||||||
def language?
|
def language?
|
||||||
Language.find_by_extension(extname) ? true : false
|
Language.find_by_filename(@path) ? true : false
|
||||||
end
|
end
|
||||||
|
|
||||||
# Deprecated: Get the lexer of the path
|
# Deprecated: Get the lexer of the path
|
||||||
|
|||||||
@@ -92,7 +92,11 @@ class TestBlob < Test::Unit::TestCase
|
|||||||
assert blob("README").text?
|
assert blob("README").text?
|
||||||
assert blob("file.json").text?
|
assert blob("file.json").text?
|
||||||
assert blob("file.txt").text?
|
assert blob("file.txt").text?
|
||||||
|
assert blob("md").text?
|
||||||
assert blob("script.sh").text?
|
assert blob("script.sh").text?
|
||||||
|
assert blob("tender.md").text?
|
||||||
|
assert blob("txt").text?
|
||||||
|
assert blob("zip").text?
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_image
|
def test_image
|
||||||
|
|||||||
@@ -108,6 +108,15 @@ class TestLanguage < Test::Unit::TestCase
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_find_by_filename
|
||||||
|
assert_equal Language['Ruby'], Language.find_by_filename('foo.rb')
|
||||||
|
assert_equal Language['Ruby'], Language.find_by_filename('foo/bar.rb')
|
||||||
|
assert_equal Language['Ruby'], Language.find_by_filename('Rakefile')
|
||||||
|
assert_nil Language.find_by_filename('rb')
|
||||||
|
assert_nil Language.find_by_filename('.rb')
|
||||||
|
assert_nil Language.find_by_filename('.kt')
|
||||||
|
end
|
||||||
|
|
||||||
def test_find
|
def test_find
|
||||||
assert_equal "Ruby", Language['Ruby'].name
|
assert_equal "Ruby", Language['Ruby'].name
|
||||||
assert_equal "Ruby", Language['ruby'].name
|
assert_equal "Ruby", Language['ruby'].name
|
||||||
|
|||||||
@@ -13,21 +13,19 @@ class TestPathname < Test::Unit::TestCase
|
|||||||
assert_equal 'file.rb', Pathname.new("file.rb").basename
|
assert_equal 'file.rb', Pathname.new("file.rb").basename
|
||||||
assert_equal 'file.rb', Pathname.new("./file.rb").basename
|
assert_equal 'file.rb', Pathname.new("./file.rb").basename
|
||||||
assert_equal 'file.rb', Pathname.new("sub/dir/file.rb").basename
|
assert_equal 'file.rb', Pathname.new("sub/dir/file.rb").basename
|
||||||
|
assert_equal '.profile', Pathname.new(".profile").basename
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_extname
|
def test_extname
|
||||||
assert_equal '.rb', Pathname.new(".rb").extname
|
|
||||||
assert_equal '.rb', Pathname.new("file.rb").extname
|
assert_equal '.rb', Pathname.new("file.rb").extname
|
||||||
assert_equal '.rb', Pathname.new("./file.rb").extname
|
assert_equal '.rb', Pathname.new("./file.rb").extname
|
||||||
assert_equal '.rb', Pathname.new("sub/dir/file.rb").extname
|
assert_equal '.rb', Pathname.new("sub/dir/file.rb").extname
|
||||||
|
assert_equal '', Pathname.new(".profile").extname
|
||||||
assert_equal 'Rakefile', Pathname.new("Rakefile").extname
|
|
||||||
assert_equal 'Rakefile', Pathname.new("./Rakefile").extname
|
|
||||||
assert_equal 'Rakefile', Pathname.new("vendor/Rakefile").extname
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_language
|
def test_language
|
||||||
assert_equal Language['Ruby'], Pathname.new(".rb").language
|
assert_equal Language['Text'], Pathname.new(".rb").language
|
||||||
|
|
||||||
assert_equal Language['Ruby'], Pathname.new("file.rb").language
|
assert_equal Language['Ruby'], Pathname.new("file.rb").language
|
||||||
assert_equal Language['Ruby'], Pathname.new("./file.rb").language
|
assert_equal Language['Ruby'], Pathname.new("./file.rb").language
|
||||||
assert_equal Language['Ruby'], Pathname.new("sub/dir/file.rb").language
|
assert_equal Language['Ruby'], Pathname.new("sub/dir/file.rb").language
|
||||||
|
|||||||
Reference in New Issue
Block a user