From 206b7b70943bebb4b6db12edbeb0d80b2efea6bf Mon Sep 17 00:00:00 2001 From: Evan You Date: Tue, 29 Dec 2020 18:21:25 -0500 Subject: [PATCH] refactor: improve vue compiler error reporting --- packages/plugin-vue/src/utils/error.ts | 30 +++++++------------ .../vite/src/node/server/middlewares/error.ts | 2 +- .../vite/src/node/server/pluginContainer.ts | 3 ++ packages/vite/src/node/utils.ts | 4 +-- 4 files changed, 16 insertions(+), 23 deletions(-) diff --git a/packages/plugin-vue/src/utils/error.ts b/packages/plugin-vue/src/utils/error.ts index 1ff2fd3e91dae2..a2916cc6646a6f 100644 --- a/packages/plugin-vue/src/utils/error.ts +++ b/packages/plugin-vue/src/utils/error.ts @@ -5,26 +5,16 @@ export function createRollupError( id: string, error: CompilerError | SyntaxError ): RollupError { - if ('code' in error) { - return { - id, - plugin: 'vue', - message: error.message, - parserError: error, - loc: error.loc - ? { - file: id, - line: error.loc.start.line, - column: error.loc.start.column - } - : undefined - } - } else { - return { - id, - plugin: 'vue', - message: error.message, - parserError: error + ;(error as RollupError).id = id + ;(error as RollupError).plugin = 'vue' + + if ('code' in error && error.loc) { + ;(error as any).loc = { + file: id, + line: error.loc.start.line, + column: error.loc.start.column } } + + return error as RollupError } diff --git a/packages/vite/src/node/server/middlewares/error.ts b/packages/vite/src/node/server/middlewares/error.ts index 99c8a465b93193..fa1ecb41d0196a 100644 --- a/packages/vite/src/node/server/middlewares/error.ts +++ b/packages/vite/src/node/server/middlewares/error.ts @@ -11,7 +11,7 @@ export function errorMiddleware( // note the 4 args must be kept for connect to treat this as error middleware return (err: RollupError, _req, res, _next) => { const args = [chalk.red(`Internal server error:`)] - if (err.plugin) args.push(` Plugin: ${chalk.green(err.plugin)}`) + if (err.plugin) args.push(` Plugin: ${chalk.magenta(err.plugin)}`) if (err.id) args.push(` File: ${chalk.cyan(err.id)}`) if (err.frame) args.push(chalk.yellow(pad(err.frame))) if (err.stack) args.push(pad(err.stack)) diff --git a/packages/vite/src/node/server/pluginContainer.ts b/packages/vite/src/node/server/pluginContainer.ts index 9790a5fe1fd323..d5e46c4280a339 100644 --- a/packages/vite/src/node/server/pluginContainer.ts +++ b/packages/vite/src/node/server/pluginContainer.ts @@ -267,6 +267,9 @@ export async function createPluginContainer( line: (err as any).line, column: (err as any).column } + err.frame = err.frame || generateCodeFrame(this._activeCode, err.loc) + } else if (err.loc) { + err.frame = err.frame || generateCodeFrame(this._activeCode, err.loc) } } // error thrown here is caught by the transform middleware and passed on diff --git a/packages/vite/src/node/utils.ts b/packages/vite/src/node/utils.ts index 6fa0bffe1896d7..f2b617de8d04f1 100644 --- a/packages/vite/src/node/utils.ts +++ b/packages/vite/src/node/utils.ts @@ -187,10 +187,10 @@ export function posToNumber( const lines = source.split(splitRE) const { line, column } = pos let start = 0 - for (let i = 0; i < line; i++) { + for (let i = 0; i < line - 1; i++) { start += lines[i].length } - return start + column - 1 + return start + column } export function numberToPos(