rename errorWithNode to buildCodeFrameError and when erroring on dynamic nodes try and estimate a location
This commit is contained in:
parent
c00bf262a7
commit
dff098e77b
@ -20,6 +20,15 @@ import * as util from "../../util";
|
||||
import path from "path";
|
||||
import * as t from "babel-types";
|
||||
|
||||
var errorVisitor = {
|
||||
enter(path, state) {
|
||||
var loc = path.node.loc;
|
||||
if (loc) {
|
||||
state.loc = loc;
|
||||
path.stop();
|
||||
}
|
||||
}
|
||||
};
|
||||
export default class File {
|
||||
constructor(opts = {}, pipeline) {
|
||||
this.pipeline = pipeline;
|
||||
@ -383,17 +392,26 @@ export default class File {
|
||||
return uid;
|
||||
}
|
||||
|
||||
errorWithNode(node, msg, Error = SyntaxError) {
|
||||
var err;
|
||||
buildCodeFrameError(node, msg, Error = SyntaxError) {
|
||||
var loc = node && (node.loc || node._loc);
|
||||
|
||||
var err = new Error(msg);
|
||||
|
||||
if (loc) {
|
||||
err = new Error(`Line ${loc.start.line}: ${msg}`);
|
||||
err.loc = loc.start;
|
||||
} else {
|
||||
// todo: find errors with nodes inside to at least point to something
|
||||
err = new Error("There's been an error on a dynamic node. This is almost certainly an internal error. Please report it.");
|
||||
traverse(node, errorVisitor, err);
|
||||
|
||||
err.message += " (This is an error on an internal node. Probably an internal error";
|
||||
|
||||
if (err.loc) {
|
||||
err.message += ". Location has been estimated.";
|
||||
}
|
||||
|
||||
err.message += ")";
|
||||
}
|
||||
return err;
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
mergeSourceMap(map: Object) {
|
||||
|
||||
@ -28,7 +28,7 @@ export function push(mutatorMap, node, kind, file) {
|
||||
}
|
||||
|
||||
if (map.value || map.initializer) {
|
||||
throw file.errorWithNode(node, "Key conflict with sibling node");
|
||||
throw file.buildCodeFrameError(node, "Key conflict with sibling node");
|
||||
}
|
||||
|
||||
if (node.value) {
|
||||
|
||||
@ -37,7 +37,7 @@ export default class DefaultFormatter {
|
||||
|
||||
var existingScope = this.sourceScopes[source];
|
||||
if (existingScope && existingScope !== path.scope) {
|
||||
throw path.errorWithNode(messages.get("modulesDuplicateDeclarations"));
|
||||
throw path.buildCodeFrameError(messages.get("modulesDuplicateDeclarations"));
|
||||
}
|
||||
|
||||
this.sourceScopes[source] = path.scope;
|
||||
@ -180,7 +180,7 @@ export default class DefaultFormatter {
|
||||
|
||||
checkExportIdentifier(node) {
|
||||
if (t.isIdentifier(node, { name: "__esModule" })) {
|
||||
throw this.file.errorWithNode(node, messages.get("modulesIllegalExportName", node.name));
|
||||
throw this.file.buildCodeFrameError(node, messages.get("modulesIllegalExportName", node.name));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user