(Babylon) Fall back to non-strict mode (#1587)
* (Babylon) Fall back to non-strict mode This makes Prettier a little less opinionated about linting. For example, the following can now be formatted: ```js function f(a,a){return a} ``` whereas before it would cause an error: stdin: SyntaxError: Argument name clash in strict mode (1:13) > 1 | function f(a,a){return a} | ^ This also allows octal numbers to be parsed, and therefore fixes https://github.com/prettier/prettier/issues/228 If the code parses neither as strict nor as non-strict, the error from the strict parse is thrown (as it was before this change). --- I noticed this while trying out [eslump] with prettier: eslump | pbcopy; pbpaste | prettier [eslump]: https://github.com/lydell/eslump * Add missing test * Use Object.assign() instead of mutating objectmaster
parent
36a6a8039e
commit
5ca2117d23
|
@ -60,7 +60,7 @@ function parseWithBabylon(text) {
|
|||
// Inline the require to avoid loading all the JS if we don't use it
|
||||
const babylon = require("babylon");
|
||||
|
||||
return babylon.parse(text, {
|
||||
const babylonOptions = {
|
||||
sourceType: "module",
|
||||
allowImportExportEverywhere: false,
|
||||
allowReturnOutsideFunction: false,
|
||||
|
@ -77,7 +77,20 @@ function parseWithBabylon(text) {
|
|||
"functionSent",
|
||||
"dynamicImport"
|
||||
]
|
||||
});
|
||||
};
|
||||
|
||||
try {
|
||||
return babylon.parse(text, babylonOptions);
|
||||
} catch (originalError) {
|
||||
try {
|
||||
return babylon.parse(
|
||||
text,
|
||||
Object.assign({}, babylonOptions, { strictMode: false })
|
||||
);
|
||||
} catch (nonStrictError) {
|
||||
throw originalError;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function parseWithTypeScript(text) {
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`argument-name-clash.js 1`] = `
|
||||
function f(a,a){return a}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
function f(a, a) {
|
||||
return a;
|
||||
}
|
||||
|
||||
`;
|
||||
|
||||
exports[`octal-number.js 1`] = `
|
||||
0777
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
0777;
|
||||
|
||||
`;
|
|
@ -0,0 +1 @@
|
|||
function f(a,a){return a}
|
|
@ -0,0 +1 @@
|
|||
run_spec(__dirname, { parser: "babylon" });
|
|
@ -0,0 +1 @@
|
|||
0777
|
Loading…
Reference in New Issue