Skip to content

Commit 338a91f

Browse files
authored
Allow additional code fence meta (#128)
1 parent ac62da4 commit 338a91f

File tree

2 files changed

+8
-7
lines changed

2 files changed

+8
-7
lines changed

src/parseCodeFenceInfo.js

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ function parseCodeFenceInfo(lang, metaString) {
2121
let pos = 0;
2222
let meta = {};
2323
let languageName = '';
24-
const input = lang + (metaString || '');
24+
const input = [lang, metaString].filter(Boolean).join(' ');
2525
skipTrivia();
2626
if (!isEnd() && current() !== '{') {
2727
languageName = parseIdentifier();
@@ -32,11 +32,8 @@ function parseCodeFenceInfo(lang, metaString) {
3232
meta = parseObject();
3333
}
3434

35-
if (!isEnd()) {
36-
if (languageNameEnd === pos) {
37-
return fail(`Invalid character in language name: '${current()}'`);
38-
}
39-
return fail(`Unrecognized input: '${current()}'`);
35+
if (!isEnd() && languageNameEnd === pos) {
36+
return fail(`Invalid character in language name: '${current()}'`);
4037
}
4138

4239
return { languageName, meta };

test/unit/parseCodeFenceHeader.test.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,10 @@ describe('parseCodeFenceInfo', () => {
5454
expect(() => parse('jsx{ : }')).toThrowError(/expected identifier/i);
5555
expect(() => parse('jsx{ a: "')).toThrowError(/unexpected end of input/i);
5656
expect(() => parse('c%')).toThrowError(/invalid character in language name.+?%/i);
57-
expect(() => parse('c %')).toThrowError(/unrecognized input.+?%/i);
57+
});
58+
59+
it('ignores additional meta', () => {
60+
expect(parse('jsx codesandbox=react')).toEqual({ languageName: 'jsx', meta: {} });
61+
expect(parse('js file=some/dir/file.js')).toEqual({ languageName: 'js', meta: {} });
5862
});
5963
});

0 commit comments

Comments
 (0)