mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	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(".") | ||||||
|   | |||||||
| @@ -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 | ||||||
|   | |||||||
| @@ -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 | ||||||
|   | |||||||
							
								
								
									
										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