From 551315ad46fb578d4acf7b2178e70c20fdf67c61 Mon Sep 17 00:00:00 2001 From: bluwy Date: Wed, 30 Oct 2024 14:50:39 +0800 Subject: [PATCH 1/4] fix(scss): add line and column to error in modern api --- packages/vite/src/node/plugins/css.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/vite/src/node/plugins/css.ts b/packages/vite/src/node/plugins/css.ts index ef59cf26a3f59c..5ae2255efb6532 100644 --- a/packages/vite/src/node/plugins/css.ts +++ b/packages/vite/src/node/plugins/css.ts @@ -2539,6 +2539,12 @@ const scssProcessor = ( e.message = `[sass] ${e.message}` e.id = e.file e.frame = e.formatted + // modern api lacks `line` and `column` property. extract from `span`. + // NOTE: the values are 0-based so +1 is required. + if (e.span?.start) { + e.line = e.span.start.line + 1 + e.column = e.span.start.column + 1 + } return { code: '', error: e, deps: [] } } }, From 7e7dec4723a867bb507afeb16b89edf9ad0be401 Mon Sep 17 00:00:00 2001 From: bluwy Date: Wed, 30 Oct 2024 21:48:44 +0800 Subject: [PATCH 2/4] fix: improve scss error message --- packages/vite/src/client/overlay.ts | 2 +- packages/vite/src/node/plugins/css.ts | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/vite/src/client/overlay.ts b/packages/vite/src/client/overlay.ts index 63f570be488efb..eebeef1fc1d237 100644 --- a/packages/vite/src/client/overlay.ts +++ b/packages/vite/src/client/overlay.ts @@ -201,7 +201,7 @@ const createTemplate = () => ) const fileRE = /(?:[a-zA-Z]:\\|\/).*?:\d+:\d+/g -const codeframeRE = /^(?:>?\s*\d+\s+\|.*|\s+\|\s*\^.*)\r?\n/gm +const codeframeRE = /^(?:>?\s*\d+\s+[|│╷╵].*|\s+[|│╷╵]\s*\^.*|\s*[|│╷╵])\r?\n/gm // Allow `ErrorOverlay` to extend `HTMLElement` even in environments where // `HTMLElement` was not originally defined. diff --git a/packages/vite/src/node/plugins/css.ts b/packages/vite/src/node/plugins/css.ts index 5ae2255efb6532..54e3952b06ca9a 100644 --- a/packages/vite/src/node/plugins/css.ts +++ b/packages/vite/src/node/plugins/css.ts @@ -2536,9 +2536,14 @@ const scssProcessor = ( } } catch (e) { // normalize SASS error - e.message = `[sass] ${e.message}` + // extract the part before the trace as we'll manually generate it ourselves + const messageFrameStart = e.message.indexOf('╷') + e.message = `[sass] ${ + messageFrameStart > 0 + ? e.message.slice(0, messageFrameStart).trim() + : e.message + }` e.id = e.file - e.frame = e.formatted // modern api lacks `line` and `column` property. extract from `span`. // NOTE: the values are 0-based so +1 is required. if (e.span?.start) { From ed55bd58b07df2b542b1b67d88ac790c7835dd5f Mon Sep 17 00:00:00 2001 From: bluwy Date: Wed, 30 Oct 2024 21:59:43 +0800 Subject: [PATCH 3/4] fix: better --- packages/vite/src/client/overlay.ts | 2 +- packages/vite/src/node/plugins/css.ts | 15 +++++++-------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/packages/vite/src/client/overlay.ts b/packages/vite/src/client/overlay.ts index eebeef1fc1d237..63f570be488efb 100644 --- a/packages/vite/src/client/overlay.ts +++ b/packages/vite/src/client/overlay.ts @@ -201,7 +201,7 @@ const createTemplate = () => ) const fileRE = /(?:[a-zA-Z]:\\|\/).*?:\d+:\d+/g -const codeframeRE = /^(?:>?\s*\d+\s+[|│╷╵].*|\s+[|│╷╵]\s*\^.*|\s*[|│╷╵])\r?\n/gm +const codeframeRE = /^(?:>?\s*\d+\s+\|.*|\s+\|\s*\^.*)\r?\n/gm // Allow `ErrorOverlay` to extend `HTMLElement` even in environments where // `HTMLElement` was not originally defined. diff --git a/packages/vite/src/node/plugins/css.ts b/packages/vite/src/node/plugins/css.ts index 54e3952b06ca9a..e17c11694cae80 100644 --- a/packages/vite/src/node/plugins/css.ts +++ b/packages/vite/src/node/plugins/css.ts @@ -2536,19 +2536,18 @@ const scssProcessor = ( } } catch (e) { // normalize SASS error - // extract the part before the trace as we'll manually generate it ourselves - const messageFrameStart = e.message.indexOf('╷') - e.message = `[sass] ${ - messageFrameStart > 0 - ? e.message.slice(0, messageFrameStart).trim() - : e.message - }` + e.message = `[sass] ${e.message}` e.id = e.file - // modern api lacks `line` and `column` property. extract from `span`. + e.frame = e.formatted + // modern api lacks `line` and `column` property. extract from `e.span`. // NOTE: the values are 0-based so +1 is required. if (e.span?.start) { e.line = e.span.start.line + 1 e.column = e.span.start.column + 1 + // it also lacks `e.formatted`, so we shim with the message here since + // sass error messages have the frame already in them and we don't want + // to re-generate a new frame (same as legavy api) + e.frame = e.message } return { code: '', error: e, deps: [] } } From 9dd36f09565754c5388d0ca939206295efc6fa6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0=20/=20green?= Date: Thu, 31 Oct 2024 11:07:27 +0900 Subject: [PATCH 4/4] chore: fix typo Co-authored-by: Hiroshi Ogawa --- packages/vite/src/node/plugins/css.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/vite/src/node/plugins/css.ts b/packages/vite/src/node/plugins/css.ts index efddadc8706215..116b51a09cf871 100644 --- a/packages/vite/src/node/plugins/css.ts +++ b/packages/vite/src/node/plugins/css.ts @@ -2563,7 +2563,7 @@ const scssProcessor = ( e.column = e.span.start.column + 1 // it also lacks `e.formatted`, so we shim with the message here since // sass error messages have the frame already in them and we don't want - // to re-generate a new frame (same as legavy api) + // to re-generate a new frame (same as legacy api) e.frame = e.message } return { code: '', error: e, deps: [] }