diff --git a/packages/compiler-sfc/src/compileTemplate.ts b/packages/compiler-sfc/src/compileTemplate.ts index 45fb36b7f..9fa099a30 100644 --- a/packages/compiler-sfc/src/compileTemplate.ts +++ b/packages/compiler-sfc/src/compileTemplate.ts @@ -18,7 +18,7 @@ import { transformSrcset, createSrcsetTransformWithOptions } from './templateTransformSrcset' -import { isObject } from '@vue/shared' +import { generateCodeFrame, isObject } from '@vue/shared' import * as CompilerDOM from '@vue/compiler-dom' import * as CompilerSSR from '@vue/compiler-ssr' import consolidate from 'consolidate' @@ -170,6 +170,7 @@ function doCompileTemplate({ transformAssetUrls }: SFCTemplateCompileOptions): SFCTemplateCompileResults { const errors: CompilerError[] = [] + const warnings: CompilerError[] = [] let nodeTransforms: NodeTransform[] = [] if (isObject(transformAssetUrls)) { @@ -211,7 +212,8 @@ function doCompileTemplate({ nodeTransforms: nodeTransforms.concat(compilerOptions.nodeTransforms || []), filename, sourceMap: true, - onError: e => errors.push(e) + onError: e => errors.push(e), + onWarn: w => warnings.push(w) }) // inMap should be the map produced by ./parse.ts which is a simple line-only @@ -226,7 +228,19 @@ function doCompileTemplate({ } } - return { code, ast, preamble, source, errors, tips: [], map } + const tips = warnings.map(w => { + let msg = w.message + if (w.loc) { + msg += `\n${generateCodeFrame( + source, + w.loc.start.offset, + w.loc.end.offset + )}` + } + return msg + }) + + return { code, ast, preamble, source, errors, tips, map } } function mapLines(oldMap: RawSourceMap, newMap: RawSourceMap): RawSourceMap {