Test that all languages have grammars

This will make CI fail if someone adds a new language but neglects to
add a new grammar for it. This should make it easier for people to
review PRs, as CI will help them to make sure a new grammar gets added.

However, we currently support some languages that have no grammars, and
we may support more in the future. So you can explicitly mark the
language as having no grammar by setting `tm_scope: NONE` in
languages.yml.
This commit is contained in:
Adam Roben
2014-11-21 09:46:43 -05:00
parent 6629b75aa6
commit 49247e9ec2
2 changed files with 88 additions and 0 deletions

View File

@@ -45,6 +45,7 @@ APL:
extensions: extensions:
- .apl - .apl
- .dyalog - .dyalog
tm_scope: NONE
ASP: ASP:
type: programming type: programming
@@ -146,6 +147,7 @@ Arc:
color: "#ca2afe" color: "#ca2afe"
extensions: extensions:
- .arc - .arc
tm_scope: NONE
Arduino: Arduino:
type: programming type: programming
@@ -162,12 +164,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 +189,7 @@ Augeas:
type: programming type: programming
extensions: extensions:
- .aug - .aug
tm_scope: NONE
AutoHotkey: AutoHotkey:
type: programming type: programming
@@ -194,6 +199,7 @@ AutoHotkey:
extensions: extensions:
- .ahk - .ahk
- .ahkl - .ahkl
tm_scope: NONE
AutoIt: AutoIt:
type: programming type: programming
@@ -286,6 +292,7 @@ Brightscript:
type: programming type: programming
extensions: extensions:
- .brs - .brs
tm_scope: NONE
Bro: Bro:
type: programming type: programming
@@ -359,6 +366,7 @@ CLIPS:
type: programming type: programming
extensions: extensions:
- .clp - .clp
tm_scope: NONE
CMake: CMake:
extensions: extensions:
@@ -421,6 +429,7 @@ Clean:
extensions: extensions:
- .icl - .icl
- .dcl - .dcl
tm_scope: NONE
Clojure: Clojure:
type: programming type: programming
@@ -537,6 +546,7 @@ Creole:
wrap: true wrap: true
extensions: extensions:
- .creole - .creole
tm_scope: NONE
Crystal: Crystal:
type: programming type: programming
@@ -604,6 +614,7 @@ Darcs Patch:
extensions: extensions:
- .darcspatch - .darcspatch
- .dpatch - .dpatch
tm_scope: NONE
Dart: Dart:
type: programming type: programming
@@ -631,6 +642,7 @@ Dogescript:
color: "#cca760" color: "#cca760"
extensions: extensions:
- .djs - .djs
tm_scope: NONE
Dylan: Dylan:
type: programming type: programming
@@ -646,6 +658,7 @@ E:
color: "#ccce35" color: "#ccce35"
extensions: extensions:
- .E - .E
tm_scope: NONE
ECL: ECL:
type: programming type: programming
@@ -653,6 +666,7 @@ ECL:
extensions: extensions:
- .ecl - .ecl
- .eclxml - .eclxml
tm_scope: NONE
Eagle: Eagle:
type: markup type: markup
@@ -736,6 +750,7 @@ FLUX:
extensions: extensions:
- .fx - .fx
- .flux - .flux
tm_scope: NONE
FORTRAN: FORTRAN:
type: programming type: programming
@@ -809,11 +824,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 +839,7 @@ GAP:
- .gap - .gap
- .gd - .gd
- .gi - .gi
tm_scope: NONE
GAS: GAS:
type: programming type: programming
@@ -835,6 +853,7 @@ GDScript:
type: programming type: programming
extensions: extensions:
- .gd - .gd
tm_scope: NONE
GLSL: GLSL:
group: C group: C
@@ -919,6 +938,7 @@ Golo:
color: "#f6a51f" color: "#f6a51f"
extensions: extensions:
- .golo - .golo
tm_scope: NONE
Gosu: Gosu:
type: programming type: programming
@@ -934,6 +954,7 @@ Grace:
type: programming type: programming
extensions: extensions:
- .grace - .grace
tm_scope: NONE
Grammatical Framework: Grammatical Framework:
type: programming type: programming
@@ -950,6 +971,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 +1061,7 @@ HTTP:
type: data type: data
extensions: extensions:
- .http - .http
tm_scope: NONE
Hack: Hack:
type: programming type: programming
@@ -1046,6 +1069,7 @@ Hack:
extensions: extensions:
- .hh - .hh
- .php - .php
tm_scope: NONE
Haml: Haml:
group: HTML group: HTML
@@ -1068,6 +1092,7 @@ Harbour:
color: "#0e60e3" color: "#0e60e3"
extensions: extensions:
- .hb - .hb
tm_scope: NONE
Haskell: Haskell:
type: programming type: programming
@@ -1093,6 +1118,7 @@ Hy:
- .hy - .hy
aliases: aliases:
- hylang - hylang
tm_scope: NONE
IDL: IDL:
type: programming type: programming
@@ -1108,6 +1134,7 @@ IGOR Pro:
aliases: aliases:
- igor - igor
- igorpro - igorpro
tm_scope: NONE
INI: INI:
type: data type: data
@@ -1128,6 +1155,7 @@ IRC log:
extensions: extensions:
- .irclog - .irclog
- .weechatlog - .weechatlog
tm_scope: NONE
Idris: Idris:
type: programming type: programming
@@ -1149,6 +1177,7 @@ Inform 7:
Inno Setup: Inno Setup:
extensions: extensions:
- .iss - .iss
tm_scope: NONE
Io: Io:
type: programming type: programming
@@ -1167,11 +1196,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 +1310,7 @@ KRL:
color: "#f5c800" color: "#f5c800"
extensions: extensions:
- .krl - .krl
tm_scope: NONE
Kit: Kit:
type: markup type: markup
@@ -1312,6 +1344,7 @@ LOLCODE:
extensions: extensions:
- .lol - .lol
color: "#cc9900" color: "#cc9900"
tm_scope: NONE
LSL: LSL:
type: programming type: programming
@@ -1326,6 +1359,7 @@ LabVIEW:
type: programming type: programming
extensions: extensions:
- .lvproj - .lvproj
tm_scope: NONE
Lasso: Lasso:
type: programming type: programming
@@ -1364,12 +1398,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 +1582,7 @@ MediaWiki:
wrap: true wrap: true
extensions: extensions:
- .mediawiki - .mediawiki
tm_scope: NONE
Mercury: Mercury:
type: programming type: programming
@@ -1560,6 +1597,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 +1619,7 @@ Moocode:
type: programming type: programming
extensions: extensions:
- .moo - .moo
tm_scope: NONE
MoonScript: MoonScript:
type: programming type: programming
@@ -1592,6 +1631,7 @@ MoonScript:
Myghty: Myghty:
extensions: extensions:
- .myt - .myt
tm_scope: NONE
NSIS: NSIS:
extensions: extensions:
@@ -1637,6 +1677,7 @@ Nit:
color: "#0d8921" color: "#0d8921"
extensions: extensions:
- .nit - .nit
tm_scope: NONE
Nix: Nix:
type: programming type: programming
@@ -1644,6 +1685,7 @@ Nix:
- .nix - .nix
aliases: aliases:
- nixos - nixos
tm_scope: NONE
Nu: Nu:
type: programming type: programming
@@ -1662,6 +1704,7 @@ NumPy:
- .numpy - .numpy
- .numpyw - .numpyw
- .numsc - .numsc
tm_scope: NONE
OCaml: OCaml:
type: programming type: programming
@@ -1722,6 +1765,7 @@ Omgrofl:
extensions: extensions:
- .omgrofl - .omgrofl
color: "#cabbff" color: "#cabbff"
tm_scope: NONE
Opa: Opa:
type: programming type: programming
@@ -1733,6 +1777,7 @@ Opal:
color: "#f7ede0" color: "#f7ede0"
extensions: extensions:
- .opal - .opal
tm_scope: NONE
OpenCL: OpenCL:
type: programming type: programming
@@ -1757,12 +1802,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 +1817,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 +1860,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 +1883,7 @@ Parrot Assembly:
- pasm - pasm
extensions: extensions:
- .pasm - .pasm
tm_scope: NONE
Parrot Internal Representation: Parrot Internal Representation:
group: Parrot group: Parrot
@@ -1882,12 +1935,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 +1957,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 +2005,7 @@ Propeller Spin:
color: "#2b446d" color: "#2b446d"
extensions: extensions:
- .spin - .spin
tm_scope: NONE
Protocol Buffer: Protocol Buffer:
type: markup type: markup
@@ -1971,6 +2029,7 @@ Pure Data:
color: "#91de79" color: "#91de79"
extensions: extensions:
- .pd - .pd
tm_scope: NONE
PureScript: PureScript:
type: programming type: programming
@@ -2077,6 +2136,7 @@ RMarkdown:
extensions: extensions:
- .rmd - .rmd
- .Rmd - .Rmd
tm_scope: NONE
Racket: Racket:
type: programming type: programming
@@ -2096,6 +2156,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 +2164,7 @@ Raw token data:
- raw - raw
extensions: extensions:
- .raw - .raw
tm_scope: NONE
Rebol: Rebol:
type: programming type: programming
@@ -2122,10 +2184,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 +2263,7 @@ SAS:
color: "#1E90FF" color: "#1E90FF"
extensions: extensions:
- .sas - .sas
tm_scope: NONE
SCSS: SCSS:
type: markup type: markup
@@ -2292,6 +2357,7 @@ Self:
color: "#0579aa" color: "#0579aa"
extensions: extensions:
- .self - .self
tm_scope: NONE
Shell: Shell:
type: programming type: programming
@@ -2330,6 +2396,7 @@ Shen:
color: "#120F14" color: "#120F14"
extensions: extensions:
- .shen - .shen
tm_scope: NONE
Slash: Slash:
type: programming type: programming
@@ -2400,6 +2467,7 @@ Stylus:
group: CSS group: CSS
extensions: extensions:
- .styl - .styl
tm_scope: NONE
SuperCollider: SuperCollider:
type: programming type: programming
@@ -2407,6 +2475,7 @@ SuperCollider:
extensions: extensions:
- .scd - .scd
- .sc - .sc
tm_scope: NONE
Swift: Swift:
type: programming type: programming
@@ -2432,6 +2501,7 @@ TXL:
type: programming type: programming
extensions: extensions:
- .txl - .txl
tm_scope: NONE
Tcl: Tcl:
type: programming type: programming
@@ -2488,6 +2558,7 @@ Textile:
wrap: true wrap: true
extensions: extensions:
- .textile - .textile
tm_scope: NONE
Thrift: Thrift:
type: programming type: programming
@@ -2501,6 +2572,7 @@ Turing:
extensions: extensions:
- .t - .t
- .tu - .tu
tm_scope: NONE
Twig: Twig:
type: markup type: markup
@@ -2761,6 +2833,7 @@ Zimpl:
- .zimpl - .zimpl
- .zmpl - .zmpl
- .zpl - .zpl
tm_scope: NONE
eC: eC:
type: programming type: programming
@@ -2768,6 +2841,7 @@ eC:
extensions: extensions:
- .ec - .ec
- .eh - .eh
tm_scope: NONE
edn: edn:
type: data type: data
@@ -2782,6 +2856,7 @@ fish:
group: Shell group: Shell
extensions: extensions:
- .fish - .fish
tm_scope: NONE
mupad: mupad:
extensions: extensions:
@@ -2822,3 +2897,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