mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	Add language groups
This commit is contained in:
		| @@ -197,6 +197,21 @@ module Linguist | |||||||
|       @popular    = attributes.key?(:popular)    ? attributes[:popular]    : false |       @popular    = attributes.key?(:popular)    ? attributes[:popular]    : false | ||||||
|       @common     = attributes.key?(:common)     ? attributes[:common]     : false |       @common     = attributes.key?(:common)     ? attributes[:common]     : false | ||||||
|       @searchable = attributes.key?(:searchable) ? attributes[:searchable] : true |       @searchable = attributes.key?(:searchable) ? attributes[:searchable] : true | ||||||
|  |  | ||||||
|  |       # If group name is set, save the name so we can lazy load it later | ||||||
|  |       if attributes[:group_name] | ||||||
|  |         if common? | ||||||
|  |           warn "#{name} is a major langauage, it should not be grouped with #{attributes[:group_name]}" | ||||||
|  |         end | ||||||
|  |  | ||||||
|  |         @group = nil | ||||||
|  |         @group_name = attributes[:group_name] | ||||||
|  |  | ||||||
|  |       # Otherwise we can set it to self now | ||||||
|  |       else | ||||||
|  |         @group = self | ||||||
|  |       end | ||||||
|  |  | ||||||
|     end |     end | ||||||
|  |  | ||||||
|     # Public: Get proper name |     # Public: Get proper name | ||||||
| @@ -261,6 +276,19 @@ module Linguist | |||||||
|       name.downcase.gsub(/\s/, '-') |       name.downcase.gsub(/\s/, '-') | ||||||
|     end |     end | ||||||
|  |  | ||||||
|  |     # Public: Get Language group | ||||||
|  |     # | ||||||
|  |     # Minor languages maybe grouped with major languages for | ||||||
|  |     # accounting purposes. For an example, JSP files are grouped as | ||||||
|  |     # Java. | ||||||
|  |     # | ||||||
|  |     # For major languages, group should always return self. | ||||||
|  |     # | ||||||
|  |     # Returns a Language | ||||||
|  |     def group | ||||||
|  |       @group ||= Language.find_by_name(@group_name) | ||||||
|  |     end | ||||||
|  |  | ||||||
|     # Public: Is it popular? |     # Public: Is it popular? | ||||||
|     # |     # | ||||||
|     # Returns true or false |     # Returns true or false | ||||||
| @@ -337,6 +365,7 @@ module Linguist | |||||||
|       :name        => name, |       :name        => name, | ||||||
|       :aliases     => options['aliases'], |       :aliases     => options['aliases'], | ||||||
|       :lexer       => options['lexer'], |       :lexer       => options['lexer'], | ||||||
|  |       :group_name  => options['group'], | ||||||
|       :searchable  => options.key?('searchable') ? options['searchable'] : true, |       :searchable  => options.key?('searchable') ? options['searchable'] : true, | ||||||
|       :search_term => options['search_term'], |       :search_term => options['search_term'], | ||||||
|       :extensions  => options['extensions'], |       :extensions  => options['extensions'], | ||||||
|   | |||||||
| @@ -65,6 +65,7 @@ Assembly: | |||||||
|   - .asm |   - .asm | ||||||
|  |  | ||||||
| Batchfile: | Batchfile: | ||||||
|  |   group: Shell | ||||||
|   search_term: bat |   search_term: bat | ||||||
|   aliases: |   aliases: | ||||||
|   - bat |   - bat | ||||||
| @@ -88,6 +89,7 @@ Brainfuck: | |||||||
|   extensions: |   extensions: | ||||||
|   - .b |   - .b | ||||||
|   - .bf |   - .bf | ||||||
|  |  | ||||||
| C: | C: | ||||||
|   extensions: |   extensions: | ||||||
|   - .c |   - .c | ||||||
| @@ -169,6 +171,7 @@ Cucumber: | |||||||
|   - .feature |   - .feature | ||||||
|  |  | ||||||
| Cython: | Cython: | ||||||
|  |   group: Python | ||||||
|   extensions: |   extensions: | ||||||
|   - .pyx |   - .pyx | ||||||
|   - .pxd |   - .pxd | ||||||
| @@ -244,6 +247,7 @@ Factor: | |||||||
|   - .factor |   - .factor | ||||||
|  |  | ||||||
| GAS: | GAS: | ||||||
|  |   group: Assembly | ||||||
|   extensions: |   extensions: | ||||||
|   - .s |   - .s | ||||||
|   - .S |   - .S | ||||||
| @@ -253,11 +257,13 @@ Genshi: | |||||||
|   - .kid |   - .kid | ||||||
|  |  | ||||||
| Gentoo Ebuild: | Gentoo Ebuild: | ||||||
|  |   group: Shell | ||||||
|   lexer: Bash |   lexer: Bash | ||||||
|   extensions: |   extensions: | ||||||
|   - .ebuild |   - .ebuild | ||||||
|  |  | ||||||
| Gentoo Eclass: | Gentoo Eclass: | ||||||
|  |   group: Shell | ||||||
|   lexer: Bash |   lexer: Bash | ||||||
|   extensions: |   extensions: | ||||||
|   - .eclass |   - .eclass | ||||||
| @@ -299,17 +305,20 @@ HTML: | |||||||
|   - .xslt |   - .xslt | ||||||
|  |  | ||||||
| HTML+Django: | HTML+Django: | ||||||
|  |   group: HTML | ||||||
|   lexer: HTML+Django/Jinja |   lexer: HTML+Django/Jinja | ||||||
|   extensions: |   extensions: | ||||||
|   - .mustache |   - .mustache | ||||||
|  |  | ||||||
| HTML+ERB: | HTML+ERB: | ||||||
|  |   group: HTML | ||||||
|   lexer: RHTML |   lexer: RHTML | ||||||
|   extensions: |   extensions: | ||||||
|   - .erb |   - .erb | ||||||
|   - .html.erb |   - .html.erb | ||||||
|  |  | ||||||
| HTML+PHP: | HTML+PHP: | ||||||
|  |   group: HTML | ||||||
|   extensions: |   extensions: | ||||||
|   - .phtml |   - .phtml | ||||||
|  |  | ||||||
| @@ -350,6 +359,7 @@ Io: | |||||||
|   - .io |   - .io | ||||||
|  |  | ||||||
| JSON: | JSON: | ||||||
|  |   group: JavaScript | ||||||
|   lexer: JavaScript |   lexer: JavaScript | ||||||
|   search_term: javascript |   search_term: javascript | ||||||
|   extensions: |   extensions: | ||||||
| @@ -361,6 +371,7 @@ Java: | |||||||
|   - .pde |   - .pde | ||||||
|  |  | ||||||
| Java Server Pages: | Java Server Pages: | ||||||
|  |   group: Java | ||||||
|   lexer: Java Server Page |   lexer: Java Server Page | ||||||
|   search_term: jsp |   search_term: jsp | ||||||
|   aliases: |   aliases: | ||||||
| @@ -387,6 +398,7 @@ LLVM: | |||||||
|   - .ll |   - .ll | ||||||
|  |  | ||||||
| Literate Haskell: | Literate Haskell: | ||||||
|  |   group: Haskell | ||||||
|   search_term: lhs |   search_term: lhs | ||||||
|   aliases: |   aliases: | ||||||
|   - lhs |   - lhs | ||||||
| @@ -460,6 +472,7 @@ Nu: | |||||||
|   - Nukefile |   - Nukefile | ||||||
|  |  | ||||||
| NumPy: | NumPy: | ||||||
|  |   group: Python | ||||||
|   extensions: |   extensions: | ||||||
|   - .numpy |   - .numpy | ||||||
|   - .numsc |   - .numsc | ||||||
| @@ -488,6 +501,7 @@ Objective-J: | |||||||
|   - .sj |   - .sj | ||||||
|  |  | ||||||
| OpenCL: | OpenCL: | ||||||
|  |   group: C | ||||||
|   lexer: C |   lexer: C | ||||||
|   extensions: |   extensions: | ||||||
|   - .cl |   - .cl | ||||||
| @@ -532,6 +546,7 @@ Python: | |||||||
|   - .pyw |   - .pyw | ||||||
|  |  | ||||||
| Python traceback: | Python traceback: | ||||||
|  |   group: Python | ||||||
|   lexer: Python Traceback |   lexer: Python Traceback | ||||||
|   search_term: pytb |   search_term: pytb | ||||||
|   aliases: |   aliases: | ||||||
| @@ -546,6 +561,7 @@ R: | |||||||
|   - .R |   - .R | ||||||
|  |  | ||||||
| RHTML: | RHTML: | ||||||
|  |   group: HTML | ||||||
|   extensions: |   extensions: | ||||||
|   - .rhtml |   - .rhtml | ||||||
|  |  | ||||||
|   | |||||||
| @@ -196,6 +196,28 @@ class TestLanguage < Test::Unit::TestCase | |||||||
|     assert_equal Language['reStructuredText'], Language.find_by_alias('rst') |     assert_equal Language['reStructuredText'], Language.find_by_alias('rst') | ||||||
|   end |   end | ||||||
|  |  | ||||||
|  |   def test_common_groups | ||||||
|  |     Language.all.each do |language| | ||||||
|  |       if language.common? | ||||||
|  |         assert_equal language, language.group | ||||||
|  |       end | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  |  | ||||||
|  |   def test_groups | ||||||
|  |     assert_equal Language['Assembly'], Language['GAS'].group | ||||||
|  |     assert_equal Language['C'], Language['OpenCL'].group | ||||||
|  |     assert_equal Language['Haskell'], Language['Literate Haskell'].group | ||||||
|  |     assert_equal Language['Java'], Language['Java Server Pages'].group | ||||||
|  |     assert_equal Language['JavaScript'], Language['JSON'].group | ||||||
|  |     assert_equal Language['Python'], Language['Cython'].group | ||||||
|  |     assert_equal Language['Python'], Language['NumPy'].group | ||||||
|  |     assert_equal Language['Python'], Language['Python traceback'].group | ||||||
|  |     assert_equal Language['Shell'], Language['Batchfile'].group | ||||||
|  |     assert_equal Language['Shell'], Language['Gentoo Ebuild'].group | ||||||
|  |     assert_equal Language['Shell'], Language['Gentoo Eclass'].group | ||||||
|  |   end | ||||||
|  |  | ||||||
|   # Used for code search indexing. Changing any of these values may |   # Used for code search indexing. Changing any of these values may | ||||||
|   # require reindexing repositories. |   # require reindexing repositories. | ||||||
|   def test_search_term |   def test_search_term | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user