Skip to content

Commit

Permalink
Make options argument in parsers optional (#11892)
Browse files Browse the repository at this point in the history
  • Loading branch information
fisker authored and sosukesuzuki committed Dec 4, 2021
1 parent 99649c7 commit e7a7452
Show file tree
Hide file tree
Showing 7 changed files with 57 additions and 22 deletions.
6 changes: 3 additions & 3 deletions src/language-css/parser-postcss.js
Expand Up @@ -619,7 +619,7 @@ function parseWithParser(parse, text, options) {
}

// TODO: make this only work on css
function parseCss(text, parsers, options) {
function parseCss(text, parsers, options = {}) {
const isSCSSParser = isSCSS(options.parser, text);
const parseFunctions = isSCSSParser
? [parseScss, parseLess]
Expand All @@ -640,7 +640,7 @@ function parseCss(text, parsers, options) {
}
}

function parseLess(text, parsers, options) {
function parseLess(text, parsers, options = {}) {
const lessParser = require("postcss-less");
return parseWithParser(
// Workaround for https://github.com/shellscape/postcss-less/issues/145
Expand All @@ -651,7 +651,7 @@ function parseLess(text, parsers, options) {
);
}

function parseScss(text, parsers, options) {
function parseScss(text, parsers, options = {}) {
const { parse } = require("postcss-scss");
return parseWithParser(parse, text, options);
}
Expand Down
28 changes: 18 additions & 10 deletions src/language-html/parser-html.js
Expand Up @@ -25,6 +25,7 @@ const { locStart, locEnd } = require("./loc.js");
* @typedef {import('angular-html-parser/lib/compiler/src/ml_parser/ast').Element} Element
* @typedef {import('angular-html-parser/lib/compiler/src/ml_parser/parser').ParseTreeResult} ParserTreeResult
* @typedef {Omit<import('angular-html-parser').ParseOptions, 'canSelfClose'> & {
* name?: 'html' | 'angular' | 'vue' | 'lwc';
* recognizeSelfClosing?: boolean;
* normalizeTagName?: boolean;
* normalizeAttributeName?: boolean;
Expand Down Expand Up @@ -365,6 +366,7 @@ function _parse(text, options, parserOptions, shouldParseFrontMatter = true) {
* @param {ParserOptions} parserOptions
*/
function createParser({
name,
recognizeSelfClosing = false,
normalizeTagName = false,
normalizeAttributeName = false,
Expand All @@ -374,14 +376,18 @@ function createParser({
} = {}) {
return {
parse: (text, parsers, options) =>
_parse(text, options, {
recognizeSelfClosing,
normalizeTagName,
normalizeAttributeName,
allowHtmComponentClosingTags,
isTagNameCaseSensitive,
getTagContentType,
}),
_parse(
text,
{ parser: name, ...options },
{
recognizeSelfClosing,
normalizeTagName,
normalizeAttributeName,
allowHtmComponentClosingTags,
isTagNameCaseSensitive,
getTagContentType,
}
),
hasPragma,
astFormat: "html",
locStart,
Expand All @@ -392,13 +398,15 @@ function createParser({
module.exports = {
parsers: {
html: createParser({
name: "html",
recognizeSelfClosing: true,
normalizeTagName: true,
normalizeAttributeName: true,
allowHtmComponentClosingTags: true,
}),
angular: createParser(),
angular: createParser({ name: "angular" }),
vue: createParser({
name: "vue",
recognizeSelfClosing: true,
isTagNameCaseSensitive: true,
getTagContentType: (tagName, prefix, hasParent, attrs) => {
Expand All @@ -414,6 +422,6 @@ module.exports = {
}
},
}),
lwc: createParser(),
lwc: createParser({ name: "lwc" }),
},
};
2 changes: 1 addition & 1 deletion src/language-js/parse/espree.js
Expand Up @@ -32,7 +32,7 @@ function createParseError(error) {
return createError(message, { start: { line: lineNumber, column } });
}

function parse(originalText, parsers, options) {
function parse(originalText, parsers, options = {}) {
const { parse } = require("espree");

const textToParse = replaceHashbang(originalText);
Expand Down
6 changes: 3 additions & 3 deletions src/language-js/parse/flow.js
Expand Up @@ -45,7 +45,7 @@ function createParseError(error) {
});
}

function parse(text, parsers, opts) {
function parse(text, parsers, options = {}) {
// Inline the require to avoid loading all the JS if we don't use it
const { parse } = require("flow-parser");
const ast = parse(replaceHashbang(text), parseOptions);
Expand All @@ -54,8 +54,8 @@ function parse(text, parsers, opts) {
throw createParseError(error);
}

opts.originalText = text;
return postprocess(ast, opts);
options.originalText = text;
return postprocess(ast, options);
}

// Export as a plugin so we can reuse the same bundle for UMD loading
Expand Down
2 changes: 1 addition & 1 deletion src/language-js/parse/meriyah.js
Expand Up @@ -71,7 +71,7 @@ function createParseError(error) {
return createError(message, { start: { line, column } });
}

function parse(text, parsers, options) {
function parse(text, parsers, options = {}) {
const { result: ast, error: moduleParseError } = tryCombinations(
() => parseWithOptions(text, /* module */ true),
() => parseWithOptions(text, /* module */ false)
Expand Down
8 changes: 4 additions & 4 deletions src/language-js/parse/typescript.js
Expand Up @@ -32,7 +32,7 @@ function createParseError(error) {
});
}

function parse(text, parsers, opts) {
function parse(text, parsers, options = {}) {
const textToParse = replaceHashbang(text);
const jsx = isProbablyJsx(text);

Expand All @@ -49,9 +49,9 @@ function parse(text, parsers, opts) {
throw createParseError(firstError);
}

opts.originalText = text;
opts.tsParseResult = result;
return postprocess(result.ast, opts);
options.originalText = text;
options.tsParseResult = result;
return postprocess(result.ast, options);
}

/**
Expand Down
27 changes: 27 additions & 0 deletions tests/integration/__tests__/parser-api.js
Expand Up @@ -29,6 +29,33 @@ test("allows usage of prettier's supported parsers", () => {
expect(output).toBe("bar();\n");
});

test("parsers should allow omit optional arguments", () => {
let parsers;
try {
prettier.format("{}", {
parser(text, builtinParsers) {
parsers = builtinParsers;
},
});
} catch {
// noop
}

expect(typeof parsers.babel).toBe("function");
const code = {
graphql: "type A {hero: Character}",
default: "{}",
};
for (const [name, parse] of Object.entries(parsers)) {
// Private parser should not be used by users
if (name.startsWith("__")) {
continue;
}

expect(() => parse(code[name] || code.default)).not.toThrow();
}
});

test("allows add empty `trailingComments` array", () => {
const output = prettier.format("(foo /* comment */)( )", {
parser(text, parsers) {
Expand Down

0 comments on commit e7a7452

Please sign in to comment.