Skip to content

Commit 2d00357

Browse files
authored
enh(parser): Better errors when one language requires another (#2311)
1 parent 62fdd69 commit 2d00357

4 files changed

Lines changed: 29 additions & 1 deletion

File tree

CHANGES.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ New styles:
77
none.
88

99
Improvements:
10+
- enh(parser): add better error when a language requirement is missing () [Josh Goebel][]
1011
- fix(sql): backslash is not used to escape in strings in standard SQL (#1748) [Mike Schall][]
1112
- enh(ebnf) add backticks as additional string variant (#2290) [Chris Marchesi][]
1213
- fix(themes): fix inconsistencies between some themes padding/spacing (#2300) [Josh Goebel][]

docs/api.rst

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,18 @@ Looks up a language by name or alias.
126126
Returns the language object if found, ``undefined`` otherwise.
127127

128128

129+
``requireLanguage(name)``
130+
---------------------
131+
132+
Looks up a language by name or alias.
133+
134+
This should be used when one language definition depends on another.
135+
Using this function (vs ``getLanguage``) will provide better error messaging
136+
when a required language is missing.
137+
138+
Returns the language object if found, raises a hard error otherwise.
139+
140+
129141
``debugMode()``
130142
---------------
131143

src/highlight.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -958,6 +958,20 @@ https://highlightjs.org/
958958
return objectKeys(languages);
959959
}
960960

961+
/*
962+
intended usage: When one language truly requires another
963+
964+
Unlike `getLanguage`, this will throw when the requested language
965+
is not available.
966+
*/
967+
function requireLanguage(name) {
968+
var lang = getLanguage(name);
969+
if (lang) { return lang; }
970+
971+
var err = new Error('The \'{}\' language is required, but not loaded.'.replace('{}',name));
972+
throw err;
973+
}
974+
961975
function getLanguage(name) {
962976
name = (name || '').toLowerCase();
963977
return languages[name] || languages[aliases[name]];
@@ -980,6 +994,7 @@ https://highlightjs.org/
980994
hljs.registerLanguage = registerLanguage;
981995
hljs.listLanguages = listLanguages;
982996
hljs.getLanguage = getLanguage;
997+
hljs.requireLanguage = requireLanguage;
983998
hljs.autoDetection = autoDetection;
984999
hljs.inherit = inherit;
9851000
hljs.debugMode = function() { SAFE_MODE = false; }

src/languages/arduino.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ function(hljs) {
9494
'DEFAULT OUTPUT INPUT HIGH LOW'
9595
};
9696

97-
var ARDUINO = hljs.getLanguage('cpp').rawDefinition();
97+
var ARDUINO = hljs.requireLanguage('cpp').rawDefinition();
9898

9999
var kws = ARDUINO.keywords;
100100

0 commit comments

Comments
 (0)