Skip to content

Commit

Permalink
Merge pull request #2087 from pchaigno/case-sensitivity
Browse files Browse the repository at this point in the history
Detection by extension made case-insensitive
  • Loading branch information
arfon committed Feb 27, 2015
2 parents d6d232e + 41e1b7b commit 4ef925d
Show file tree
Hide file tree
Showing 8 changed files with 176 additions and 30 deletions.
2 changes: 1 addition & 1 deletion lib/linguist/file_blob.rb
Expand Up @@ -67,7 +67,7 @@ def extension
#
# Returns an Array
def extensions
basename, *segments = File.basename(name).split(".")
basename, *segments = File.basename(name).downcase.split(".")

segments.map.with_index do |segment, index|
"." + segments[index..-1].join(".")
Expand Down
8 changes: 4 additions & 4 deletions lib/linguist/language.rb
Expand Up @@ -73,7 +73,7 @@ def self.create(attributes = {})
raise ArgumentError, "Extension is missing a '.': #{extension.inspect}"
end

@extension_index[extension] << language
@extension_index[extension.downcase] << language
end

language.interpreters.each do |interpreter|
Expand Down Expand Up @@ -191,7 +191,7 @@ def self.find_by_filename(filename)
# Returns all matching Languages or [] if none were found.
def self.find_by_extension(extname)
extname = ".#{extname}" unless extname.start_with?(".")
@extension_index[extname]
@extension_index[extname.downcase]
end

# DEPRECATED
Expand Down Expand Up @@ -528,8 +528,8 @@ def inspect

if extnames = extensions[name]
extnames.each do |extname|
if !options['extensions'].index { |x| x.end_with? extname }
warn "#{name} has a sample with extension (#{extname}) that isn't explicitly defined in languages.yml" unless extname == '.script!'
if !options['extensions'].index { |x| x.downcase.end_with? extname.downcase }
warn "#{name} has a sample with extension (#{extname.downcase}) that isn't explicitly defined in languages.yml" unless extname == '.script!'
options['extensions'] << extname
end
end
Expand Down
23 changes: 1 addition & 22 deletions lib/linguist/languages.yml
Expand Up @@ -204,7 +204,6 @@ Assembly:
- nasm
extensions:
- .asm
- .ASM
- .a51
- .nasm
tm_scope: source.asm.x86
Expand Down Expand Up @@ -352,8 +351,6 @@ C:
color: "#555"
extensions:
- .c
- .C
- .H
- .cats
- .h
- .idc
Expand Down Expand Up @@ -435,8 +432,6 @@ COBOL:
type: programming
extensions:
- .cob
- .COB
- .CPY
- .cbl
- .ccp
- .cobol
Expand Down Expand Up @@ -888,14 +883,6 @@ FORTRAN:
color: "#4d41b1"
extensions:
- .f90
- .F
- .F03
- .F08
- .F77
- .F90
- .F95
- .FOR
- .FPP
- .f
- .f03
- .f08
Expand Down Expand Up @@ -939,9 +926,7 @@ Forth:
color: "#341708"
extensions:
- .fth
- .4TH
- .4th
- .F
- .f
- .for
- .forth
Expand Down Expand Up @@ -990,7 +975,6 @@ GAS:
group: Assembly
extensions:
- .s
- .S
tm_scope: source.asm.x86
ace_mode: assembly_x86

Expand Down Expand Up @@ -1152,7 +1136,6 @@ Graphviz (DOT):
tm_scope: source.dot
extensions:
- .dot
- .DOT
- .gv
ace_mode: text

Expand Down Expand Up @@ -2269,7 +2252,6 @@ Perl:
color: "#0298c3"
extensions:
- .pl
- .PL
- .cgi
- .fcgi
- .perl
Expand Down Expand Up @@ -2502,8 +2484,6 @@ R:
- splus
extensions:
- .r
- .R
- .Rd
- .rd
- .rsx
filenames:
Expand Down Expand Up @@ -2556,7 +2536,6 @@ RMarkdown:
ace_mode: markdown
extensions:
- .rmd
- .Rmd
tm_scope: none

Racket:
Expand Down Expand Up @@ -3270,11 +3249,11 @@ XML:
- .sublime-snippet
- .targets
- .tmCommand
- .tml
- .tmLanguage
- .tmPreferences
- .tmSnippet
- .tmTheme
- .tml
- .ts
- .ui
- .urdf
Expand Down
44 changes: 44 additions & 0 deletions samples/Eiffel/application.e
@@ -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 changes: 82 additions & 0 deletions samples/Eiffel/book_collection.e
@@ -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 changes: 41 additions & 0 deletions samples/Eiffel/git_checkout_command.e
@@ -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
2 changes: 1 addition & 1 deletion test/test_pedantic.rb
Expand Up @@ -12,7 +12,7 @@ def test_language_names_are_sorted
def test_extensions_are_sorted
LANGUAGES.each do |name, language|
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

Expand Down
4 changes: 2 additions & 2 deletions test/test_samples.rb
Expand Up @@ -43,7 +43,7 @@ def test_verify
if extnames = Samples.cache['extnames'][name]
extnames.each do |extname|
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

Expand All @@ -67,7 +67,7 @@ def test_verify
if language_matches.length > 1
language_matches.each do |match|
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
Expand Down

0 comments on commit 4ef925d

Please sign in to comment.