diff --git a/lib/parser.ts b/lib/parser.ts index 4e5f22f4..0b492216 100644 --- a/lib/parser.ts +++ b/lib/parser.ts @@ -31,6 +31,7 @@ export function parse(source: string, options?: Partial) { tolerant: util.getOption(options, "tolerant", true), ecmaVersion: 6, sourceType: util.getOption(options, "sourceType", "module"), + sourceFileName: util.getOption(options, "sourceFileName", null), }); // Use ast.tokens if possible, and otherwise fall back to the Esprima diff --git a/parsers/_babel_options.ts b/parsers/_babel_options.ts index 60d50ac5..4100594e 100644 --- a/parsers/_babel_options.ts +++ b/parsers/_babel_options.ts @@ -4,6 +4,7 @@ import { getOption } from "../lib/util"; export type Overrides = Partial<{ sourceType: ParserOptions["sourceType"]; strictMode: ParserOptions["strictMode"]; + sourceFileName: string; }>; export default function getBabelOptions( @@ -16,6 +17,7 @@ export default function getBabelOptions( return { sourceType: getOption(options, "sourceType", "module"), strictMode: getOption(options, "strictMode", false), + sourceFilename: getOption(options, "sourceFileName", undefined), allowImportExportEverywhere: true, allowReturnOutsideFunction: true, startLine: 1, diff --git a/test/babel.ts b/test/babel.ts index e560d3ca..e27be286 100644 --- a/test/babel.ts +++ b/test/babel.ts @@ -497,4 +497,15 @@ describe("Babel", function () { assert.strictEqual(recast.prettyPrint(ast).code, code.join(eol)); }); + + it("adds the sourceFilename to location", function () { + const code = "const a = 1;"; + const filename = "testfile.js"; + const ast = recast.parse(code, { + ...parseOptions, + sourceFileName: filename, + }); + + assert.strictEqual(ast.program.body[0].loc.filename, filename); + }); });