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 @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'],

View File

@@ -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

View File

@@ -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