Add filename to transform error (#10511)
* polish: use “unknown” as a default filename in buildCodeFrameError * feat: add filename to transform error * fix: incorrect warning message * fix: add filename to generate phrase error message * address review comment from Nicolò
This commit is contained in:
parent
80d99b4d4e
commit
298c9a6c33
@ -259,7 +259,7 @@ export default class File {
|
||||
): Error {
|
||||
let loc = node && (node.loc || node._loc);
|
||||
|
||||
msg = `${this.opts.filename}: ${msg}`;
|
||||
msg = `${this.opts.filename ?? "unknown"}: ${msg}`;
|
||||
|
||||
if (!loc && node) {
|
||||
const state = {
|
||||
|
||||
@ -41,7 +41,7 @@ export default function generateCode(
|
||||
|
||||
if (typeof result.then === "function") {
|
||||
throw new Error(
|
||||
`You appear to be using an async parser plugin, ` +
|
||||
`You appear to be using an async codegen plugin, ` +
|
||||
`which your current version of Babel does not support. ` +
|
||||
`If you're using a published plugin, ` +
|
||||
`you may need to upgrade your @babel/core version.`,
|
||||
|
||||
@ -55,11 +55,29 @@ export function runSync(
|
||||
ast,
|
||||
);
|
||||
|
||||
transformFile(file, config.passes);
|
||||
|
||||
const opts = file.opts;
|
||||
const { outputCode, outputMap } =
|
||||
opts.code !== false ? generateCode(config.passes, file) : {};
|
||||
try {
|
||||
transformFile(file, config.passes);
|
||||
} catch (e) {
|
||||
e.message = `${opts.filename ?? "unknown"}: ${e.message}`;
|
||||
if (!e.code) {
|
||||
e.code = "BABEL_TRANSFORM_ERROR";
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
|
||||
let outputCode, outputMap;
|
||||
try {
|
||||
if (opts.code !== false) {
|
||||
({ outputCode, outputMap } = generateCode(config.passes, file));
|
||||
}
|
||||
} catch (e) {
|
||||
e.message = `${opts.filename ?? "unknown"}: ${e.message}`;
|
||||
if (!e.code) {
|
||||
e.code = "BABEL_GENERATE_ERROR";
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
|
||||
return {
|
||||
metadata: file.metadata,
|
||||
|
||||
@ -107,7 +107,7 @@ function parser(
|
||||
} else if (results.length === 1) {
|
||||
if (typeof results[0].then === "function") {
|
||||
throw new Error(
|
||||
`You appear to be using an async codegen plugin, ` +
|
||||
`You appear to be using an async parser plugin, ` +
|
||||
`which your current version of Babel does not support. ` +
|
||||
`If you're using a published plugin, you may need to upgrade ` +
|
||||
`your @babel/core version.`,
|
||||
@ -121,6 +121,7 @@ function parser(
|
||||
err.message +=
|
||||
"\nConsider renaming the file to '.mjs', or setting sourceType:module " +
|
||||
"or sourceType:unambiguous in your Babel config for this file.";
|
||||
// err.code will be changed to BABEL_PARSE_ERROR later.
|
||||
}
|
||||
|
||||
const { loc, missingPlugin } = err;
|
||||
|
||||
@ -1,3 +1,3 @@
|
||||
{
|
||||
"throws": "undefined: someMsg\n> 1 | function f() {}"
|
||||
"throws": "unknown: someMsg\n> 1 | function f() {}"
|
||||
}
|
||||
|
||||
15
packages/babel-core/test/fixtures/plugins/transform-error/exec.js
vendored
Normal file
15
packages/babel-core/test/fixtures/plugins/transform-error/exec.js
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
var code = "function f() {}";
|
||||
transform(code, {
|
||||
plugins: [
|
||||
function() {
|
||||
return {
|
||||
visitor: {
|
||||
FunctionDeclaration: function(path) {
|
||||
throw new Error("someMsg");
|
||||
},
|
||||
},
|
||||
};
|
||||
},
|
||||
],
|
||||
filename: "/fake/path/example.js"
|
||||
});
|
||||
4
packages/babel-core/test/fixtures/plugins/transform-error/options.json
vendored
Normal file
4
packages/babel-core/test/fixtures/plugins/transform-error/options.json
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"throws": "/fake/path/example.js: someMsg",
|
||||
"os": ["linux", "darwin"]
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user