From 03f924e48a9de256914c3cf20b47d0151b10d15f Mon Sep 17 00:00:00 2001 From: Evan You Date: Wed, 15 Jul 2020 16:00:53 -0400 Subject: [PATCH] refactor(compiler-sfc): move sfc parse errors into return result Also warn against ``) - expect( + assertWarning( + parse(``) + .errors, `Single file component can contain only one ` - ) - expect( + assertWarning( + parse( + `` + ).errors, `Single file component can contain only one ` - ) expect( - `Single file component can contain only one` - ).not.toHaveBeenWarned() + parse( + `` + ).errors.length + ).toBe(0) }) }) }) diff --git a/packages/compiler-sfc/src/parse.ts b/packages/compiler-sfc/src/parse.ts index bcbfabb82d..5cfbeb10e0 100644 --- a/packages/compiler-sfc/src/parse.ts +++ b/packages/compiler-sfc/src/parse.ts @@ -8,7 +8,6 @@ import { } from '@vue/compiler-core' import * as CompilerDOM from '@vue/compiler-dom' import { RawSourceMap, SourceMapGenerator } from 'source-map' -import { generateCodeFrame } from '@vue/shared' import { TemplateCompiler } from './compileTemplate' import { compileScript, SFCScriptCompileOptions } from './compileScript' @@ -61,7 +60,7 @@ export interface SFCDescriptor { export interface SFCParseResult { descriptor: SFCDescriptor - errors: CompilerError[] + errors: (CompilerError | SyntaxError)[] } const SFC_CACHE_MAX_SIZE = 500 @@ -102,7 +101,7 @@ export function parse( customBlocks: [] } - const errors: CompilerError[] = [] + const errors: (CompilerError | SyntaxError)[] = [] const ast = compiler.parse(source, { // there are no components at SFC parsing level isNativeTag: () => true, @@ -148,13 +147,22 @@ export function parse( false ) as SFCTemplateBlock } else { - warnDuplicateBlock(source, filename, node) + errors.push(createDuplicateBlockError(node)) } break case 'script': const block = createBlock(node, source, pad) as SFCScriptBlock const isSetup = !!block.attrs.setup if (isSetup && !descriptor.scriptSetup) { + if (block.src) { + errors.push( + new SyntaxError( + `