mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	| @@ -278,6 +278,9 @@ module Linguist | |||||||
|       # If its a header file (.h) try to guess the language |       # If its a header file (.h) try to guess the language | ||||||
|       header_language || |       header_language || | ||||||
|  |  | ||||||
|  |         # If it's a .m file, try to guess the language | ||||||
|  |         m_language || | ||||||
|  |  | ||||||
|         # If it's a .r file, try to guess the language |         # If it's a .r file, try to guess the language | ||||||
|         r_language || |         r_language || | ||||||
|  |  | ||||||
| @@ -310,6 +313,37 @@ module Linguist | |||||||
|       end |       end | ||||||
|     end |     end | ||||||
|  |  | ||||||
|  |     # Internal: Guess language of .m files. | ||||||
|  |     # | ||||||
|  |     # Objective-C heuristics: | ||||||
|  |     # * Keywords | ||||||
|  |     # | ||||||
|  |     # Matlab heuristics: | ||||||
|  |     # * Leading function keyword | ||||||
|  |     # * "%" comments | ||||||
|  |     # | ||||||
|  |     # Returns a Language. | ||||||
|  |     def m_language | ||||||
|  |       return unless extname == '.m' | ||||||
|  |  | ||||||
|  |       # Objective-C keywords | ||||||
|  |       if lines.grep(/^#import|@(interface|implementation|property|synthesize|end)/).any? | ||||||
|  |         Language['Objective-C'] | ||||||
|  |  | ||||||
|  |       # File function | ||||||
|  |       elsif lines.first.to_s =~ /^function / | ||||||
|  |         Language['Matlab'] | ||||||
|  |  | ||||||
|  |       # Matlab comment | ||||||
|  |       elsif lines.grep(/^%/).any? | ||||||
|  |         Language['Matlab'] | ||||||
|  |  | ||||||
|  |       # Fallback to Objective-C, don't want any Matlab false positives | ||||||
|  |       else | ||||||
|  |         Language['Objective-C'] | ||||||
|  |       end | ||||||
|  |     end | ||||||
|  |  | ||||||
|     # Internal: Guess language of .r files. |     # Internal: Guess language of .r files. | ||||||
|     # |     # | ||||||
|     # Returns a Language. |     # Returns a Language. | ||||||
|   | |||||||
| @@ -234,6 +234,12 @@ class TestBlob < Test::Unit::TestCase | |||||||
|     assert_equal Language['R'],           blob("hello-r.R").language |     assert_equal Language['R'],           blob("hello-r.R").language | ||||||
|     assert_equal Language['Rebol'],       blob("hello-rebol.r").language |     assert_equal Language['Rebol'],       blob("hello-rebol.r").language | ||||||
|  |  | ||||||
|  |     # .m disambiguation | ||||||
|  |     assert_equal Language['Objective-C'], blob("Foo.m").language | ||||||
|  |     assert_equal Language['Objective-C'], blob("hello.m").language | ||||||
|  |     assert_equal Language['Matlab'], blob("matlab_function.m").language | ||||||
|  |     # assert_equal Language['Matlab'], blob("matlab_script.m").language | ||||||
|  |  | ||||||
|     # ML |     # ML | ||||||
|     assert_equal Language['OCaml'],       blob("Foo.ml").language |     assert_equal Language['OCaml'],       blob("Foo.ml").language | ||||||
|     assert_equal Language['Standard ML'], blob("Foo.sig").language |     assert_equal Language['Standard ML'], blob("Foo.sig").language | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user