You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
var createCustomError = require('../utils/createCustomError'); var generate = require('../definition-syntax/generate');
function fromMatchResult(matchResult) { var tokens = matchResult.tokens; var longestMatch = matchResult.longestMatch; var node = longestMatch < tokens.length ? tokens[longestMatch].node : null; var mismatchOffset = -1; var entries = 0; var css = '';
for (var i = 0; i < tokens.length; i++) { if (i === longestMatch) { mismatchOffset = css.length; }
if (node !== null && tokens[i].node === node) { if (i <= longestMatch) { entries++; } else { entries = 0; } }
css += tokens[i].value; }
return { node: node, css: css, mismatchOffset: mismatchOffset === -1 ? css.length : mismatchOffset, last: node === null || entries > 1 }; }
function getLocation(node, point) { var loc = node && node.loc && node.loc[point];
if (loc) { return { offset: loc.offset, line: loc.line, column: loc.column }; }
return null; }
var SyntaxReferenceError = function(type, referenceName) { var error = createCustomError( 'SyntaxReferenceError', type + (referenceName ? ' `' + referenceName + '`' : '') );
error.reference = referenceName;
return error; };
var MatchError = function(message, syntax, node, matchResult) { var error = createCustomError('SyntaxMatchError', message); var details = fromMatchResult(matchResult); var mismatchOffset = details.mismatchOffset || 0; var badNode = details.node || node; var end = getLocation(badNode, 'end'); var start = details.last ? end : getLocation(badNode, 'start'); var css = details.css;
error.rawMessage = message; error.syntax = syntax ? generate(syntax) : '<generic>'; error.css = css; error.mismatchOffset = mismatchOffset; error.loc = { source: (badNode && badNode.loc && badNode.loc.source) || '<unknown>', start: start, end: end }; error.line = start ? start.line : undefined; error.column = start ? start.column : undefined; error.offset = start ? start.offset : undefined; error.message = message + '\n' + ' syntax: ' + error.syntax + '\n' + ' value: ' + (error.css || '<empty string>') + '\n' + ' --------' + new Array(error.mismatchOffset + 1).join('-') + '^';
return error; };
module.exports = { SyntaxReferenceError: SyntaxReferenceError, MatchError: MatchError };
|