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:
- .apl
- .dyalog
tm_scope: NONE
ASP:
type: programming
@@ -146,6 +147,7 @@ Arc:
color: "#ca2afe"
extensions:
- .arc
tm_scope: NONE
Arduino:
type: programming
@@ -162,12 +164,14 @@ AsciiDoc:
- .asciidoc
- .adoc
- .asc
tm_scope: NONE
AspectJ:
type: programming
color: "#1957b0"
extensions:
- .aj
tm_scope: NONE
Assembly:
type: programming
@@ -185,6 +189,7 @@ Augeas:
type: programming
extensions:
- .aug
tm_scope: NONE
AutoHotkey:
type: programming
@@ -194,6 +199,7 @@ AutoHotkey:
extensions:
- .ahk
- .ahkl
tm_scope: NONE
AutoIt:
type: programming
@@ -286,6 +292,7 @@ Brightscript:
type: programming
extensions:
- .brs
tm_scope: NONE
Bro:
type: programming
@@ -359,6 +366,7 @@ CLIPS:
type: programming
extensions:
- .clp
tm_scope: NONE
CMake:
extensions:
@@ -421,6 +429,7 @@ Clean:
extensions:
- .icl
- .dcl
tm_scope: NONE
Clojure:
type: programming
@@ -537,6 +546,7 @@ Creole:
wrap: true
extensions:
- .creole
tm_scope: NONE
Crystal:
type: programming
@@ -604,6 +614,7 @@ Darcs Patch:
extensions:
- .darcspatch
- .dpatch
tm_scope: NONE
Dart:
type: programming
@@ -631,6 +642,7 @@ Dogescript:
color: "#cca760"
extensions:
- .djs
tm_scope: NONE
Dylan:
type: programming
@@ -646,6 +658,7 @@ E:
color: "#ccce35"
extensions:
- .E
tm_scope: NONE
ECL:
type: programming
@@ -653,6 +666,7 @@ ECL:
extensions:
- .ecl
- .eclxml
tm_scope: NONE
Eagle:
type: markup
@@ -736,6 +750,7 @@ FLUX:
extensions:
- .fx
- .flux
tm_scope: NONE
FORTRAN:
type: programming
@@ -809,11 +824,13 @@ G-code:
- .g
- .gco
- .gcode
tm_scope: NONE
GAMS:
type: programming
extensions:
- .gms
tm_scope: NONE
GAP:
type: programming
@@ -822,6 +839,7 @@ GAP:
- .gap
- .gd
- .gi
tm_scope: NONE
GAS:
type: programming
@@ -835,6 +853,7 @@ GDScript:
type: programming
extensions:
- .gd
tm_scope: NONE
GLSL:
group: C
@@ -919,6 +938,7 @@ Golo:
color: "#f6a51f"
extensions:
- .golo
tm_scope: NONE
Gosu:
type: programming
@@ -934,6 +954,7 @@ Grace:
type: programming
extensions:
- .grace
tm_scope: NONE
Grammatical Framework:
type: programming
@@ -950,6 +971,7 @@ Graph Modeling Language:
type: data
extensions:
- .gml
tm_scope: NONE
Graphviz (DOT):
type: data
@@ -1039,6 +1061,7 @@ HTTP:
type: data
extensions:
- .http
tm_scope: NONE
Hack:
type: programming
@@ -1046,6 +1069,7 @@ Hack:
extensions:
- .hh
- .php
tm_scope: NONE
Haml:
group: HTML
@@ -1068,6 +1092,7 @@ Harbour:
color: "#0e60e3"
extensions:
- .hb
tm_scope: NONE
Haskell:
type: programming
@@ -1093,6 +1118,7 @@ Hy:
- .hy
aliases:
- hylang
tm_scope: NONE
IDL:
type: programming
@@ -1108,6 +1134,7 @@ IGOR Pro:
aliases:
- igor
- igorpro
tm_scope: NONE
INI:
type: data
@@ -1128,6 +1155,7 @@ IRC log:
extensions:
- .irclog
- .weechatlog
tm_scope: NONE
Idris:
type: programming
@@ -1149,6 +1177,7 @@ Inform 7:
Inno Setup:
extensions:
- .iss
tm_scope: NONE
Io:
type: programming
@@ -1167,11 +1196,13 @@ Isabelle:
color: "#fdcd00"
extensions:
- .thy
tm_scope: NONE
J:
type: programming
extensions:
- .ijs
tm_scope: NONE
JSON:
type: data
@@ -1279,6 +1310,7 @@ KRL:
color: "#f5c800"
extensions:
- .krl
tm_scope: NONE
Kit:
type: markup
@@ -1312,6 +1344,7 @@ LOLCODE:
extensions:
- .lol
color: "#cc9900"
tm_scope: NONE
LSL:
type: programming
@@ -1326,6 +1359,7 @@ LabVIEW:
type: programming
extensions:
- .lvproj
tm_scope: NONE
Lasso:
type: programming
@@ -1364,12 +1398,14 @@ Liquid:
type: markup
extensions:
- .liquid
tm_scope: NONE
Literate Agda:
type: programming
group: Agda
extensions:
- .lagda
tm_scope: NONE
Literate CoffeeScript:
type: programming
@@ -1546,6 +1582,7 @@ MediaWiki:
wrap: true
extensions:
- .mediawiki
tm_scope: NONE
Mercury:
type: programming
@@ -1560,6 +1597,7 @@ MiniD: # Legacy
searchable: false
extensions:
- .minid # Dummy extension
tm_scope: NONE
Mirah:
type: programming
@@ -1581,6 +1619,7 @@ Moocode:
type: programming
extensions:
- .moo
tm_scope: NONE
MoonScript:
type: programming
@@ -1592,6 +1631,7 @@ MoonScript:
Myghty:
extensions:
- .myt
tm_scope: NONE
NSIS:
extensions:
@@ -1637,6 +1677,7 @@ Nit:
color: "#0d8921"
extensions:
- .nit
tm_scope: NONE
Nix:
type: programming
@@ -1644,6 +1685,7 @@ Nix:
- .nix
aliases:
- nixos
tm_scope: NONE
Nu:
type: programming
@@ -1662,6 +1704,7 @@ NumPy:
- .numpy
- .numpyw
- .numsc
tm_scope: NONE
OCaml:
type: programming
@@ -1722,6 +1765,7 @@ Omgrofl:
extensions:
- .omgrofl
color: "#cabbff"
tm_scope: NONE
Opa:
type: programming
@@ -1733,6 +1777,7 @@ Opal:
color: "#f7ede0"
extensions:
- .opal
tm_scope: NONE
OpenCL:
type: programming
@@ -1757,12 +1802,14 @@ OpenSCAD:
type: programming
extensions:
- .scad
tm_scope: NONE
Org:
type: prose
wrap: true
extensions:
- .org
tm_scope: NONE
Ox:
type: programming
@@ -1770,12 +1817,14 @@ Ox:
- .ox
- .oxh
- .oxo
tm_scope: NONE
Oxygene:
type: programming
color: "#5a63a3"
extensions:
- .oxygene
tm_scope: NONE
PAWN:
type: programming
@@ -1811,18 +1860,21 @@ Pan:
color: '#cc0000'
extensions:
- .pan
tm_scope: NONE
Papyrus:
type: programming
color: "#6600cc"
extensions:
- .psc
tm_scope: NONE
Parrot:
type: programming
color: "#f3ca0a"
extensions:
- .parrot # Dummy extension
tm_scope: NONE
Parrot Assembly:
group: Parrot
@@ -1831,6 +1883,7 @@ Parrot Assembly:
- pasm
extensions:
- .pasm
tm_scope: NONE
Parrot Internal Representation:
group: Parrot
@@ -1882,12 +1935,14 @@ Perl6:
- .p6m
- .pl6
- .pm6
tm_scope: NONE
PigLatin:
type: programming
color: "#fcd7de"
extensions:
- .pig
tm_scope: NONE
Pike:
type: programming
@@ -1902,12 +1957,14 @@ Pod:
wrap: true
extensions:
- .pod
tm_scope: NONE
PogoScript:
type: programming
color: "#d80074"
extensions:
- .pogo
tm_scope: NONE
PostScript:
type: markup
@@ -1948,6 +2005,7 @@ Propeller Spin:
color: "#2b446d"
extensions:
- .spin
tm_scope: NONE
Protocol Buffer:
type: markup
@@ -1971,6 +2029,7 @@ Pure Data:
color: "#91de79"
extensions:
- .pd
tm_scope: NONE
PureScript:
type: programming
@@ -2077,6 +2136,7 @@ RMarkdown:
extensions:
- .rmd
- .Rmd
tm_scope: NONE
Racket:
type: programming
@@ -2096,6 +2156,7 @@ Ragel in Ruby Host:
aliases:
- ragel-rb
- ragel-ruby
tm_scope: NONE
Raw token data:
search_term: raw
@@ -2103,6 +2164,7 @@ Raw token data:
- raw
extensions:
- .raw
tm_scope: NONE
Rebol:
type: programming
@@ -2122,10 +2184,12 @@ Red:
- .reds
aliases:
- red/system
tm_scope: NONE
Redcode:
extensions:
- .cw
tm_scope: NONE
RobotFramework:
type: programming
@@ -2199,6 +2263,7 @@ SAS:
color: "#1E90FF"
extensions:
- .sas
tm_scope: NONE
SCSS:
type: markup
@@ -2292,6 +2357,7 @@ Self:
color: "#0579aa"
extensions:
- .self
tm_scope: NONE
Shell:
type: programming
@@ -2330,6 +2396,7 @@ Shen:
color: "#120F14"
extensions:
- .shen
tm_scope: NONE
Slash:
type: programming
@@ -2400,6 +2467,7 @@ Stylus:
group: CSS
extensions:
- .styl
tm_scope: NONE
SuperCollider:
type: programming
@@ -2407,6 +2475,7 @@ SuperCollider:
extensions:
- .scd
- .sc
tm_scope: NONE
Swift:
type: programming
@@ -2432,6 +2501,7 @@ TXL:
type: programming
extensions:
- .txl
tm_scope: NONE
Tcl:
type: programming
@@ -2488,6 +2558,7 @@ Textile:
wrap: true
extensions:
- .textile
tm_scope: NONE
Thrift:
type: programming
@@ -2501,6 +2572,7 @@ Turing:
extensions:
- .t
- .tu
tm_scope: NONE
Twig:
type: markup
@@ -2761,6 +2833,7 @@ Zimpl:
- .zimpl
- .zmpl
- .zpl
tm_scope: NONE
eC:
type: programming
@@ -2768,6 +2841,7 @@ eC:
extensions:
- .ec
- .eh
tm_scope: NONE
edn:
type: data
@@ -2782,6 +2856,7 @@ fish:
group: Shell
extensions:
- .fish
tm_scope: NONE
mupad:
extensions:
@@ -2822,3 +2897,4 @@ xBase:
color: "#3a4040"
extensions:
- .prg
tm_scope: NONE

View File

@@ -1,5 +1,6 @@
require 'linguist/language'
require 'test/unit'
require 'yaml'
class TestLanguage < Test::Unit::TestCase
include Linguist
@@ -359,4 +360,15 @@ class TestLanguage < Test::Unit::TestCase
def test_by_type
assert !Language.by_type(:prose).nil?
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