Merge pull request #1756 from github/test-for-grammars

Test that all languages have grammars
This commit is contained in:
Adam Roben
2014-11-21 11:54:46 -05:00
2 changed files with 92 additions and 0 deletions

View File

@@ -12,6 +12,10 @@
# search_term - Deprecated: Some languages maybe indexed under a # search_term - Deprecated: Some languages maybe indexed under a
# different alias. Avoid defining new exceptions. # different alias. Avoid defining new exceptions.
# color - CSS hex color to represent the language. # color - CSS hex color to represent the language.
# tm_scope - The TextMate scope that represents this programming
# language. This should match one of the scopes listed in
# the grammars.yml file. Use "none" if there is no grammar
# for this language.
# #
# Any additions or modifications (even trivial) should have corresponding # Any additions or modifications (even trivial) should have corresponding
# test change in `test/test_blob.rb`. # test change in `test/test_blob.rb`.
@@ -45,6 +49,7 @@ APL:
extensions: extensions:
- .apl - .apl
- .dyalog - .dyalog
tm_scope: none
ASP: ASP:
type: programming type: programming
@@ -146,6 +151,7 @@ Arc:
color: "#ca2afe" color: "#ca2afe"
extensions: extensions:
- .arc - .arc
tm_scope: none
Arduino: Arduino:
type: programming type: programming
@@ -162,12 +168,14 @@ AsciiDoc:
- .asciidoc - .asciidoc
- .adoc - .adoc
- .asc - .asc
tm_scope: none
AspectJ: AspectJ:
type: programming type: programming
color: "#1957b0" color: "#1957b0"
extensions: extensions:
- .aj - .aj
tm_scope: none
Assembly: Assembly:
type: programming type: programming
@@ -185,6 +193,7 @@ Augeas:
type: programming type: programming
extensions: extensions:
- .aug - .aug
tm_scope: none
AutoHotkey: AutoHotkey:
type: programming type: programming
@@ -194,6 +203,7 @@ AutoHotkey:
extensions: extensions:
- .ahk - .ahk
- .ahkl - .ahkl
tm_scope: none
AutoIt: AutoIt:
type: programming type: programming
@@ -286,6 +296,7 @@ Brightscript:
type: programming type: programming
extensions: extensions:
- .brs - .brs
tm_scope: none
Bro: Bro:
type: programming type: programming
@@ -359,6 +370,7 @@ CLIPS:
type: programming type: programming
extensions: extensions:
- .clp - .clp
tm_scope: none
CMake: CMake:
extensions: extensions:
@@ -421,6 +433,7 @@ Clean:
extensions: extensions:
- .icl - .icl
- .dcl - .dcl
tm_scope: none
Clojure: Clojure:
type: programming type: programming
@@ -537,6 +550,7 @@ Creole:
wrap: true wrap: true
extensions: extensions:
- .creole - .creole
tm_scope: none
Crystal: Crystal:
type: programming type: programming
@@ -604,6 +618,7 @@ Darcs Patch:
extensions: extensions:
- .darcspatch - .darcspatch
- .dpatch - .dpatch
tm_scope: none
Dart: Dart:
type: programming type: programming
@@ -631,6 +646,7 @@ Dogescript:
color: "#cca760" color: "#cca760"
extensions: extensions:
- .djs - .djs
tm_scope: none
Dylan: Dylan:
type: programming type: programming
@@ -646,6 +662,7 @@ E:
color: "#ccce35" color: "#ccce35"
extensions: extensions:
- .E - .E
tm_scope: none
ECL: ECL:
type: programming type: programming
@@ -653,6 +670,7 @@ ECL:
extensions: extensions:
- .ecl - .ecl
- .eclxml - .eclxml
tm_scope: none
Eagle: Eagle:
type: markup type: markup
@@ -736,6 +754,7 @@ FLUX:
extensions: extensions:
- .fx - .fx
- .flux - .flux
tm_scope: none
FORTRAN: FORTRAN:
type: programming type: programming
@@ -809,11 +828,13 @@ G-code:
- .g - .g
- .gco - .gco
- .gcode - .gcode
tm_scope: none
GAMS: GAMS:
type: programming type: programming
extensions: extensions:
- .gms - .gms
tm_scope: none
GAP: GAP:
type: programming type: programming
@@ -822,6 +843,7 @@ GAP:
- .gap - .gap
- .gd - .gd
- .gi - .gi
tm_scope: none
GAS: GAS:
type: programming type: programming
@@ -835,6 +857,7 @@ GDScript:
type: programming type: programming
extensions: extensions:
- .gd - .gd
tm_scope: none
GLSL: GLSL:
group: C group: C
@@ -919,6 +942,7 @@ Golo:
color: "#f6a51f" color: "#f6a51f"
extensions: extensions:
- .golo - .golo
tm_scope: none
Gosu: Gosu:
type: programming type: programming
@@ -934,6 +958,7 @@ Grace:
type: programming type: programming
extensions: extensions:
- .grace - .grace
tm_scope: none
Grammatical Framework: Grammatical Framework:
type: programming type: programming
@@ -950,6 +975,7 @@ Graph Modeling Language:
type: data type: data
extensions: extensions:
- .gml - .gml
tm_scope: none
Graphviz (DOT): Graphviz (DOT):
type: data type: data
@@ -1039,6 +1065,7 @@ HTTP:
type: data type: data
extensions: extensions:
- .http - .http
tm_scope: none
Hack: Hack:
type: programming type: programming
@@ -1046,6 +1073,7 @@ Hack:
extensions: extensions:
- .hh - .hh
- .php - .php
tm_scope: none
Haml: Haml:
group: HTML group: HTML
@@ -1068,6 +1096,7 @@ Harbour:
color: "#0e60e3" color: "#0e60e3"
extensions: extensions:
- .hb - .hb
tm_scope: none
Haskell: Haskell:
type: programming type: programming
@@ -1093,6 +1122,7 @@ Hy:
- .hy - .hy
aliases: aliases:
- hylang - hylang
tm_scope: none
IDL: IDL:
type: programming type: programming
@@ -1108,6 +1138,7 @@ IGOR Pro:
aliases: aliases:
- igor - igor
- igorpro - igorpro
tm_scope: none
INI: INI:
type: data type: data
@@ -1128,6 +1159,7 @@ IRC log:
extensions: extensions:
- .irclog - .irclog
- .weechatlog - .weechatlog
tm_scope: none
Idris: Idris:
type: programming type: programming
@@ -1149,6 +1181,7 @@ Inform 7:
Inno Setup: Inno Setup:
extensions: extensions:
- .iss - .iss
tm_scope: none
Io: Io:
type: programming type: programming
@@ -1167,11 +1200,13 @@ Isabelle:
color: "#fdcd00" color: "#fdcd00"
extensions: extensions:
- .thy - .thy
tm_scope: none
J: J:
type: programming type: programming
extensions: extensions:
- .ijs - .ijs
tm_scope: none
JSON: JSON:
type: data type: data
@@ -1279,6 +1314,7 @@ KRL:
color: "#f5c800" color: "#f5c800"
extensions: extensions:
- .krl - .krl
tm_scope: none
Kit: Kit:
type: markup type: markup
@@ -1312,6 +1348,7 @@ LOLCODE:
extensions: extensions:
- .lol - .lol
color: "#cc9900" color: "#cc9900"
tm_scope: none
LSL: LSL:
type: programming type: programming
@@ -1326,6 +1363,7 @@ LabVIEW:
type: programming type: programming
extensions: extensions:
- .lvproj - .lvproj
tm_scope: none
Lasso: Lasso:
type: programming type: programming
@@ -1364,12 +1402,14 @@ Liquid:
type: markup type: markup
extensions: extensions:
- .liquid - .liquid
tm_scope: none
Literate Agda: Literate Agda:
type: programming type: programming
group: Agda group: Agda
extensions: extensions:
- .lagda - .lagda
tm_scope: none
Literate CoffeeScript: Literate CoffeeScript:
type: programming type: programming
@@ -1546,6 +1586,7 @@ MediaWiki:
wrap: true wrap: true
extensions: extensions:
- .mediawiki - .mediawiki
tm_scope: none
Mercury: Mercury:
type: programming type: programming
@@ -1560,6 +1601,7 @@ MiniD: # Legacy
searchable: false searchable: false
extensions: extensions:
- .minid # Dummy extension - .minid # Dummy extension
tm_scope: none
Mirah: Mirah:
type: programming type: programming
@@ -1581,6 +1623,7 @@ Moocode:
type: programming type: programming
extensions: extensions:
- .moo - .moo
tm_scope: none
MoonScript: MoonScript:
type: programming type: programming
@@ -1592,6 +1635,7 @@ MoonScript:
Myghty: Myghty:
extensions: extensions:
- .myt - .myt
tm_scope: none
NSIS: NSIS:
extensions: extensions:
@@ -1637,6 +1681,7 @@ Nit:
color: "#0d8921" color: "#0d8921"
extensions: extensions:
- .nit - .nit
tm_scope: none
Nix: Nix:
type: programming type: programming
@@ -1644,6 +1689,7 @@ Nix:
- .nix - .nix
aliases: aliases:
- nixos - nixos
tm_scope: none
Nu: Nu:
type: programming type: programming
@@ -1662,6 +1708,7 @@ NumPy:
- .numpy - .numpy
- .numpyw - .numpyw
- .numsc - .numsc
tm_scope: none
OCaml: OCaml:
type: programming type: programming
@@ -1722,6 +1769,7 @@ Omgrofl:
extensions: extensions:
- .omgrofl - .omgrofl
color: "#cabbff" color: "#cabbff"
tm_scope: none
Opa: Opa:
type: programming type: programming
@@ -1733,6 +1781,7 @@ Opal:
color: "#f7ede0" color: "#f7ede0"
extensions: extensions:
- .opal - .opal
tm_scope: none
OpenCL: OpenCL:
type: programming type: programming
@@ -1757,12 +1806,14 @@ OpenSCAD:
type: programming type: programming
extensions: extensions:
- .scad - .scad
tm_scope: none
Org: Org:
type: prose type: prose
wrap: true wrap: true
extensions: extensions:
- .org - .org
tm_scope: none
Ox: Ox:
type: programming type: programming
@@ -1770,12 +1821,14 @@ Ox:
- .ox - .ox
- .oxh - .oxh
- .oxo - .oxo
tm_scope: none
Oxygene: Oxygene:
type: programming type: programming
color: "#5a63a3" color: "#5a63a3"
extensions: extensions:
- .oxygene - .oxygene
tm_scope: none
PAWN: PAWN:
type: programming type: programming
@@ -1811,18 +1864,21 @@ Pan:
color: '#cc0000' color: '#cc0000'
extensions: extensions:
- .pan - .pan
tm_scope: none
Papyrus: Papyrus:
type: programming type: programming
color: "#6600cc" color: "#6600cc"
extensions: extensions:
- .psc - .psc
tm_scope: none
Parrot: Parrot:
type: programming type: programming
color: "#f3ca0a" color: "#f3ca0a"
extensions: extensions:
- .parrot # Dummy extension - .parrot # Dummy extension
tm_scope: none
Parrot Assembly: Parrot Assembly:
group: Parrot group: Parrot
@@ -1831,6 +1887,7 @@ Parrot Assembly:
- pasm - pasm
extensions: extensions:
- .pasm - .pasm
tm_scope: none
Parrot Internal Representation: Parrot Internal Representation:
group: Parrot group: Parrot
@@ -1882,12 +1939,14 @@ Perl6:
- .p6m - .p6m
- .pl6 - .pl6
- .pm6 - .pm6
tm_scope: none
PigLatin: PigLatin:
type: programming type: programming
color: "#fcd7de" color: "#fcd7de"
extensions: extensions:
- .pig - .pig
tm_scope: none
Pike: Pike:
type: programming type: programming
@@ -1902,12 +1961,14 @@ Pod:
wrap: true wrap: true
extensions: extensions:
- .pod - .pod
tm_scope: none
PogoScript: PogoScript:
type: programming type: programming
color: "#d80074" color: "#d80074"
extensions: extensions:
- .pogo - .pogo
tm_scope: none
PostScript: PostScript:
type: markup type: markup
@@ -1948,6 +2009,7 @@ Propeller Spin:
color: "#2b446d" color: "#2b446d"
extensions: extensions:
- .spin - .spin
tm_scope: none
Protocol Buffer: Protocol Buffer:
type: markup type: markup
@@ -1971,6 +2033,7 @@ Pure Data:
color: "#91de79" color: "#91de79"
extensions: extensions:
- .pd - .pd
tm_scope: none
PureScript: PureScript:
type: programming type: programming
@@ -2077,6 +2140,7 @@ RMarkdown:
extensions: extensions:
- .rmd - .rmd
- .Rmd - .Rmd
tm_scope: none
Racket: Racket:
type: programming type: programming
@@ -2096,6 +2160,7 @@ Ragel in Ruby Host:
aliases: aliases:
- ragel-rb - ragel-rb
- ragel-ruby - ragel-ruby
tm_scope: none
Raw token data: Raw token data:
search_term: raw search_term: raw
@@ -2103,6 +2168,7 @@ Raw token data:
- raw - raw
extensions: extensions:
- .raw - .raw
tm_scope: none
Rebol: Rebol:
type: programming type: programming
@@ -2122,10 +2188,12 @@ Red:
- .reds - .reds
aliases: aliases:
- red/system - red/system
tm_scope: none
Redcode: Redcode:
extensions: extensions:
- .cw - .cw
tm_scope: none
RobotFramework: RobotFramework:
type: programming type: programming
@@ -2199,6 +2267,7 @@ SAS:
color: "#1E90FF" color: "#1E90FF"
extensions: extensions:
- .sas - .sas
tm_scope: none
SCSS: SCSS:
type: markup type: markup
@@ -2292,6 +2361,7 @@ Self:
color: "#0579aa" color: "#0579aa"
extensions: extensions:
- .self - .self
tm_scope: none
Shell: Shell:
type: programming type: programming
@@ -2330,6 +2400,7 @@ Shen:
color: "#120F14" color: "#120F14"
extensions: extensions:
- .shen - .shen
tm_scope: none
Slash: Slash:
type: programming type: programming
@@ -2400,6 +2471,7 @@ Stylus:
group: CSS group: CSS
extensions: extensions:
- .styl - .styl
tm_scope: none
SuperCollider: SuperCollider:
type: programming type: programming
@@ -2407,6 +2479,7 @@ SuperCollider:
extensions: extensions:
- .scd - .scd
- .sc - .sc
tm_scope: none
Swift: Swift:
type: programming type: programming
@@ -2432,6 +2505,7 @@ TXL:
type: programming type: programming
extensions: extensions:
- .txl - .txl
tm_scope: none
Tcl: Tcl:
type: programming type: programming
@@ -2488,6 +2562,7 @@ Textile:
wrap: true wrap: true
extensions: extensions:
- .textile - .textile
tm_scope: none
Thrift: Thrift:
type: programming type: programming
@@ -2501,6 +2576,7 @@ Turing:
extensions: extensions:
- .t - .t
- .tu - .tu
tm_scope: none
Twig: Twig:
type: markup type: markup
@@ -2761,6 +2837,7 @@ Zimpl:
- .zimpl - .zimpl
- .zmpl - .zmpl
- .zpl - .zpl
tm_scope: none
eC: eC:
type: programming type: programming
@@ -2768,6 +2845,7 @@ eC:
extensions: extensions:
- .ec - .ec
- .eh - .eh
tm_scope: none
edn: edn:
type: data type: data
@@ -2782,6 +2860,7 @@ fish:
group: Shell group: Shell
extensions: extensions:
- .fish - .fish
tm_scope: none
mupad: mupad:
extensions: extensions:
@@ -2822,3 +2901,4 @@ xBase:
color: "#3a4040" color: "#3a4040"
extensions: extensions:
- .prg - .prg
tm_scope: none

View File

@@ -1,5 +1,6 @@
require 'linguist/language' require 'linguist/language'
require 'test/unit' require 'test/unit'
require 'yaml'
class TestLanguage < Test::Unit::TestCase class TestLanguage < Test::Unit::TestCase
include Linguist include Linguist
@@ -359,4 +360,15 @@ class TestLanguage < Test::Unit::TestCase
def test_by_type def test_by_type
assert !Language.by_type(:prose).nil? assert !Language.by_type(:prose).nil?
end end
def test_all_languages_have_grammars
scopes = YAML.load(File.read(File.expand_path("../../grammars.yml", __FILE__))).values.flatten
missing = Language.all.reject { |language| language.tm_scope == "none" || scopes.include?(language.tm_scope) }
message = "The following languages' scopes are not listed in grammars.yml. Please add grammars for all new languages.\n"
message << "If no grammar exists for a language, mark the language with `tm_scope: 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.tm_scope) }.sort.join("\n")
assert missing.empty?, message
end
end end