Detection by extension made case-insensitive

This commit is contained in:
Paul Chaignon
2015-02-06 22:14:22 +01:00
parent 7a141a923c
commit 41e1b7bd4e
8 changed files with 176 additions and 30 deletions

View File

@@ -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(".")

View File

@@ -80,7 +80,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|
@@ -198,7 +198,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
@@ -535,8 +535,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

View File

@@ -204,7 +204,6 @@ Assembly:
- nasm - nasm
extensions: extensions:
- .asm - .asm
- .ASM
- .a51 - .a51
tm_scope: source.asm.x86 tm_scope: source.asm.x86
ace_mode: assembly_x86 ace_mode: assembly_x86
@@ -349,8 +348,6 @@ C:
color: "#555" color: "#555"
extensions: extensions:
- .c - .c
- .C
- .H
- .cats - .cats
- .h - .h
- .idc - .idc
@@ -429,8 +426,6 @@ COBOL:
type: programming type: programming
extensions: extensions:
- .cob - .cob
- .COB
- .CPY
- .cbl - .cbl
- .ccp - .ccp
- .cobol - .cobol
@@ -867,14 +862,6 @@ FORTRAN:
color: "#4d41b1" color: "#4d41b1"
extensions: extensions:
- .f90 - .f90
- .F
- .F03
- .F08
- .F77
- .F90
- .F95
- .FOR
- .FPP
- .f - .f
- .f03 - .f03
- .f08 - .f08
@@ -918,9 +905,7 @@ Forth:
color: "#341708" color: "#341708"
extensions: extensions:
- .fth - .fth
- .4TH
- .4th - .4th
- .F
- .f - .f
- .for - .for
- .forth - .forth
@@ -969,7 +954,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
@@ -1127,7 +1111,6 @@ Graphviz (DOT):
tm_scope: source.dot tm_scope: source.dot
extensions: extensions:
- .dot - .dot
- .DOT
- .gv - .gv
ace_mode: text ace_mode: text
@@ -2210,7 +2193,6 @@ Perl:
color: "#0298c3" color: "#0298c3"
extensions: extensions:
- .pl - .pl
- .PL
- .cgi - .cgi
- .fcgi - .fcgi
- .perl - .perl
@@ -2442,8 +2424,6 @@ R:
- splus - splus
extensions: extensions:
- .r - .r
- .R
- .Rd
- .rd - .rd
- .rsx - .rsx
filenames: filenames:
@@ -2496,7 +2476,6 @@ RMarkdown:
ace_mode: markdown ace_mode: markdown
extensions: extensions:
- .rmd - .rmd
- .Rmd
tm_scope: none tm_scope: none
Racket: Racket:
@@ -3201,11 +3180,11 @@ XML:
- .svg - .svg
- .targets - .targets
- .tmCommand - .tmCommand
- .tml
- .tmLanguage - .tmLanguage
- .tmPreferences - .tmPreferences
- .tmSnippet - .tmSnippet
- .tmTheme - .tmTheme
- .tml
- .ts - .ts
- .ui - .ui
- .urdf - .urdf

View 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

View 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

View 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

View File

@@ -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

View File

@@ -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