Skip to content

Commit ed25668

Browse files
fix(JSON) null/booleans are keywords but should be literals
1 parent af41217 commit ed25668

File tree

5 files changed

+26
-92
lines changed

5 files changed

+26
-92
lines changed

Diff for: CHANGES.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Supported Node.js versions:
66

77

88
Grammars:
9-
9+
- fix(json) changed null/booleans from `keyword` to `literal` [shikhar13012001][]
1010
- enh(gml) reorganized and added additional keywords [Bluecoreg][]
1111
- enh(csharp) Added support for the new `scoped` keyword in C# (#3571) [David Pine][]
1212
- enh(scala) add `transparent` keyword [Matt Bovel][]
@@ -22,6 +22,7 @@ Grammars:
2222
- Added 3rd party Oak grammar to SUPPORTED_LANGUAGES [Tim Smith][]
2323
- enh(python) add `match` and `case` keywords [Avrumy Lunger][]
2424

25+
[shikhar13012001]: https://github.com/shikhar13012001
2526
[Bluecoreg]: https://github.com/Bluecoreg
2627
[Matt Bovel]: https://github.com/mbovel
2728
[David Schach]: https://github.com/dschach

Diff for: package-lock.json

+4-78
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: src/languages/json.js

+15-8
Original file line numberDiff line numberDiff line change
@@ -17,24 +17,31 @@ export default function(hljs) {
1717
className: "punctuation",
1818
relevance: 0
1919
};
20-
// normally we would rely on `keywords` for this but using a mode here allows us
21-
// to use the very tight `illegal: \S` rule later to flag any other character
22-
// as illegal indicating that despite looking like JSON we do not truly have
23-
// JSON and thus improve false-positively greatly since JSON will try and claim
24-
// all sorts of JSON looking stuff
25-
const LITERALS = { beginKeywords: [
20+
const LITERALS = [
2621
"true",
2722
"false",
2823
"null"
29-
].join(" ") };
24+
];
25+
// NOTE: normally we would rely on `keywords` for this but using a mode here allows us
26+
// - to use the very tight `illegal: \S` rule later to flag any other character
27+
// - as illegal indicating that despite looking like JSON we do not truly have
28+
// - JSON and thus improve false-positively greatly since JSON will try and claim
29+
// - all sorts of JSON looking stuff
30+
const LITERALS_MODE = {
31+
scope: "literal",
32+
beginKeywords: LITERALS.join(" "),
33+
};
3034

3135
return {
3236
name: 'JSON',
37+
keywords:{
38+
literal: LITERALS,
39+
},
3340
contains: [
3441
ATTRIBUTE,
3542
PUNCTUATION,
3643
hljs.QUOTE_STRING_MODE,
37-
LITERALS,
44+
LITERALS_MODE,
3845
hljs.C_NUMBER_MODE,
3946
hljs.C_LINE_COMMENT_MODE,
4047
hljs.C_BLOCK_COMMENT_MODE

Diff for: test/markup/http/default.expect.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@
33
<span class="hljs-attribute">Content-Type</span><span class="hljs-punctuation">: </span>application/json; charset=utf-8
44
<span class="hljs-attribute">Content-Length</span><span class="hljs-punctuation">: </span>19
55

6-
<span class="language-json"><span class="hljs-punctuation">{</span><span class="hljs-attr">&quot;status&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;ok&quot;</span><span class="hljs-punctuation">,</span> <span class="hljs-attr">&quot;extended&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-keyword">true</span><span class="hljs-punctuation">}</span>
7-
</span>
6+
<span class="language-json"><span class="hljs-punctuation">{</span><span class="hljs-attr">&quot;status&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;ok&quot;</span><span class="hljs-punctuation">,</span> <span class="hljs-attr">&quot;extended&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">true</span></span><span class="hljs-punctuation">}</span>
7+
</span>

Diff for: test/markup/json/comments.expect.txt

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
<span class="hljs-punctuation">{</span>
44
<span class="hljs-attr">&quot;title&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;apples&quot;</span><span class="hljs-punctuation">,</span> <span class="hljs-comment">// yum</span>
55
<span class="hljs-attr">&quot;count&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span><span class="hljs-number">12000</span><span class="hljs-punctuation">,</span> <span class="hljs-number">20000</span><span class="hljs-punctuation">]</span><span class="hljs-punctuation">,</span> <span class="hljs-comment">/* so many? */</span>
6-
<span class="hljs-attr">&quot;description&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span><span class="hljs-attr">&quot;text&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;...&quot;</span><span class="hljs-punctuation">,</span> <span class="hljs-attr">&quot;sensitive&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-keyword">false</span><span class="hljs-punctuation">}</span>
6+
<span class="hljs-attr">&quot;description&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span><span class="hljs-attr">&quot;text&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;...&quot;</span><span class="hljs-punctuation">,</span> <span class="hljs-attr">&quot;sensitive&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">}</span>
77
<span class="hljs-punctuation">}</span><span class="hljs-punctuation">,</span>
88
<span class="hljs-punctuation">{</span>
99
<span class="hljs-attr">&quot;title&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;oranges&quot;</span><span class="hljs-punctuation">,</span>
10-
<span class="hljs-attr">&quot;count&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span><span class="hljs-number">17500</span><span class="hljs-punctuation">,</span> <span class="hljs-keyword">null</span><span class="hljs-punctuation">]</span><span class="hljs-punctuation">,</span>
11-
<span class="hljs-attr">&quot;description&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span><span class="hljs-attr">&quot;text&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;...&quot;</span><span class="hljs-punctuation">,</span> <span class="hljs-attr">&quot;sensitive&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-keyword">false</span><span class="hljs-punctuation">}</span>
10+
<span class="hljs-attr">&quot;count&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span><span class="hljs-number">17500</span><span class="hljs-punctuation">,</span> <span class="hljs-literal"><span class="hljs-keyword">null</span></span><span class="hljs-punctuation">]</span><span class="hljs-punctuation">,</span>
11+
<span class="hljs-attr">&quot;description&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span><span class="hljs-attr">&quot;text&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;...&quot;</span><span class="hljs-punctuation">,</span> <span class="hljs-attr">&quot;sensitive&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">}</span>
1212
<span class="hljs-punctuation">}</span>
1313
<span class="hljs-comment">// {</span>
1414
<span class="hljs-comment">// &quot;title&quot; : &quot;brocolli&quot;</span>

0 commit comments

Comments
 (0)