提交 42be6f8c 编写于 作者: fxy060608's avatar fxy060608

wip(uvue): 优化部分语法解析报错

上级 c7287813
...@@ -3,6 +3,7 @@ import path from 'path' ...@@ -3,6 +3,7 @@ import path from 'path'
import { init, parse } from 'es-module-lexer' import { init, parse } from 'es-module-lexer'
import { import {
AutoImportOptions, AutoImportOptions,
createRollupError,
initAutoImportOptions, initAutoImportOptions,
normalizeNodeModules, normalizeNodeModules,
normalizePath, normalizePath,
...@@ -20,6 +21,8 @@ import { ...@@ -20,6 +21,8 @@ import {
import AutoImport from 'unplugin-auto-import/vite' import AutoImport from 'unplugin-auto-import/vite'
import { once } from '@dcloudio/uni-shared' import { once } from '@dcloudio/uni-shared'
import { SourceMapInput } from 'rollup' import { SourceMapInput } from 'rollup'
import { createCompilerError } from './uvue/compiler/errors'
import { SourceLocation } from '@vue/compiler-core'
export const UVUE_CLASS_NAME_PREFIX = 'Gen' export const UVUE_CLASS_NAME_PREFIX = 'Gen'
...@@ -29,8 +32,36 @@ export const ENTRY_FILENAME = 'main.uts' ...@@ -29,8 +32,36 @@ export const ENTRY_FILENAME = 'main.uts'
export async function parseImports(code: string) { export async function parseImports(code: string) {
await init await init
const [imports] = parse(code) let res: ReturnType<typeof parse> = [[], [], false]
return imports try {
res = parse(code)
} catch (err: any) {
const message = err.message
if (message) {
const matches = message.match(/@:(\d+):(\d+)/)
if (matches) {
throw createRollupError(
'',
'',
createCompilerError(
0,
{
start: {
offset: 0,
line: parseInt(matches[1]),
column: parseInt(matches[2]),
},
} as SourceLocation,
{ 0: 'Parse error' },
''
),
code
)
}
}
throw err
}
return res[0]
.map(({ s, e }) => { .map(({ s, e }) => {
return `import "${code.slice(s, e)}"` return `import "${code.slice(s, e)}"`
}) })
......
...@@ -109,7 +109,9 @@ export function locToStartAndEnd( ...@@ -109,7 +109,9 @@ export function locToStartAndEnd(
) { ) {
const lines = source.split(splitRE) const lines = source.split(splitRE)
const start = posToNumberByLines(lines, loc.start.line, loc.start.column) const start = posToNumberByLines(lines, loc.start.line, loc.start.column)
const end = posToNumberByLines(lines, loc.end.line, loc.end.column) const end = loc.end
? posToNumberByLines(lines, loc.end.line, loc.end.column)
: undefined
return { start, end } return { start, end }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册