mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 17:50:22 +00:00
Merge pull request #2087 from pchaigno/case-sensitivity
Detection by extension made case-insensitive
This commit is contained in:
@@ -67,7 +67,7 @@ module Linguist
|
|||||||
#
|
#
|
||||||
# Returns an Array
|
# Returns an Array
|
||||||
def extensions
|
def extensions
|
||||||
basename, *segments = File.basename(name).split(".")
|
basename, *segments = File.basename(name).downcase.split(".")
|
||||||
|
|
||||||
segments.map.with_index do |segment, index|
|
segments.map.with_index do |segment, index|
|
||||||
"." + segments[index..-1].join(".")
|
"." + segments[index..-1].join(".")
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ module Linguist
|
|||||||
raise ArgumentError, "Extension is missing a '.': #{extension.inspect}"
|
raise ArgumentError, "Extension is missing a '.': #{extension.inspect}"
|
||||||
end
|
end
|
||||||
|
|
||||||
@extension_index[extension] << language
|
@extension_index[extension.downcase] << language
|
||||||
end
|
end
|
||||||
|
|
||||||
language.interpreters.each do |interpreter|
|
language.interpreters.each do |interpreter|
|
||||||
@@ -191,7 +191,7 @@ module Linguist
|
|||||||
# Returns all matching Languages or [] if none were found.
|
# Returns all matching Languages or [] if none were found.
|
||||||
def self.find_by_extension(extname)
|
def self.find_by_extension(extname)
|
||||||
extname = ".#{extname}" unless extname.start_with?(".")
|
extname = ".#{extname}" unless extname.start_with?(".")
|
||||||
@extension_index[extname]
|
@extension_index[extname.downcase]
|
||||||
end
|
end
|
||||||
|
|
||||||
# DEPRECATED
|
# DEPRECATED
|
||||||
@@ -528,8 +528,8 @@ module Linguist
|
|||||||
|
|
||||||
if extnames = extensions[name]
|
if extnames = extensions[name]
|
||||||
extnames.each do |extname|
|
extnames.each do |extname|
|
||||||
if !options['extensions'].index { |x| x.end_with? extname }
|
if !options['extensions'].index { |x| x.downcase.end_with? extname.downcase }
|
||||||
warn "#{name} has a sample with extension (#{extname}) that isn't explicitly defined in languages.yml" unless extname == '.script!'
|
warn "#{name} has a sample with extension (#{extname.downcase}) that isn't explicitly defined in languages.yml" unless extname == '.script!'
|
||||||
options['extensions'] << extname
|
options['extensions'] << extname
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -204,7 +204,6 @@ Assembly:
|
|||||||
- nasm
|
- nasm
|
||||||
extensions:
|
extensions:
|
||||||
- .asm
|
- .asm
|
||||||
- .ASM
|
|
||||||
- .a51
|
- .a51
|
||||||
- .nasm
|
- .nasm
|
||||||
tm_scope: source.asm.x86
|
tm_scope: source.asm.x86
|
||||||
@@ -352,8 +351,6 @@ C:
|
|||||||
color: "#555"
|
color: "#555"
|
||||||
extensions:
|
extensions:
|
||||||
- .c
|
- .c
|
||||||
- .C
|
|
||||||
- .H
|
|
||||||
- .cats
|
- .cats
|
||||||
- .h
|
- .h
|
||||||
- .idc
|
- .idc
|
||||||
@@ -435,8 +432,6 @@ COBOL:
|
|||||||
type: programming
|
type: programming
|
||||||
extensions:
|
extensions:
|
||||||
- .cob
|
- .cob
|
||||||
- .COB
|
|
||||||
- .CPY
|
|
||||||
- .cbl
|
- .cbl
|
||||||
- .ccp
|
- .ccp
|
||||||
- .cobol
|
- .cobol
|
||||||
@@ -888,14 +883,6 @@ FORTRAN:
|
|||||||
color: "#4d41b1"
|
color: "#4d41b1"
|
||||||
extensions:
|
extensions:
|
||||||
- .f90
|
- .f90
|
||||||
- .F
|
|
||||||
- .F03
|
|
||||||
- .F08
|
|
||||||
- .F77
|
|
||||||
- .F90
|
|
||||||
- .F95
|
|
||||||
- .FOR
|
|
||||||
- .FPP
|
|
||||||
- .f
|
- .f
|
||||||
- .f03
|
- .f03
|
||||||
- .f08
|
- .f08
|
||||||
@@ -939,9 +926,7 @@ Forth:
|
|||||||
color: "#341708"
|
color: "#341708"
|
||||||
extensions:
|
extensions:
|
||||||
- .fth
|
- .fth
|
||||||
- .4TH
|
|
||||||
- .4th
|
- .4th
|
||||||
- .F
|
|
||||||
- .f
|
- .f
|
||||||
- .for
|
- .for
|
||||||
- .forth
|
- .forth
|
||||||
@@ -990,7 +975,6 @@ GAS:
|
|||||||
group: Assembly
|
group: Assembly
|
||||||
extensions:
|
extensions:
|
||||||
- .s
|
- .s
|
||||||
- .S
|
|
||||||
tm_scope: source.asm.x86
|
tm_scope: source.asm.x86
|
||||||
ace_mode: assembly_x86
|
ace_mode: assembly_x86
|
||||||
|
|
||||||
@@ -1152,7 +1136,6 @@ Graphviz (DOT):
|
|||||||
tm_scope: source.dot
|
tm_scope: source.dot
|
||||||
extensions:
|
extensions:
|
||||||
- .dot
|
- .dot
|
||||||
- .DOT
|
|
||||||
- .gv
|
- .gv
|
||||||
ace_mode: text
|
ace_mode: text
|
||||||
|
|
||||||
@@ -2269,7 +2252,6 @@ Perl:
|
|||||||
color: "#0298c3"
|
color: "#0298c3"
|
||||||
extensions:
|
extensions:
|
||||||
- .pl
|
- .pl
|
||||||
- .PL
|
|
||||||
- .cgi
|
- .cgi
|
||||||
- .fcgi
|
- .fcgi
|
||||||
- .perl
|
- .perl
|
||||||
@@ -2502,8 +2484,6 @@ R:
|
|||||||
- splus
|
- splus
|
||||||
extensions:
|
extensions:
|
||||||
- .r
|
- .r
|
||||||
- .R
|
|
||||||
- .Rd
|
|
||||||
- .rd
|
- .rd
|
||||||
- .rsx
|
- .rsx
|
||||||
filenames:
|
filenames:
|
||||||
@@ -2556,7 +2536,6 @@ RMarkdown:
|
|||||||
ace_mode: markdown
|
ace_mode: markdown
|
||||||
extensions:
|
extensions:
|
||||||
- .rmd
|
- .rmd
|
||||||
- .Rmd
|
|
||||||
tm_scope: none
|
tm_scope: none
|
||||||
|
|
||||||
Racket:
|
Racket:
|
||||||
@@ -3270,11 +3249,11 @@ XML:
|
|||||||
- .sublime-snippet
|
- .sublime-snippet
|
||||||
- .targets
|
- .targets
|
||||||
- .tmCommand
|
- .tmCommand
|
||||||
|
- .tml
|
||||||
- .tmLanguage
|
- .tmLanguage
|
||||||
- .tmPreferences
|
- .tmPreferences
|
||||||
- .tmSnippet
|
- .tmSnippet
|
||||||
- .tmTheme
|
- .tmTheme
|
||||||
- .tml
|
|
||||||
- .ts
|
- .ts
|
||||||
- .ui
|
- .ui
|
||||||
- .urdf
|
- .urdf
|
||||||
|
|||||||
44
samples/Eiffel/application.e
Normal file
44
samples/Eiffel/application.e
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
note
|
||||||
|
description : "nino application root class"
|
||||||
|
date : "$Date$"
|
||||||
|
revision : "$Revision$"
|
||||||
|
|
||||||
|
class
|
||||||
|
APPLICATION
|
||||||
|
|
||||||
|
inherit
|
||||||
|
ARGUMENTS
|
||||||
|
|
||||||
|
HTTP_SERVER_SHARED_CONFIGURATION
|
||||||
|
|
||||||
|
create
|
||||||
|
make
|
||||||
|
|
||||||
|
feature {NONE} -- Initialization
|
||||||
|
|
||||||
|
make
|
||||||
|
-- Run application.
|
||||||
|
local
|
||||||
|
l_server : HTTP_SERVER
|
||||||
|
l_cfg: HTTP_SERVER_CONFIGURATION
|
||||||
|
l_http_handler : HTTP_HANDLER
|
||||||
|
do
|
||||||
|
create l_cfg.make
|
||||||
|
l_cfg.http_server_port := 9_000
|
||||||
|
l_cfg.document_root := default_document_root
|
||||||
|
set_server_configuration (l_cfg)
|
||||||
|
debug ("nino")
|
||||||
|
l_cfg.set_is_verbose (True)
|
||||||
|
end
|
||||||
|
|
||||||
|
create l_server.make (l_cfg)
|
||||||
|
create {APPLICATION_CONNECTION_HANDLER} l_http_handler.make (l_server)
|
||||||
|
l_server.setup (l_http_handler)
|
||||||
|
end
|
||||||
|
|
||||||
|
feature -- Access
|
||||||
|
|
||||||
|
default_document_root: STRING = "webroot"
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
82
samples/Eiffel/book_collection.e
Normal file
82
samples/Eiffel/book_collection.e
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
class
|
||||||
|
BOOK_COLLECTION
|
||||||
|
|
||||||
|
create
|
||||||
|
make
|
||||||
|
|
||||||
|
feature {NONE} -- Initialization
|
||||||
|
|
||||||
|
make (a_name: STRING_32)
|
||||||
|
-- Create a book collection with `a_name' as `name'.
|
||||||
|
do
|
||||||
|
set_name (a_name)
|
||||||
|
create book_index.make (10)
|
||||||
|
ensure
|
||||||
|
name_set: name = a_name
|
||||||
|
end
|
||||||
|
|
||||||
|
feature -- Access
|
||||||
|
|
||||||
|
name: STRING_32
|
||||||
|
-- Name.
|
||||||
|
|
||||||
|
books: LIST [BOOK]
|
||||||
|
-- collection of book.
|
||||||
|
do
|
||||||
|
create {LINKED_LIST [BOOK]} Result.make
|
||||||
|
across
|
||||||
|
book_index as it
|
||||||
|
loop
|
||||||
|
Result.append (it.item)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
books_by_author (a_author: STRING_32): LIST [BOOK]
|
||||||
|
-- Books wrote by `a_author' in this collection.
|
||||||
|
do
|
||||||
|
if attached book_index [a_author] as l_result then
|
||||||
|
Result := l_result
|
||||||
|
else
|
||||||
|
create {LINKED_LIST [BOOK]} Result.make
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
feature -- Change
|
||||||
|
|
||||||
|
set_name (a_name: STRING_32)
|
||||||
|
-- Set `name' with `a_name'.
|
||||||
|
do
|
||||||
|
name := a_name
|
||||||
|
ensure
|
||||||
|
name_set: name = a_name
|
||||||
|
end
|
||||||
|
|
||||||
|
add_book (a_book: BOOK)
|
||||||
|
-- Extend collection with `a_book'.
|
||||||
|
local
|
||||||
|
l: detachable LIST [BOOK]
|
||||||
|
do
|
||||||
|
l := book_index.at (a_book.author.name)
|
||||||
|
if l = Void then
|
||||||
|
create {LINKED_LIST [BOOK]} l.make
|
||||||
|
book_index.put (l, a_book.author.name)
|
||||||
|
end
|
||||||
|
l.force (a_book)
|
||||||
|
end
|
||||||
|
|
||||||
|
add_books (book_list: like books)
|
||||||
|
-- Append collection with `book_list'.
|
||||||
|
do
|
||||||
|
across
|
||||||
|
book_list as it
|
||||||
|
loop
|
||||||
|
add_book (it.item)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
feature {NONE} -- Implementation
|
||||||
|
|
||||||
|
book_index: HASH_TABLE [LIST [BOOK], STRING_32]
|
||||||
|
-- Association of author name and its books.
|
||||||
|
|
||||||
|
end -- class BOOK_COLLECTION
|
||||||
41
samples/Eiffel/git_checkout_command.e
Normal file
41
samples/Eiffel/git_checkout_command.e
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
note
|
||||||
|
description: "Git checkout command."
|
||||||
|
author: "Olivier Ligot"
|
||||||
|
|
||||||
|
class
|
||||||
|
GIT_CHECKOUT_COMMAND
|
||||||
|
|
||||||
|
inherit
|
||||||
|
GIT_COMMAND
|
||||||
|
|
||||||
|
create
|
||||||
|
make,
|
||||||
|
make_master
|
||||||
|
|
||||||
|
feature {NONE} -- Initialization
|
||||||
|
|
||||||
|
make (a_branch: STRING)
|
||||||
|
-- Checkout the branch `a_branch'.
|
||||||
|
do
|
||||||
|
initialize
|
||||||
|
arguments.force_last (a_branch)
|
||||||
|
branch := a_branch
|
||||||
|
ensure
|
||||||
|
branch_set: branch = a_branch
|
||||||
|
end
|
||||||
|
|
||||||
|
make_master
|
||||||
|
-- Checkout the master branch.
|
||||||
|
do
|
||||||
|
make ("master")
|
||||||
|
end
|
||||||
|
|
||||||
|
feature -- Access
|
||||||
|
|
||||||
|
branch: STRING
|
||||||
|
-- Branch to checkout
|
||||||
|
|
||||||
|
name: STRING = "checkout"
|
||||||
|
-- Git subcommand name
|
||||||
|
|
||||||
|
end
|
||||||
@@ -12,7 +12,7 @@ class TestPedantic < Minitest::Test
|
|||||||
def test_extensions_are_sorted
|
def test_extensions_are_sorted
|
||||||
LANGUAGES.each do |name, language|
|
LANGUAGES.each do |name, language|
|
||||||
extensions = language['extensions']
|
extensions = language['extensions']
|
||||||
assert_sorted extensions[1..-1] if extensions && extensions.size > 1
|
assert_sorted extensions[1..-1].map(&:downcase) if extensions && extensions.size > 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ class TestSamples < Minitest::Test
|
|||||||
if extnames = Samples.cache['extnames'][name]
|
if extnames = Samples.cache['extnames'][name]
|
||||||
extnames.each do |extname|
|
extnames.each do |extname|
|
||||||
next if extname == '.script!'
|
next if extname == '.script!'
|
||||||
assert options['extensions'].index { |x| x.end_with? extname }, "#{name} has a sample with extension (#{extname}) that isn't explicitly defined in languages.yml"
|
assert options['extensions'].index { |x| x.downcase.end_with? extname.downcase }, "#{name} has a sample with extension (#{extname.downcase}) that isn't explicitly defined in languages.yml"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -67,7 +67,7 @@ class TestSamples < Minitest::Test
|
|||||||
if language_matches.length > 1
|
if language_matches.length > 1
|
||||||
language_matches.each do |match|
|
language_matches.each do |match|
|
||||||
samples = "samples/#{match.name}/*#{extension}"
|
samples = "samples/#{match.name}/*#{extension}"
|
||||||
assert Dir.glob(samples).any?, "Missing samples in #{samples.inspect}. See https://github.com/github/linguist/blob/master/CONTRIBUTING.md"
|
assert Dir.glob(samples, File::FNM_CASEFOLD).any?, "Missing samples in #{samples.inspect}. See https://github.com/github/linguist/blob/master/CONTRIBUTING.md"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user