diff --git a/.gitignore b/.gitignore index 90d94706..4c0e6662 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ benchmark/ lib/linguist/samples.json /grammars /node_modules +test/fixtures/ace_modes.json diff --git a/Rakefile b/Rakefile index 470dcec9..068af0bb 100644 --- a/Rakefile +++ b/Rakefile @@ -3,13 +3,14 @@ require 'rake/clean' require 'rake/testtask' require 'yaml' require 'yajl' +require 'open-uri' task :default => :test Rake::TestTask.new -# Extend test task to check for samples -task :test => :check_samples +# Extend test task to check for samples and fetch latest Ace modes +task :test => [:check_samples, :fetch_ace_modes] desc "Check that we have samples.json generated" task :check_samples do @@ -18,6 +19,20 @@ task :check_samples do end end +desc "Fetch the latest Ace modes from its GitHub repository" +task :fetch_ace_modes do + ACE_FIXTURE_PATH = File.join('test', 'fixtures', 'ace_modes.json') + + File.delete(ACE_FIXTURE_PATH) if File.exist?(ACE_FIXTURE_PATH) + + begin + ace_github_modes = open("https://api.github.com/repos/ajaxorg/ace/contents/lib/ace/mode").read + File.write(ACE_FIXTURE_PATH, ace_github_modes) + rescue OpenURI::HTTPError, SocketError + # no internet? no problem. + end +end + task :samples do require 'linguist/samples' json = Yajl.dump(Linguist::Samples.data, :pretty => true) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index f601aa78..04c60eb4 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -3,7 +3,9 @@ # type - Either data, programming, markup, prose, or nil # aliases - An Array of additional aliases (implicitly # includes name.downcase) -# ace_mode - A String name of Ace Mode (if available) +# ace_mode - A String name of the Ace Mode used for highlighting whenever +# a file is edited. This must match one of the filenames in http://git.io/3XO_Cg. +# Use "none" if a mode does not exist. # wrap - Boolean wrap to enable line wrapping (default: false) # extensions - An Array of associated extensions (the first one is # considered the primary extension) @@ -26,6 +28,7 @@ ABAP: type: programming extensions: - .abap + ace_mode: abap AGS Script: type: programming @@ -36,12 +39,14 @@ AGS Script: - .asc - .ash tm_scope: source.c++ + ace_mode: c_cpp ANTLR: type: programming color: "#9DC3FF" extensions: - .g4 + ace_mode: none APL: type: programming @@ -50,6 +55,7 @@ APL: - .apl - .dyalog tm_scope: none + ace_mode: none ASP: type: programming @@ -66,6 +72,7 @@ ASP: - .asmx - .aspx - .axd + ace_mode: none ATS: type: programming @@ -78,6 +85,7 @@ ATS: - .hats - .sats tm_scope: source.ocaml + ace_mode: ocaml ActionScript: type: programming @@ -90,6 +98,7 @@ ActionScript: - as3 extensions: - .as + ace_mode: actionscript Ada: type: programming @@ -100,18 +109,21 @@ Ada: - .ads aliases: - ada95ada2005 + ace_mode: ada Agda: type: programming color: "#467C91" extensions: - .agda + ace_mode: none Alloy: type: programming # 'modeling' would be more appropiate color: "#cc5c24" extensions: - .als + ace_mode: none Ant Build System: type: data @@ -119,6 +131,7 @@ Ant Build System: filenames: - ant.xml - build.xml + ace_mode: xml ApacheConf: type: markup @@ -129,12 +142,14 @@ ApacheConf: - .apacheconf - .conf tm_scope: source.apache-config + ace_mode: apache_conf Apex: type: programming extensions: - .cls tm_scope: source.java + ace_mode: java AppleScript: type: programming @@ -145,6 +160,7 @@ AppleScript: - .scpt interpreters: - osascript + ace_mode: applescript Arc: type: programming @@ -152,6 +168,7 @@ Arc: extensions: - .arc tm_scope: none + ace_mode: none Arduino: type: programming @@ -159,6 +176,7 @@ Arduino: extensions: - .ino tm_scope: source.c++ + ace_mode: c_cpp AsciiDoc: type: prose @@ -176,6 +194,7 @@ AspectJ: extensions: - .aj tm_scope: none + ace_mode: none Assembly: type: programming @@ -188,12 +207,14 @@ Assembly: - .ASM - .a51 tm_scope: source.asm.x86 + ace_mode: assembly_x86 Augeas: type: programming extensions: - .aug tm_scope: none + ace_mode: none AutoHotkey: type: programming @@ -204,6 +225,7 @@ AutoHotkey: - .ahk - .ahkl tm_scope: none + ace_mode: autohotkey AutoIt: type: programming @@ -215,6 +237,7 @@ AutoIt: extensions: - .au3 tm_scope: source.autoit.3 + ace_mode: autohotkey Awk: type: programming @@ -229,6 +252,7 @@ Awk: - gawk - mawk - nawk + ace_mode: none Batchfile: type: programming @@ -243,16 +267,19 @@ Batchfile: - .bat - .cmd tm_scope: source.dosbatch + ace_mode: batchfile Befunge: extensions: - .befunge + ace_mode: none Bison: type: programming tm_scope: source.bison extensions: - .y + ace_mode: none BlitzBasic: type: programming @@ -265,6 +292,7 @@ BlitzBasic: - .bb - .decls tm_scope: source.blitzmax + ace_mode: none BlitzMax: type: programming @@ -273,35 +301,41 @@ BlitzMax: - .bmx aliases: - bmax + ace_mode: none Bluespec: type: programming extensions: - .bsv tm_scope: source.verilog + ace_mode: verilog Boo: type: programming color: "#d4bec1" extensions: - .boo + ace_mode: none Brainfuck: extensions: - .b - .bf tm_scope: source.bf + ace_mode: none Brightscript: type: programming extensions: - .brs tm_scope: none + ace_mode: none Bro: type: programming extensions: - .bro + ace_mode: none C: type: programming @@ -314,6 +348,7 @@ C: - .h - .idc - .w + ace_mode: c_cpp C#: type: programming @@ -355,6 +390,7 @@ C-ObjDump: extensions: - .c-objdump tm_scope: objdump.x86asm + ace_mode: assembly_x86 C2hs Haskell: type: programming @@ -364,12 +400,14 @@ C2hs Haskell: extensions: - .chs tm_scope: source.haskell + ace_mode: haskell CLIPS: type: programming extensions: - .clp tm_scope: none + ace_mode: none CMake: extensions: @@ -377,6 +415,7 @@ CMake: - .in filenames: - CMakeLists.txt + ace_mode: none COBOL: type: programming @@ -388,6 +427,7 @@ COBOL: - .ccp - .cobol - .cpy + ace_mode: cobol CSS: ace_mode: css @@ -400,11 +440,13 @@ Cap'n Proto: tm_scope: source.capnp extensions: - .capnp + ace_mode: none Ceylon: type: programming extensions: - .ceylon + ace_mode: none Chapel: type: programming @@ -413,11 +455,13 @@ Chapel: - chpl extensions: - .chpl + ace_mode: none ChucK: extensions: - .ck tm_scope: source.java + ace_mode: java Cirru: type: programming @@ -433,6 +477,7 @@ Clean: - .icl - .dcl tm_scope: none + ace_mode: none Clojure: type: programming @@ -515,6 +560,7 @@ Common Lisp: - ccl - clisp - ecl + ace_mode: lisp Component Pascal: type: programming @@ -526,18 +572,21 @@ Component Pascal: aliases: - delphi - objectpascal + ace_mode: pascal Cool: type: programming extensions: - .cl tm_scope: source.cool + ace_mode: none Coq: type: programming extensions: - .coq - .v + ace_mode: none Cpp-ObjDump: type: data @@ -550,6 +599,7 @@ Cpp-ObjDump: tm_scope: objdump.x86asm aliases: - c++-objdumb + ace_mode: assembly_x86 Creole: type: prose @@ -557,6 +607,7 @@ Creole: extensions: - .creole tm_scope: none + ace_mode: none Crystal: type: programming @@ -573,6 +624,7 @@ Cucumber: tm_scope: text.gherkin.feature aliases: - gherkin + ace_mode: none Cuda: type: programming @@ -580,12 +632,14 @@ Cuda: - .cu - .cuh tm_scope: source.cuda-c++ + ace_mode: c_cpp Cycript: type: programming extensions: - .cy tm_scope: source.js + ace_mode: javascript Cython: type: programming @@ -596,6 +650,7 @@ Cython: - .pxi aliases: - pyrex + ace_mode: none D: type: programming @@ -603,12 +658,14 @@ D: extensions: - .d - .di + ace_mode: d D-ObjDump: type: data extensions: - .d-objdump tm_scope: objdump.x86asm + ace_mode: assembly_x86 DM: type: programming @@ -618,6 +675,7 @@ DM: aliases: - byond tm_scope: source.c++ + ace_mode: c_cpp Darcs Patch: search_term: dpatch @@ -627,12 +685,14 @@ Darcs Patch: - .darcspatch - .dpatch tm_scope: none + ace_mode: none Dart: type: programming color: "#98BAD6" extensions: - .dart + ace_mode: dart Diff: extensions: @@ -640,6 +700,7 @@ Diff: - .patch aliases: - udiff + ace_mode: diff Dockerfile: type: data @@ -648,6 +709,7 @@ Dockerfile: - .dockerfile filenames: - Dockerfile + ace_mode: dockerfile Dogescript: type: programming @@ -655,6 +717,7 @@ Dogescript: extensions: - .djs tm_scope: none + ace_mode: none Dylan: type: programming @@ -664,6 +727,7 @@ Dylan: - .dyl - .intr - .lid + ace_mode: none E: type: programming @@ -671,6 +735,7 @@ E: extensions: - .E tm_scope: none + ace_mode: none ECL: type: programming @@ -679,6 +744,7 @@ ECL: - .ecl - .eclxml tm_scope: none + ace_mode: none Eagle: type: markup @@ -687,6 +753,7 @@ Eagle: - .sch - .brd tm_scope: text.xml + ace_mode: xml Ecere Projects: type: data @@ -694,12 +761,14 @@ Ecere Projects: extensions: - .epj tm_scope: source.json + ace_mode: json Eiffel: type: programming color: "#946d57" extensions: - .e + ace_mode: eiffel Elixir: type: programming @@ -707,12 +776,14 @@ Elixir: extensions: - .ex - .exs + ace_mode: elixir Elm: type: programming extensions: - .elm tm_scope: source.haskell + ace_mode: elm Emacs Lisp: type: programming @@ -726,6 +797,7 @@ Emacs Lisp: extensions: - .el - .emacs + ace_mode: lisp EmberScript: type: programming @@ -734,6 +806,7 @@ EmberScript: - .em - .emberscript tm_scope: source.coffee + ace_mode: coffee Erlang: type: programming @@ -743,6 +816,7 @@ Erlang: - .es - .escript - .hrl + ace_mode: erlang interpreters: - escript @@ -757,6 +831,7 @@ F#: - .fsi - .fsx tm_scope: source.fsharp + ace_mode: none FLUX: type: programming @@ -765,6 +840,7 @@ FLUX: - .fx - .flux tm_scope: none + ace_mode: none FORTRAN: type: programming @@ -787,6 +863,7 @@ FORTRAN: - .for - .fpp tm_scope: source.fortran.modern + ace_mode: none Factor: type: programming @@ -796,6 +873,7 @@ Factor: filenames: - .factor-boot-rc - .factor-rc + ace_mode: none Fancy: type: programming @@ -805,6 +883,7 @@ Fancy: - .fancypack filenames: - Fakefile + ace_mode: none Fantom: type: programming @@ -812,6 +891,7 @@ Fantom: extensions: - .fan tm_scope: source.fan + ace_mode: none Forth: type: programming @@ -825,6 +905,7 @@ Forth: - .forth - .frt - .fs + ace_mode: forth Frege: type: programming @@ -832,6 +913,7 @@ Frege: extensions: - .fr tm_scope: source.haskell + ace_mode: haskell G-code: type: data @@ -840,12 +922,14 @@ G-code: - .gco - .gcode tm_scope: none + ace_mode: gcode GAMS: type: programming extensions: - .gms tm_scope: none + ace_mode: none GAP: type: programming @@ -855,6 +939,7 @@ GAP: - .gd - .gi tm_scope: none + ace_mode: none GAS: type: programming @@ -863,12 +948,14 @@ GAS: - .s - .S tm_scope: source.asm.x86 + ace_mode: assembly_x86 GDScript: type: programming extensions: - .gd tm_scope: none + ace_mode: none GLSL: group: C @@ -888,6 +975,7 @@ GLSL: - .vert - .vrx - .vshader + ace_mode: glsl Game Maker Language: type: programming @@ -895,6 +983,7 @@ Game Maker Language: extensions: - .gml tm_scope: source.js + ace_mode: javascript Genshi: extensions: @@ -903,18 +992,21 @@ Genshi: aliases: - xml+genshi - xml+kid + ace_mode: xml Gentoo Ebuild: group: Shell extensions: - .ebuild tm_scope: source.shell + ace_mode: sh Gentoo Eclass: group: Shell extensions: - .eclass tm_scope: source.shell + ace_mode: sh Gettext Catalog: search_term: pot @@ -925,6 +1017,7 @@ Gettext Catalog: - .po - .pot tm_scope: source.po + ace_mode: none Glyph: type: programming @@ -932,6 +1025,7 @@ Glyph: extensions: - .glf tm_scope: source.tcl + ace_mode: tcl Gnuplot: type: programming @@ -944,12 +1038,14 @@ Gnuplot: - .plt interpreters: - gnuplot + ace_mode: none Go: type: programming color: "#375eab" extensions: - .go + ace_mode: golang Golo: type: programming @@ -957,6 +1053,7 @@ Golo: extensions: - .golo tm_scope: none + ace_mode: none Gosu: type: programming @@ -967,18 +1064,21 @@ Gosu: - .gsx - .vark tm_scope: source.gosu.2 + ace_mode: none Grace: type: programming extensions: - .grace tm_scope: none + ace_mode: none Gradle: type: data extensions: - .gradle tm_scope: source.groovy.gradle + ace_mode: none Grammatical Framework: type: programming @@ -990,12 +1090,14 @@ Grammatical Framework: searchable: true color: "#ff0000" tm_scope: source.haskell + ace_mode: haskell Graph Modeling Language: type: data extensions: - .gml tm_scope: none + ace_mode: none Graphviz (DOT): type: data @@ -1004,6 +1106,7 @@ Graphviz (DOT): - .dot - .DOT - .gv + ace_mode: none Groff: extensions: @@ -1018,6 +1121,7 @@ Groff: tm_scope: text.groff aliases: - nroff + ace_mode: none Groovy: type: programming @@ -1039,6 +1143,7 @@ Groovy Server Pages: extensions: - .gsp tm_scope: text.html.jsp + ace_mode: jsp HTML: type: markup @@ -1064,6 +1169,7 @@ HTML+Django: - html+django/jinja - html+jinja - htmldjango + ace_mode: django HTML+ERB: type: markup @@ -1074,6 +1180,7 @@ HTML+ERB: extensions: - .erb - .deface + ace_mode: html_ruby HTML+PHP: type: markup @@ -1081,12 +1188,14 @@ HTML+PHP: group: HTML extensions: - .phtml + ace_mode: php HTTP: type: data extensions: - .http tm_scope: none + ace_mode: none Hack: type: programming @@ -1102,6 +1211,7 @@ Haml: extensions: - .haml - .deface + ace_mode: haml Handlebars: type: markup @@ -1111,6 +1221,7 @@ Handlebars: - .handlebars - .hbs tm_scope: text.html.handlebars + ace_mode: handlebars Harbour: type: programming @@ -1118,6 +1229,7 @@ Harbour: extensions: - .hb tm_scope: none + ace_mode: none Haskell: type: programming @@ -1125,6 +1237,7 @@ Haskell: extensions: - .hs - .hsc + ace_mode: haskell Haxe: type: programming @@ -1151,6 +1264,7 @@ IDL: extensions: - .pro - .dlm + ace_mode: none IGOR Pro: type: programming @@ -1160,6 +1274,7 @@ IGOR Pro: - igor - igorpro tm_scope: none + ace_mode: none INI: type: data @@ -1171,6 +1286,7 @@ INI: tm_scope: source.ini aliases: - dosini + ace_mode: ini IRC log: search_term: irc @@ -1181,12 +1297,14 @@ IRC log: - .irclog - .weechatlog tm_scope: none + ace_mode: none Idris: type: programming extensions: - .idr - .lidr + ace_mode: none Inform 7: type: programming @@ -1198,17 +1316,20 @@ Inform 7: aliases: - i7 - inform7 + ace_mode: none Inno Setup: extensions: - .iss tm_scope: none + ace_mode: none Io: type: programming color: "#a9188d" extensions: - .io + ace_mode: io Ioke: type: programming @@ -1217,6 +1338,7 @@ Ioke: - .ik interpreters: - ioke + ace_mode: none Isabelle: type: programming @@ -1224,12 +1346,14 @@ Isabelle: extensions: - .thy tm_scope: source.isabelle.theory + ace_mode: none J: type: programming extensions: - .ijs tm_scope: none + ace_mode: none JSON: type: data @@ -1256,11 +1380,12 @@ JSON5: extensions: - .json5 tm_scope: source.js + ace_mode: javascript JSONLD: type: data group: JavaScript - ace_mode: json + ace_mode: javascript extensions: - .jsonld tm_scope: source.js @@ -1278,6 +1403,7 @@ Jade: extensions: - .jade tm_scope: source.jade + ace_mode: jade Java: type: programming @@ -1294,6 +1420,7 @@ Java Server Pages: extensions: - .jsp tm_scope: text.html.jsp + ace_mode: jsp JavaScript: type: programming @@ -1332,6 +1459,7 @@ Julia: extensions: - .jl color: "#a270ba" + ace_mode: julia KRL: type: programming @@ -1339,6 +1467,7 @@ KRL: extensions: - .krl tm_scope: none + ace_mode: none Kit: type: markup @@ -1354,6 +1483,7 @@ Kotlin: - .ktm - .kts tm_scope: source.Kotlin + ace_mode: none LFE: type: programming @@ -1362,10 +1492,12 @@ LFE: color: "#004200" group: Erlang tm_scope: source.lisp + ace_mode: lisp LLVM: extensions: - .ll + ace_mode: none LOLCODE: type: programming @@ -1373,6 +1505,7 @@ LOLCODE: - .lol color: "#cc9900" tm_scope: none + ace_mode: none LSL: type: programming @@ -1388,6 +1521,7 @@ LabVIEW: extensions: - .lvproj tm_scope: none + ace_mode: none Lasso: type: programming @@ -1401,6 +1535,7 @@ Lasso: tm_scope: file.lasso aliases: - lassoscript + ace_mode: none Latte: type: markup @@ -1409,6 +1544,7 @@ Latte: extensions: - .latte tm_scope: source.smarty + ace_mode: smarty Less: type: markup @@ -1416,17 +1552,20 @@ Less: extensions: - .less tm_scope: source.css.less + ace_mode: less LilyPond: extensions: - .ly - .ily + ace_mode: none Liquid: type: markup extensions: - .liquid tm_scope: none + ace_mode: liquid Literate Agda: type: programming @@ -1434,6 +1573,7 @@ Literate Agda: extensions: - .lagda tm_scope: none + ace_mode: none Literate CoffeeScript: type: programming @@ -1446,6 +1586,7 @@ Literate CoffeeScript: - litcoffee extensions: - .litcoffee + ace_mode: none Literate Haskell: type: programming @@ -1457,10 +1598,10 @@ Literate Haskell: extensions: - .lhs tm_scope: text.tex.latex.haskell + ace_mode: none LiveScript: type: programming - ace_mode: ls color: "#499886" aliases: - live-script @@ -1470,6 +1611,7 @@ LiveScript: - ._ls filenames: - Slakefile + ace_mode: livescript Logos: type: programming @@ -1477,12 +1619,14 @@ Logos: - .xm - .x - .xi + ace_mode: none Logtalk: type: programming extensions: - .lgt - .logtalk + ace_mode: none LookML: type: programming @@ -1497,6 +1641,7 @@ LoomScript: extensions: - .ls tm_scope: source.loomscript + ace_mode: none Lua: type: programming @@ -1520,6 +1665,7 @@ M: - .mumps - .m tm_scope: source.lisp + ace_mode: lisp MTML: type: markup @@ -1527,6 +1673,7 @@ MTML: extensions: - .mtml tm_scope: text.html.basic + ace_mode: html Makefile: type: programming @@ -1543,12 +1690,14 @@ Makefile: - makefile interpreters: - make + ace_mode: makefile Mako: extensions: - .mako - .mao tm_scope: text.html.mako + ace_mode: none Markdown: type: prose @@ -1566,7 +1715,7 @@ Markdown: Mask: type: markup color: "#f97732" - ace_mode: scss + ace_mode: mask extensions: - .mask tm_scope: source.scss @@ -1582,6 +1731,7 @@ Mathematica: - .nbp aliases: - mma + ace_mode: none Matlab: type: programming @@ -1589,12 +1739,14 @@ Matlab: extensions: - .matlab - .m + ace_mode: matlab Maven POM: type: data tm_scope: text.xml.pom filenames: - pom.xml + ace_mode: xml Max: type: programming @@ -1610,6 +1762,7 @@ Max: - .mxt - .pat tm_scope: source.json + ace_mode: json MediaWiki: type: prose @@ -1617,6 +1770,7 @@ MediaWiki: extensions: - .mediawiki tm_scope: none + ace_mode: none Mercury: type: programming @@ -1628,12 +1782,14 @@ Mercury: - .m - .moo tm_scope: source.prolog + ace_mode: prolog MiniD: # Legacy searchable: false extensions: - .minid # Dummy extension tm_scope: none + ace_mode: none Mirah: type: programming @@ -1645,17 +1801,20 @@ Mirah: - .mir - .mirah tm_scope: source.ruby + ace_mode: ruby Monkey: type: programming extensions: - .monkey + ace_mode: none Moocode: type: programming extensions: - .moo tm_scope: none + ace_mode: none MoonScript: type: programming @@ -1663,22 +1822,26 @@ MoonScript: - .moon interpreters: - moon + ace_mode: none Myghty: extensions: - .myt tm_scope: none + ace_mode: none NSIS: extensions: - .nsi - .nsh + ace_mode: none Nemerle: type: programming color: "#0d3c6e" extensions: - .n + ace_mode: none NetLogo: type: programming @@ -1686,6 +1849,7 @@ NetLogo: extensions: - .nlogo tm_scope: source.lisp + ace_mode: lisp Nginx: type: markup @@ -1694,6 +1858,7 @@ Nginx: tm_scope: source.nginx aliases: - nginx configuration file + ace_mode: none Nimrod: type: programming @@ -1701,12 +1866,14 @@ Nimrod: extensions: - .nim - .nimrod + ace_mode: none Ninja: type: data tm_scope: source.ninja extensions: - .ninja + ace_mode: none Nit: type: programming @@ -1714,6 +1881,7 @@ Nit: extensions: - .nit tm_scope: none + ace_mode: none Nix: type: programming @@ -1723,6 +1891,7 @@ Nix: aliases: - nixos tm_scope: source.nix + ace_mode: nix Nu: type: programming @@ -1734,6 +1903,7 @@ Nu: filenames: - Nukefile tm_scope: source.scheme + ace_mode: scheme interpreters: - nush @@ -1744,6 +1914,7 @@ NumPy: - .numpyw - .numsc tm_scope: none + ace_mode: none OCaml: type: programming @@ -1763,6 +1934,7 @@ ObjDump: extensions: - .objdump tm_scope: objdump.x86asm + ace_mode: assembly_x86 Objective-C: type: programming @@ -1775,6 +1947,7 @@ Objective-C: extensions: - .m - .h + ace_mode: objectivec Objective-C++: type: programming @@ -1786,6 +1959,7 @@ Objective-C++: - objectivec++ extensions: - .mm + ace_mode: objectivec Objective-J: type: programming @@ -1798,6 +1972,7 @@ Objective-J: - .j - .sj tm_scope: source.js.objj + ace_mode: none Omgrofl: type: programming @@ -1805,11 +1980,13 @@ Omgrofl: - .omgrofl color: "#cabbff" tm_scope: none + ace_mode: none Opa: type: programming extensions: - .opa + ace_mode: none Opal: type: programming @@ -1817,6 +1994,7 @@ Opal: extensions: - .opal tm_scope: none + ace_mode: none OpenCL: type: programming @@ -1825,6 +2003,7 @@ OpenCL: - .cl - .opencl tm_scope: source.c + ace_mode: c_cpp OpenEdge ABL: type: programming @@ -1836,12 +2015,14 @@ OpenEdge ABL: - .p - .cls tm_scope: source.abl + ace_mode: none OpenSCAD: type: programming extensions: - .scad tm_scope: none + ace_mode: none Org: type: prose @@ -1849,6 +2030,7 @@ Org: extensions: - .org tm_scope: none + ace_mode: none Ox: type: programming @@ -1857,6 +2039,7 @@ Ox: - .oxh - .oxo tm_scope: none + ace_mode: none Oxygene: type: programming @@ -1864,6 +2047,7 @@ Oxygene: extensions: - .oxygene tm_scope: none + ace_mode: none Oz: type: programming @@ -1871,6 +2055,7 @@ Oz: extensions: - .oz tm_scope: source.oz + ace_mode: none PAWN: type: programming @@ -1878,6 +2063,7 @@ PAWN: extensions: - .pwn tm_scope: source.c++ + ace_mode: c_cpp PHP: type: programming @@ -1906,6 +2092,7 @@ Pan: extensions: - .pan tm_scope: none + ace_mode: none Papyrus: type: programming @@ -1913,6 +2100,7 @@ Papyrus: extensions: - .psc tm_scope: none + ace_mode: none Parrot: type: programming @@ -1920,6 +2108,7 @@ Parrot: extensions: - .parrot # Dummy extension tm_scope: none + ace_mode: none Parrot Assembly: group: Parrot @@ -1931,6 +2120,7 @@ Parrot Assembly: interpreters: - parrot tm_scope: none + ace_mode: none Parrot Internal Representation: group: Parrot @@ -1942,6 +2132,7 @@ Parrot Internal Representation: - .pir interpreters: - parrot + ace_mode: none Pascal: type: programming @@ -1952,6 +2143,7 @@ Pascal: - .dpr - .lpr - .pp + ace_mode: pascal Perl: type: programming @@ -1990,6 +2182,7 @@ Perl6: interpreters: - perl6 tm_scope: none + ace_mode: perl PigLatin: type: programming @@ -1997,6 +2190,7 @@ PigLatin: extensions: - .pig tm_scope: none + ace_mode: none Pike: type: programming @@ -2004,6 +2198,7 @@ Pike: extensions: - .pike - .pmod + ace_mode: none Pod: type: prose @@ -2019,6 +2214,7 @@ PogoScript: extensions: - .pogo tm_scope: none + ace_mode: none PostScript: type: markup @@ -2028,6 +2224,7 @@ PostScript: tm_scope: source.postscript aliases: - postscr + ace_mode: none PowerShell: type: programming @@ -2044,6 +2241,7 @@ Processing: color: "#2779ab" extensions: - .pde + ace_mode: none Prolog: type: programming @@ -2055,6 +2253,7 @@ Prolog: - .prolog interpreters: - swipl + ace_mode: prolog Propeller Spin: type: programming @@ -2062,6 +2261,7 @@ Propeller Spin: extensions: - .spin tm_scope: none + ace_mode: none Protocol Buffer: type: markup @@ -2071,6 +2271,7 @@ Protocol Buffer: extensions: - .proto tm_scope: source.protobuf + ace_mode: protobuf Puppet: type: programming @@ -2079,6 +2280,7 @@ Puppet: - .pp filenames: - Modulefile + ace_mode: none Pure Data: type: programming @@ -2086,6 +2288,7 @@ Pure Data: extensions: - .pd tm_scope: none + ace_mode: none PureScript: type: programming @@ -2093,6 +2296,7 @@ PureScript: extensions: - .purs tm_scope: source.haskell + ace_mode: haskell Python: type: programming @@ -2128,6 +2332,7 @@ Python traceback: extensions: - .pytb tm_scope: text.python.traceback + ace_mode: none QML: type: markup @@ -2135,6 +2340,7 @@ QML: extensions: - .qml tm_scope: source.qml + ace_mode: none QMake: extensions: @@ -2142,6 +2348,7 @@ QMake: - .pri interpreters: - qmake + ace_mode: none R: type: programming @@ -2160,6 +2367,7 @@ R: - .Rprofile interpreters: - Rscript + ace_mode: r RAML: type: data @@ -2188,6 +2396,7 @@ REALbasic: - .rbtbar - .rbuistate tm_scope: source.vbnet + ace_mode: none RHTML: type: markup @@ -2197,6 +2406,7 @@ RHTML: tm_scope: text.html.erb aliases: - html+ruby + ace_mode: rhtml RMarkdown: type: prose @@ -2216,6 +2426,7 @@ Racket: - .rktl - .scrbl tm_scope: source.racket + ace_mode: lisp Ragel in Ruby Host: type: programming @@ -2226,6 +2437,7 @@ Ragel in Ruby Host: - ragel-rb - ragel-ruby tm_scope: none + ace_mode: none Raw token data: search_term: raw @@ -2234,6 +2446,7 @@ Raw token data: extensions: - .raw tm_scope: none + ace_mode: none Rebol: type: programming @@ -2244,6 +2457,7 @@ Rebol: - .r2 - .r3 - .rebol + ace_mode: none Red: type: programming @@ -2254,11 +2468,13 @@ Red: aliases: - red/system tm_scope: none + ace_mode: none Redcode: extensions: - .cw tm_scope: none + ace_mode: none RobotFramework: type: programming @@ -2266,6 +2482,7 @@ RobotFramework: - .robot # - .txt tm_scope: text.robot + ace_mode: none Rouge: type: programming @@ -2328,6 +2545,7 @@ Rust: color: "#dea584" extensions: - .rs + ace_mode: rust SAS: type: programming @@ -2335,6 +2553,7 @@ SAS: extensions: - .sas tm_scope: none + ace_mode: none SCSS: type: markup @@ -2351,6 +2570,7 @@ SQF: - .sqf - .hqf tm_scope: source.sqf + ace_mode: none SQL: type: data @@ -2369,6 +2589,7 @@ STON: extensions: - .ston tm_scope: source.json + ace_mode: lisp Sage: type: programming @@ -2376,6 +2597,7 @@ Sage: extensions: - .sage tm_scope: source.python + ace_mode: python SaltStack: type: data @@ -2393,6 +2615,7 @@ Sass: group: CSS extensions: - .sass + ace_mode: sass Scala: type: programming @@ -2411,6 +2634,7 @@ Scaml: extensions: - .scaml tm_scope: source.scaml + ace_mode: none Scheme: type: programming @@ -2426,6 +2650,7 @@ Scheme: - racket - bigloo - chicken + ace_mode: scheme Scilab: type: programming @@ -2433,6 +2658,7 @@ Scilab: - .sci - .sce - .tst + ace_mode: none Self: type: programming @@ -2440,6 +2666,7 @@ Self: extensions: - .self tm_scope: none + ace_mode: none Shell: type: programming @@ -2463,6 +2690,7 @@ Shell: - bash - sh - zsh + ace_mode: sh ShellSession: type: programming @@ -2472,6 +2700,7 @@ ShellSession: - bash session - console tm_scope: text.shell-session + ace_mode: sh Shen: type: programming @@ -2479,6 +2708,7 @@ Shen: extensions: - .shen tm_scope: none + ace_mode: none Slash: type: programming @@ -2486,6 +2716,7 @@ Slash: extensions: - .sl tm_scope: text.html.slash + ace_mode: none Slim: group: HTML @@ -2493,6 +2724,7 @@ Slim: color: "#ff8877" extensions: - .slim + ace_mode: none Smalltalk: type: programming @@ -2501,10 +2733,12 @@ Smalltalk: - .st aliases: - squeak + ace_mode: none Smarty: extensions: - .tpl + ace_mode: smarty SourcePawn: type: programming @@ -2514,12 +2748,14 @@ SourcePawn: extensions: - .sp tm_scope: source.sp + ace_mode: none Squirrel: type: programming extensions: - .nut tm_scope: source.c++ + ace_mode: c_cpp Standard ML: type: programming @@ -2532,6 +2768,7 @@ Standard ML: - .sig - .sml tm_scope: source.ml + ace_mode: none Stata: type: programming @@ -2543,6 +2780,7 @@ Stata: - .mata - .matah - .sthlp + ace_mode: none Stylus: type: markup @@ -2550,6 +2788,7 @@ Stylus: extensions: - .styl tm_scope: none + ace_mode: stylus SuperCollider: type: programming @@ -2558,12 +2797,14 @@ SuperCollider: - .scd - .sc tm_scope: none + ace_mode: none Swift: type: programming color: "#ffac45" extensions: - .swift + ace_mode: none SystemVerilog: type: programming @@ -2572,18 +2813,21 @@ SystemVerilog: - .sv - .svh - .vh + ace_mode: verilog TOML: type: data extensions: - .toml tm_scope: source.toml + ace_mode: toml TXL: type: programming extensions: - .txl tm_scope: none + ace_mode: none Tcl: type: programming @@ -2595,6 +2839,7 @@ Tcl: interpreters: - tclsh - wish + ace_mode: tcl Tcsh: type: programming @@ -2603,11 +2848,12 @@ Tcsh: - .tcsh - .csh tm_scope: source.shell + ace_mode: sh TeX: type: markup color: "#3D6117" - ace_mode: latex + ace_mode: tex wrap: true aliases: - latex @@ -2633,6 +2879,7 @@ Tea: extensions: - .tea tm_scope: source.tea + ace_mode: none Textile: type: prose @@ -2647,6 +2894,7 @@ Thrift: tm_scope: source.thrift extensions: - .thrift + ace_mode: none Turing: type: programming @@ -2655,6 +2903,7 @@ Turing: - .t - .tu tm_scope: none + ace_mode: none Twig: type: markup @@ -2662,6 +2911,7 @@ Twig: extensions: - .twig tm_scope: text.html.twig + ace_mode: twig TypeScript: type: programming @@ -2671,6 +2921,7 @@ TypeScript: extensions: - .ts tm_scope: source.ts + ace_mode: typescript Unified Parallel C: type: programming @@ -2687,6 +2938,7 @@ UnrealScript: extensions: - .uc tm_scope: source.java + ace_mode: java VCL: type: programming @@ -2708,6 +2960,7 @@ VHDL: - .vhs - .vht - .vhw + ace_mode: vhdl Vala: type: programming @@ -2715,6 +2968,7 @@ Vala: extensions: - .vala - .vapi + ace_mode: vala Verilog: type: programming @@ -2722,6 +2976,7 @@ Verilog: extensions: - .v - .veo + ace_mode: verilog VimL: type: programming @@ -2736,6 +2991,7 @@ VimL: - _vimrc - gvimrc - vimrc + ace_mode: none Visual Basic: type: programming @@ -2753,6 +3009,7 @@ Visual Basic: aliases: - vb.net - vbnet + ace_mode: none Volt: type: programming @@ -2760,12 +3017,14 @@ Volt: extensions: - .volt tm_scope: source.d + ace_mode: d XC: type: programming extensions: - .xc tm_scope: source.c + ace_mode: c_cpp XML: type: markup @@ -2851,6 +3110,7 @@ XProc: - .xpl - .xproc tm_scope: text.xml + ace_mode: xml XQuery: type: programming @@ -2861,11 +3121,13 @@ XQuery: - .xql - .xqm - .xqy + ace_mode: xquery XS: extensions: - .xs tm_scope: source.c + ace_mode: c_cpp XSLT: type: programming @@ -2875,6 +3137,7 @@ XSLT: - .xslt - .xsl tm_scope: text.xml.xsl + ace_mode: xml Xojo: type: programming @@ -2886,11 +3149,13 @@ Xojo: - .xojo_toolbar - .xojo_window tm_scope: source.vbnet + ace_mode: none Xtend: type: programming extensions: - .xtend + ace_mode: none YAML: type: data @@ -2902,6 +3167,7 @@ YAML: - .reek - .rviz - .yaml + ace_mode: yaml Zephir: type: programming @@ -2909,6 +3175,7 @@ Zephir: extensions: - .zep tm_scope: source.php.zephir + ace_mode: php Zimpl: type: programming @@ -2917,6 +3184,7 @@ Zimpl: - .zmpl - .zpl tm_scope: none + ace_mode: none eC: type: programming @@ -2925,6 +3193,7 @@ eC: - .ec - .eh tm_scope: none + ace_mode: none edn: type: data @@ -2940,22 +3209,26 @@ fish: extensions: - .fish tm_scope: none + ace_mode: none mupad: extensions: - .mu + ace_mode: none nesC: type: programming color: "#ffce3b" extensions: - .nc + ace_mode: none ooc: type: programming color: "#b0b77e" extensions: - .ooc + ace_mode: none reStructuredText: type: prose @@ -2966,6 +3239,7 @@ reStructuredText: extensions: - .rst - .rest + ace_mode: none wisp: type: programming @@ -2981,3 +3255,4 @@ xBase: extensions: - .prg tm_scope: none + ace_mode: none diff --git a/test/test_blob.rb b/test/test_blob.rb index b59fbec7..12ea1338 100644 --- a/test/test_blob.rb +++ b/test/test_blob.rb @@ -469,7 +469,7 @@ class TestBlob < Test::Unit::TestCase # Test language detection for files which shouldn't be used as samples root = File.expand_path('../fixtures', __FILE__) Dir.entries(root).each do |language| - next if language == '.' || language == '..' + next if language == '.' || language == '..' || File.basename(language) == 'ace_modes.json' # Each directory contains test files of a language dirname = File.join(root, language) diff --git a/test/test_language.rb b/test/test_language.rb index 9a7498d1..2bfec9fa 100644 --- a/test/test_language.rb +++ b/test/test_language.rb @@ -308,11 +308,11 @@ class TestLanguage < Test::Unit::TestCase assert_equal 'css', Language['CSS'].ace_mode assert_equal 'lsl', Language['LSL'].ace_mode assert_equal 'javascript', Language['JavaScript'].ace_mode + assert_equal 'none', Language['FORTRAN'].ace_mode end def test_ace_modes assert Language.ace_modes.include?(Language['Ruby']) - assert !Language.ace_modes.include?(Language['FORTRAN']) end def test_wrap @@ -356,4 +356,22 @@ class TestLanguage < Test::Unit::TestCase message << missing.map { |language| sprintf("%-#{width}s %s", language.name, language.tm_scope) }.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) + + ace_github_modes = Yajl.load(File.read(ace_fixture_path)) + existing_ace_modes = ace_github_modes.map do |ace_github_mode| + File.basename(ace_github_mode["name"], ".js") if ace_github_mode["name"] !~ /_highlight_rules|_test|_worker/ + end.compact.uniq.sort.map(&:downcase) + + missing = Language.all.reject { |language| language.ace_mode == "none" || existing_ace_modes.include?(language.ace_mode) } + message = "The following languages do not have an Ace mode listed in languages.yml. Please add an Ace mode for all new languages.\n" + message << "If no Ace mode exists for a language, mark the language with `ace_mode: none` in lib/linguist/languages.yml.\n" + + width = missing.map { |language| language.name.length }.max + message << missing.map { |language| sprintf("%-#{width}s %s", language.name, language.ace_mode) }.sort.join("\n") + assert missing.empty?, message + end end