Add language groups

This commit is contained in:
Joshua Peek
2011-06-22 10:07:37 -05:00
parent 876265e8f3
commit a881cde6fd
3 changed files with 67 additions and 0 deletions

View File

@@ -197,6 +197,21 @@ module Linguist
@popular = attributes.key?(:popular) ? attributes[:popular] : false
@common = attributes.key?(:common) ? attributes[:common] : false
@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
# Public: Get proper name
@@ -261,6 +276,19 @@ module Linguist
name.downcase.gsub(/\s/, '-')
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?
#
# Returns true or false
@@ -337,6 +365,7 @@ module Linguist
:name => name,
:aliases => options['aliases'],
:lexer => options['lexer'],
:group_name => options['group'],
:searchable => options.key?('searchable') ? options['searchable'] : true,
:search_term => options['search_term'],
:extensions => options['extensions'],

View File

@@ -65,6 +65,7 @@ Assembly:
- .asm
Batchfile:
group: Shell
search_term: bat
aliases:
- bat
@@ -88,6 +89,7 @@ Brainfuck:
extensions:
- .b
- .bf
C:
extensions:
- .c
@@ -169,6 +171,7 @@ Cucumber:
- .feature
Cython:
group: Python
extensions:
- .pyx
- .pxd
@@ -244,6 +247,7 @@ Factor:
- .factor
GAS:
group: Assembly
extensions:
- .s
- .S
@@ -253,11 +257,13 @@ Genshi:
- .kid
Gentoo Ebuild:
group: Shell
lexer: Bash
extensions:
- .ebuild
Gentoo Eclass:
group: Shell
lexer: Bash
extensions:
- .eclass
@@ -299,17 +305,20 @@ HTML:
- .xslt
HTML+Django:
group: HTML
lexer: HTML+Django/Jinja
extensions:
- .mustache
HTML+ERB:
group: HTML
lexer: RHTML
extensions:
- .erb
- .html.erb
HTML+PHP:
group: HTML
extensions:
- .phtml
@@ -350,6 +359,7 @@ Io:
- .io
JSON:
group: JavaScript
lexer: JavaScript
search_term: javascript
extensions:
@@ -361,6 +371,7 @@ Java:
- .pde
Java Server Pages:
group: Java
lexer: Java Server Page
search_term: jsp
aliases:
@@ -387,6 +398,7 @@ LLVM:
- .ll
Literate Haskell:
group: Haskell
search_term: lhs
aliases:
- lhs
@@ -460,6 +472,7 @@ Nu:
- Nukefile
NumPy:
group: Python
extensions:
- .numpy
- .numsc
@@ -488,6 +501,7 @@ Objective-J:
- .sj
OpenCL:
group: C
lexer: C
extensions:
- .cl
@@ -532,6 +546,7 @@ Python:
- .pyw
Python traceback:
group: Python
lexer: Python Traceback
search_term: pytb
aliases:
@@ -546,6 +561,7 @@ R:
- .R
RHTML:
group: HTML
extensions:
- .rhtml

View File

@@ -196,6 +196,28 @@ class TestLanguage < Test::Unit::TestCase
assert_equal Language['reStructuredText'], Language.find_by_alias('rst')
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
# require reindexing repositories.
def test_search_term