/
githubmirror
/
babel
Обзор
Документация
Войти
/
githubmirror
/
babel
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
packages/babel-core/src/parser/index.ts
91 строка
3 KB
Nehemiya Wickramasinghe
breaking(code-frame): use 0-based columns to match Babel AST locations (#1… (#17849)
11 май 2026, 16:38
Не верифицирован
11 май 2026, 16:38
e77fa07
Код
Авторство
О чём код?
import type { Handler } from "gensync"; import { parse, type ParseResult } from "@babel/parser"; import { codeFrameColumns } from "@babel/code-frame"; import generateMissingPluginMessage from "./util/missing-plugin-helper.ts"; import type { PluginPasses } from "../config/index.ts"; import type { ResolvedOptions } from "../config/validation/options.ts"; export type { ParseResult }; export default function* parser( pluginPasses: PluginPasses, { parserOpts, highlightCode = true, filename = "unknown" }: ResolvedOptions, code: string, ): Handler<ParseResult> { try { const results = []; for (const plugins of pluginPasses) { for (const plugin of plugins) { const { parserOverride } = plugin; if (parserOverride) { const ast = parserOverride(code, parserOpts, parse); if (ast !== undefined) results.push(ast); } } } if (results.length === 0) { return parse(code, parserOpts); } else if (results.length === 1) { // If we want to allow async parsers yield* []; if (typeof (results[0] as any).then === "function") { throw new Error( `You appear to be using an async parser plugin, ` + `which your current version of Babel does not support. ` + `If you're using a published plugin, you may need to upgrade ` + `your @babel/core version.`, ); } return results[0]; } // TODO: Add an error code throw new Error("More than one plugin attempted to override parsing."); } catch (err) { if (err.code === "BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED") { err.message += "\nConsider renaming the file to '.mjs', or setting sourceType:module " + "or sourceType:unambiguous in your Babel config for this file."; // err.code will be changed to BABEL_PARSE_ERROR later. } const startLine = parserOpts?.startLine; const startColumn = parserOpts?.startColumn; if (startColumn != null) { code = " ".repeat(startColumn) + code; } const { loc, missingPlugin } = err; if (loc) { const codeFrame = codeFrameColumns( code, { start: { line: loc.line, column: loc.column, }, }, { highlightCode, startLine: startLine, }, ); if (missingPlugin) { err.message = `${filename}: ` + generateMissingPluginMessage( missingPlugin[0], loc, codeFrame, filename, ); } else { err.message = `${filename}: ${err.message}\n\n` + codeFrame; } err.code = "BABEL_PARSE_ERROR"; } throw err; } }