diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 9ec4b97c..413683e5 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -271,6 +271,7 @@ Batchfile: ace_mode: batchfile Befunge: + type: programming extensions: - .befunge ace_mode: text @@ -326,6 +327,7 @@ Boo: ace_mode: text Brainfuck: + type: programming extensions: - .b - .bf @@ -421,6 +423,7 @@ CLIPS: ace_mode: text CMake: + type: programming extensions: - .cmake - .cmake.in @@ -480,6 +483,7 @@ Chapel: ace_mode: text ChucK: + type: programming extensions: - .ck tm_scope: source.java @@ -641,6 +645,7 @@ Crystal: - crystal Cucumber: + type: programming extensions: - .feature tm_scope: text.gherkin.feature @@ -700,6 +705,7 @@ DM: ace_mode: c_cpp Darcs Patch: + type: programming search_term: dpatch aliases: - dpatch @@ -717,6 +723,7 @@ Dart: ace_mode: dart Diff: + type: programming extensions: - .diff - .patch @@ -1014,6 +1021,7 @@ Game Maker Language: ace_mode: c_cpp Genshi: + type: programming extensions: - .kid tm_scope: text.xml.genshi @@ -1023,6 +1031,7 @@ Genshi: ace_mode: xml Gentoo Ebuild: + type: programming group: Shell extensions: - .ebuild @@ -1030,6 +1039,7 @@ Gentoo Ebuild: ace_mode: sh Gentoo Eclass: + type: programming group: Shell extensions: - .eclass @@ -1037,6 +1047,7 @@ Gentoo Eclass: ace_mode: sh Gettext Catalog: + type: programming search_term: pot searchable: false aliases: @@ -1137,6 +1148,7 @@ Graphviz (DOT): ace_mode: text Groff: + type: programming extensions: - .man - '.1' @@ -1164,6 +1176,7 @@ Groovy: - groovy Groovy Server Pages: + type: programming group: Groovy aliases: - gsp @@ -1320,6 +1333,7 @@ INI: ace_mode: ini IRC log: + type: data search_term: irc aliases: - irc @@ -1350,6 +1364,7 @@ Inform 7: ace_mode: text Inno Setup: + type: programming extensions: - .iss tm_scope: source.inno @@ -1445,6 +1460,7 @@ Java: - .java Java Server Pages: + type: programming group: Java search_term: jsp aliases: @@ -1540,6 +1556,7 @@ LFE: ace_mode: lisp LLVM: + type: programming extensions: - .ll ace_mode: text @@ -1607,6 +1624,7 @@ Less: ace_mode: less LilyPond: + type: programming extensions: - .ly - .ily @@ -1745,6 +1763,7 @@ Makefile: ace_mode: makefile Mako: + type: programming extensions: - .mako - .mao @@ -1837,6 +1856,7 @@ Mercury: ace_mode: prolog MiniD: # Legacy + type: programming searchable: false extensions: - .minid # Dummy extension @@ -1884,12 +1904,14 @@ MoonScript: ace_mode: text Myghty: + type: programming extensions: - .myt tm_scope: none ace_mode: text NSIS: + type: programming extensions: - .nsi - .nsh @@ -1981,6 +2003,7 @@ Nu: - nush NumPy: + type: programming group: Python extensions: - .numpy @@ -2440,6 +2463,7 @@ QML: ace_mode: text QMake: + type: programming extensions: - .pro - .pri @@ -2536,6 +2560,7 @@ Ragel in Ruby Host: ace_mode: text Raw token data: + type: data search_term: raw aliases: - raw @@ -2567,6 +2592,7 @@ Red: ace_mode: text Redcode: + type: programming extensions: - .cw tm_scope: none @@ -2853,6 +2879,7 @@ Smalltalk: ace_mode: text Smarty: + type: programming extensions: - .tpl ace_mode: smarty @@ -3276,6 +3303,7 @@ XQuery: ace_mode: xquery XS: + type: programming extensions: - .xs tm_scope: source.c @@ -3372,6 +3400,7 @@ fish: ace_mode: text mupad: + type: programming extensions: - .mu ace_mode: text diff --git a/samples/Brainfuck/fib100.bf b/samples/Brainfuck/fib100.bf new file mode 100644 index 00000000..3359588a --- /dev/null +++ b/samples/Brainfuck/fib100.bf @@ -0,0 +1,13 @@ +# Calculate and output all fibonacci numbers under 100 + ++++++++++++ +>+>>>>++++++++++++++++++++++++++++++++++++++++++++ +>++++++++++++++++++++++++++++++++<<<<<<[>[>>>>>>+> ++<<<<<<<-]>>>>>>>[<<<<<<<+>>>>>>>-]<[>++++++++++[- +<-[>>+>+<<<-]>>>[<<<+>>>-]+<[>[-]<[-]]>[<<[>>>+<<< +-]>>[-]]<<]>>>[>>+>+<<<-]>>>[<<<+>>>-]+<[>[-]<[-]] +>[<<+>>[-]]<<<<<<<]>>>>>[+++++++++++++++++++++++++ ++++++++++++++++++++++++.[-]]++++++++++<[->-<]>++++ +++++++++++++++++++++++++++++++++++++++++++++.[-]<< +<<<<<<<<<<[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<-[>>.>.<<< +[-]]<<[>>+>+<<<-]>>>[<<<+>>>-]<<[<+>-]>[<+>-]<<<-] \ No newline at end of file diff --git a/samples/Brainfuck/hello.bf b/samples/Brainfuck/hello.bf new file mode 100644 index 00000000..6a93a155 --- /dev/null +++ b/samples/Brainfuck/hello.bf @@ -0,0 +1,4 @@ +// More complex version of hello world + +>++++++++[<+++++++++>-]<.>>+>+>++>[-]+<[>[->+<<++++>]<<]>.+++++++..+++.> +>+++++++.<<<[[-]<[-]>]<+++++++++++++++.>>.+++.------.--------.>>+.>++++. \ No newline at end of file diff --git a/samples/Brainfuck/helloworld.bf b/samples/Brainfuck/helloworld.bf new file mode 100644 index 00000000..c7bde23a --- /dev/null +++ b/samples/Brainfuck/helloworld.bf @@ -0,0 +1,3 @@ +// Hello World + +++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++. \ No newline at end of file diff --git a/samples/Brainfuck/rot13.bf b/samples/Brainfuck/rot13.bf new file mode 100644 index 00000000..3b9d8e7f --- /dev/null +++ b/samples/Brainfuck/rot13.bf @@ -0,0 +1,30 @@ +# ROT13 cipher + +-,+[ Read first character and start outer character reading loop + -[ Skip forward if character is 0 + >>++++[>++++++++<-] Set up divisor (32) for division loop + (MEMORY LAYOUT: dividend copy remainder divisor quotient zero zero) + <+<-[ Set up dividend (x minus 1) and enter division loop + >+>+>-[>>>] Increase copy and remainder / reduce divisor / Normal case: skip forward + <[[>+<-]>>+>] Special case: move remainder back to divisor and increase quotient + <<<<<- Decrement dividend + ] End division loop + ]>>>[-]+ End skip loop; zero former divisor and reuse space for a flag + >--[-[<->+++[-]]]<[ Zero that flag unless quotient was 2 or 3; zero quotient; check flag + ++++++++++++<[ If flag then set up divisor (13) for second division loop + (MEMORY LAYOUT: zero copy dividend divisor remainder quotient zero zero) + >-[>+>>] Reduce divisor; Normal case: increase remainder + >[+[<+>-]>+>>] Special case: increase remainder / move it back to divisor / increase quotient + <<<<<- Decrease dividend + ] End division loop + >>[<+>-] Add remainder back to divisor to get a useful 13 + >[ Skip forward if quotient was 0 + -[ Decrement quotient and skip forward if quotient was 1 + -<<[-]>> Zero quotient and divisor if quotient was 2 + ]<<[<<->>-]>> Zero divisor and subtract 13 from copy if quotient was 1 + ]<<[<<+>>-] Zero divisor and add 13 to copy if quotient was 0 + ] End outer skip loop (jump to here if ((character minus 1)/32) was not 2 or 3) + <[-] Clear remainder from first division if second division was skipped + <.[-] Output ROT13ed character from copy and clear it + <-,+ Read next character +] End character reading loop \ No newline at end of file diff --git a/test/test_language.rb b/test/test_language.rb index 1a39744e..31be9a82 100644 --- a/test/test_language.rb +++ b/test/test_language.rb @@ -155,10 +155,6 @@ class TestLanguage < Minitest::Test assert_equal :prose, Language['Org'].type end - def test_other - assert_nil Language['Brainfuck'].type - end - def test_searchable assert Language['Ruby'].searchable? assert !Language['Gettext Catalog'].searchable? @@ -358,6 +354,15 @@ class TestLanguage < Minitest::Test assert missing.empty?, message end + def test_all_languages_have_type + missing = Language.all.select { |language| language.type.nil? } + message = "The following languages do not have a type listed in grammars.yml. Please add types for all new languages.\n" + + width = missing.map { |language| language.name.length }.max + message << missing.map { |language| sprintf("%-#{width}s", language.name) }.sort.join("\n") + assert missing.empty?, message + end + def test_all_languages_have_a_valid_ace_mode ace_fixture_path = File.join('test', 'fixtures', 'ace_modes.json') skip("No ace_modes.json file") unless File.exist?(ace_fixture_path)