From: Evan You Date: Wed, 15 Jul 2020 20:00:53 +0000 (-0400) Subject: refactor(compiler-sfc): move sfc parse errors into return result X-Git-Tag: v3.0.0-beta.23~11 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=03f924e48a9de256914c3cf20b47d0151b10d15f;p=thirdparty%2Fvuejs%2Fcore.git 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( + `