Skip to content

Commit 9a2cdc4

Browse files
committed
refactor(code_tags): make codeclimate happy
Reduce duplicated code and lines
1 parent df42785 commit 9a2cdc4

File tree

1 file changed

+45
-88
lines changed

1 file changed

+45
-88
lines changed

lib/plugins/tag/code.js

Lines changed: 45 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -33,16 +33,25 @@ const rWrap = /\s*wrap:(\w+)/i;
3333
* @returns {String} Code snippet with code highlighting
3434
*/
3535

36-
function getHighlightOptions(config, arg) {
37-
let lang = '';
36+
function parseArgs(arg) {
37+
let _highlightEnable = true;
38+
if (rHighlight.test(arg)) {
39+
arg = arg.replace(rHighlight, (match, _enable) => {
40+
_highlightEnable = _enable === 'true';
41+
return '';
42+
});
43+
}
44+
45+
// Here we parse the args
46+
let lang, line_number, wrap;
47+
3848
if (rLang.test(arg)) {
3949
arg = arg.replace(rLang, (match, _lang) => {
4050
lang = _lang;
4151
return '';
4252
});
4353
}
4454

45-
let line_number = config.line_number;
4655
if (rLineNumber.test(arg)) {
4756
arg = arg.replace(rLineNumber, (match, _line_number) => {
4857
line_number = _line_number === 'true';
@@ -58,7 +67,6 @@ function getHighlightOptions(config, arg) {
5867
});
5968
}
6069

61-
let wrap = config.wrap;
6270
if (rWrap.test(arg)) {
6371
arg = arg.replace(rWrap, (match, _wrap) => {
6472
wrap = _wrap === 'true';
@@ -107,109 +115,58 @@ function getHighlightOptions(config, arg) {
107115
}
108116

109117
return {
118+
_highlightEnable,
110119
lang,
111-
firstLine: first_line,
120+
first_line,
112121
caption,
113-
gutter: line_number,
114-
hljs: config.hljs,
122+
line_number,
115123
mark,
116-
tab: config.tab_replace,
117-
autoDetect: config.auto_detect,
118124
wrap
119125
};
120126
}
121127

122-
function getPrismjsOptions(config, arg) {
123-
let lang;
124-
if (rLang.test(arg)) {
125-
arg = arg.replace(rLang, (match, _lang) => {
126-
lang = _lang;
127-
return '';
128-
});
129-
}
128+
module.exports = ctx => function codeTag(args, content) {
129+
const arg = args.join(' ');
130+
const hljsCfg = ctx.config.highlight || {};
131+
const prismjsCfg = ctx.config.prismjs || {};
130132

131-
let line_number = config.line_number;
132-
if (rLineNumber.test(arg)) {
133-
arg = arg.replace(rLineNumber, (match, _line_number) => {
134-
line_number = _line_number === 'true';
135-
return '';
136-
});
137-
}
133+
const { _highlightEnable, lang, first_line, caption, line_number, mark, wrap } = parseArgs(arg);
138134

139-
let first_line = 1;
140-
if (rFirstLine.test(arg)) {
141-
arg = arg.replace(rFirstLine, (match, _first_line) => {
142-
first_line = _first_line;
143-
return '';
144-
});
135+
/*
136+
* If highlight is not enabled inside code tag,
137+
* or neither hljs nor prism is enabled,
138+
* then return un-highlighted code directly.
139+
*/
140+
if (!_highlightEnable || (!hljsCfg.enable && !prismjsCfg.enable)) {
141+
return `<pre><code>${escapeHTML(content)}</code></pre>`;
145142
}
146143

147-
if (rWrap.test(arg)) arg = arg.replace(rWrap, '');
148-
149-
let mark = [];
150-
if (rMark.test(arg)) {
151-
arg = arg.replace(rMark, (match, _mark) => {
152-
mark = _mark.split(',').reduce((prev, cur) => {
153-
if (/-/.test(cur)) {
154-
let a = Number(cur.substr(0, cur.indexOf('-')));
155-
let b = Number(cur.substr(cur.indexOf('-') + 1));
156-
if (b < a) { // switch a & b
157-
const temp = a;
158-
a = b;
159-
b = temp;
160-
}
161-
162-
for (; a <= b; a++) {
163-
prev.push(a);
164-
}
165-
166-
return prev;
167-
}
168-
169-
prev.push(Number(cur));
170-
return prev;
171-
}, []);
172-
173-
return '';
174-
});
175-
}
144+
const hljsOption = {
145+
lang: typeof lang !== 'undefined' ? lang : '',
146+
firstLine: first_line,
147+
caption,
148+
gutter: typeof line_number !== 'undefined' ? line_number : hljsCfg.line_number,
149+
hljs: hljsCfg.hljs,
150+
mark,
151+
tab: hljsCfg.tab_replace,
152+
autoDetect: hljsCfg.auto_detect,
153+
wrap: typeof wrap === 'undefined' ? wrap : hljsCfg.wrap
154+
};
176155

177-
return {
156+
const prismjsOption = {
178157
lang,
179158
firstLine: first_line,
180-
lineNumber: line_number,
159+
lineNumber: typeof line_number !== 'undefined' ? line_number : prismjsCfg.line_number,
181160
mark,
182-
tab: config.tab_replace,
183-
isPreprocess: config.preprocess
161+
tab: prismjsCfg.tab_replace,
162+
isPreprocess: prismjsCfg.preprocess
184163
};
185-
}
186-
187-
module.exports = ctx => function codeTag(args, content) {
188-
let arg = args.join(' ');
189-
const hljsCfg = ctx.config.highlight || {};
190-
const prismjsCfg = ctx.config.prismjs || {};
191-
192-
let _hljsEnable = hljsCfg.enable;
193-
194-
if (rHighlight.test(arg)) {
195-
arg = arg.replace(rHighlight, (match, _enable) => {
196-
_hljsEnable = _enable === 'true';
197-
return '';
198-
});
199-
}
200-
201-
if (!_hljsEnable && !prismjsCfg.enable) {
202-
content = escapeHTML(content);
203-
return `<pre><code>${content}</code></pre>`;
204-
}
205164

206165
if (prismjsCfg.enable) {
207-
content = prismHighlight(content, getPrismjsOptions(prismjsCfg, arg));
166+
content = prismHighlight(content, prismjsOption);
208167
} else {
209-
content = highlight(content, getHighlightOptions(hljsCfg, arg));
168+
content = highlight(content, hljsOption);
210169
}
211170

212-
content = content.replace(/{/g, '&#123;').replace(/}/g, '&#125;');
213-
214-
return content;
171+
return content.replace(/{/g, '&#123;').replace(/}/g, '&#125;');
215172
};

0 commit comments

Comments
 (0)