30 lines
1.1 KiB
JavaScript
30 lines
1.1 KiB
JavaScript
import { addError } from './utils.js';
|
|
/**
|
|
* Adds error of parsing string literal started with backtick.
|
|
*/
|
|
export const onBacktickError = (importsExports, _source, { start, end }) => addError(importsExports, 'Cannot find end of string literal started with backtick', start, end);
|
|
/**
|
|
* Parses string literal started with backtick.
|
|
*/
|
|
export const onBacktickParse = (importsExports, source, parsedToken) => {
|
|
var depth = 0;
|
|
var index = parsedToken.end;
|
|
for (; index < source.length; index += 1) {
|
|
const char = source[index];
|
|
if (char === '$') {
|
|
if (source[index + 1] === '{' && source[index - 1] !== '\\') {
|
|
depth += 1;
|
|
index += 1;
|
|
}
|
|
}
|
|
else if (char === '}') {
|
|
if (depth !== 0) {
|
|
depth -= 1;
|
|
}
|
|
}
|
|
else if (depth === 0 && char === '`' && source[index - 1] !== '\\') {
|
|
return index + 1;
|
|
}
|
|
}
|
|
return addError(importsExports, 'Cannot find end of nested string literal started with backtick', parsedToken.start, source.length);
|
|
};
|