Merge branch 'master' into dont-explode-on-invalid-shebang

Conflicts:
	lib/linguist/samples.json
	test/test_tokenizer.rb
This commit is contained in:
Joshua Peek
2012-12-10 09:02:24 -06:00
9 changed files with 472 additions and 21 deletions

View File

@@ -63,6 +63,16 @@ Ada:
- .adb - .adb
- .ads - .ads
ApacheConf:
type: markup
aliases:
- apache
primary_extension: .conf
filenames:
- .htaccess
- httpd.conf
- apache2.conf
Apex: Apex:
type: programming type: programming
lexer: Text only lexer: Text only
@@ -180,8 +190,10 @@ C++:
- cpp - cpp
primary_extension: .cpp primary_extension: .cpp
extensions: extensions:
- .C
- .c++ - .c++
- .cxx - .cxx
- .H
- .h++ - .h++
- .hh - .hh
- .hxx - .hxx
@@ -244,6 +256,7 @@ CoffeeScript:
color: "#244776" color: "#244776"
aliases: aliases:
- coffee - coffee
- coffee-script
primary_extension: .coffee primary_extension: .coffee
extensions: extensions:
- ._coffee - ._coffee
@@ -392,6 +405,12 @@ Elixir:
- .ex - .ex
- .exs - .exs
Elm:
type: programming
lexer: Haskell
group: Haskell
primary_extension: .elm
Emacs Lisp: Emacs Lisp:
type: programming type: programming
lexer: Scheme lexer: Scheme
@@ -545,6 +564,8 @@ Groovy Server Pages:
HTML: HTML:
type: markup type: markup
ace_mode: html ace_mode: html
aliases:
- xhtml
primary_extension: .html primary_extension: .html
extensions: extensions:
- .htm - .htm
@@ -563,6 +584,8 @@ HTML+ERB:
type: markup type: markup
group: HTML group: HTML
lexer: RHTML lexer: RHTML
aliases:
- erb
primary_extension: .erb primary_extension: .erb
extensions: extensions:
- .erb - .erb
@@ -575,16 +598,9 @@ HTML+PHP:
extensions: extensions:
- .phtml - .phtml
HaXe: HTTP:
type: programming type: data
lexer: haXe primary_extension: .http
ace_mode: haxe
color: "#346d51"
primary_extension: .hx
extensions:
- .hx
- .hxml
- .mtt
Haml: Haml:
group: HTML group: HTML
@@ -599,6 +615,15 @@ Haskell:
- .hs - .hs
- .hsc - .hsc
Haxe:
type: programming
lexer: haXe
ace_mode: haxe
color: "#346d51"
primary_extension: .hx
extensions:
- .hxsl
INI: INI:
type: data type: data
extensions: extensions:
@@ -723,6 +748,8 @@ Lua:
- .nse - .nse
Makefile: Makefile:
aliases:
- make
extensions: extensions:
- .mak - .mak
- .mk - .mk
@@ -798,6 +825,13 @@ Nemerle:
color: "#0d3c6e" color: "#0d3c6e"
primary_extension: .n primary_extension: .n
Nginx:
type: markup
lexer: Nginx configuration file
primary_extension: .conf
filenames:
- nginx.conf
Nimrod: Nimrod:
type: programming type: programming
color: "#37775b" color: "#37775b"
@@ -843,6 +877,9 @@ ObjDump:
Objective-C: Objective-C:
type: programming type: programming
color: "#438eff" color: "#438eff"
aliases:
- obj-c
- objc
primary_extension: .m primary_extension: .m
extensions: extensions:
- .mm - .mm
@@ -850,6 +887,8 @@ Objective-C:
Objective-J: Objective-J:
type: programming type: programming
color: "#ff0c5a" color: "#ff0c5a"
aliases:
- obj-j
primary_extension: .j primary_extension: .j
extensions: extensions:
- .j - .j
@@ -1126,7 +1165,13 @@ Shell:
primary_extension: .sh primary_extension: .sh
filenames: filenames:
- .zsh - .zsh
- bash_logout
- bash_profile
- bashrc - bashrc
- zlogin
- zlogout
- zshenv
- zprofile
- zshrc - zshrc
Smalltalk: Smalltalk:
@@ -1172,6 +1217,8 @@ Tcsh:
TeX: TeX:
type: markup type: markup
ace_mode: latex ace_mode: latex
aliases:
- latex
primary_extension: .tex primary_extension: .tex
extensions: extensions:
- .aux - .aux
@@ -1261,6 +1308,11 @@ Visual Basic:
XML: XML:
type: markup type: markup
ace_mode: xml ace_mode: xml
aliases:
- rss
- xsd
- xsl
- wsdl
primary_extension: .xml primary_extension: .xml
extensions: extensions:
- .glade - .glade
@@ -1306,6 +1358,8 @@ XSLT:
YAML: YAML:
type: markup type: markup
aliases:
- yml
primary_extension: .yml primary_extension: .yml
extensions: extensions:
- .yaml - .yaml

View File

@@ -44,6 +44,9 @@
"Ecl": [ "Ecl": [
".ecl" ".ecl"
], ],
"Elm": [
".elm"
],
"Emacs Lisp": [ "Emacs Lisp": [
".el" ".el"
], ],
@@ -140,7 +143,8 @@
], ],
"PHP": [ "PHP": [
".module", ".module",
".php" ".php",
".script!"
], ],
"PowerShell": [ "PowerShell": [
".ps1", ".ps1",
@@ -260,8 +264,8 @@
".gemrc" ".gemrc"
] ]
}, },
"tokens_total": 271188, "tokens_total": 271826,
"languages_total": 276, "languages_total": 281,
"tokens": { "tokens": {
"Apex": { "Apex": {
"global": 70, "global": 70,
@@ -9238,6 +9242,123 @@
"a": 1, "a": 1,
"self": 1 "self": 1
}, },
"Elm": {
"import": 3,
"List": 1,
"(": 119,
"intercalate": 2,
"intersperse": 3,
")": 116,
"Website.Skeleton": 1,
"Website.ColorScheme": 1,
"addFolder": 4,
"folder": 2,
"lst": 6,
"let": 2,
"add": 2,
"x": 13,
"y": 7,
"+": 14,
"in": 2,
"f": 8,
"n": 2,
"xs": 9,
"map": 11,
"elements": 2,
"[": 31,
"]": 31,
"functional": 2,
"reactive": 2,
"-": 11,
"example": 3,
"name": 6,
"loc": 2,
"Text.link": 1,
"toText": 6,
"toLinks": 2,
"title": 2,
"links": 2,
"flow": 4,
"right": 8,
"width": 3,
"text": 4,
"italic": 1,
"bold": 2,
".": 9,
"Text.color": 1,
"accent4": 1,
"insertSpace": 2,
"case": 5,
"of": 7,
"{": 1,
"spacer": 2,
";": 1,
"}": 1,
"subsection": 2,
"w": 7,
"info": 2,
"down": 3,
"words": 2,
"markdown": 1,
"|": 3,
"###": 1,
"Basic": 1,
"Examples": 1,
"Each": 1,
"listed": 1,
"below": 1,
"focuses": 1,
"on": 1,
"a": 5,
"single": 1,
"function": 1,
"or": 1,
"concept.": 1,
"These": 1,
"examples": 1,
"demonstrate": 1,
"all": 1,
"the": 1,
"basic": 1,
"building": 1,
"blocks": 1,
"Elm.": 1,
"content": 2,
"exampleSets": 2,
"plainText": 1,
"main": 3,
"lift": 1,
"skeleton": 1,
"Window.width": 1,
"asText": 1,
"qsort": 4,
"filter": 2,
"<)x)>": 1,
"data": 1,
"Tree": 3,
"Node": 8,
"Empty": 8,
"empty": 2,
"singleton": 2,
"v": 8,
"insert": 4,
"tree": 7,
"left": 7,
"if": 2,
"then": 2,
"else": 2,
"<": 1,
"fromList": 3,
"foldl": 1,
"depth": 5,
"max": 1,
"t1": 2,
"t2": 3,
"display": 4,
"monospace": 1,
"concat": 1,
"show": 2
},
"Emacs Lisp": { "Emacs Lisp": {
"(": 1, "(": 1,
"print": 1, "print": 1,
@@ -21629,13 +21750,13 @@
"AUTHOR": 1 "AUTHOR": 1
}, },
"PHP": { "PHP": {
"<": 9, "<": 11,
"php": 6, "php": 8,
"namespace": 28, "namespace": 28,
"Symfony": 24, "Symfony": 24,
"Component": 24, "Component": 24,
"Console": 17, "Console": 17,
";": 1380, ";": 1382,
"use": 23, "use": 23,
"Input": 6, "Input": 6,
"InputInterface": 4, "InputInterface": 4,
@@ -22647,7 +22768,9 @@
"nest": 1, "nest": 1,
"isUnique": 1, "isUnique": 1,
"is_bool": 1, "is_bool": 1,
"sql": 1 "sql": 1,
"SHEBANG#!php": 2,
"echo": 2
}, },
"PowerShell": { "PowerShell": {
"Write": 2, "Write": 2,
@@ -27753,6 +27876,7 @@
"Delphi": 30, "Delphi": 30,
"Diff": 16, "Diff": 16,
"Ecl": 281, "Ecl": 281,
"Elm": 628,
"Emacs Lisp": 3, "Emacs Lisp": 3,
"GAS": 133, "GAS": 133,
"Gosu": 413, "Gosu": 413,
@@ -27781,7 +27905,7 @@
"Parrot Assembly": 6, "Parrot Assembly": 6,
"Parrot Internal Representation": 5, "Parrot Internal Representation": 5,
"Perl": 17113, "Perl": 17113,
"PHP": 20637, "PHP": 20647,
"PowerShell": 12, "PowerShell": 12,
"Prolog": 4040, "Prolog": 4040,
"Python": 4020, "Python": 4020,
@@ -27824,6 +27948,7 @@
"Delphi": 1, "Delphi": 1,
"Diff": 1, "Diff": 1,
"Ecl": 1, "Ecl": 1,
"Elm": 3,
"Emacs Lisp": 1, "Emacs Lisp": 1,
"GAS": 1, "GAS": 1,
"Gosu": 5, "Gosu": 5,
@@ -27852,7 +27977,7 @@
"Parrot Assembly": 1, "Parrot Assembly": 1,
"Parrot Internal Representation": 1, "Parrot Internal Representation": 1,
"Perl": 13, "Perl": 13,
"PHP": 6, "PHP": 8,
"PowerShell": 2, "PowerShell": 2,
"Prolog": 6, "Prolog": 6,
"Python": 4, "Python": 4,
@@ -27881,5 +28006,5 @@
"XSLT": 1, "XSLT": 1,
"YAML": 1 "YAML": 1
}, },
"md5": "384f02c0bd223479bf750d4cd36daf71" "md5": "ef9b9c6f8312a9f029edf9b7df6e9751"
} }

127
samples/Elm/Basic.elm Normal file
View File

@@ -0,0 +1,127 @@
import List (intercalate,intersperse)
import Website.Skeleton
import Website.ColorScheme
addFolder folder lst =
let add (x,y) = (x, folder ++ y ++ ".elm") in
let f (n,xs) = (n, map add xs) in
map f lst
elements = addFolder "Elements/"
[ ("Primitives",
[ ("Text" , "HelloWorld")
, ("Images", "Image")
, ("Fitted Images", "FittedImage")
, ("Videos", "Video")
, ("Markdown", "Markdown")
])
, ("Formatting",
[ ("Size" , "Size")
, ("Opacity" , "Opacity")
, ("Text" , "Text")
, ("Typeface", "Typeface")
])
, ("Layout",
[ ("Simple Flow", "FlowDown1a")
, ("Flow Down" , "FlowDown2")
, ("Layers" , "Layers")
, ("Positioning", "Position")
, ("Spacers" , "Spacer")
])
, ("Collage", [ ("Lines" , "Lines")
, ("Shapes" , "Shapes")
, ("Sprites" , "Sprite")
, ("Elements" , "ToForm")
, ("Colors" , "Color")
, ("Textures" , "Texture")
, ("Transforms", "Transforms")
])
]
functional = addFolder "Functional/"
[ ("Recursion",
[ ("Factorial" , "Factorial")
, ("List Length", "Length")
, ("Zip" , "Zip")
, ("Quick Sort" , "QuickSort")
])
, ("Functions",
[ ("Anonymous Functions", "Anonymous")
, ("Application" , "Application")
, ("Composition" , "Composition")
, ("Infix Operators" , "Infix")
])
, ("Higher-Order",
[ ("Map" , "Map")
, ("Fold" , "Sum")
, ("Filter" , "Filter")
, ("ZipWith", "ZipWith")
])
, ("Data Types",
[ ("Maybe", "Maybe")
, ("Boolean Expressions", "BooleanExpressions")
, ("Tree", "Tree")
])
]
reactive = addFolder "Reactive/"
[ ("Mouse", [ ("Position", "Position")
, ("Presses" , "IsDown")
, ("Clicks" , "CountClicks")
, ("Position+Image", "ResizeYogi")
, ("Position+Collage" , "Transforms")
-- , ("Hover" , "IsAbove")
])
,("Keyboard",[ ("Keys Down" , "KeysDown")
, ("Key Presses", "CharPressed")
])
, ("Window", [ ("Size", "ResizePaint")
, ("Centering", "Centering")
])
, ("Time", [ ("Before and After", "Between")
, ("Every" , "Every")
, ("Clock" , "Clock")
])
, ("Input", [ ("Text Fields", "TextField")
, ("Passwords" , "Password")
, ("Check Boxes", "CheckBox")
, ("String Drop Down", "StringDropDown")
, ("Drop Down", "DropDown")
])
, ("Random", [ ("Randomize", "Randomize") ])
, ("HTTP", [ ("Zip Codes", "ZipCodes") ])
, ("Filters",[ ("Sample", "SampleOn")
, ("Keep If", "KeepIf")
, ("Drop Repeats", "DropRepeats")
])
]
example (name, loc) = Text.link ("/edit/examples/" ++ loc) (toText name)
toLinks (title, links) =
flow right [ width 130 (text $ toText " " ++ italic (toText title))
, text (intercalate (bold . Text.color accent4 $ toText " &middot; ") $ map example links)
]
insertSpace lst = case lst of { x:xs -> x : spacer 1 5 : xs ; [] -> [] }
subsection w (name,info) =
flow down . insertSpace . intersperse (spacer 1 1) . map (width w) $
(text . bold $ toText name) : map toLinks info
words = [markdown|
### Basic Examples
Each example listed below focuses on a single function or concept.
These examples demonstrate all of the basic building blocks of Elm.
|]
content w =
words : map (subsection w) [ ("Display",elements), ("React",reactive), ("Compute",functional) ]
exampleSets w = flow down . map (width w) . intersperse (plainText " ") $ content w
main = lift (skeleton exampleSets) Window.width

32
samples/Elm/QuickSort.elm Normal file
View File

@@ -0,0 +1,32 @@
main = asText (qsort [3,9,1,8,5,4,7])
qsort lst =
case lst of
x:xs -> qsort (filter ((>=)x) xs) ++ [x] ++ qsort (filter ((<)x) xs)
[] -> []
{---------------------
QuickSort works as follows:
- Choose a pivot element which be placed in the "middle" of the sorted list.
In our case we are choosing the first element as the pivot.
- Gather all of the elements less than the pivot (the first filter).
We know that these must come before our pivot element in the sorted list.
Note: ((>=)x) === (\y -> (>=) x y) === (\y -> x >= y)
- Gather all of the elements greater than the pivot (the second filter).
We know that these must come after our pivot element in the sorted list.
- Run `qsort` on the lesser elements, producing a sorted list that contains
only elements less than the pivot. Put these before the pivot.
- Run `qsort` on the greater elements, producing a sorted list. Put these
after the pivot.
Note that choosing a bad pivot can have bad effects. Take a sorted list with
N elements. The pivot will always be the lowest member, meaning that it does
not divide the list very evenly. The list of lessers has 0 elements
and the list of greaters has N-1 elemens. This means qsort will be called
N times, each call looking through the entire list. This means, in the worst
case, QuickSort will make N^2 comparisons.
----------------------}

91
samples/Elm/Tree.elm Normal file
View File

@@ -0,0 +1,91 @@
{-----------------------------------------------------------------
Overview: A "Tree" represents a binary tree. A "Node" in a binary
tree always has two children. A tree can also be "Empty". Below
I have defined "Tree" and a number of useful functions.
This example also includes some challenge problems :)
-----------------------------------------------------------------}
data Tree a = Node a (Tree a) (Tree a) | Empty
empty = Empty
singleton v = Node v Empty Empty
insert x tree =
case tree of
Empty -> singleton x
Node y left right ->
if x == y then tree else
if x < y then Node y (insert x left) right
else Node y left (insert x right)
fromList xs = foldl insert empty xs
depth tree =
case tree of
Node v left right -> 1 + max (depth left) (depth right)
Empty -> 0
map f tree =
case tree of
Node v left right -> Node (f v) (map f left) (map f right)
Empty -> Empty
t1 = fromList [1,2,3]
t2 = fromList [2,1,3]
main = flow down [ display "depth" depth t1
, display "depth" depth t2
, display "map ((+)1)" (map ((+)1)) t2
]
display name f v =
text . monospace . toText $
concat [ show (f v), " &lArr; ", name, " ", show v ]
{-----------------------------------------------------------------
Exercises:
(1) Sum all of the elements of a tree.
sum :: Tree Number -> Number
(2) Flatten a tree into a list.
flatten :: Tree a -> [a]
(3) Check to see if an element is in a given tree.
isElement :: a -> Tree a -> Bool
(4) Write a general fold function that acts on trees. The fold
function does not need to guarantee a particular order of
traversal.
fold :: (a -> b -> b) -> b -> Tree a -> b
(5) Use "fold" to do exercises 1-3 in one line each. The best
readable versions I have come up have the following length
in characters including spaces and function name:
sum: 16
flatten: 21
isElement: 46
See if you can match or beat me! Don't forget about currying
and partial application!
(6) Can "fold" be used to implement "map" or "depth"?
(7) Try experimenting with different ways to traverse a
tree: pre-order, in-order, post-order, depth-first, etc.
More info at: http://en.wikipedia.org/wiki/Tree_traversal
-----------------------------------------------------------------}

View File

@@ -0,0 +1,4 @@
#!/usr/bin/php
<?php
echo "PHP\n";

4
samples/PHP/php.script! Normal file
View File

@@ -0,0 +1,4 @@
#!/usr/bin/env php
<?php
echo "PHP\n";

View File

@@ -26,6 +26,7 @@ class TestLanguage < Test::Unit::TestCase
assert_equal Lexer['HTML'], Language['HTML'].lexer assert_equal Lexer['HTML'], Language['HTML'].lexer
assert_equal Lexer['HTML+Django/Jinja'], Language['HTML+Django'].lexer assert_equal Lexer['HTML+Django/Jinja'], Language['HTML+Django'].lexer
assert_equal Lexer['HTML+PHP'], Language['HTML+PHP'].lexer assert_equal Lexer['HTML+PHP'], Language['HTML+PHP'].lexer
assert_equal Lexer['HTTP'], Language['HTTP'].lexer
assert_equal Lexer['JSON'], Language['JSON'].lexer assert_equal Lexer['JSON'], Language['JSON'].lexer
assert_equal Lexer['Java'], Language['ChucK'].lexer assert_equal Lexer['Java'], Language['ChucK'].lexer
assert_equal Lexer['Java'], Language['Java'].lexer assert_equal Lexer['Java'], Language['Java'].lexer
@@ -51,7 +52,7 @@ class TestLanguage < Test::Unit::TestCase
assert_equal Lexer['Verilog'], Language['Verilog'].lexer assert_equal Lexer['Verilog'], Language['Verilog'].lexer
assert_equal Lexer['XSLT'], Language['XSLT'].lexer assert_equal Lexer['XSLT'], Language['XSLT'].lexer
assert_equal Lexer['aspx-vb'], Language['ASP'].lexer assert_equal Lexer['aspx-vb'], Language['ASP'].lexer
assert_equal Lexer['haXe'], Language['HaXe'].lexer assert_equal Lexer['haXe'], Language['Haxe'].lexer
assert_equal Lexer['reStructuredText'], Language['reStructuredText'].lexer assert_equal Lexer['reStructuredText'], Language['reStructuredText'].lexer
end end
@@ -60,6 +61,7 @@ class TestLanguage < Test::Unit::TestCase
assert_equal Language['ASP'], Language.find_by_alias('aspx') assert_equal Language['ASP'], Language.find_by_alias('aspx')
assert_equal Language['ASP'], Language.find_by_alias('aspx-vb') assert_equal Language['ASP'], Language.find_by_alias('aspx-vb')
assert_equal Language['ActionScript'], Language.find_by_alias('as3') assert_equal Language['ActionScript'], Language.find_by_alias('as3')
assert_equal Language['ApacheConf'], Language.find_by_alias('apache')
assert_equal Language['Assembly'], Language.find_by_alias('nasm') assert_equal Language['Assembly'], Language.find_by_alias('nasm')
assert_equal Language['Batchfile'], Language.find_by_alias('bat') assert_equal Language['Batchfile'], Language.find_by_alias('bat')
assert_equal Language['C#'], Language.find_by_alias('c#') assert_equal Language['C#'], Language.find_by_alias('c#')
@@ -68,6 +70,7 @@ class TestLanguage < Test::Unit::TestCase
assert_equal Language['C++'], Language.find_by_alias('c++') assert_equal Language['C++'], Language.find_by_alias('c++')
assert_equal Language['C++'], Language.find_by_alias('cpp') assert_equal Language['C++'], Language.find_by_alias('cpp')
assert_equal Language['CoffeeScript'], Language.find_by_alias('coffee') assert_equal Language['CoffeeScript'], Language.find_by_alias('coffee')
assert_equal Language['CoffeeScript'], Language.find_by_alias('coffee-script')
assert_equal Language['ColdFusion'], Language.find_by_alias('cfm') assert_equal Language['ColdFusion'], Language.find_by_alias('cfm')
assert_equal Language['Common Lisp'], Language.find_by_alias('common-lisp') assert_equal Language['Common Lisp'], Language.find_by_alias('common-lisp')
assert_equal Language['Common Lisp'], Language.find_by_alias('lisp') assert_equal Language['Common Lisp'], Language.find_by_alias('lisp')
@@ -78,7 +81,9 @@ class TestLanguage < Test::Unit::TestCase
assert_equal Language['Emacs Lisp'], Language.find_by_alias('emacs-lisp') assert_equal Language['Emacs Lisp'], Language.find_by_alias('emacs-lisp')
assert_equal Language['Gettext Catalog'], Language.find_by_alias('pot') assert_equal Language['Gettext Catalog'], Language.find_by_alias('pot')
assert_equal Language['HTML'], Language.find_by_alias('html') assert_equal Language['HTML'], Language.find_by_alias('html')
assert_equal Language['HTML'], Language.find_by_alias('xhtml')
assert_equal Language['HTML+ERB'], Language.find_by_alias('html+erb') assert_equal Language['HTML+ERB'], Language.find_by_alias('html+erb')
assert_equal Language['HTML+ERB'], Language.find_by_alias('erb')
assert_equal Language['IRC log'], Language.find_by_alias('irc') assert_equal Language['IRC log'], Language.find_by_alias('irc')
assert_equal Language['JSON'], Language.find_by_alias('json') assert_equal Language['JSON'], Language.find_by_alias('json')
assert_equal Language['Java Server Pages'], Language.find_by_alias('jsp') assert_equal Language['Java Server Pages'], Language.find_by_alias('jsp')
@@ -87,6 +92,7 @@ class TestLanguage < Test::Unit::TestCase
assert_equal Language['JavaScript'], Language.find_by_alias('js') assert_equal Language['JavaScript'], Language.find_by_alias('js')
assert_equal Language['Literate Haskell'], Language.find_by_alias('lhs') assert_equal Language['Literate Haskell'], Language.find_by_alias('lhs')
assert_equal Language['Literate Haskell'], Language.find_by_alias('literate-haskell') assert_equal Language['Literate Haskell'], Language.find_by_alias('literate-haskell')
assert_equal Language['Objective-C'], Language.find_by_alias('objc')
assert_equal Language['OpenEdge ABL'], Language.find_by_alias('openedge') assert_equal Language['OpenEdge ABL'], Language.find_by_alias('openedge')
assert_equal Language['OpenEdge ABL'], Language.find_by_alias('progress') assert_equal Language['OpenEdge ABL'], Language.find_by_alias('progress')
assert_equal Language['OpenEdge ABL'], Language.find_by_alias('abl') assert_equal Language['OpenEdge ABL'], Language.find_by_alias('abl')
@@ -106,6 +112,7 @@ class TestLanguage < Test::Unit::TestCase
assert_equal Language['VimL'], Language.find_by_alias('vim') assert_equal Language['VimL'], Language.find_by_alias('vim')
assert_equal Language['VimL'], Language.find_by_alias('viml') assert_equal Language['VimL'], Language.find_by_alias('viml')
assert_equal Language['reStructuredText'], Language.find_by_alias('rst') assert_equal Language['reStructuredText'], Language.find_by_alias('rst')
assert_equal Language['YAML'], Language.find_by_alias('yml')
end end
def test_groups def test_groups
@@ -224,10 +231,16 @@ class TestLanguage < Test::Unit::TestCase
assert_equal [Language['Ruby']], Language.find_by_filename('foo/bar.rb') assert_equal [Language['Ruby']], Language.find_by_filename('foo/bar.rb')
assert_equal [Language['Ruby']], Language.find_by_filename('Rakefile') assert_equal [Language['Ruby']], Language.find_by_filename('Rakefile')
assert_equal [Language['Ruby']], Language.find_by_filename('PKGBUILD.rb') assert_equal [Language['Ruby']], Language.find_by_filename('PKGBUILD.rb')
assert_equal Language['ApacheConf'], Language.find_by_filename('httpd.conf').first
assert_equal [Language['ApacheConf']], Language.find_by_filename('.htaccess')
assert_equal Language['Nginx'], Language.find_by_filename('nginx.conf').first
assert_equal ['C', 'C++', 'Objective-C'], Language.find_by_filename('foo.h').map(&:name).sort assert_equal ['C', 'C++', 'Objective-C'], Language.find_by_filename('foo.h').map(&:name).sort
assert_equal [], Language.find_by_filename('rb') assert_equal [], Language.find_by_filename('rb')
assert_equal [], Language.find_by_filename('.rb') assert_equal [], Language.find_by_filename('.rb')
assert_equal [], Language.find_by_filename('.nkt') assert_equal [], Language.find_by_filename('.nkt')
assert_equal [Language['Shell']], Language.find_by_filename('.bashrc')
assert_equal [Language['Shell']], Language.find_by_filename('bash_profile')
assert_equal [Language['Shell']], Language.find_by_filename('.zshrc')
end end
def test_find def test_find

View File

@@ -94,6 +94,7 @@ class TestTokenizer < Test::Unit::TestCase
assert_equal "SHEBANG#!ruby", tokenize(:"Ruby/ruby.script!")[0] assert_equal "SHEBANG#!ruby", tokenize(:"Ruby/ruby.script!")[0]
assert_equal "SHEBANG#!ruby", tokenize(:"Ruby/ruby2.script!")[0] assert_equal "SHEBANG#!ruby", tokenize(:"Ruby/ruby2.script!")[0]
assert_equal "SHEBANG#!node", tokenize(:"JavaScript/js.script!")[0] assert_equal "SHEBANG#!node", tokenize(:"JavaScript/js.script!")[0]
assert_equal "SHEBANG#!php", tokenize(:"PHP/php.script!")[0]
assert_equal "echo", tokenize(:"Shell/invalid-shebang.sh")[0] assert_equal "echo", tokenize(:"Shell/invalid-shebang.sh")[0]
end end