diff --git a/lib/linguist/language.rb b/lib/linguist/language.rb index a370160a..2c3d6ff0 100644 --- a/lib/linguist/language.rb +++ b/lib/linguist/language.rb @@ -154,7 +154,8 @@ module Linguist @aliases = [default_alias_name] + (attributes[:aliases] || []) # Lookup Lexer object - @lexer = Lexer.find_by_alias(attributes[:lexer] || default_alias_name) + @lexer = Lexer.find_by_alias(attributes[:lexer] || default_alias_name) || + raise(ArgumentError, "#{@name} is missing lexer") # Set legacy search term @search_term = attributes[:search_term] || default_alias_name diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index bd220b39..bcc750d5 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -36,6 +36,7 @@ AppleScript: :ext: - .scpt Arc: + :lexer: text :ext: - .arc Assembly: @@ -156,6 +157,7 @@ Dylan: :ext: - .dylan Eiffel: + :lexer: text :ext: - .e Emacs Lisp: @@ -235,6 +237,7 @@ HTML+PHP: :ext: - .phtml HaXe: + :lexer: hx :ext: - .hx - .hxml @@ -308,6 +311,7 @@ Mako: :ext: - .mao Markdown: + :lexer: text :ext: - .md - .mkd @@ -318,6 +322,7 @@ Matlab: :ext: - .matlab Max/MSP: + :lexer: text :ext: - .mxt Mirah: @@ -378,7 +383,7 @@ PHP: - .php4 - .php5 Parrot Internal Representation: - :lexer: pir + :lexer: text :search_term: pir :aliases: - pir @@ -397,6 +402,7 @@ Perl: - .perl - .psgi Pure Data: + :lexer: text :ext: - .pd Python: @@ -415,6 +421,7 @@ R: - .r - .R Racket: + :lexer: text :ext: - .rkt - .rktl @@ -469,6 +476,7 @@ Scheme: - .sps - .scm Self: + :lexer: text :ext: - .self Shell: @@ -489,6 +497,7 @@ Smarty: :ext: - .tpl SuperCollider: + :lexer: text :ext: - .sc Tcl: @@ -509,16 +518,19 @@ Text: :ext: - .txt Textile: + :lexer: text :ext: - .textile Vala: :ext: - .vala VHDL: + :lexer: text :ext: - .vhdl - .vhd Verilog: + :lexer: text :ext: - .v VimL: @@ -530,6 +542,7 @@ VimL: - .vim - .vimrc Visual Basic: + :lexer: text :ext: - .bas - .vbs diff --git a/test/test_language.rb b/test/test_language.rb index 933566b3..84705f59 100644 --- a/test/test_language.rb +++ b/test/test_language.rb @@ -176,12 +176,120 @@ class TestLanguage < Test::Unit::TestCase end def test_lexer - assert_equal Lexer['Perl'], Language['Perl'].lexer - assert_equal Lexer['Python'], Language['Python'].lexer - assert_equal Lexer['Ruby'], Language['Ruby'].lexer - assert_equal Lexer['C++'], Language['C++'].lexer - assert_equal Lexer['Bash'], Language['Gentoo Ebuild'].lexer - assert_equal Lexer['Scheme'], Language['Nu'].lexer + assert_equal Lexer['aspx-vb'], Language['ASP'].lexer + assert_equal Lexer['ActionScript 3'], Language['ActionScript'].lexer + assert_equal Lexer['Ada'], Language['Ada'].lexer + assert_equal Lexer['AppleScript'], Language['AppleScript'].lexer + assert_equal Lexer['Text only'] , Language['Arc'].lexer + assert_equal Lexer['NASM'], Language['Assembly'].lexer + assert_equal Lexer['Batchfile'], Language['Batchfile'].lexer + assert_equal Lexer['Befunge'], Language['Befunge'].lexer + assert_equal Lexer['Boo'], Language['Boo'].lexer + assert_equal Lexer['Brainfuck'], Language['Brainfuck'].lexer + assert_equal Lexer['BlitzMax'], Language['BlitzMax'].lexer + assert_equal Lexer['C'], Language['C'].lexer + assert_equal Lexer['C#'], Language['C#'].lexer + assert_equal Lexer['C++'], Language['C++'].lexer + assert_equal Lexer['CSS'], Language['CSS'].lexer + assert_equal Lexer['Java'], Language['ChucK'].lexer + assert_equal Lexer['Clojure'], Language['Clojure'].lexer + assert_equal Lexer['CoffeeScript'], Language['CoffeeScript'].lexer + assert_equal Lexer['ColdFusion HTML'], Language['ColdFusion'].lexer + assert_equal Lexer['Common Lisp'], Language['Common Lisp'].lexer + assert_equal Lexer['Gherkin'], Language['Cucumber'].lexer + assert_equal Lexer['Cython'], Language['Cython'].lexer + assert_equal Lexer['D'], Language['D'].lexer + assert_equal Lexer['Darcs Patch'], Language['Darcs Patch'].lexer + assert_equal Lexer['Delphi'], Language['Delphi'].lexer + assert_equal Lexer['Diff'], Language['Diff'].lexer + assert_equal Lexer['D-ObjDump'], Language['d-objdump'].lexer + assert_equal Lexer['Dylan'], Language['Dylan'].lexer + assert_equal Lexer['Text only'], Language['Eiffel'].lexer + assert_equal Lexer['Scheme'], Language['Emacs Lisp'].lexer + assert_equal Lexer['Erlang'], Language['Erlang'].lexer + assert_equal Lexer['OCaml'], Language['F#'].lexer + assert_equal Lexer['Factor'], Language['Factor'].lexer + assert_equal Lexer['Fortran'], Language['FORTRAN'].lexer + assert_equal Lexer['GAS'], Language['GAS'].lexer + assert_equal Lexer['Genshi'], Language['Genshi'].lexer + assert_equal Lexer['Bash'], Language['Gentoo Ebuild'].lexer + assert_equal Lexer['Bash'], Language['Gentoo Eclass'].lexer + assert_equal Lexer['Gettext Catalog'], Language['Gettext Catalog'].lexer + assert_equal Lexer['Go'], Language['Go'].lexer + assert_equal Lexer['Groff'], Language['Groff'].lexer + assert_equal Lexer['HTML'], Language['HTML'].lexer + assert_equal Lexer['HTML+Django/Jinja'], Language['HTML+Django'].lexer + assert_equal Lexer['RHTML'], Language['HTML+ERB'].lexer + assert_equal Lexer['HTML+PHP'], Language['HTML+PHP'].lexer + assert_equal Lexer['haXe'], Language['HaXe'].lexer + assert_equal Lexer['Haml'], Language['Haml'].lexer + assert_equal Lexer['Haskell'], Language['Haskell'].lexer + assert_equal Lexer['INI'], Language['INI'].lexer + assert_equal Lexer['IRC logs'], Language['IRC log'].lexer + assert_equal Lexer['Io'], Language['Io'].lexer + assert_equal Lexer['Java'], Language['Java'].lexer + assert_equal Lexer['Java'], Language['Groovy'].lexer + assert_equal Lexer['JavaScript'], Language['JavaScript'].lexer + assert_equal Lexer['JavaScript'], Language['JSON'].lexer + assert_equal Lexer['Literate Haskell'], Language['Literate Haskell'].lexer + assert_equal Lexer['LLVM'], Language['LLVM'].lexer + assert_equal Lexer['Lua'], Language['Lua'].lexer + assert_equal Lexer['Makefile'], Language['Makefile'].lexer + assert_equal Lexer['Mako'], Language['Mako'].lexer + assert_equal Lexer['Text only'], Language['Markdown'].lexer + assert_equal Lexer['Matlab'], Language['Matlab'].lexer + assert_equal Lexer['Text only'], Language['Max/MSP'].lexer + assert_equal Lexer['Ruby'], Language['Mirah'].lexer + assert_equal Lexer['Moocode'], Language['Moocode'].lexer + assert_equal Lexer['Myghty'], Language['Myghty'].lexer + assert_equal Lexer['Scheme'], Language['Nu'].lexer + assert_equal Lexer['NumPy'], Language['NumPy'].lexer + assert_equal Lexer['OCaml'], Language['OCaml'].lexer + assert_equal Lexer['cpp-objdump'], Language['Cpp-ObjDump'].lexer + assert_equal Lexer['c-objdump'], Language['C-ObjDump'].lexer + assert_equal Lexer['objdump'], Language['ObjDump'].lexer + assert_equal Lexer['Objective-C'], Language['Objective-C'].lexer + assert_equal Lexer['Objective-J'], Language['Objective-J'].lexer + assert_equal Lexer['PHP'], Language['PHP'].lexer + assert_equal Lexer['Text only'], Language['Parrot Internal Representation'].lexer + assert_equal Lexer['Perl'], Language['Perl'].lexer + assert_equal Lexer['Text only'], Language['Pure Data'].lexer + assert_equal Lexer['Python'], Language['Python'].lexer + assert_equal Lexer['Python Traceback'], Language['Python traceback'].lexer + assert_equal Lexer['S'], Language['R'].lexer + assert_equal Lexer['Text only'], Language['Racket'].lexer + assert_equal Lexer['RHTML'], Language['RHTML'].lexer + assert_equal Lexer['Raw token data'], Language['Raw token data'].lexer + assert_equal Lexer['REBOL'], Language['Rebol'].lexer + assert_equal Lexer['Redcode'], Language['Redcode'].lexer + assert_equal Lexer['Ruby'], Language['Ruby'].lexer + assert_equal Lexer['SQL'], Language['SQL'].lexer + assert_equal Lexer['Sass'], Language['Sass'].lexer + assert_equal Lexer['Scala'], Language['Scala'].lexer + assert_equal Lexer['Scheme'], Language['Scheme'].lexer + assert_equal Lexer['Text only'], Language['Self'].lexer + assert_equal Lexer['Bash'], Language['Shell'].lexer + assert_equal Lexer['Smalltalk'], Language['Smalltalk'].lexer + assert_equal Lexer['Smarty'], Language['Smarty'].lexer + assert_equal Lexer['Text only'], Language['SuperCollider'].lexer + assert_equal Lexer['Tcl'], Language['Tcl'].lexer + assert_equal Lexer['Tcsh'], Language['Tcsh'].lexer + assert_equal Lexer['TeX'], Language['TeX'].lexer + assert_equal Lexer['Text only'], Language['Text'].lexer + assert_equal Lexer['Text only'], Language['Textile'].lexer + assert_equal Lexer['Vala'], Language['Vala'].lexer + assert_equal Lexer['Text only'], Language['VHDL'].lexer + assert_equal Lexer['Text only'], Language['Verilog'].lexer + assert_equal Lexer['VimL'], Language['VimL'].lexer + assert_equal Lexer['Text only'], Language['Visual Basic'].lexer + assert_equal Lexer['XML'], Language['XML'].lexer + assert_equal Lexer['XQuery'], Language['XQuery'].lexer + assert_equal Lexer['C'], Language['XS'].lexer + assert_equal Lexer['YAML'], Language['YAML'].lexer + assert_equal Lexer['Java Server Page'], Language['Java Server Pages'].lexer + assert_equal Lexer['MuPAD'], Language['mupad'].lexer + assert_equal Lexer['Ooc'], Language['ooc'].lexer + assert_equal Lexer['reStructuredText'], Language['reStructuredText'].lexer end def test_extensions