Repository: prettier/prettier (JavaScript)
Date: 2020-01-25 14:06:40+00:00
Task type: Feature

Issue:
Change `arrowParens` to `always` by default for 2.0
Why i think we need to change that?

- code consistency when an argument more than one
- if we look through our issues a lot of developers use `always`
- it does not require large code changes in our code
- honestly I don't even know why we once created this option and whether we need it in the future

Maybe we should create poll on twitter and here

@prettier/core I would like to hear your opinions on this

Ref: https://github.com/prettier/prettier/issues/6888


Issue discussion:
I already posted it in the main 2.0 issue and for the sake of completeness I think I should post it again. I think `avoid` is a mistake. A mistake in the ES6 spec to make it at all possible to omit parens in exactly one very specific case, namely when you have exactly one argument without default value, without type information or anything. And a mistake to make it the default value for arrowParens in Prettier. 

TL;DR, here:
https://twitter.com/ManuelBieh/status/1181880524954050560
We should not remove the option completely, because options are always better then forcing the JavaScript community to use braces in `arrowParents`

Thi could result in some turning away from prettier
> honestly I don't even know why we once created this option and whether we need it in the future

For reference: [original issue (#812)](https://github.com/prettier/prettier/issues/812), [PR where it was added (#3324)](https://github.com/prettier/prettier/pull/3324).
If an option value results in code that is easier to edit and produces less `git diff`, I’m all for changing the default. People upgrading can always change those options back in their configs if they want to.

`trailingComma` and `arrowParens` are great candidates for this. (While `singleQuote`, for example, is just bike shedding.)
I agree with @lydell: I'm too all in for everything that produces a smaller `git diff`.
@MichaelDeBoey I was thinking the same actually. Is it worth creating separate issues for [`quoteProps: "consistent"`](https://prettier.io/docs/en/options.html#quote-props) and [`endOfLine: "lf"`](https://prettier.io/docs/en/options.html#end-of-line)? 🤔
@kachkaev Sure, why not.
@lydell here we go: #6931 & #6932 😉

Please give these suggestions your 👍or 👎 folks!
`always` is clearly more consistent, and might be easier for beginners to learn. That said, I _really_ like the cleanliness of having fewer parentheses, since I frequently write long chains of arrow functions.

```js
// `avoid`
categories
  .filter(x => x.name === category)
  .flatMap(x => x.pages)
  .filter(x => x.name.includes(search))
  .forEach(x => (x.highlight = true));

// `always`
categories
  .filter((x) => x.name === category)
  .flatMap((x) => x.pages)
  .filter((x) => x.name.includes(search))
  .forEach((x) => (x.highlight = true));
```

In this short example, the difference isn't that big, but when inside of complicated functions, having less visual noise helps.
@Skalman when looking at your examples in isolation, the first statement with `arrowParens: "avoid"` looks cleaner indeed. However, what we're trying to optimise is the overall consistency across codebases, which are often very large and are worked on by many people.

IMHO what makes `arrowParens: "always"` better is the conciseness of the rule we need to keep in our heads and communicate to fellow developers. In your second (noisier) example the rule is as short as _always use parens in function arguments_. Easy to remember, is not it? To produce your first (cleaner) example we would need to follow a rule like _always use parens in function arguments unless there is exactly one argument, which does not have a default value, a type definition and is not a object destructed on fly_. Not as short as it could ideally be; even writing it feels confusing.

I use the idea of _rule shortness_ as a guiding principle when making code styling or more general engineering decisions. An option that produces a shorter rule implies a smaller cognitive load and reduces the exchange of redundant information between contributors. In my personal software dev experience, short rules are generally more robust and easier to follow than the long ones, even if there are few edge cases that look 'uglier' or 'noisier'. Our brains adapt to those quickly and things look subjectively nice and smooth again.

Hope these thoughts can help you assess the beauty of your statements from a slightly different point of view 😉
I always set `arrowParens` to "always" in my personal projects, because otherwise the parens get removed by prettier and I have to re-add them when I want to destructure something or add a type annotation. I'm all for changing the default.

I also think it's important to keep the option though, because a lot of FP fans like to use `avoid` (which is why it ended up as the default iirc).
@kachkaev, I really do understand - I tried to make that clear in my first sentence. My suggestion for default value would be whatever is more common in the JS world. If that is `always`, I'll switch my projects.

Edit: Oh, and I completely agree that rule shortness is important. It's always a tradeoff, though. If we didn't ever value conciseness, we wouldn't have arrow functions at all - instead we'd always use `function () {}`.
> My suggestion for default value would be whatever is more common in the JS world.

The problem with this suggestion is that Prettier is becoming more and more popular, so whatever Prettier currently does may start to dominate “whatever is more common in the JS world.”
FWIW, I&nbsp;always use&nbsp;`arrowParens: "avoid"`, because&nbsp;it&nbsp;looks&nbsp;cleaner, and&nbsp;doesn’t&nbsp;really&nbsp;affect&nbsp;`diff`.
Personally I don't really care about the default, but I would really like to have a third option: avoid only on single-argument single-statement (no curly braces) functions.

so these are valid:
`x => x + 1`

```
(x) => {
  const y = x + 1;
  return y;
}
```

Solution patch:
diff --git a/changelog_unreleased/api/pr-7430.md b/changelog_unreleased/api/pr-7430.md
new file mode 100644
index 000000000000..f6357f91de7a
--- /dev/null
+++ b/changelog_unreleased/api/pr-7430.md
@@ -0,0 +1,22 @@
+#### Change default value for `arrowParens` to `always` ([#7430](https://github.com/prettier/prettier/pull/7430) by [@kachkaev](https://github.com/kachkaev))
+
+[Since version 1.9](https://prettier.io/blog/2017/12/05/1.9.0.html#option-to-add-parens-in-arrow-function-arguments-3324httpsgithubcomprettierprettierpull3324-by-rattrayalexhttpsgithubcomrattrayalex-and-suchipihttpsgithubcomsuchipi), Prettier has an [option](https://prettier.io/docs/en/options.html#arrow-function-parentheses) to always wrap arrow function arguments with parentheses.
+Since version 2.0, this behavior becomes default.
+
+<!-- prettier-ignore -->
+```js
+// Input
+const fn = (x) => y => x + y;
+
+// Prettier stable
+const fn = x => y => x + y;
+
+// Prettier master
+const fn = (x) => (y) => x + y;
+```
+
+At first glance, avoiding parentheses in the isolated example above may look like a better choice because of less visual noise.
+However, when Prettier removes parentheses, it becomes harder to add type annotations, extra arguments or default values as well as making [other changes](https://twitter.com/ManuelBieh/status/1181880524954050560).
+Consistent use of parentheses provides a better developer experience when editing real codebases, which justifies the change.
+
+You are encouraged to use the new default value, but if the old behavior is still preferred, please configure Prettier with `{ "arrowParens": "avoid" }`.
diff --git a/docs/options.md b/docs/options.md
index 04400138ae3b..1f81cfb650bc 100644
--- a/docs/options.md
+++ b/docs/options.md
@@ -157,18 +157,22 @@ Valid options:
 
 ## Arrow Function Parentheses
 
-_First available in v1.9.0_
+_First available in v1.9.0, default value changed from `avoid` to `always` in v2.0.0_
 
 Include parentheses around a sole arrow function parameter.
 
 Valid options:
 
-- `"avoid"` - Omit parens when possible. Example: `x => x`
 - `"always"` - Always include parens. Example: `(x) => x`
+- `"avoid"` - Omit parens when possible. Example: `x => x`
+
+| Default    | CLI Override                                    | API Override                                    |
+| ---------- | ----------------------------------------------- | ----------------------------------------------- |
+| `"always"` | <code>--arrow-parens <always&#124;avoid></code> | <code>arrowParens: "<always&#124;avoid>"</code> |
 
-| Default   | CLI Override                                    | API Override                                    |
-| --------- | ----------------------------------------------- | ----------------------------------------------- |
-| `"avoid"` | <code>--arrow-parens <avoid&#124;always></code> | <code>arrowParens: "<avoid&#124;always>"</code> |
+At first glance, avoiding parentheses may look like a better choice because of less visual noise.
+However, when Prettier removes parentheses, it becomes harder to add type annotations, extra arguments or default values as well as making other changes.
+Consistent use of parentheses provides a better developer experience when editing real codebases, which justifies the default value for the option.
 
 ## Range
 
diff --git a/src/language-js/options.js b/src/language-js/options.js
index f8f21ea6a466..b794a452b275 100644
--- a/src/language-js/options.js
+++ b/src/language-js/options.js
@@ -10,16 +10,19 @@ module.exports = {
     since: "1.9.0",
     category: CATEGORY_JAVASCRIPT,
     type: "choice",
-    default: "avoid",
+    default: [
+      { since: "1.9.0", value: "avoid" },
+      { since: "2.0.0", value: "always" }
+    ],
     description: "Include parentheses around a sole arrow function parameter.",
     choices: [
-      {
-        value: "avoid",
-        description: "Omit parens when possible. Example: `x => x`"
-      },
       {
         value: "always",
         description: "Always include parens. Example: `(x) => x`"
+      },
+      {
+        value: "avoid",
+        description: "Omit parens when possible. Example: `x => x`"
       }
     ]
   },


Test patch:
diff --git a/tests/arrow-call/__snapshots__/jsfmt.spec.js.snap b/tests/arrow-call/__snapshots__/jsfmt.spec.js.snap
index 95b30dca2140..21bfd8ae5b7a 100644
--- a/tests/arrow-call/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/arrow-call/__snapshots__/jsfmt.spec.js.snap
@@ -52,7 +52,7 @@ const composition = (ViewComponent, ContainerComponent) =>
 promise.then(result => result.veryLongVariable.veryLongPropertyName > someOtherVariable ? "ok" : "fail");
 
 =====================================output=====================================
-const testResults = results.testResults.map(testResult =>
+const testResults = results.testResults.map((testResult) =>
   formatResult(testResult, formatter, reporter)
 );
 
@@ -83,16 +83,16 @@ expect(() =>
 ).not.toThrowError();
 
 const a = Observable.fromPromise(axiosInstance.post("/carts/mine")).map(
-  response => response.data
+  (response) => response.data
 );
 
 const b = Observable.fromPromise(axiosInstance.get(url)).map(
-  response => response.data
+  (response) => response.data
 );
 
 func(
   veryLoooooooooooooooooooooooongName,
-  veryLooooooooooooooooooooooooongName =>
+  (veryLooooooooooooooooooooooooongName) =>
     veryLoooooooooooooooongName.something()
 );
 
@@ -101,7 +101,7 @@ const composition = (ViewComponent, ContainerComponent) =>
     static propTypes = {};
   };
 
-promise.then(result =>
+promise.then((result) =>
   result.veryLongVariable.veryLongPropertyName > someOtherVariable
     ? "ok"
     : "fail"
@@ -163,7 +163,7 @@ const composition = (ViewComponent, ContainerComponent) =>
 promise.then(result => result.veryLongVariable.veryLongPropertyName > someOtherVariable ? "ok" : "fail");
 
 =====================================output=====================================
-const testResults = results.testResults.map(testResult =>
+const testResults = results.testResults.map((testResult) =>
   formatResult(testResult, formatter, reporter),
 );
 
@@ -194,16 +194,16 @@ expect(() =>
 ).not.toThrowError();
 
 const a = Observable.fromPromise(axiosInstance.post("/carts/mine")).map(
-  response => response.data,
+  (response) => response.data,
 );
 
 const b = Observable.fromPromise(axiosInstance.get(url)).map(
-  response => response.data,
+  (response) => response.data,
 );
 
 func(
   veryLoooooooooooooooooooooooongName,
-  veryLooooooooooooooooooooooooongName =>
+  (veryLooooooooooooooooooooooooongName) =>
     veryLoooooooooooooooongName.something(),
 );
 
@@ -212,7 +212,7 @@ const composition = (ViewComponent, ContainerComponent) =>
     static propTypes = {};
   };
 
-promise.then(result =>
+promise.then((result) =>
   result.veryLongVariable.veryLongPropertyName > someOtherVariable
     ? "ok"
     : "fail",
diff --git a/tests/arrows/__snapshots__/jsfmt.spec.js.snap b/tests/arrows/__snapshots__/jsfmt.spec.js.snap
index c8de85468c5c..e1137dd5a0fd 100644
--- a/tests/arrows/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/arrows/__snapshots__/jsfmt.spec.js.snap
@@ -2,7 +2,7 @@
 
 exports[`arrow_function_expression.js 1`] = `
 ====================================options=====================================
-arrowParens: "avoid"
+arrowParens: "always"
 parsers: ["babel", "typescript"]
 printWidth: 80
                                                                                 | printWidth
@@ -44,7 +44,7 @@ a = b => {
 };
 
 =====================================output=====================================
-(a => {}).length;
+((a) => {}).length;
 typeof (() => {});
 export default (() => {})();
 (() => {})()\`\`;
@@ -64,20 +64,20 @@ a = () => ({}[b] && a);
 a = () => ({}\`\` && a);
 a = () => ({} = 0);
 a = () => ({}, a);
-a => a instanceof {};
-a => ({}().b && 0);
-a => ({}().c = 0);
-x => ({}()());
-x => ({}()\`\`);
-x => ({}().b);
-a = b => c;
+(a) => a instanceof {};
+(a) => ({}().b && 0);
+(a) => ({}().c = 0);
+(x) => ({}()());
+(x) => ({}()\`\`);
+(x) => ({}().b);
+a = (b) => c;
 a = (b?) => c;
-x => (y = z);
-x => (y += z);
-f(a => ({})) + 1;
-(a => ({})) || 0;
-a = b => c;
-a = b => {
+(x) => (y = z);
+(x) => (y += z);
+f((a) => ({})) + 1;
+((a) => ({})) || 0;
+a = (b) => c;
+a = (b) => {
   return c;
 };
 
@@ -86,7 +86,7 @@ a = b => {
 
 exports[`arrow_function_expression.js 2`] = `
 ====================================options=====================================
-arrowParens: "always"
+arrowParens: "avoid"
 parsers: ["babel", "typescript"]
 printWidth: 80
                                                                                 | printWidth
@@ -128,7 +128,7 @@ a = b => {
 };
 
 =====================================output=====================================
-((a) => {}).length;
+(a => {}).length;
 typeof (() => {});
 export default (() => {})();
 (() => {})()\`\`;
@@ -148,20 +148,20 @@ a = () => ({}[b] && a);
 a = () => ({}\`\` && a);
 a = () => ({} = 0);
 a = () => ({}, a);
-(a) => a instanceof {};
-(a) => ({}().b && 0);
-(a) => ({}().c = 0);
-(x) => ({}()());
-(x) => ({}()\`\`);
-(x) => ({}().b);
-a = (b) => c;
+a => a instanceof {};
+a => ({}().b && 0);
+a => ({}().c = 0);
+x => ({}()());
+x => ({}()\`\`);
+x => ({}().b);
+a = b => c;
 a = (b?) => c;
-(x) => (y = z);
-(x) => (y += z);
-f((a) => ({})) + 1;
-((a) => ({})) || 0;
-a = (b) => c;
-a = (b) => {
+x => (y = z);
+x => (y += z);
+f(a => ({})) + 1;
+(a => ({})) || 0;
+a = b => c;
+a = b => {
   return c;
 };
 
@@ -170,7 +170,7 @@ a = (b) => {
 
 exports[`block_like.js 1`] = `
 ====================================options=====================================
-arrowParens: "avoid"
+arrowParens: "always"
 parsers: ["babel", "typescript"]
 printWidth: 80
                                                                                 | printWidth
@@ -185,7 +185,7 @@ a = () => ({} = this);
 
 exports[`block_like.js 2`] = `
 ====================================options=====================================
-arrowParens: "always"
+arrowParens: "avoid"
 parsers: ["babel", "typescript"]
 printWidth: 80
                                                                                 | printWidth
@@ -200,7 +200,7 @@ a = () => ({} = this);
 
 exports[`call.js 1`] = `
 ====================================options=====================================
-arrowParens: "avoid"
+arrowParens: "always"
 parsers: ["babel", "typescript"]
 printWidth: 80
                                                                                 | printWidth
@@ -605,7 +605,7 @@ foo(
 );
 
 =====================================output=====================================
-Seq(typeDef.interface.groups).forEach(group =>
+Seq(typeDef.interface.groups).forEach((group) =>
   Seq(group.members).forEach((member, memberName) =>
     markdownDoc(member.doc, {
       typePath: typePath.concat(memberName.slice(1)),
@@ -614,7 +614,7 @@ Seq(typeDef.interface.groups).forEach(group =>
   )
 );
 
-const promiseFromCallback = fn =>
+const promiseFromCallback = (fn) =>
   new Promise((resolve, reject) =>
     fn((err, result) => {
       if (err) return reject(err);
@@ -636,7 +636,7 @@ function render() {
   return (
     <View>
       <Image
-        onProgress={e =>
+        onProgress={(e) =>
           this.setState({
             progress: Math.round(
               (100 * e.nativeEvent.loaded) / e.nativeEvent.total
@@ -652,7 +652,7 @@ function render() {
   return (
     <View>
       <Image
-        onProgress={e =>
+        onProgress={(e) =>
           this.setState({
             progress: Math.round(
               (100 * e.nativeEvent.loaded) / e.nativeEvent.total
@@ -668,7 +668,7 @@ function render() {
   return (
     <View>
       <Image
-        onProgress={e =>
+        onProgress={(e) =>
           this.setState({
             progress: Math.round(
               (100 * e.nativeEvent.loaded) / e.nativeEvent.total
@@ -690,7 +690,7 @@ jest.mock(
     }
 );
 
-fooooooooooooooooooooooooooooooooooooooooooooooooooo(action => next =>
+fooooooooooooooooooooooooooooooooooooooooooooooooooo((action) => (next) =>
   dispatch(action)
 );
 
@@ -997,7 +997,7 @@ foo(
 
 exports[`call.js 2`] = `
 ====================================options=====================================
-arrowParens: "always"
+arrowParens: "avoid"
 parsers: ["babel", "typescript"]
 printWidth: 80
                                                                                 | printWidth
@@ -1402,7 +1402,7 @@ foo(
 );
 
 =====================================output=====================================
-Seq(typeDef.interface.groups).forEach((group) =>
+Seq(typeDef.interface.groups).forEach(group =>
   Seq(group.members).forEach((member, memberName) =>
     markdownDoc(member.doc, {
       typePath: typePath.concat(memberName.slice(1)),
@@ -1411,7 +1411,7 @@ Seq(typeDef.interface.groups).forEach((group) =>
   )
 );
 
-const promiseFromCallback = (fn) =>
+const promiseFromCallback = fn =>
   new Promise((resolve, reject) =>
     fn((err, result) => {
       if (err) return reject(err);
@@ -1433,7 +1433,7 @@ function render() {
   return (
     <View>
       <Image
-        onProgress={(e) =>
+        onProgress={e =>
           this.setState({
             progress: Math.round(
               (100 * e.nativeEvent.loaded) / e.nativeEvent.total
@@ -1449,7 +1449,7 @@ function render() {
   return (
     <View>
       <Image
-        onProgress={(e) =>
+        onProgress={e =>
           this.setState({
             progress: Math.round(
               (100 * e.nativeEvent.loaded) / e.nativeEvent.total
@@ -1465,7 +1465,7 @@ function render() {
   return (
     <View>
       <Image
-        onProgress={(e) =>
+        onProgress={e =>
           this.setState({
             progress: Math.round(
               (100 * e.nativeEvent.loaded) / e.nativeEvent.total
@@ -1487,7 +1487,7 @@ jest.mock(
     }
 );
 
-fooooooooooooooooooooooooooooooooooooooooooooooooooo((action) => (next) =>
+fooooooooooooooooooooooooooooooooooooooooooooooooooo(action => next =>
   dispatch(action)
 );
 
@@ -1794,7 +1794,7 @@ foo(
 
 exports[`comment.js 1`] = `
 ====================================options=====================================
-arrowParens: "avoid"
+arrowParens: "always"
 parsers: ["babel", "typescript"]
 printWidth: 80
                                                                                 | printWidth
@@ -1837,17 +1837,17 @@ export const bem = block =>
  * @param {String} block - the BEM Block you'd like to select.
  * @returns {Function}
  */
-export const bem = block =>
+export const bem = (block) =>
   /**
    * @param {String} [element] - the BEM Element within that block; if undefined, selects the block itself.
    * @returns {Function}
    */
-  element =>
+  (element) =>
     /**
      * @param {?String} [modifier] - the BEM Modifier for the Block or Element; if undefined, selects the Block or Element unmodified.
      * @returns {String}
      */
-    modifier =>
+    (modifier) =>
       [
         ".",
         css(block),
@@ -1867,7 +1867,7 @@ export const bem = block =>
 
 exports[`comment.js 2`] = `
 ====================================options=====================================
-arrowParens: "always"
+arrowParens: "avoid"
 parsers: ["babel", "typescript"]
 printWidth: 80
                                                                                 | printWidth
@@ -1910,17 +1910,17 @@ export const bem = block =>
  * @param {String} block - the BEM Block you'd like to select.
  * @returns {Function}
  */
-export const bem = (block) =>
+export const bem = block =>
   /**
    * @param {String} [element] - the BEM Element within that block; if undefined, selects the block itself.
    * @returns {Function}
    */
-  (element) =>
+  element =>
     /**
      * @param {?String} [modifier] - the BEM Modifier for the Block or Element; if undefined, selects the Block or Element unmodified.
      * @returns {String}
      */
-    (modifier) =>
+    modifier =>
       [
         ".",
         css(block),
@@ -1940,7 +1940,7 @@ export const bem = (block) =>
 
 exports[`currying.js 1`] = `
 ====================================options=====================================
-arrowParens: "avoid"
+arrowParens: "always"
 parsers: ["babel", "typescript"]
 printWidth: 80
                                                                                 | printWidth
@@ -1964,21 +1964,21 @@ const middleware = options => (req, res, next) => {
 };
 
 =====================================output=====================================
-const fn = b => c => d => {
+const fn = (b) => (c) => (d) => {
   return 3;
 };
 
-const foo = (a, b) => c => d => {
+const foo = (a, b) => (c) => (d) => {
   return 3;
 };
 
-const bar = a => b => c => a + b + c;
+const bar = (a) => (b) => (c) => a + b + c;
 
-const mw = store => next => action => {
+const mw = (store) => (next) => (action) => {
   return next(action);
 };
 
-const middleware = options => (req, res, next) => {
+const middleware = (options) => (req, res, next) => {
   // ...
 };
 
@@ -1987,7 +1987,7 @@ const middleware = options => (req, res, next) => {
 
 exports[`currying.js 2`] = `
 ====================================options=====================================
-arrowParens: "always"
+arrowParens: "avoid"
 parsers: ["babel", "typescript"]
 printWidth: 80
                                                                                 | printWidth
@@ -2011,21 +2011,21 @@ const middleware = options => (req, res, next) => {
 };
 
 =====================================output=====================================
-const fn = (b) => (c) => (d) => {
+const fn = b => c => d => {
   return 3;
 };
 
-const foo = (a, b) => (c) => (d) => {
+const foo = (a, b) => c => d => {
   return 3;
 };
 
-const bar = (a) => (b) => (c) => a + b + c;
+const bar = a => b => c => a + b + c;
 
-const mw = (store) => (next) => (action) => {
+const mw = store => next => action => {
   return next(action);
 };
 
-const middleware = (options) => (req, res, next) => {
+const middleware = options => (req, res, next) => {
   // ...
 };
 
@@ -2034,7 +2034,7 @@ const middleware = (options) => (req, res, next) => {
 
 exports[`long-call-no-args.js 1`] = `
 ====================================options=====================================
-arrowParens: "avoid"
+arrowParens: "always"
 parsers: ["babel", "typescript"]
 printWidth: 80
                                                                                 | printWidth
@@ -2052,7 +2052,7 @@ veryLongCall(
 
 exports[`long-call-no-args.js 2`] = `
 ====================================options=====================================
-arrowParens: "always"
+arrowParens: "avoid"
 parsers: ["babel", "typescript"]
 printWidth: 80
                                                                                 | printWidth
@@ -2070,7 +2070,7 @@ veryLongCall(
 
 exports[`long-contents.js 1`] = `
 ====================================options=====================================
-arrowParens: "avoid"
+arrowParens: "always"
 parsers: ["babel", "typescript"]
 printWidth: 80
                                                                                 | printWidth
@@ -2094,7 +2094,7 @@ const foo = () => {
 
 exports[`long-contents.js 2`] = `
 ====================================options=====================================
-arrowParens: "always"
+arrowParens: "avoid"
 parsers: ["babel", "typescript"]
 printWidth: 80
                                                                                 | printWidth
@@ -2118,7 +2118,7 @@ const foo = () => {
 
 exports[`parens.js 1`] = `
 ====================================options=====================================
-arrowParens: "avoid"
+arrowParens: "always"
 parsers: ["babel", "typescript"]
 printWidth: 80
                                                                                 | printWidth
@@ -2141,35 +2141,35 @@ foo(a => b, d)
 
 =====================================output=====================================
 promise.then(
-  result => result,
-  err => err
+  (result) => result,
+  (err) => err
 );
 
 promise.then(
-  result => {
+  (result) => {
     f();
     return result;
   },
-  err => {
+  (err) => {
     f();
     return err;
   }
 );
 
-foo(a => b);
-foo(a => {
+foo((a) => b);
+foo((a) => {
   return b;
 });
-foo(c, a => b);
-foo(c, a => b, d);
-foo(a => b, d);
+foo(c, (a) => b);
+foo(c, (a) => b, d);
+foo((a) => b, d);
 
 ================================================================================
 `;
 
 exports[`parens.js 2`] = `
 ====================================options=====================================
-arrowParens: "always"
+arrowParens: "avoid"
 parsers: ["babel", "typescript"]
 printWidth: 80
                                                                                 | printWidth
@@ -2192,35 +2192,35 @@ foo(a => b, d)
 
 =====================================output=====================================
 promise.then(
-  (result) => result,
-  (err) => err
+  result => result,
+  err => err
 );
 
 promise.then(
-  (result) => {
+  result => {
     f();
     return result;
   },
-  (err) => {
+  err => {
     f();
     return err;
   }
 );
 
-foo((a) => b);
-foo((a) => {
+foo(a => b);
+foo(a => {
   return b;
 });
-foo(c, (a) => b);
-foo(c, (a) => b, d);
-foo((a) => b, d);
+foo(c, a => b);
+foo(c, a => b, d);
+foo(a => b, d);
 
 ================================================================================
 `;
 
 exports[`short_body.js 1`] = `
 ====================================options=====================================
-arrowParens: "avoid"
+arrowParens: "always"
 parsers: ["babel", "typescript"]
 printWidth: 80
                                                                                 | printWidth
@@ -2245,7 +2245,7 @@ const initializeSnapshotState = (
 
 exports[`short_body.js 2`] = `
 ====================================options=====================================
-arrowParens: "always"
+arrowParens: "avoid"
 parsers: ["babel", "typescript"]
 printWidth: 80
                                                                                 | printWidth
@@ -2270,7 +2270,7 @@ const initializeSnapshotState = (
 
 exports[`type_params.js 1`] = `
 ====================================options=====================================
-arrowParens: "avoid"
+arrowParens: "always"
 parsers: ["babel", "typescript"]
 printWidth: 80
                                                                                 | printWidth
@@ -2285,7 +2285,7 @@ printWidth: 80
 
 exports[`type_params.js 2`] = `
 ====================================options=====================================
-arrowParens: "always"
+arrowParens: "avoid"
 parsers: ["babel", "typescript"]
 printWidth: 80
                                                                                 | printWidth
diff --git a/tests/arrows/jsfmt.spec.js b/tests/arrows/jsfmt.spec.js
index d8f3a83ac2d1..8ac4df02da1c 100644
--- a/tests/arrows/jsfmt.spec.js
+++ b/tests/arrows/jsfmt.spec.js
@@ -1,2 +1,2 @@
-run_spec(__dirname, ["babel", "typescript"], { arrowParens: "avoid" });
 run_spec(__dirname, ["babel", "typescript"], { arrowParens: "always" });
+run_spec(__dirname, ["babel", "typescript"], { arrowParens: "avoid" });
diff --git a/tests/arrows_bind/__snapshots__/jsfmt.spec.js.snap b/tests/arrows_bind/__snapshots__/jsfmt.spec.js.snap
index 2aef3fed3bb2..143efa2709d6 100644
--- a/tests/arrows_bind/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/arrows_bind/__snapshots__/jsfmt.spec.js.snap
@@ -11,9 +11,9 @@ a => ({}::b()\`\`[''].c++ && 0 ? 0 : 0);
 a::(b => c);
 
 =====================================output=====================================
-a => ({}::b()\`\`[""].c++ && 0 ? 0 : 0);
-(a => b)::c;
-a::(b => c);
+(a) => ({}::b()\`\`[""].c++ && 0 ? 0 : 0);
+((a) => b)::c;
+a::((b) => c);
 
 ================================================================================
 `;
diff --git a/tests/binary-expressions/__snapshots__/jsfmt.spec.js.snap b/tests/binary-expressions/__snapshots__/jsfmt.spec.js.snap
index 7f120df443cf..1bf874e44ea2 100644
--- a/tests/binary-expressions/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/binary-expressions/__snapshots__/jsfmt.spec.js.snap
@@ -23,7 +23,7 @@ function f() {
 =====================================output=====================================
 function f() {
   const appEntities = getAppEntities(loadObject).filter(
-    entity =>
+    (entity) =>
       entity &&
       entity.isInstallAvailable() &&
       !entity.isQueue() &&
@@ -33,7 +33,7 @@ function f() {
 
 function f() {
   const appEntities = getAppEntities(loadObject).map(
-    entity =>
+    (entity) =>
       entity &&
       entity.isInstallAvailable() &&
       !entity.isQueue() &&
@@ -778,7 +778,7 @@ foooooooooooooooooooooooooooooooooooooooooooooooooooooooooo(
 const isPartOfPackageJSON =
   dependenciesArray.indexOf(dependencyWithOutRelativePath.split("/")[0]) !== -1;
 
-defaultContent.filter(defaultLocale => {
+defaultContent.filter((defaultLocale) => {
   // ...
 })[0] || null;
 
diff --git a/tests/bind_expressions/__snapshots__/jsfmt.spec.js.snap b/tests/bind_expressions/__snapshots__/jsfmt.spec.js.snap
index 7c1d2b63bbfd..658c64b12982 100644
--- a/tests/bind_expressions/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/bind_expressions/__snapshots__/jsfmt.spec.js.snap
@@ -297,11 +297,11 @@ import { takeUntil } from "rxjs/operator/takeUntil";
 
 function test(observable) {
   return observable
-    ::filter(data => data.someTest)
+    ::filter((data) => data.someTest)
     ::throttle(() =>
       interval(10)
         ::take(1)
-        ::takeUntil(observable::filter(data => someOtherTest))
+        ::takeUntil(observable::filter((data) => someOtherTest))
     )
     ::map(someFunction);
 }
@@ -344,11 +344,11 @@ import { takeUntil } from "rxjs/operator/takeUntil"
 
 function test(observable) {
   return observable
-    ::filter(data => data.someTest)
+    ::filter((data) => data.someTest)
     ::throttle(() =>
       interval(10)
         ::take(1)
-        ::takeUntil(observable::filter(data => someOtherTest))
+        ::takeUntil(observable::filter((data) => someOtherTest))
     )
     ::map(someFunction)
 }
diff --git a/tests/break-calls/__snapshots__/jsfmt.spec.js.snap b/tests/break-calls/__snapshots__/jsfmt.spec.js.snap
index c3c7d27b9339..3cb4792cef1b 100644
--- a/tests/break-calls/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/break-calls/__snapshots__/jsfmt.spec.js.snap
@@ -78,14 +78,14 @@ deepCopyAndAsyncMapLeavesC(
 
 function someFunction(url) {
   return get(url).then(
-    json => dispatch(success(json)),
-    error => dispatch(failed(error))
+    (json) => dispatch(success(json)),
+    (error) => dispatch(failed(error))
   );
 }
 
 const mapChargeItems = fp.flow(
-  l => (l < 10 ? l : 1),
-  l => Immutable.Range(l).toMap()
+  (l) => (l < 10 ? l : 1),
+  (l) => Immutable.Range(l).toMap()
 );
 
 expect(
diff --git a/tests/comments/__snapshots__/jsfmt.spec.js.snap b/tests/comments/__snapshots__/jsfmt.spec.js.snap
index 3666341c301a..56209f8967fb 100644
--- a/tests/comments/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/comments/__snapshots__/jsfmt.spec.js.snap
@@ -4576,7 +4576,7 @@ let // Comment
 
 const foo3 = 123;
 // Nothing to see here.
-["2", "3"].forEach(x => console.log(x));
+["2", "3"].forEach((x) => console.log(x));
 
 ================================================================================
 `;
@@ -4727,7 +4727,7 @@ let // Comment
 
 const foo3 = 123
 // Nothing to see here.
-;["2", "3"].forEach(x => console.log(x))
+;["2", "3"].forEach((x) => console.log(x))
 
 ================================================================================
 `;
diff --git a/tests/comments_closure_typecast/__snapshots__/jsfmt.spec.js.snap b/tests/comments_closure_typecast/__snapshots__/jsfmt.spec.js.snap
index 583b344c2fd0..3fcc5c771819 100644
--- a/tests/comments_closure_typecast/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/comments_closure_typecast/__snapshots__/jsfmt.spec.js.snap
@@ -100,16 +100,16 @@ function returnValue() {
 }
 
 // Only numberOrString is typecast
-var newArray = /** @type {array} */ (numberOrString).map(x => x);
-var newArray = /** @type {array} */ (numberOrString).map(x => x);
-var newArray = test(/** @type {array} */ (numberOrString).map(x => x));
-var newArray = test(/** @type {array} */ (numberOrString).map(x => x));
+var newArray = /** @type {array} */ (numberOrString).map((x) => x);
+var newArray = /** @type {array} */ (numberOrString).map((x) => x);
+var newArray = test(/** @type {array} */ (numberOrString).map((x) => x));
+var newArray = test(/** @type {array} */ (numberOrString).map((x) => x));
 
 // The numberOrString.map CallExpression is typecast
-var newArray = /** @type {array} */ (numberOrString.map(x => x));
-var newArray = /** @type {array} */ (numberOrString.map(x => x));
-var newArray = test(/** @type {array} */ (numberOrString.map(x => x)));
-var newArray = test(/** @type {array} */ (numberOrString.map(x => x)));
+var newArray = /** @type {array} */ (numberOrString.map((x) => x));
+var newArray = /** @type {array} */ (numberOrString.map((x) => x));
+var newArray = test(/** @type {array} */ (numberOrString.map((x) => x)));
+var newArray = test(/** @type {array} */ (numberOrString.map((x) => x)));
 
 test(/** @type {number} */ (num) + 1);
 test(/** @type {!Array} */ (arrOrString).length + 1);
diff --git a/tests/conditional/__snapshots__/jsfmt.spec.js.snap b/tests/conditional/__snapshots__/jsfmt.spec.js.snap
index 5419aac2aceb..9f1355bfd8d1 100644
--- a/tests/conditional/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/conditional/__snapshots__/jsfmt.spec.js.snap
@@ -119,7 +119,7 @@ var x = a <= 1 ? 2 : 3;
 
 =====================================output=====================================
 // no-confusing-arrow
-var x = a => (1 ? 2 : 3);
+var x = (a) => (1 ? 2 : 3);
 var x = a <= 1 ? 2 : 3;
 
 ================================================================================
diff --git a/tests/cursor/jsfmt.spec.js b/tests/cursor/jsfmt.spec.js
index a0d2415d2887..b16ec2b2f5c8 100644
--- a/tests/cursor/jsfmt.spec.js
+++ b/tests/cursor/jsfmt.spec.js
@@ -39,10 +39,10 @@ foo('bar', cb => {
   expect(
     prettier.formatWithCursor(code, { parser: "babel", cursorOffset: 24 })
   ).toEqual({
-    formatted: `foo("bar", cb => {
+    formatted: `foo("bar", (cb) => {
   console.log("stuff");
 });
 `,
-    cursorOffset: 23
+    cursorOffset: 25
   });
 });
diff --git a/tests/decorators-ts/__snapshots__/jsfmt.spec.js.snap b/tests/decorators-ts/__snapshots__/jsfmt.spec.js.snap
index 195ddeae1bc6..87971cfab700 100644
--- a/tests/decorators-ts/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/decorators-ts/__snapshots__/jsfmt.spec.js.snap
@@ -321,7 +321,7 @@ export class Board {
   @Column()
   description: string;
 
-  @OneToMany(type => Topic, topic => topic.board)
+  @OneToMany((type) => Topic, (topic) => topic.board)
   topics: Topic[];
 }
 
diff --git a/tests/decorators/__snapshots__/jsfmt.spec.js.snap b/tests/decorators/__snapshots__/jsfmt.spec.js.snap
index 0043aa91f3d7..30730d01c95e 100644
--- a/tests/decorators/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/decorators/__snapshots__/jsfmt.spec.js.snap
@@ -373,7 +373,7 @@ export class Home extends React.Component {}
 @connect(mapStateToProps, mapDispatchToProps)
 export class MyApp extends React.Component {}
 
-@connect(state => ({ todos: state.todos }))
+@connect((state) => ({ todos: state.todos }))
 export class Home extends React.Component {}
 
 ================================================================================
diff --git a/tests/dynamic_import/__snapshots__/jsfmt.spec.js.snap b/tests/dynamic_import/__snapshots__/jsfmt.spec.js.snap
index 785169c56f92..884a6d559623 100644
--- a/tests/dynamic_import/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/dynamic_import/__snapshots__/jsfmt.spec.js.snap
@@ -11,7 +11,7 @@ import("module.js").then((a) => a);
 
 =====================================output=====================================
 import("module.js");
-import("module.js").then(a => a);
+import("module.js").then((a) => a);
 
 ================================================================================
 `;
diff --git a/tests/first_argument_expansion/__snapshots__/jsfmt.spec.js.snap b/tests/first_argument_expansion/__snapshots__/jsfmt.spec.js.snap
index 14deed990671..3b8e55629361 100644
--- a/tests/first_argument_expansion/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/first_argument_expansion/__snapshots__/jsfmt.spec.js.snap
@@ -137,7 +137,7 @@ func(function () {
   thing();
 }, this.props.timeout * 1000);
 
-func(that => {
+func((that) => {
   thing();
 }, this.props.getTimeout());
 
@@ -202,10 +202,10 @@ func(
 );
 
 compose(
-  a => {
+  (a) => {
     return a.thing;
   },
-  b => b * b
+  (b) => b * b
 );
 
 somthing.reduce(function (item, thing) {
@@ -241,23 +241,23 @@ func(
 );
 
 compose(
-  a => {
+  (a) => {
     return a.thing;
   },
-  b => {
+  (b) => {
     return b + "";
   }
 );
 
 compose(
-  a => {
+  (a) => {
     return a.thing;
   },
-  b => [1, 2, 3, 4, 5]
+  (b) => [1, 2, 3, 4, 5]
 );
 
 renderThing(
-  a => <div>Content. So much to say. Oh my. Are we done yet?</div>,
+  (a) => <div>Content. So much to say. Oh my. Are we done yet?</div>,
   args
 );
 
@@ -277,10 +277,10 @@ setTimeout(
 );
 
 func(
-  args => {
+  (args) => {
     execute(args);
   },
-  result => result && console.log("success")
+  (result) => result && console.log("success")
 );
 
 ================================================================================
diff --git a/tests/flow/annot/__snapshots__/jsfmt.spec.js.snap b/tests/flow/annot/__snapshots__/jsfmt.spec.js.snap
index 9acee773cb75..9ae4ee9bef47 100644
--- a/tests/flow/annot/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/flow/annot/__snapshots__/jsfmt.spec.js.snap
@@ -123,7 +123,7 @@ function param_anno2(
   // just assign result to new var instead of reassigning to param.
 
   // Transform the requests to the format the Graph API expects.
-  batchRequests = batchRequests.map(request => {
+  batchRequests = batchRequests.map((request) => {
     return {
       method: request.method,
       params: request.params,
diff --git a/tests/flow/any/__snapshots__/jsfmt.spec.js.snap b/tests/flow/any/__snapshots__/jsfmt.spec.js.snap
index 5b9688ec6dd2..04f6d6b83548 100644
--- a/tests/flow/any/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/flow/any/__snapshots__/jsfmt.spec.js.snap
@@ -183,7 +183,7 @@ module.exports = (x) => x;
 =====================================output=====================================
 // @noflow
 
-module.exports = x => x;
+module.exports = (x) => x;
 
 ================================================================================
 `;
diff --git a/tests/flow/array-filter/__snapshots__/jsfmt.spec.js.snap b/tests/flow/array-filter/__snapshots__/jsfmt.spec.js.snap
index ec5ed698aff8..ff9ae4c7f4e4 100644
--- a/tests/flow/array-filter/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/flow/array-filter/__snapshots__/jsfmt.spec.js.snap
@@ -24,7 +24,7 @@ function filterOutVoids<T>(arr: Array<?T>): Array<T> {
 }
 
 function filterOutSmall(arr: Array<?number>): Array<?number> {
-  return arr.filter(num => num && num > 10);
+  return arr.filter((num) => num && num > 10);
 }
 
 ================================================================================
@@ -57,7 +57,7 @@ console.log(filteredItems);
 
 function filterItems(items: Array<string | number>): Array<string | number> {
   return items
-    .map(item => {
+    .map((item) => {
       if (typeof item === "string") {
         return item.length > 2 ? item : null;
       } else {
diff --git a/tests/flow/arrays/__snapshots__/jsfmt.spec.js.snap b/tests/flow/arrays/__snapshots__/jsfmt.spec.js.snap
index bb93e6a16ca0..62650877c982 100644
--- a/tests/flow/arrays/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/flow/arrays/__snapshots__/jsfmt.spec.js.snap
@@ -57,7 +57,7 @@ a[1] = "...";
 
 foo(a[1]);
 var y;
-a.forEach(x => (y = x));
+a.forEach((x) => (y = x));
 
 // for literals, composite element type is union of individuals
 // note: test both tuple and non-tuple inferred literals
diff --git a/tests/flow/arrows/__snapshots__/jsfmt.spec.js.snap b/tests/flow/arrows/__snapshots__/jsfmt.spec.js.snap
index 380a3aaee756..8b1968c23f31 100644
--- a/tests/flow/arrows/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/flow/arrows/__snapshots__/jsfmt.spec.js.snap
@@ -60,7 +60,7 @@ function selectBestEffortImageForWidth(
   //images = images.sort(function (a, b) { return a.width - b.width });
   images = images.sort((a, b) => a.width - b.width + "");
   return (
-    images.find(image => image.width >= maxPixelWidth) ||
+    images.find((image) => image.width >= maxPixelWidth) ||
     images[images.length - 1]
   );
 }
diff --git a/tests/flow/async_iteration/__snapshots__/jsfmt.spec.js.snap b/tests/flow/async_iteration/__snapshots__/jsfmt.spec.js.snap
index d393c627c709..25277c0e2fa3 100644
--- a/tests/flow/async_iteration/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/flow/async_iteration/__snapshots__/jsfmt.spec.js.snap
@@ -160,7 +160,7 @@ declare var gen: AsyncGenerator<void, string, void>;
 
 // You can pass whatever you like to return, it doesn't need to be related to
 // the AsyncGenerator's return type
-gen.return(0).then(result => {
+gen.return(0).then((result) => {
   (result.value: void); // error: string | number ~> void
 });
 
@@ -175,7 +175,7 @@ async function *refuse_return() {
 }
 refuse_return()
   .return("string")
-  .then(result => {
+  .then((result) => {
     if (result.done) {
       (result.value: string); // error: number | void ~> string
     }
diff --git a/tests/flow/call_caching1/__snapshots__/jsfmt.spec.js.snap b/tests/flow/call_caching1/__snapshots__/jsfmt.spec.js.snap
index 98a4a4f47ae2..2e0cd28838af 100644
--- a/tests/flow/call_caching1/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/flow/call_caching1/__snapshots__/jsfmt.spec.js.snap
@@ -23,7 +23,7 @@ for (let [taskStatus, tasksMap] of tasksPerStatusMap) {
 const Immutable = require("immutable");
 
 const tasksPerStatusMap = new Map(
-  [].map(taskStatus => [taskStatus, new Map()])
+  [].map((taskStatus) => [taskStatus, new Map()])
 );
 for (let [taskStatus, tasksMap] of tasksPerStatusMap) {
   tasksPerStatusMap.set(taskStatus, Immutable.Map(tasksMap));
@@ -72,7 +72,7 @@ declare function foo<U>(
 declare var items: Bar<string>;
 declare var updater: (value: Bar<string>) => Bar<string>;
 
-foo(items, acc => acc.update(updater));
+foo(items, (acc) => acc.update(updater));
 
 ================================================================================
 `;
diff --git a/tests/flow/call_properties/__snapshots__/jsfmt.spec.js.snap b/tests/flow/call_properties/__snapshots__/jsfmt.spec.js.snap
index 5026d9bf41a0..aefbbc8292c3 100644
--- a/tests/flow/call_properties/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/flow/call_properties/__snapshots__/jsfmt.spec.js.snap
@@ -339,27 +339,27 @@ var z : Object = (x) => "hi"
 =====================================output=====================================
 // You should be able to use an arrow function as an object with a call property
 
-var a: { (x: number): string } = x => x.toString();
+var a: { (x: number): string } = (x) => x.toString();
 
 // ...and it should notice when the return type is wrong
-var b: { (x: number): number } = x => "hi";
+var b: { (x: number): number } = (x) => "hi";
 
 // ...or if the param type is wrong
-var c: { (x: string): string } = x => x.toFixed();
+var c: { (x: string): string } = (x) => x.toFixed();
 
 // ...or if the arity is wrong
-var d: { (): string } = x => "hi";
+var d: { (): string } = (x) => "hi";
 
 // ...but subtyping rules still apply
 var e: { (x: any): void } = () => {}; // arity
 var f: { (): mixed } = () => "hi"; // return type
-var g: { (x: Date): void } = x => {
+var g: { (x: Date): void } = (x) => {
   x * 2;
 }; // param type (date < number)
 
 // A function can be an object
-var y: {} = x => "hi";
-var z: Object = x => "hi";
+var y: {} = (x) => "hi";
+var z: Object = (x) => "hi";
 
 ================================================================================
 `;
diff --git a/tests/flow/disjoint-union-perf/__snapshots__/jsfmt.spec.js.snap b/tests/flow/disjoint-union-perf/__snapshots__/jsfmt.spec.js.snap
index 17ad46002046..866c233375b3 100644
--- a/tests/flow/disjoint-union-perf/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/flow/disjoint-union-perf/__snapshots__/jsfmt.spec.js.snap
@@ -298,7 +298,7 @@ export function emitExpression(node: TypedNode): t.Expression {
         false
       );
 
-      const args = node.parameters.map(n => emitExpression(n));
+      const args = node.parameters.map((n) => emitExpression(n));
 
       return b.callExpression(callee, args);
     }
diff --git a/tests/flow/dom/__snapshots__/jsfmt.spec.js.snap b/tests/flow/dom/__snapshots__/jsfmt.spec.js.snap
index 13a8ed597adb..1ca23d287b96 100644
--- a/tests/flow/dom/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/flow/dom/__snapshots__/jsfmt.spec.js.snap
@@ -926,14 +926,14 @@ let tests = [
     document.createNodeIterator(
       document.body,
       -1,
-      node => NodeFilter.FILTER_ACCEPT
+      (node) => NodeFilter.FILTER_ACCEPT
     ); // valid
-    document.createNodeIterator(document.body, -1, node => "accept"); // invalid
+    document.createNodeIterator(document.body, -1, (node) => "accept"); // invalid
     document.createNodeIterator(document.body, -1, {
-      acceptNode: node => NodeFilter.FILTER_ACCEPT,
+      acceptNode: (node) => NodeFilter.FILTER_ACCEPT,
     }); // valid
     document.createNodeIterator(document.body, -1, {
-      acceptNode: node => "accept",
+      acceptNode: (node) => "accept",
     }); // invalid
     document.createNodeIterator(document.body, -1, {}); // invalid
   },
@@ -941,14 +941,14 @@ let tests = [
     document.createTreeWalker(
       document.body,
       -1,
-      node => NodeFilter.FILTER_ACCEPT
+      (node) => NodeFilter.FILTER_ACCEPT
     ); // valid
-    document.createTreeWalker(document.body, -1, node => "accept"); // invalid
+    document.createTreeWalker(document.body, -1, (node) => "accept"); // invalid
     document.createTreeWalker(document.body, -1, {
-      acceptNode: node => NodeFilter.FILTER_ACCEPT,
+      acceptNode: (node) => NodeFilter.FILTER_ACCEPT,
     }); // valid
     document.createTreeWalker(document.body, -1, {
-      acceptNode: node => "accept",
+      acceptNode: (node) => "accept",
     }); // invalid
     document.createTreeWalker(document.body, -1, {}); // invalid
   },
diff --git a/tests/flow/dump-types/__snapshots__/jsfmt.spec.js.snap b/tests/flow/dump-types/__snapshots__/jsfmt.spec.js.snap
index 1fbc144c4fdb..8479edf220be 100644
--- a/tests/flow/dump-types/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/flow/dump-types/__snapshots__/jsfmt.spec.js.snap
@@ -62,7 +62,7 @@ function unannotated(x) {
 }
 
 // test deduping of inferred types
-const nullToUndefined = val => (val === null ? undefined : val);
+const nullToUndefined = (val) => (val === null ? undefined : val);
 
 function f0(x: ?Object) {
   return nullToUndefined(x);
@@ -79,7 +79,7 @@ function f3(x: ?string) {
 
 declare var idx: $Facebookism$Idx;
 declare var obj: { a?: { b: ?{ c: null | { d: number } } } };
-const idxResult = idx(obj, obj => obj.a.b.c.d);
+const idxResult = idx(obj, (obj) => obj.a.b.c.d);
 
 ================================================================================
 `;
diff --git a/tests/flow/fetch/__snapshots__/jsfmt.spec.js.snap b/tests/flow/fetch/__snapshots__/jsfmt.spec.js.snap
index 3c41d6ab0ebe..48fc7b2f223d 100644
--- a/tests/flow/fetch/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/flow/fetch/__snapshots__/jsfmt.spec.js.snap
@@ -40,7 +40,7 @@ const d: Promise<Blob> = fetch('image.png'); // incorrect
 
 const myRequest = new Request("http://google.com");
 
-const a: Promise<string> = fetch(myRequest).then(response => response.text());
+const a: Promise<string> = fetch(myRequest).then((response) => response.text());
 
 const b: Promise<string> = fetch(myRequest); // incorrect
 
@@ -53,7 +53,7 @@ var myInit = {
   cache: "default",
 };
 
-const c: Promise<Blob> = fetch("image.png").then(response => response.blob()); // correct
+const c: Promise<Blob> = fetch("image.png").then((response) => response.blob()); // correct
 
 const d: Promise<Blob> = fetch("image.png"); // incorrect
 
diff --git a/tests/flow/geolocation/__snapshots__/jsfmt.spec.js.snap b/tests/flow/geolocation/__snapshots__/jsfmt.spec.js.snap
index 5fa2cb7dbf89..bdab27f327ec 100644
--- a/tests/flow/geolocation/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/flow/geolocation/__snapshots__/jsfmt.spec.js.snap
@@ -32,11 +32,11 @@ geolocation.clearWatch(id);
 
 var geolocation = new Geolocation();
 var id = geolocation.watchPosition(
-  position => {
+  (position) => {
     var coords: Coordinates = position.coords;
     var accuracy: number = coords.accuracy;
   },
-  e => {
+  (e) => {
     var message: string = e.message;
     switch (e.code) {
       case e.PERMISSION_DENIED:
diff --git a/tests/flow/namespace/__snapshots__/jsfmt.spec.js.snap b/tests/flow/namespace/__snapshots__/jsfmt.spec.js.snap
index e16d854a6c09..e02d5a9f06cf 100644
--- a/tests/flow/namespace/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/flow/namespace/__snapshots__/jsfmt.spec.js.snap
@@ -53,7 +53,7 @@ function bar<U, V>(x: U, f: Map<U, V>): V {
   return f(x);
 }
 
-var y: number = bar(0, x => "");
+var y: number = bar(0, (x) => "");
 
 type Seq = number | Array<Seq>;
 var s1: Seq = [0, [0]];
diff --git a/tests/flow/object_api/__snapshots__/jsfmt.spec.js.snap b/tests/flow/object_api/__snapshots__/jsfmt.spec.js.snap
index 4e215b010412..41476f35ebce 100644
--- a/tests/flow/object_api/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/flow/object_api/__snapshots__/jsfmt.spec.js.snap
@@ -232,12 +232,12 @@ var sealed = { one: "one", two: "two" };
 (Object.keys(sealed): void); // error, Array<string>
 
 var unsealed = {};
-Object.keys(unsealed).forEach(k => {
+Object.keys(unsealed).forEach((k) => {
   (k: number); // error: string ~> number
 });
 
 var dict: { [k: number]: string } = {};
-Object.keys(dict).forEach(k => {
+Object.keys(dict).forEach((k) => {
   (k: number); // error: string ~> number
 });
 
diff --git a/tests/flow/object_is/__snapshots__/jsfmt.spec.js.snap b/tests/flow/object_is/__snapshots__/jsfmt.spec.js.snap
index 86faeb85d80d..73c9877be039 100644
--- a/tests/flow/object_is/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/flow/object_is/__snapshots__/jsfmt.spec.js.snap
@@ -45,7 +45,7 @@ Object.is(emptyObject, emptyObject);
 Object.is(emptyArray, emptyArray);
 Object.is(emptyObject, emptyArray);
 
-var squared = x => x * x;
+var squared = (x) => x * x;
 Object.is(squared, squared);
 
 var a: boolean = Object.is("a", "a");
diff --git a/tests/flow/objmap/__snapshots__/jsfmt.spec.js.snap b/tests/flow/objmap/__snapshots__/jsfmt.spec.js.snap
index 12f4b705c85a..e9408e9863b9 100644
--- a/tests/flow/objmap/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/flow/objmap/__snapshots__/jsfmt.spec.js.snap
@@ -40,7 +40,7 @@ var o = keyMirror({
 promiseAllByKey({
   foo: Promise.resolve(0),
   bar: "bar",
-}).then(o => {
+}).then((o) => {
   (o.foo: string); // error, number ~> string
   (o.bar: "bar"); // ok
 });
diff --git a/tests/flow/optional/__snapshots__/jsfmt.spec.js.snap b/tests/flow/optional/__snapshots__/jsfmt.spec.js.snap
index 05619372d28f..a2503e0678b9 100644
--- a/tests/flow/optional/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/flow/optional/__snapshots__/jsfmt.spec.js.snap
@@ -366,7 +366,7 @@ declare class I<V> {
   map<M>(mapper: (value?: V) => M): I<M>;
 }
 var i: I<number> = new I();
-var j: I<number> = i.map(id => id);
+var j: I<number> = i.map((id) => id);
 
 ================================================================================
 `;
diff --git a/tests/flow/predicates-declared/__snapshots__/jsfmt.spec.js.snap b/tests/flow/predicates-declared/__snapshots__/jsfmt.spec.js.snap
index bcb59b1e3908..940a8574c0d3 100644
--- a/tests/flow/predicates-declared/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/flow/predicates-declared/__snapshots__/jsfmt.spec.js.snap
@@ -297,7 +297,7 @@ function f(_this: { m: ?Meeting }): string {
     return "0";
   }
 
-  if (_this.m.es.some(a => a.fbid === 0)) {
+  if (_this.m.es.some((a) => a.fbid === 0)) {
   }
   return "3";
 }
diff --git a/tests/flow/predicates-parsing/__snapshots__/jsfmt.spec.js.snap b/tests/flow/predicates-parsing/__snapshots__/jsfmt.spec.js.snap
index 8c51232a3540..4cfc73b8d12a 100644
--- a/tests/flow/predicates-parsing/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/flow/predicates-parsing/__snapshots__/jsfmt.spec.js.snap
@@ -154,7 +154,7 @@ const insert_a_really_big_predicated_arrow_function_name_here = (x): %checks =>
 
 declare var x;
 x;
-checks => 123;
+(checks) => 123;
 
 type checks = any;
 
diff --git a/tests/flow/promises/__snapshots__/jsfmt.spec.js.snap b/tests/flow/promises/__snapshots__/jsfmt.spec.js.snap
index 01fd3a1ba0b5..06eb8575254a 100644
--- a/tests/flow/promises/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/flow/promises/__snapshots__/jsfmt.spec.js.snap
@@ -56,7 +56,7 @@ Promise.all([
   pstr,
   pnum,
   true, // non-Promise values passed through
-]).then(xs => {
+]).then((xs) => {
   // tuple information is preserved
   let [a, b, c] = xs;
   (a: number); // Error: string ~> number
@@ -64,7 +64,7 @@ Promise.all([
   (c: string); // Error: boolean ~> string
 
   // array element type is (string | number | boolean)
-  xs.forEach(x => {
+  xs.forEach((x) => {
     (x: void); // Errors: string ~> void, number ~> void, boolean ~> void
   });
 });
diff --git a/tests/flow/react/__snapshots__/jsfmt.spec.js.snap b/tests/flow/react/__snapshots__/jsfmt.spec.js.snap
index b8328838f950..c3825804d7be 100644
--- a/tests/flow/react/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/flow/react/__snapshots__/jsfmt.spec.js.snap
@@ -1088,7 +1088,7 @@ var Example = React.createClass({
 });
 
 var ok_void = <Example func={() => {}} />;
-var ok_args = <Example func={x => {}} />;
+var ok_args = <Example func={(x) => {}} />;
 var ok_retval = <Example func={() => 1} />;
 
 var fail_mistyped = <Example func={2} />;
@@ -1960,7 +1960,7 @@ type NoFun = mixed => empty;
 =====================================output=====================================
 import React from "react";
 
-type NoFun = mixed => empty;
+type NoFun = (mixed) => empty;
 
 // error: mixed ~> ReactPropsCheckType
 // error: ReactPropsChainableTypeChecker ~> empty
diff --git a/tests/flow/spread/__snapshots__/jsfmt.spec.js.snap b/tests/flow/spread/__snapshots__/jsfmt.spec.js.snap
index c74ea4362af0..c0494edda6a6 100644
--- a/tests/flow/spread/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/flow/spread/__snapshots__/jsfmt.spec.js.snap
@@ -220,7 +220,7 @@ function test(
   x: { kind: ?string },
   kinds: { [key: string]: string }
 ): Array<{ kind: ?string }> {
-  return map(kinds, value => {
+  return map(kinds, (value) => {
     (value: string); // OK
     return {
       ...x,
diff --git a/tests/flow/union_new/__snapshots__/jsfmt.spec.js.snap b/tests/flow/union_new/__snapshots__/jsfmt.spec.js.snap
index cbcf9459af99..913b281dc310 100644
--- a/tests/flow/union_new/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/flow/union_new/__snapshots__/jsfmt.spec.js.snap
@@ -848,7 +848,7 @@ type B2 = string;
 
 function fun(a: ((x: number) => void) | ((x: string) => void)) {}
 
-fun((x => {}: A1));
+fun(((x) => {}: A1));
 
 type A1 = (x: B1) => void;
 
@@ -925,7 +925,7 @@ type B2 = string;
 
 function fun(a: ((x: number) => void) | ((x: string) => void)) {}
 
-const a1 = (x => {}: A1);
+const a1 = ((x) => {}: A1);
 fun(a1);
 
 function fun_call(x: string) {
@@ -1386,7 +1386,7 @@ check_inst(id(new C()));
 function check_fun(_: ((_: number) => number) | ((_: string) => string)) {}
 
 // help!
-check_fun(x => x);
+check_fun((x) => x);
 
 //////////////////////
 // object annotations
@@ -1615,7 +1615,7 @@ bar(() => { });
 // functions as objects
 
 function foo<X>(target: EventTarget) {
-  target.addEventListener("click", e => {});
+  target.addEventListener("click", (e) => {});
 }
 
 declare class EventTarget {
diff --git a/tests/flow_function_parentheses/__snapshots__/jsfmt.spec.js.snap b/tests/flow_function_parentheses/__snapshots__/jsfmt.spec.js.snap
index d8b535f2793b..f431f8340cd4 100644
--- a/tests/flow_function_parentheses/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/flow_function_parentheses/__snapshots__/jsfmt.spec.js.snap
@@ -15,7 +15,7 @@ const selectorByPath:
 > = memoizeWithArgs(/* ... */)
 
 =====================================output=====================================
-const selectorByPath: Path => SomethingSelector<
+const selectorByPath: (Path) => SomethingSelector<
   SomethingUEditorContextType,
   SomethingUEditorContextType,
   SomethingBulkValue<string>
@@ -40,7 +40,7 @@ const selectorByPath:
 > = memoizeWithArgs(/* ... */)
 
 =====================================output=====================================
-const selectorByPath: Path => SomethingSelector<
+const selectorByPath: (Path) => SomethingSelector<
   SomethingUEditorContextType,
   SomethingUEditorContextType,
   SomethingBulkValue<string>,
@@ -51,7 +51,7 @@ const selectorByPath: Path => SomethingSelector<
 
 exports[`single.js 3`] = `
 ====================================options=====================================
-arrowParens: "always"
+arrowParens: "avoid"
 parsers: ["flow", "babel"]
 printWidth: 80
                                                                                 | printWidth
@@ -65,7 +65,7 @@ const selectorByPath:
 > = memoizeWithArgs(/* ... */)
 
 =====================================output=====================================
-const selectorByPath: (Path) => SomethingSelector<
+const selectorByPath: Path => SomethingSelector<
   SomethingUEditorContextType,
   SomethingUEditorContextType,
   SomethingBulkValue<string>
@@ -143,12 +143,12 @@ type T8 = ?(?() => A) | B;
 
 =====================================output=====================================
 type Banana = {
-  eat: string => boolean,
+  eat: (string) => boolean,
 };
 
 type Hex = { n: 0x01 };
 
-type T1 = { method: a => void };
+type T1 = { method: (a) => void };
 
 type T2 = { method(a): void };
 
@@ -158,36 +158,36 @@ declare class X {
 
 declare function f(a): void;
 
-var f: a => void;
+var f: (a) => void;
 
 interface F1 {
   m(string): number;
 }
 
 interface F2 {
-  m: string => number;
+  m: (string) => number;
 }
 
-function f1(o: { f: string => void }) {}
+function f1(o: { f: (string) => void }) {}
 
 function f2(o: { f(string): void }) {}
 
 type f3 = (...arg) => void;
 
-type f4 = /* comment */ arg => void;
+type f4 = (/* comment */ arg) => void;
 
-type f5 = arg /* comment */ => void;
+type f5 = (arg /* comment */) => void;
 
 type f6 = (?arg) => void;
 
 class Y {
   constructor(
-    ideConnectionFactory: child_process$ChildProcess => FlowIDEConnection = defaultIDEConnectionFactory
+    ideConnectionFactory: (child_process$ChildProcess) => FlowIDEConnection = defaultIDEConnectionFactory
   ) {}
 }
 
 interface F {
-  ideConnectionFactoryLongLongLong: child_process$ChildProcess => FlowIDEConnection;
+  ideConnectionFactoryLongLongLong: (child_process$ChildProcess) => FlowIDEConnection;
 }
 
 type ExtractType = <A>(B<C>) => D;
@@ -280,12 +280,12 @@ type T8 = ?(?() => A) | B;
 
 =====================================output=====================================
 type Banana = {
-  eat: string => boolean,
+  eat: (string) => boolean,
 };
 
 type Hex = { n: 0x01 };
 
-type T1 = { method: a => void };
+type T1 = { method: (a) => void };
 
 type T2 = { method(a): void };
 
@@ -295,36 +295,36 @@ declare class X {
 
 declare function f(a): void;
 
-var f: a => void;
+var f: (a) => void;
 
 interface F1 {
   m(string): number;
 }
 
 interface F2 {
-  m: string => number;
+  m: (string) => number;
 }
 
-function f1(o: { f: string => void }) {}
+function f1(o: { f: (string) => void }) {}
 
 function f2(o: { f(string): void }) {}
 
 type f3 = (...arg) => void;
 
-type f4 = /* comment */ arg => void;
+type f4 = (/* comment */ arg) => void;
 
-type f5 = arg /* comment */ => void;
+type f5 = (arg /* comment */) => void;
 
 type f6 = (?arg) => void;
 
 class Y {
   constructor(
-    ideConnectionFactory: child_process$ChildProcess => FlowIDEConnection = defaultIDEConnectionFactory,
+    ideConnectionFactory: (child_process$ChildProcess) => FlowIDEConnection = defaultIDEConnectionFactory,
   ) {}
 }
 
 interface F {
-  ideConnectionFactoryLongLongLong: child_process$ChildProcess => FlowIDEConnection;
+  ideConnectionFactoryLongLongLong: (child_process$ChildProcess) => FlowIDEConnection;
 }
 
 type ExtractType = <A>(B<C>) => D;
@@ -349,7 +349,7 @@ type T8 = ??(() => A) | B;
 
 exports[`test.js 3`] = `
 ====================================options=====================================
-arrowParens: "always"
+arrowParens: "avoid"
 parsers: ["flow", "babel"]
 printWidth: 80
                                                                                 | printWidth
@@ -417,12 +417,12 @@ type T8 = ?(?() => A) | B;
 
 =====================================output=====================================
 type Banana = {
-  eat: (string) => boolean,
+  eat: string => boolean,
 };
 
 type Hex = { n: 0x01 };
 
-type T1 = { method: (a) => void };
+type T1 = { method: a => void };
 
 type T2 = { method(a): void };
 
@@ -432,36 +432,36 @@ declare class X {
 
 declare function f(a): void;
 
-var f: (a) => void;
+var f: a => void;
 
 interface F1 {
   m(string): number;
 }
 
 interface F2 {
-  m: (string) => number;
+  m: string => number;
 }
 
-function f1(o: { f: (string) => void }) {}
+function f1(o: { f: string => void }) {}
 
 function f2(o: { f(string): void }) {}
 
 type f3 = (...arg) => void;
 
-type f4 = (/* comment */ arg) => void;
+type f4 = /* comment */ arg => void;
 
-type f5 = (arg /* comment */) => void;
+type f5 = arg /* comment */ => void;
 
 type f6 = (?arg) => void;
 
 class Y {
   constructor(
-    ideConnectionFactory: (child_process$ChildProcess) => FlowIDEConnection = defaultIDEConnectionFactory
+    ideConnectionFactory: child_process$ChildProcess => FlowIDEConnection = defaultIDEConnectionFactory
   ) {}
 }
 
 interface F {
-  ideConnectionFactoryLongLongLong: (child_process$ChildProcess) => FlowIDEConnection;
+  ideConnectionFactoryLongLongLong: child_process$ChildProcess => FlowIDEConnection;
 }
 
 type ExtractType = <A>(B<C>) => D;
diff --git a/tests/flow_function_parentheses/jsfmt.spec.js b/tests/flow_function_parentheses/jsfmt.spec.js
index f610834ea79e..c74418d3fa1f 100644
--- a/tests/flow_function_parentheses/jsfmt.spec.js
+++ b/tests/flow_function_parentheses/jsfmt.spec.js
@@ -1,3 +1,3 @@
 run_spec(__dirname, ["flow", "babel"]);
 run_spec(__dirname, ["flow", "babel"], { trailingComma: "all" });
-run_spec(__dirname, ["flow", "babel"], { arrowParens: "always" });
+run_spec(__dirname, ["flow", "babel"], { arrowParens: "avoid" });
diff --git a/tests/flow_return_arrow/__snapshots__/jsfmt.spec.js.snap b/tests/flow_return_arrow/__snapshots__/jsfmt.spec.js.snap
index e5140a7e3fe6..7fd49f83889f 100644
--- a/tests/flow_return_arrow/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/flow_return_arrow/__snapshots__/jsfmt.spec.js.snap
@@ -36,34 +36,34 @@ const example16 = (): ({ p: { p: { p: (string => string) | string } } }) =>
 const example17 = (): (?{ p: string => string }) => (0: any);
 
 =====================================output=====================================
-const example1 = (): ({ p: string => string }) => (0: any);
-const example2 = (): ({ p: { p: string => string } }) => (0: any);
-const example3 = (): ({ p: { p: { p: string => string } } }) => (0: any);
-const example4 = (): ({ p: { p: ?{ p: string => string } } }) => (0: any);
-const example5 = (): ({ p: { p: { p: string => string } | string } }) =>
+const example1 = (): ({ p: (string) => string }) => (0: any);
+const example2 = (): ({ p: { p: (string) => string } }) => (0: any);
+const example3 = (): ({ p: { p: { p: (string) => string } } }) => (0: any);
+const example4 = (): ({ p: { p: ?{ p: (string) => string } } }) => (0: any);
+const example5 = (): ({ p: { p: { p: (string) => string } | string } }) =>
   (0: any);
-const example6 = (): ({ p: { p: { p: string => string } & string } }) =>
+const example6 = (): ({ p: { p: { p: (string) => string } & string } }) =>
   (0: any);
 const example7 = (): ({ p: { p: { p: [(string) => string, string] } } }) =>
   (0: any);
-function example8(): { p: string => string } {
+function example8(): { p: (string) => string } {
   return (0: any);
 }
-function example9(): { p: { p: string => string } } {
+function example9(): { p: { p: (string) => string } } {
   return (0: any);
 }
-function example10(): { p: { p: { p: string => string } } } {
+function example10(): { p: { p: { p: (string) => string } } } {
   return (0: any);
 }
-const example11 = (): ({ p: string => string } & string) => (0: any);
-const example12 = (): ({ p: string => string } | string) => (0: any);
-const example13 = (): ([{ p: string => string }, string]) => (0: any);
-const example14 = (): ({ p: string => string }[]) => (0: any);
-const example15 = (): ({ p: { p: { p: (string => string) & string } } }) =>
+const example11 = (): ({ p: (string) => string } & string) => (0: any);
+const example12 = (): ({ p: (string) => string } | string) => (0: any);
+const example13 = (): ([{ p: (string) => string }, string]) => (0: any);
+const example14 = (): ({ p: (string) => string }[]) => (0: any);
+const example15 = (): ({ p: { p: { p: ((string) => string) & string } } }) =>
   (0: any);
-const example16 = (): ({ p: { p: { p: (string => string) | string } } }) =>
+const example16 = (): ({ p: { p: { p: ((string) => string) | string } } }) =>
   (0: any);
-const example17 = (): (?{ p: string => string }) => (0: any);
+const example17 = (): (?{ p: (string) => string }) => (0: any);
 
 ================================================================================
 `;
@@ -100,23 +100,23 @@ type X = (a & b) => void;
 type Bar = (number | string) => number;
 type X = (?(number, number) => number) => void;
 type X = ?((number, number) => number) => void;
-type X = ?(number, number) => number => void;
+type X = ?(number, number) => (number) => void;
 type X = (1234) => void;
 type X = ("abc") => void;
-type X = true => void;
-type X = false => void;
-type X = boolean => void;
-type X = number => void;
-type X = void => void;
-type X = null => void;
-type X = any => void;
-type X = empty => void;
-type X = mixed => void;
-type X = string => void;
-type X = abc => void;
-type X = a | (b => void);
+type X = (true) => void;
+type X = (false) => void;
+type X = (boolean) => void;
+type X = (number) => void;
+type X = (void) => void;
+type X = (null) => void;
+type X = (any) => void;
+type X = (empty) => void;
+type X = (mixed) => void;
+type X = (string) => void;
+type X = (abc) => void;
+type X = a | ((b) => void);
 type X = (a | b) => void;
-type X = a & (b => void);
+type X = a & ((b) => void);
 type X = (a & b) => void;
 
 ================================================================================
@@ -135,11 +135,11 @@ const f4 = (): (a & string => string) => {};
 function f5(): string => string {}
 
 =====================================output=====================================
-const f1 = (): (string => string) => {};
-const f2 = (): (?(y) => { a: b => c }) => (0: any);
-const f3 = (): a | (string => string) => {};
-const f4 = (): a & (string => string) => {};
-function f5(): string => string {}
+const f1 = (): ((string) => string) => {};
+const f2 = (): (?(y) => { a: (b) => c }) => (0: any);
+const f3 = (): a | ((string) => string) => {};
+const f4 = (): a & ((string) => string) => {};
+function f5(): (string) => string {}
 
 ================================================================================
 `;
diff --git a/tests/for/__snapshots__/jsfmt.spec.js.snap b/tests/for/__snapshots__/jsfmt.spec.js.snap
index 6f57027726ac..ec158cfd532c 100644
--- a/tests/for/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/for/__snapshots__/jsfmt.spec.js.snap
@@ -120,7 +120,7 @@ for ((x in a); ; ) {}
 for (a = (a in b); ; ) {}
 for (let a = (b in c); ; );
 for (a && (b in c); ; );
-for (a => (b in c); ; );
+for ((a) => (b in c); ; );
 function *g() {
   for (yield (a in b); ; );
 }
diff --git a/tests/functional_composition/__snapshots__/jsfmt.spec.js.snap b/tests/functional_composition/__snapshots__/jsfmt.spec.js.snap
index edfab237142d..7fedd6b548f4 100644
--- a/tests/functional_composition/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/functional_composition/__snapshots__/jsfmt.spec.js.snap
@@ -53,38 +53,38 @@ this.subscriptions.add(
 
 =====================================output=====================================
 compose(
-  sortBy(x => x),
+  sortBy((x) => x),
   flatten,
-  map(x => [x, x * 2])
+  map((x) => [x, x * 2])
 );
 
 somelib.compose(
-  sortBy(x => x),
+  sortBy((x) => x),
   flatten,
-  map(x => [x, x * 2])
+  map((x) => [x, x * 2])
 );
 
 composeFlipped(
-  sortBy(x => x),
+  sortBy((x) => x),
   flatten,
-  map(x => [x, x * 2])
+  map((x) => [x, x * 2])
 );
 
 somelib.composeFlipped(
-  sortBy(x => x),
+  sortBy((x) => x),
   flatten,
-  map(x => [x, x * 2])
+  map((x) => [x, x * 2])
 );
 
 // no regression (#4602)
 const hasValue = hasOwnProperty(a, b);
 
 this.compose(
-  sortBy(x => x),
+  sortBy((x) => x),
   flatten
 );
 this.a.b.c.compose(
-  sortBy(x => x),
+  sortBy((x) => x),
   flatten
 );
 someObj.someMethod(this.field.compose(a, b));
@@ -92,7 +92,7 @@ someObj.someMethod(this.field.compose(a, b));
 class A extends B {
   compose() {
     super.compose(
-      sortBy(x => x),
+      sortBy((x) => x),
       flatten
     );
   }
@@ -101,7 +101,7 @@ class A extends B {
 this.subscriptions.add(
   this.componentUpdates
     .pipe(startWith(this.props), distinctUntilChanged(isEqual))
-    .subscribe(props => {})
+    .subscribe((props) => {})
 );
 
 ================================================================================
@@ -165,9 +165,9 @@ bar(6);
 import { flow } from "lodash";
 
 const foo = flow(
-  x => x + 1,
-  x => x * 3,
-  x => x - 6
+  (x) => x + 1,
+  (x) => x * 3,
+  (x) => x - 6
 );
 
 foo(6);
@@ -175,9 +175,9 @@ foo(6);
 import * as _ from "lodash";
 
 const bar = _.flow(
-  x => x + 1,
-  x => x * 3,
-  x => x - 6
+  (x) => x + 1,
+  (x) => x * 3,
+  (x) => x - 6
 );
 
 bar(6);
@@ -215,9 +215,9 @@ bar(6);
 import { flowRight } from "lodash";
 
 const foo = flowRight(
-  x => x + 1,
-  x => x * 3,
-  x => x - 6
+  (x) => x + 1,
+  (x) => x * 3,
+  (x) => x - 6
 );
 
 foo(6);
@@ -225,9 +225,9 @@ foo(6);
 import * as _ from "lodash";
 
 const bar = _.flowRight(
-  x => x + 1,
-  x => x * 3,
-  x => x - 6
+  (x) => x + 1,
+  (x) => x * 3,
+  (x) => x - 6
 );
 
 bar(6);
@@ -339,16 +339,18 @@ var db = {
 };
 
 // We'll pretend to do a db lookup which returns a promise
-var lookupUser = userId => Promise.resolve(db.users[userId]);
-var lookupFollowers = user => Promise.resolve(user.followers);
+var lookupUser = (userId) => Promise.resolve(db.users[userId]);
+var lookupFollowers = (user) => Promise.resolve(user.followers);
 lookupUser("JOE").then(lookupFollowers);
 
 //  followersForUser :: String -> Promise [UserId]
 var followersForUser = R.composeP(lookupFollowers, lookupUser);
-followersForUser("JOE").then(followers => console.log("Followers:", followers));
+followersForUser("JOE").then((followers) =>
+  console.log("Followers:", followers)
+);
 // Followers: ["STEVE","SUZY"]
 
-const mapStateToProps = state => ({
+const mapStateToProps = (state) => ({
   users: R.compose(
     R.filter(R.propEq("status", "active")),
     R.values
@@ -491,11 +493,11 @@ const bar = createSelector(
 import { createSelector } from "reselect";
 
 const foo = createSelector(getIds, getObjects, (ids, objects) =>
-  ids.map(id => objects[id])
+  ids.map((id) => objects[id])
 );
 
 const bar = createSelector([getIds, getObjects], (ids, objects) =>
-  ids.map(id => objects[id])
+  ids.map((id) => objects[id])
 );
 
 ================================================================================
@@ -527,11 +529,11 @@ const source$ = range(0, 10);
 
 source$
   .pipe(
-    filter(x => x % 2 === 0),
-    map(x => x + x),
+    filter((x) => x % 2 === 0),
+    map((x) => x + x),
     scan((acc, x) => acc + x, 0)
   )
-  .subscribe(x => console.log(x));
+  .subscribe((x) => console.log(x));
 
 ================================================================================
 `;
diff --git a/tests/html_js/__snapshots__/jsfmt.spec.js.snap b/tests/html_js/__snapshots__/jsfmt.spec.js.snap
index db82a1fca592..f7200e9cb617 100644
--- a/tests/html_js/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/html_js/__snapshots__/jsfmt.spec.js.snap
@@ -355,7 +355,7 @@ printWidth: 80
         url: this.props.url,
         dataType: "json",
         cache: false,
-        success: data => this.setState({ data: data }),
+        success: (data) => this.setState({ data: data }),
         error: (xhr, status, err) => console.error(status, err),
       });
     }
diff --git a/tests/html_vue/__snapshots__/jsfmt.spec.js.snap b/tests/html_vue/__snapshots__/jsfmt.spec.js.snap
index de64c32a4e02..29c24dfb639b 100644
--- a/tests/html_vue/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/html_vue/__snapshots__/jsfmt.spec.js.snap
@@ -59,7 +59,7 @@ trailingComma: "none"
     v-for="n in 10"
     v-for="{ a } in [0].map(() => ({ a: 1 }))"
     v-for="({ a }, [c]) in [0].map(() => 1)"
-    v-for="n in items.map(x => {
+    v-for="n in items.map((x) => {
       return x;
     })"
     @click="/* hello */"
@@ -167,7 +167,7 @@ printWidth: 80
     v-for="n in 10"
     v-for="{ a } in [0].map(() => ({ a: 1 }))"
     v-for="({ a }, [c]) in [0].map(() => 1)"
-    v-for="n in items.map(x => {
+    v-for="n in items.map((x) => {
       return x;
     })"
     @click="/* hello */"
@@ -276,7 +276,7 @@ semi: false
     v-for="n in 10"
     v-for="{ a } in [0].map(() => ({ a: 1 }))"
     v-for="({ a }, [c]) in [0].map(() => 1)"
-    v-for="n in items.map(x => {
+    v-for="n in items.map((x) => {
       return x
     })"
     @click="/* hello */"
@@ -1211,7 +1211,7 @@ x => {
 <template>
   <div>
     Fuga magnam facilis. Voluptatem quaerat porro.{{
-      x => {
+      (x) => {
         const hello = "world";
         return hello;
       }
@@ -1341,7 +1341,7 @@ x => {
 <template>
   <div>
     Fuga magnam facilis. Voluptatem quaerat porro.{{
-      x => {
+      (x) => {
         const hello = "world";
         return hello;
       }
@@ -1472,7 +1472,7 @@ x => {
 <template>
   <div>
     Fuga magnam facilis. Voluptatem quaerat porro.{{
-      x => {
+      (x) => {
         const hello = "world"
         return hello
       }
diff --git a/tests/jsx-stateless-arrow-fn/__snapshots__/jsfmt.spec.js.snap b/tests/jsx-stateless-arrow-fn/__snapshots__/jsfmt.spec.js.snap
index c4fff7e73052..1bb3be1b87df 100644
--- a/tests/jsx-stateless-arrow-fn/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/jsx-stateless-arrow-fn/__snapshots__/jsfmt.spec.js.snap
@@ -177,11 +177,11 @@ const render7B = () => (
   </div>
 );
 
-const render8 = props => <div>{props.text}</div>;
-const render9 = props => (
+const render8 = (props) => <div>{props.text}</div>;
+const render9 = (props) => (
   <div>{props.looooooooooooooooooooooooooooooong_text}</div>
 );
-const render10 = props => (
+const render10 = (props) => (
   <div>
     {props.even_looooooooooooooooooooooooooooooooooooooooooonger_contents}
   </div>
@@ -204,7 +204,7 @@ React.render(
   document.querySelector("#react-root")
 );
 
-const renderTernary = props => (
+const renderTernary = (props) => (
   <BaseForm
     url="/auth/google"
     method="GET"
diff --git a/tests/jsx/__snapshots__/jsfmt.spec.js.snap b/tests/jsx/__snapshots__/jsfmt.spec.js.snap
index fe79b9d6d810..e56b7818efa9 100644
--- a/tests/jsx/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/jsx/__snapshots__/jsfmt.spec.js.snap
@@ -44,7 +44,7 @@ const UsersList = ({ users }) => (
   <section>
     <h2>Users list</h2>
     <ul>
-      {users.map(user => (
+      {users.map((user) => (
         <li key={user.id}>{user.name}</li>
       ))}
     </ul>
@@ -63,7 +63,7 @@ const TodoList = ({ todos }) => (
 
 <div className="search-filter-chips">
   {scopes
-    .filter(scope => scope.value !== "")
+    .filter((scope) => scope.value !== "")
     .map((scope, i) => (
       <FilterChip
         query={this.props.query}
@@ -122,7 +122,7 @@ const UsersList = ({ users }) => (
   <section>
     <h2>Users list</h2>
     <ul>
-      {users.map(user => (
+      {users.map((user) => (
         <li key={user.id}>{user.name}</li>
       ))}
     </ul>
@@ -141,7 +141,7 @@ const TodoList = ({ todos }) => (
 
 <div className='search-filter-chips'>
   {scopes
-    .filter(scope => scope.value !== "")
+    .filter((scope) => scope.value !== "")
     .map((scope, i) => (
       <FilterChip
         query={this.props.query}
@@ -200,7 +200,7 @@ const UsersList = ({ users }) => (
   <section>
     <h2>Users list</h2>
     <ul>
-      {users.map(user => (
+      {users.map((user) => (
         <li key={user.id}>{user.name}</li>
       ))}
     </ul>
@@ -219,7 +219,7 @@ const TodoList = ({ todos }) => (
 
 <div className="search-filter-chips">
   {scopes
-    .filter(scope => scope.value !== '')
+    .filter((scope) => scope.value !== '')
     .map((scope, i) => (
       <FilterChip
         query={this.props.query}
@@ -278,7 +278,7 @@ const UsersList = ({ users }) => (
   <section>
     <h2>Users list</h2>
     <ul>
-      {users.map(user => (
+      {users.map((user) => (
         <li key={user.id}>{user.name}</li>
       ))}
     </ul>
@@ -297,7 +297,7 @@ const TodoList = ({ todos }) => (
 
 <div className='search-filter-chips'>
   {scopes
-    .filter(scope => scope.value !== '')
+    .filter((scope) => scope.value !== '')
     .map((scope, i) => (
       <FilterChip
         query={this.props.query}
@@ -362,11 +362,11 @@ singleQuote: false
   }
   propArrowFn={
     // comment
-    arg => fn(arg)
+    (arg) => fn(arg)
   }
   propArrowWithBreak={
     // comment
-    arg =>
+    (arg) =>
       fn({
         makeItBreak,
       })
@@ -438,11 +438,11 @@ singleQuote: false
   }
   propArrowFn={
     // comment
-    arg => fn(arg)
+    (arg) => fn(arg)
   }
   propArrowWithBreak={
     // comment
-    arg =>
+    (arg) =>
       fn({
         makeItBreak,
       })
@@ -514,11 +514,11 @@ singleQuote: true
   }
   propArrowFn={
     // comment
-    arg => fn(arg)
+    (arg) => fn(arg)
   }
   propArrowWithBreak={
     // comment
-    arg =>
+    (arg) =>
       fn({
         makeItBreak,
       })
@@ -590,11 +590,11 @@ singleQuote: true
   }
   propArrowFn={
     // comment
-    arg => fn(arg)
+    (arg) => fn(arg)
   }
   propArrowWithBreak={
     // comment
-    arg =>
+    (arg) =>
       fn({
         makeItBreak,
       })
@@ -1938,7 +1938,7 @@ singleQuote: false
 </Something>;
 
 <Something>
-  {items.map(item => (
+  {items.map((item) => (
     <SomethingElse>
       <span />
     </SomethingElse>
@@ -1974,11 +1974,11 @@ singleQuote: false
 
 <BookingIntroPanel
   prop="long_string_make_to_force_break"
-  logClick={data => doLogClick("short", "short", data)}
+  logClick={(data) => doLogClick("short", "short", data)}
 />;
 
 <BookingIntroPanel
-  logClick={data =>
+  logClick={(data) =>
     doLogClick(
       "long_name_long_name_long_name",
       "long_name_long_name_long_name",
@@ -1988,7 +1988,7 @@ singleQuote: false
 />;
 
 <BookingIntroPanel
-  logClick={data => {
+  logClick={(data) => {
     doLogClick(
       "long_name_long_name_long_name",
       "long_name_long_name_long_name",
@@ -2009,11 +2009,11 @@ singleQuote: false
 />;
 
 <BookingIntroPanel>
-  {data => doLogClick("short", "short", data)}
+  {(data) => doLogClick("short", "short", data)}
 </BookingIntroPanel>;
 
 <BookingIntroPanel>
-  {data =>
+  {(data) =>
     doLogClick(
       "long_name_long_name_long_name",
       "long_name_long_name_long_name",
@@ -2023,7 +2023,7 @@ singleQuote: false
 </BookingIntroPanel>;
 
 <BookingIntroPanel>
-  {data => {
+  {(data) => {
     doLogClick(
       "long_name_long_name_long_name",
       "long_name_long_name_long_name",
@@ -2226,7 +2226,7 @@ singleQuote: false
 </Something>;
 
 <Something>
-  {items.map(item => (
+  {items.map((item) => (
     <SomethingElse>
       <span />
     </SomethingElse>
@@ -2262,11 +2262,11 @@ singleQuote: false
 
 <BookingIntroPanel
   prop='long_string_make_to_force_break'
-  logClick={data => doLogClick("short", "short", data)}
+  logClick={(data) => doLogClick("short", "short", data)}
 />;
 
 <BookingIntroPanel
-  logClick={data =>
+  logClick={(data) =>
     doLogClick(
       "long_name_long_name_long_name",
       "long_name_long_name_long_name",
@@ -2276,7 +2276,7 @@ singleQuote: false
 />;
 
 <BookingIntroPanel
-  logClick={data => {
+  logClick={(data) => {
     doLogClick(
       "long_name_long_name_long_name",
       "long_name_long_name_long_name",
@@ -2297,11 +2297,11 @@ singleQuote: false
 />;
 
 <BookingIntroPanel>
-  {data => doLogClick("short", "short", data)}
+  {(data) => doLogClick("short", "short", data)}
 </BookingIntroPanel>;
 
 <BookingIntroPanel>
-  {data =>
+  {(data) =>
     doLogClick(
       "long_name_long_name_long_name",
       "long_name_long_name_long_name",
@@ -2311,7 +2311,7 @@ singleQuote: false
 </BookingIntroPanel>;
 
 <BookingIntroPanel>
-  {data => {
+  {(data) => {
     doLogClick(
       "long_name_long_name_long_name",
       "long_name_long_name_long_name",
@@ -2514,7 +2514,7 @@ singleQuote: true
 </Something>;
 
 <Something>
-  {items.map(item => (
+  {items.map((item) => (
     <SomethingElse>
       <span />
     </SomethingElse>
@@ -2550,11 +2550,11 @@ singleQuote: true
 
 <BookingIntroPanel
   prop="long_string_make_to_force_break"
-  logClick={data => doLogClick('short', 'short', data)}
+  logClick={(data) => doLogClick('short', 'short', data)}
 />;
 
 <BookingIntroPanel
-  logClick={data =>
+  logClick={(data) =>
     doLogClick(
       'long_name_long_name_long_name',
       'long_name_long_name_long_name',
@@ -2564,7 +2564,7 @@ singleQuote: true
 />;
 
 <BookingIntroPanel
-  logClick={data => {
+  logClick={(data) => {
     doLogClick(
       'long_name_long_name_long_name',
       'long_name_long_name_long_name',
@@ -2585,11 +2585,11 @@ singleQuote: true
 />;
 
 <BookingIntroPanel>
-  {data => doLogClick('short', 'short', data)}
+  {(data) => doLogClick('short', 'short', data)}
 </BookingIntroPanel>;
 
 <BookingIntroPanel>
-  {data =>
+  {(data) =>
     doLogClick(
       'long_name_long_name_long_name',
       'long_name_long_name_long_name',
@@ -2599,7 +2599,7 @@ singleQuote: true
 </BookingIntroPanel>;
 
 <BookingIntroPanel>
-  {data => {
+  {(data) => {
     doLogClick(
       'long_name_long_name_long_name',
       'long_name_long_name_long_name',
@@ -2802,7 +2802,7 @@ singleQuote: true
 </Something>;
 
 <Something>
-  {items.map(item => (
+  {items.map((item) => (
     <SomethingElse>
       <span />
     </SomethingElse>
@@ -2838,11 +2838,11 @@ singleQuote: true
 
 <BookingIntroPanel
   prop='long_string_make_to_force_break'
-  logClick={data => doLogClick('short', 'short', data)}
+  logClick={(data) => doLogClick('short', 'short', data)}
 />;
 
 <BookingIntroPanel
-  logClick={data =>
+  logClick={(data) =>
     doLogClick(
       'long_name_long_name_long_name',
       'long_name_long_name_long_name',
@@ -2852,7 +2852,7 @@ singleQuote: true
 />;
 
 <BookingIntroPanel
-  logClick={data => {
+  logClick={(data) => {
     doLogClick(
       'long_name_long_name_long_name',
       'long_name_long_name_long_name',
@@ -2873,11 +2873,11 @@ singleQuote: true
 />;
 
 <BookingIntroPanel>
-  {data => doLogClick('short', 'short', data)}
+  {(data) => doLogClick('short', 'short', data)}
 </BookingIntroPanel>;
 
 <BookingIntroPanel>
-  {data =>
+  {(data) =>
     doLogClick(
       'long_name_long_name_long_name',
       'long_name_long_name_long_name',
@@ -2887,7 +2887,7 @@ singleQuote: true
 </BookingIntroPanel>;
 
 <BookingIntroPanel>
-  {data => {
+  {(data) => {
     doLogClick(
       'long_name_long_name_long_name',
       'long_name_long_name_long_name',
@@ -3143,7 +3143,7 @@ singleQuote: false
     this.renderDevApp()
   ) : (
     <div>
-      {routes.map(route => (
+      {routes.map((route) => (
         <MatchAsync
           key={\`\${route.to}-async\`}
           pattern={route.to}
@@ -3158,7 +3158,7 @@ singleQuote: false
 <div>
   {__DEV__ && (
     <div>
-      {routes.map(route => (
+      {routes.map((route) => (
         <MatchAsync
           key={\`\${route.to}-async\`}
           pattern={route.to}
@@ -3225,7 +3225,7 @@ singleQuote: false
     this.renderDevApp()
   ) : (
     <div>
-      {routes.map(route => (
+      {routes.map((route) => (
         <MatchAsync
           key={\`\${route.to}-async\`}
           pattern={route.to}
@@ -3240,7 +3240,7 @@ singleQuote: false
 <div>
   {__DEV__ && (
     <div>
-      {routes.map(route => (
+      {routes.map((route) => (
         <MatchAsync
           key={\`\${route.to}-async\`}
           pattern={route.to}
@@ -3307,7 +3307,7 @@ singleQuote: true
     this.renderDevApp()
   ) : (
     <div>
-      {routes.map(route => (
+      {routes.map((route) => (
         <MatchAsync
           key={\`\${route.to}-async\`}
           pattern={route.to}
@@ -3322,7 +3322,7 @@ singleQuote: true
 <div>
   {__DEV__ && (
     <div>
-      {routes.map(route => (
+      {routes.map((route) => (
         <MatchAsync
           key={\`\${route.to}-async\`}
           pattern={route.to}
@@ -3389,7 +3389,7 @@ singleQuote: true
     this.renderDevApp()
   ) : (
     <div>
-      {routes.map(route => (
+      {routes.map((route) => (
         <MatchAsync
           key={\`\${route.to}-async\`}
           pattern={route.to}
@@ -3404,7 +3404,7 @@ singleQuote: true
 <div>
   {__DEV__ && (
     <div>
-      {routes.map(route => (
+      {routes.map((route) => (
         <MatchAsync
           key={\`\${route.to}-async\`}
           pattern={route.to}
diff --git a/tests/last_argument_expansion/__snapshots__/jsfmt.spec.js.snap b/tests/last_argument_expansion/__snapshots__/jsfmt.spec.js.snap
index 9dab3a1ec58e..f986a4e42a4a 100644
--- a/tests/last_argument_expansion/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/last_argument_expansion/__snapshots__/jsfmt.spec.js.snap
@@ -26,9 +26,9 @@ export default function searchUsers(action$) {
 export default function searchUsers(action$) {
   return action$
     .ofType(ActionTypes.SEARCHED_USERS)
-    .map(action => action.payload.query)
-    .filter(q => !!q)
-    .switchMap(q =>
+    .map((action) => action.payload.query)
+    .filter((q) => !!q)
+    .switchMap((q) =>
       Observable.timer(800) // debounce
         .takeUntil(action$.ofType(ActionTypes.CLEARED_SEARCH_RESULTS))
         .mergeMap(() =>
@@ -36,7 +36,7 @@ export default function searchUsers(action$) {
             Observable.of(replace(\`?q=\${q}\`)),
             ajax
               .getJSON(\`https://api.github.com/search/users?q=\${q}\`)
-              .map(res => res.items)
+              .map((res) => res.items)
               .map(receiveUsers)
           )
         )
@@ -123,7 +123,7 @@ true
       browsers: ["> 1%", "last 2 versions", "ie >= 11", "Firefox ESR"],
     }),
     require("postcss-url")({
-      url: url =>
+      url: (url) =>
         url.startsWith("/") || /^[a-z]+:/.test(url) ? url : \`/static/\${url}\`,
     }),
   ],
@@ -380,7 +380,7 @@ const els = items.map(item => (
 ));
 
 =====================================output=====================================
-const els = items.map(item => (
+const els = items.map((item) => (
   <div className="whatever">
     <span>{children}</span>
   </div>
@@ -427,12 +427,12 @@ const formatData = pipe(
   values
 );
 
-export const setProp = y => ({
+export const setProp = (y) => ({
   ...y,
   a: "very, very, very long very, very long text",
 });
 
-export const log = y => {
+export const log = (y) => {
   console.log("very, very, very long very, very long text");
 };
 
diff --git a/tests/markdown/__snapshots__/jsfmt.spec.js.snap b/tests/markdown/__snapshots__/jsfmt.spec.js.snap
index 42d583da79c2..1563af6db425 100644
--- a/tests/markdown/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/markdown/__snapshots__/jsfmt.spec.js.snap
@@ -1479,7 +1479,7 @@ If \`options.useCache\` is \`false\`, all caching will be bypassed.
 
 \`\`\`js
 const text = fs.readFileSync(filePath, "utf8");
-prettier.resolveConfig(filePath).then(options => {
+prettier.resolveConfig(filePath).then((options) => {
   const formatted = prettier.format(text, options);
 });
 \`\`\`
@@ -3459,7 +3459,7 @@ If \`options.useCache\` is \`false\`, all caching will be bypassed.
 
 \`\`\`js
 const text = fs.readFileSync(filePath, 'utf8');
-prettier.resolveConfig(filePath).then(options => {
+prettier.resolveConfig(filePath).then((options) => {
   const formatted = prettier.format(text, options);
 });
 \`\`\`
diff --git a/tests/member/__snapshots__/jsfmt.spec.js.snap b/tests/member/__snapshots__/jsfmt.spec.js.snap
index d38b1a4efb90..e68099adfad0 100644
--- a/tests/member/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/member/__snapshots__/jsfmt.spec.js.snap
@@ -71,7 +71,7 @@ const promises = [
   promise
     .resolve()
     .then(console.log)
-    .catch(err => {
+    .catch((err) => {
       console.log(err);
       return null;
     }),
@@ -85,7 +85,7 @@ const promises2 = [
     .veryLongFunctionCall()
     .veryLongFunctionCall()
     .then(console.log)
-    .catch(err => {
+    .catch((err) => {
       console.log(err);
       return null;
     }),
diff --git a/tests/method-chain/__snapshots__/jsfmt.spec.js.snap b/tests/method-chain/__snapshots__/jsfmt.spec.js.snap
index cf8c4fe3093a..3b38320524f3 100644
--- a/tests/method-chain/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/method-chain/__snapshots__/jsfmt.spec.js.snap
@@ -74,16 +74,16 @@ it('should group messages with same created time', () => {
 });
 
 =====================================output=====================================
-export default store => {
+export default (store) => {
   return callApi(endpoint, schema).then(
-    response =>
+    (response) =>
       next(
         actionWith({
           response,
           type: successType,
         })
       ),
-    error =>
+    (error) =>
       next(
         actionWith({
           type: failureType,
@@ -364,7 +364,7 @@ const configModel = this.baseConfigurationService
 this.doWriteConfiguration(target, value, options) // queue up writes to prevent race conditions
   .then(
     () => null,
-    error => {
+    (error) => {
       return options.donotNotifyError
         ? TPromise.wrapError(error)
         : this.onError(error, target, value);
@@ -448,13 +448,13 @@ window.Data[key]("foo")
   .catch(() => b);
 
 =====================================output=====================================
-[].forEach(key => {
+[].forEach((key) => {
   data[key]("foo")
     .then(() => console.log("bar"))
     .catch(() => console.log("baz"));
 });
 
-[].forEach(key => {
+[].forEach((key) => {
   data("foo")
     [key]("bar")
     .then(() => console.log("bar"))
@@ -619,7 +619,7 @@ function f() {
 
 =====================================output=====================================
 export default function theFunction(action$, store) {
-  return action$.ofType(THE_ACTION).switchMap(action =>
+  return action$.ofType(THE_ACTION).switchMap((action) =>
     Observable.webSocket({
       url: THE_URL,
       more: stuff(),
@@ -629,9 +629,9 @@ export default function theFunction(action$, store) {
         value3: false,
       }),
     })
-      .filter(data => theFilter(data))
+      .filter((data) => theFilter(data))
       .map(({ theType, ...data }) => theMap(theType, data))
-      .retryWhen(errors => errors)
+      .retryWhen((errors) => errors)
   );
 }
 
@@ -639,7 +639,7 @@ function f() {
   return this._getWorker(workerOptions)({
     filePath,
     hasteImplModulePath: this._options.hasteImplModulePath,
-  }).then(metadata => {
+  }).then((metadata) => {
     // \`1\` for truthy values instead of \`true\` to save cache space.
     fileMetadata[H.VISITED] = 1;
     const metadataId = metadata.id;
@@ -685,12 +685,12 @@ Object.keys(
   availableLocales({
     test: true,
   })
-).forEach(locale => {
+).forEach((locale) => {
   // ...
 });
 
 this.layoutPartsToHide = this.utils.hashset(
-  _.flatMap(this.visibilityHandlers, fn => fn())
+  _.flatMap(this.visibilityHandlers, (fn) => fn())
     .concat(this.record.resolved_legacy_visrules)
     .filter(Boolean)
 );
@@ -859,7 +859,7 @@ var l = base
 =====================================output=====================================
 // examples from https://github.com/prettier/prettier/issues/4125
 
-const sha256 = data => crypto.createHash("sha256").update(data).digest("hex");
+const sha256 = (data) => crypto.createHash("sha256").update(data).digest("hex");
 
 req.checkBody("id").isInt().optional();
 req.checkBody("name").notEmpty().optional();
@@ -873,11 +873,11 @@ obj.foo(-1).foo(import("2")).foo(!x).check(/[A-Z]/);
 // better on multiple lines:
 somePromise
   .then(format)
-  .then(val => doSomething(val))
-  .catch(err => handleError(err));
+  .then((val) => doSomething(val))
+  .catch((err) => handleError(err));
 
 // you can still force multi-line chaining with a comment:
-const sha256 = data =>
+const sha256 = (data) =>
   crypto // breakme
     .createHash("sha256")
     .update(data)
@@ -895,7 +895,7 @@ if ($(el).attr("href").includes("/wiki/")) {
   }
 }
 
-const parseNumbers = s => s.split("").map(Number).sort();
+const parseNumbers = (s) => s.split("").map(Number).sort();
 
 function palindrome(a, b) {
   return a.slice().reverse().join(",") === b.slice().sort().join(",");
@@ -910,7 +910,7 @@ d3.select("body")
   .style("color", "white");
 
 Object.keys(props)
-  .filter(key => key in own === false)
+  .filter((key) => key in own === false)
   .reduce((a, key) => {
     a[key] = props[key];
     return a;
@@ -922,7 +922,7 @@ assert.equal(this.$().text().trim(), "1000");
 
 something()
   .then(() => doSomethingElse())
-  .then(result => dontForgetThisAsWell(result));
+  .then((result) => dontForgetThisAsWell(result));
 
 db.branch(
   db.table("users").filter({ email }).count(),
@@ -955,11 +955,11 @@ function HelloWorld() {
       dataType: "json",
     })
     .then(
-      data => {
+      (data) => {
         this.setState({ isLoading: false });
         this.initWidget(data);
       },
-      data => {
+      (data) => {
         this.logImpression("foo_fetch_error", data);
         Flash.error(I18n.t("offline_identity.foo_issue"));
       }
@@ -968,9 +968,9 @@ function HelloWorld() {
 
 action$
   .ofType(ActionTypes.SEARCHED_USERS)
-  .map(action => action.payload.query)
-  .filter(q => !!q)
-  .switchMap(q =>
+  .map((action) => action.payload.query)
+  .filter((q) => !!q)
+  .switchMap((q) =>
     Observable.timer(800) // debounce
       .takeUntil(action$.ofType(ActionTypes.CLEARED_SEARCH_RESULTS))
       .mergeMap(() =>
@@ -978,7 +978,7 @@ action$
           Observable.of(replace(\`?q=\${q}\`)),
           ajax
             .getJSON(\`https://api.github.com/search/users?q=\${q}\`)
-            .map(res => res.items)
+            .map((res) => res.items)
             .map(receiveUsers)
         )
       )
@@ -1054,30 +1054,30 @@ const someLongVariableName = (idx(
 
 =====================================output=====================================
 const someLongVariableName = (
-  idx(this.props, props => props.someLongPropertyName) || []
-).map(edge => edge.node);
+  idx(this.props, (props) => props.someLongPropertyName) || []
+).map((edge) => edge.node);
 
-(veryLongVeryLongVeryLong || e).map(tickets =>
+(veryLongVeryLongVeryLong || e).map((tickets) =>
   TicketRecord.createFromSomeLongString()
 );
 
 (veryLongVeryLongVeryLong || e)
-  .map(tickets => TicketRecord.createFromSomeLongString())
-  .filter(obj => !!obj);
+  .map((tickets) => TicketRecord.createFromSomeLongString())
+  .filter((obj) => !!obj);
 
 (
   veryLongVeryLongVeryLong ||
   anotherVeryLongVeryLongVeryLong ||
   veryVeryVeryLongError
-).map(tickets => TicketRecord.createFromSomeLongString());
+).map((tickets) => TicketRecord.createFromSomeLongString());
 
 (
   veryLongVeryLongVeryLong ||
   anotherVeryLongVeryLongVeryLong ||
   veryVeryVeryLongError
 )
-  .map(tickets => TicketRecord.createFromSomeLongString())
-  .filter(obj => !!obj);
+  .map((tickets) => TicketRecord.createFromSomeLongString())
+  .filter((obj) => !!obj);
 
 ================================================================================
 `;
@@ -1232,8 +1232,8 @@ const svgJsFiles = fs
 =====================================output=====================================
 const svgJsFiles = fs
   .readdirSync(svgDir)
-  .filter(f => svgJsFileExtRegex.test(f))
-  .map(f => path.join(svgDir, f));
+  .filter((f) => svgJsFileExtRegex.test(f))
+  .map((f) => path.join(svgDir, f));
 
 ================================================================================
 `;
@@ -1283,9 +1283,9 @@ method().then(x => x)
 
 =====================================output=====================================
 method()
-  .then(x => x)
-  ["abc"](x => x)
-  [abc](x => x);
+  .then((x) => x)
+  ["abc"]((x) => x)
+  [abc]((x) => x);
 
 ({}.a().b());
 ({}.a().b());
@@ -1306,7 +1306,7 @@ const sel = this.connections
 =====================================output=====================================
 const sel = this.connections
   .concat(this.activities.concat(this.operators))
-  .filter(x => x.selected);
+  .filter((x) => x.selected);
 
 ================================================================================
 `;
diff --git a/tests/multiparser_js_css/__snapshots__/jsfmt.spec.js.snap b/tests/multiparser_js_css/__snapshots__/jsfmt.spec.js.snap
index a2ac62276d53..5af6968d153c 100644
--- a/tests/multiparser_js_css/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/multiparser_js_css/__snapshots__/jsfmt.spec.js.snap
@@ -294,38 +294,38 @@ styled(ExistingComponent).attr({})\`
 \`;
 
 styled.div\`
-  color: \${props => props.theme.colors.paragraph};
+  color: \${(props) => props.theme.colors.paragraph};
   /* prettier-ignore */
-  \${props => (props.small ? "font-size: 0.8em;" : "")};
+  \${(props) => (props.small ? "font-size: 0.8em;" : "")};
 \`;
 
 styled.div\`
-  color: \${props => props.theme.colors.paragraph};
+  color: \${(props) => props.theme.colors.paragraph};
   /* prettier-ignore */
-  \${props => (props.small ? "font-size: 0.8em;" : "")}
+  \${(props) => (props.small ? "font-size: 0.8em;" : "")}
 \`;
 
 styled.div\`
    /* prettier-ignore */
-  color: \${props => props.theme.colors.paragraph};
-  \${props => (props.small ? "font-size: 0.8em;" : "")};
+  color: \${(props) => props.theme.colors.paragraph};
+  \${(props) => (props.small ? "font-size: 0.8em;" : "")};
 \`;
 
 styled.div\`
-  color: \${props => props.theme.colors.paragraph};
+  color: \${(props) => props.theme.colors.paragraph};
   /* prettier-ignore */
-  \${props => (props.small ? "font-size: 0.8em;" : "")};
+  \${(props) => (props.small ? "font-size: 0.8em;" : "")};
   /* prettier-ignore */
-  \${props => (props.red ? "color: red;" : "")};
+  \${(props) => (props.red ? "color: red;" : "")};
 \`;
 
 styled.div\`
   /* prettier-ignore */
-  color: \${props => props.theme.colors.paragraph};
+  color: \${(props) => props.theme.colors.paragraph};
   /* prettier-ignore */
-  \${props => (props.small ? "font-size: 0.8em;" : "")};
+  \${(props) => (props.small ? "font-size: 0.8em;" : "")};
   /* prettier-ignore */
-  \${props => (props.red ? "color: red;" : "")};
+  \${(props) => (props.red ? "color: red;" : "")};
   /* prettier-ignore */
 \`;
 
@@ -427,13 +427,13 @@ const Direction2 = styled.span\`
 \`;
 
 const mixin = css\`
-  color: \${props => props.color};
-  \${props => props.otherProperty}: \${props => props.otherValue};
+  color: \${(props) => props.color};
+  \${(props) => props.otherProperty}: \${(props) => props.otherValue};
 \`;
 
 const foo = styled.div\`
   display: flex;
-  \${props => props.useMixin && mixin}
+  \${(props) => props.useMixin && mixin}
 \`;
 
 const Single1 = styled.div\`
@@ -456,7 +456,7 @@ const bar = styled.div\`
   height: 40px;
   width: 40px;
 
-  \${props =>
+  \${(props) =>
     (props.complete || props.inProgress) &&
     css\`
       border-color: rgba(var(--green-rgb), 0.15);
@@ -469,14 +469,14 @@ const bar = styled.div\`
     color: var(--purpleTT);
     display: inline-flex;
 
-    \${props =>
+    \${(props) =>
       props.complete &&
       css\`
         background-color: var(--green);
         border-width: 7px;
       \`}
 
-    \${props =>
+    \${(props) =>
       (props.complete || props.inProgress) &&
       css\`
         border-color: var(--green);
@@ -487,7 +487,7 @@ const bar = styled.div\`
 const A = styled.a\`
   display: inline-block;
   color: #fff;
-  \${props =>
+  \${(props) =>
     props.a &&
     css\`
       display: none;
diff --git a/tests/multiparser_js_html/__snapshots__/jsfmt.spec.js.snap b/tests/multiparser_js_html/__snapshots__/jsfmt.spec.js.snap
index e6a7c382d24c..d22ee17ee45a 100644
--- a/tests/multiparser_js_html/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/multiparser_js_html/__snapshots__/jsfmt.spec.js.snap
@@ -134,7 +134,7 @@ function HelloWorld() {
   return html\`
     <h3>Bar List</h3>
     \${bars.map(
-      bar => html\`
+      (bar) => html\`
         <p>\${bar}</p>
       \`
     )}
diff --git a/tests/no-semi/__snapshots__/jsfmt.spec.js.snap b/tests/no-semi/__snapshots__/jsfmt.spec.js.snap
index 6f1874a7b9d9..23efaf442290 100644
--- a/tests/no-semi/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/no-semi/__snapshots__/jsfmt.spec.js.snap
@@ -631,7 +631,7 @@ fn(x);
 tag\`string\`;
 
 x;
-x => x;
+(x) => x;
 
 x;
 (a || b).c++;
@@ -982,7 +982,7 @@ fn(x)
 tag\`string\`
 
 x
-x => x
+;(x) => x
 
 x
 ;(a || b).c++
diff --git a/tests/optional-type-name/__snapshots__/jsfmt.spec.js.snap b/tests/optional-type-name/__snapshots__/jsfmt.spec.js.snap
index ee4b2e822be4..af4877b6550d 100644
--- a/tests/optional-type-name/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/optional-type-name/__snapshots__/jsfmt.spec.js.snap
@@ -11,7 +11,7 @@ type Foo = (any) => string
 type Bar = { [string]: number }
 
 =====================================output=====================================
-type Foo = any => string;
+type Foo = (any) => string;
 
 type Bar = { [string]: number };
 
diff --git a/tests/optional_chaining/__snapshots__/jsfmt.spec.js.snap b/tests/optional_chaining/__snapshots__/jsfmt.spec.js.snap
index 8608adb68ffe..7a7db07549aa 100644
--- a/tests/optional_chaining/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/optional_chaining/__snapshots__/jsfmt.spec.js.snap
@@ -158,12 +158,12 @@ a = () => ({}?.()() && a);
 a = () => ({}?.().b && a);
 a = () => ({}?.b && a);
 a = () => ({}?.b() && a);
-a => ({}?.()?.b && 0);
-a => ({}?.b?.b && 0);
-x => ({}?.()());
-x => ({}?.().b);
-x => ({}?.b());
-x => ({}?.b.b);
+(a) => ({}?.()?.b && 0);
+(a) => ({}?.b?.b && 0);
+(x) => ({}?.()());
+(x) => ({}?.().b);
+(x) => ({}?.b());
+(x) => ({}?.b.b);
 ({}?.a().b());
 ({ a: 1 }?.entries());
 
diff --git a/tests/performance/__snapshots__/jsfmt.spec.js.snap b/tests/performance/__snapshots__/jsfmt.spec.js.snap
index 0406225b20a5..1edc6e2e54fc 100644
--- a/tests/performance/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/performance/__snapshots__/jsfmt.spec.js.snap
@@ -161,7 +161,7 @@ tap.test("RecordImport.advance", (t) => {
 });
 
 =====================================output=====================================
-tap.test("RecordImport.advance", t => {
+tap.test("RecordImport.advance", (t) => {
   const checkStates = (batches, states) => {
     t.equal(batches.length, states.length);
     for (const batch of batches) {
@@ -173,19 +173,19 @@ tap.test("RecordImport.advance", t => {
   const batch = init.getRecordBatch();
   const dataFile = path.resolve(process.cwd(), "testData", "default.json");
 
-  const getBatches = callback => {
+  const getBatches = (callback) => {
     RecordImport.find({}, "", {}, (err, batches) => {
       callback(
         null,
         batches.filter(
-          batch => batch.state !== "error" && batch.state !== "completed"
+          (batch) => batch.state !== "error" && batch.state !== "completed"
         )
       );
     });
   };
 
-  mockFS(callback => {
-    batch.setResults([fs.createReadStream(dataFile)], err => {
+  mockFS((callback) => {
+    batch.setResults([fs.createReadStream(dataFile)], (err) => {
       t.error(err, "Error should be empty.");
       t.equal(batch.results.length, 6, "Check number of results");
       for (const result of batch.results) {
@@ -197,26 +197,26 @@ tap.test("RecordImport.advance", t => {
       getBatches((err, batches) => {
         checkStates(batches, ["started"]);
 
-        RecordImport.advance(err => {
+        RecordImport.advance((err) => {
           t.error(err, "Error should be empty.");
 
           getBatches((err, batches) => {
             checkStates(batches, ["process.completed"]);
 
             // Need to manually move to the next step
-            batch.importRecords(err => {
+            batch.importRecords((err) => {
               t.error(err, "Error should be empty.");
 
               getBatches((err, batches) => {
                 checkStates(batches, ["import.completed"]);
 
-                RecordImport.advance(err => {
+                RecordImport.advance((err) => {
                   t.error(err, "Error should be empty.");
 
                   getBatches((err, batches) => {
                     checkStates(batches, ["similarity.sync.completed"]);
 
-                    RecordImport.advance(err => {
+                    RecordImport.advance((err) => {
                       t.error(err, "Error should be empty.");
 
                       t.ok(batch.getCurState().name(i18n));
diff --git a/tests/pipeline_operator/__snapshots__/jsfmt.spec.js.snap b/tests/pipeline_operator/__snapshots__/jsfmt.spec.js.snap
index 6c255a5c9b3c..aeb93849ede7 100644
--- a/tests/pipeline_operator/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/pipeline_operator/__snapshots__/jsfmt.spec.js.snap
@@ -47,9 +47,9 @@ let result = "hello" |> doubleSay |> capitalize |> exclaim;
 let newScore =
   person.score
   |> double
-  |> (_ => add(7, _))
-  |> (_ => subtract(2, _))
-  |> (_ => boundScore(0, 100, _));
+  |> ((_) => add(7, _))
+  |> ((_) => subtract(2, _))
+  |> ((_) => boundScore(0, 100, _));
 
 function createPerson(attrs) {
   attrs
diff --git a/tests/preserve_line/__snapshots__/jsfmt.spec.js.snap b/tests/preserve_line/__snapshots__/jsfmt.spec.js.snap
index 6981ef67f594..12b8a4dedbc4 100644
--- a/tests/preserve_line/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/preserve_line/__snapshots__/jsfmt.spec.js.snap
@@ -342,7 +342,7 @@ stuff.doThing(
 
   -1,
   {
-    accept: node => doSomething(node),
+    accept: (node) => doSomething(node),
   }
 );
 
@@ -352,7 +352,7 @@ doThing(
   // This is important
   true,
   {
-    decline: creditCard => takeMoney(creditCard),
+    decline: (creditCard) => takeMoney(creditCard),
   }
 );
 
@@ -573,7 +573,7 @@ helloWorld
 
   .text()
 
-  .then(t => t);
+  .then((t) => t);
 
 (
   veryLongVeryLongVeryLong ||
@@ -581,14 +581,14 @@ helloWorld
   veryVeryVeryLongError
 )
 
-  .map(tickets => TicketRecord.createFromSomeLongString())
+  .map((tickets) => TicketRecord.createFromSomeLongString())
 
-  .filter(obj => !!obj);
+  .filter((obj) => !!obj);
 
 const sel = this.connections
 
   .concat(this.activities.concat(this.operators))
-  .filter(x => x.selected);
+  .filter((x) => x.selected);
 
 ================================================================================
 `;
diff --git a/tests/range_vue/__snapshots__/jsfmt.spec.js.snap b/tests/range_vue/__snapshots__/jsfmt.spec.js.snap
index 3886bd23d7e0..1796fe22e42a 100644
--- a/tests/range_vue/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/range_vue/__snapshots__/jsfmt.spec.js.snap
@@ -25,7 +25,7 @@ let Prettier        = format => { your.js('though') }
 </template>
 
 <script>
-let Prettier = format => {
+let Prettier = (format) => {
   your.js("though");
 };
 </script>
diff --git a/tests/strings/__snapshots__/jsfmt.spec.js.snap b/tests/strings/__snapshots__/jsfmt.spec.js.snap
index 3b2f61d076f0..06acf6aa4d33 100644
--- a/tests/strings/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/strings/__snapshots__/jsfmt.spec.js.snap
@@ -299,7 +299,7 @@ const makeBody = (store, assets, html) =>
 
 // https://github.com/prettier/prettier/issues/1626#issue-229655106
 const Bar = styled.div\`
-  color: \${props =>
+  color: \${(props) =>
     props.highlight.length > 0
       ? palette(["text", "dark", "tertiary"])(props)
       : palette(["text", "dark", "primary"])(props)} !important;
@@ -483,7 +483,7 @@ const makeBody = (store, assets, html) =>
 
 // https://github.com/prettier/prettier/issues/1626#issue-229655106
 const Bar = styled.div\`
-  color: \${props =>
+  color: \${(props) =>
     props.highlight.length > 0
       ? palette(["text", "dark", "tertiary"])(props)
       : palette(["text", "dark", "primary"])(props)} !important;
diff --git a/tests/template_literals/__snapshots__/jsfmt.spec.js.snap b/tests/template_literals/__snapshots__/jsfmt.spec.js.snap
index 812b09b5134b..f68721981f15 100644
--- a/tests/template_literals/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/template_literals/__snapshots__/jsfmt.spec.js.snap
@@ -202,7 +202,7 @@ function testing() {
       return \`\${
         process.env.OPENID_URL
       }/something/something/something?\${Object.keys(p)
-        .map(k => \`\${encodeURIComponent(k)}=\${encodeURIComponent(p[k])}\`)
+        .map((k) => \`\${encodeURIComponent(k)}=\${encodeURIComponent(p[k])}\`)
         .join("&")}\`;
     }
   }
@@ -327,13 +327,13 @@ margin: 0;
 =====================================output=====================================
 const Button = styled.a\`
   /* Comment */
-  display: \${props => props.display};
+  display: \${(props) => props.display};
 \`;
 
 styled.div\`
-  display: \${props => props.display};
-  border: \${props => props.border}px;
-  margin: 10px \${props => props.border}px;
+  display: \${(props) => props.display};
+  border: \${(props) => props.border}px;
+  margin: 10px \${(props) => props.border}px;
 \`;
 
 const EqualDivider = styled.div\`
@@ -345,7 +345,7 @@ const EqualDivider = styled.div\`
     flex: 1;
 
     &:not(:first-child) {
-      \${props => (props.vertical ? "margin-top" : "margin-left")}: 1rem;
+      \${(props) => (props.vertical ? "margin-top" : "margin-left")}: 1rem;
     }
   }
 \`;
@@ -652,7 +652,7 @@ printWidth: 80
 
 <style jsx>{\`
   div {
-    animation: 3s ease-in 1s \${foo => foo.getIterations()} reverse both paused
+    animation: 3s ease-in 1s \${(foo) => foo.getIterations()} reverse both paused
       slidein;
   }
 \`}</style>;
diff --git a/tests/ternaries/__snapshots__/jsfmt.spec.js.snap b/tests/ternaries/__snapshots__/jsfmt.spec.js.snap
index 599ecc649608..3b8b2d6e327b 100644
--- a/tests/ternaries/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/ternaries/__snapshots__/jsfmt.spec.js.snap
@@ -1713,8 +1713,8 @@ a
 =====================================output=====================================
 let icecream =
   what == "cone"
-    ? p => (!!p ? \`here's your \${p} cone\` : \`just the empty cone for you\`)
-    : p => \`here's your \${p} \${what}\`;
+    ? (p) => (!!p ? \`here's your \${p} cone\` : \`just the empty cone for you\`)
+    : (p) => \`here's your \${p} \${what}\`;
 
 const value = condition1
   ? value1
@@ -1917,8 +1917,8 @@ a
 =====================================output=====================================
 let icecream =
     what == "cone"
-        ? p => (!!p ? \`here's your \${p} cone\` : \`just the empty cone for you\`)
-        : p => \`here's your \${p} \${what}\`;
+        ? (p) => (!!p ? \`here's your \${p} cone\` : \`just the empty cone for you\`)
+        : (p) => \`here's your \${p} \${what}\`;
 
 const value = condition1
     ? value1
@@ -2121,8 +2121,8 @@ a
 =====================================output=====================================
 let icecream =
 	what == "cone"
-		? p => (!!p ? \`here's your \${p} cone\` : \`just the empty cone for you\`)
-		: p => \`here's your \${p} \${what}\`;
+		? (p) => (!!p ? \`here's your \${p} cone\` : \`just the empty cone for you\`)
+		: (p) => \`here's your \${p} \${what}\`;
 
 const value = condition1
 	? value1
@@ -2326,8 +2326,8 @@ a
 =====================================output=====================================
 let icecream =
 	what == "cone"
-		? p => (!!p ? \`here's your \${p} cone\` : \`just the empty cone for you\`)
-		: p => \`here's your \${p} \${what}\`;
+		? (p) => (!!p ? \`here's your \${p} cone\` : \`just the empty cone for you\`)
+		: (p) => \`here's your \${p} \${what}\`;
 
 const value = condition1
 	? value1
@@ -2801,7 +2801,7 @@ debug
     : "hidden"
   : null;
 
-a =>
+(a) =>
   a
     ? () => {
         a;
@@ -2809,8 +2809,8 @@ a =>
     : () => {
         a;
       };
-a => (a ? a : a);
-a =>
+(a) => (a ? a : a);
+(a) =>
   a ? aasdasdasdasdasdasdaaasdasdasdasdasdasdasdasdasdasdasdasdasdaaaaaa : a;
 
 ================================================================================
@@ -2838,7 +2838,7 @@ debug
         : "hidden"
     : null;
 
-a =>
+(a) =>
     a
         ? () => {
               a;
@@ -2846,8 +2846,8 @@ a =>
         : () => {
               a;
           };
-a => (a ? a : a);
-a =>
+(a) => (a ? a : a);
+(a) =>
     a ? aasdasdasdasdasdasdaaasdasdasdasdasdasdasdasdasdasdasdasdasdaaaaaa : a;
 
 ================================================================================
@@ -2875,7 +2875,7 @@ debug
 		: "hidden"
 	: null;
 
-a =>
+(a) =>
 	a
 		? () => {
 				a;
@@ -2883,8 +2883,8 @@ a =>
 		: () => {
 				a;
 		  };
-a => (a ? a : a);
-a =>
+(a) => (a ? a : a);
+(a) =>
 	a ? aasdasdasdasdasdasdaaasdasdasdasdasdasdasdasdasdasdasdasdasdaaaaaa : a;
 
 ================================================================================
@@ -2913,7 +2913,7 @@ debug
 		: "hidden"
 	: null;
 
-a =>
+(a) =>
 	a
 		? () => {
 				a;
@@ -2921,8 +2921,8 @@ a =>
 		: () => {
 				a;
 		  };
-a => (a ? a : a);
-a =>
+(a) => (a ? a : a);
+(a) =>
 	a ? aasdasdasdasdasdasdaaasdasdasdasdasdasdasdasdasdasdasdasdasdaaaaaa : a;
 
 ================================================================================
diff --git a/tests/test_declarations/__snapshots__/jsfmt.spec.js.snap b/tests/test_declarations/__snapshots__/jsfmt.spec.js.snap
index 68a59667eee7..0898aeb52d2e 100644
--- a/tests/test_declarations/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/test_declarations/__snapshots__/jsfmt.spec.js.snap
@@ -46,13 +46,13 @@ beforeEach(async(() => {
   // code
 }));
 
-beforeEach(done => foo().bar().bar());
+beforeEach((done) => foo().bar().bar());
 
 afterAll(async(() => {
   console.log("Hello");
 }));
 
-afterAll(done => foo().bar().bar());
+afterAll((done) => foo().bar().bar());
 
 it("should create the app", async(() => {
   //code
@@ -76,7 +76,7 @@ function x() {
 
 exports[`angular_async.js 2`] = `
 ====================================options=====================================
-arrowParens: "always"
+arrowParens: "avoid"
 parsers: ["flow", "typescript"]
 printWidth: 80
                                                                                 | printWidth
@@ -121,13 +121,13 @@ beforeEach(async(() => {
   // code
 }));
 
-beforeEach((done) => foo().bar().bar());
+beforeEach(done => foo().bar().bar());
 
 afterAll(async(() => {
   console.log("Hello");
 }));
 
-afterAll((done) => foo().bar().bar());
+afterAll(done => foo().bar().bar());
 
 it("should create the app", async(() => {
   //code
@@ -214,7 +214,7 @@ function x() {
 
 exports[`angular_fakeAsync.js 2`] = `
 ====================================options=====================================
-arrowParens: "always"
+arrowParens: "avoid"
 parsers: ["flow", "typescript"]
 printWidth: 80
                                                                                 | printWidth
@@ -347,7 +347,7 @@ function x() {
 
 exports[`angularjs_inject.js 2`] = `
 ====================================options=====================================
-arrowParens: "always"
+arrowParens: "avoid"
 parsers: ["flow", "typescript"]
 printWidth: 80
                                                                                 | printWidth
@@ -529,14 +529,14 @@ describe.each\`
 describe.each\`
   a    | b    | expected
   \${11111111111} | \${a()
-  .b(x => x)
+  .b((x) => x)
   .c()
   .d()} | \${2}
   \${1} | \${2} | \${3}
   \${2} | \${1} | \${3}
 \`;
 
-describe.each([1, 2, 3])("test", a => {
+describe.each([1, 2, 3])("test", (a) => {
   expect(a).toBe(a);
 });
 
@@ -561,7 +561,7 @@ test.each([
 
 exports[`jest-each.js 2`] = `
 ====================================options=====================================
-arrowParens: "always"
+arrowParens: "avoid"
 parsers: ["flow", "typescript"]
 printWidth: 80
                                                                                 | printWidth
@@ -674,14 +674,14 @@ describe.each\`
 describe.each\`
   a    | b    | expected
   \${11111111111} | \${a()
-  .b((x) => x)
+  .b(x => x)
   .c()
   .d()} | \${2}
   \${1} | \${2} | \${3}
   \${2} | \${1} | \${3}
 \`;
 
-describe.each([1, 2, 3])("test", (a) => {
+describe.each([1, 2, 3])("test", a => {
   expect(a).toBe(a);
 });
 
@@ -875,11 +875,11 @@ it(\`handles
   console.log("hello!");
 });
 
-test("does something really long and complicated so I have to write a very long name for the test", done => {
+test("does something really long and complicated so I have to write a very long name for the test", (done) => {
   console.log("hello!");
 });
 
-test(\`does something really long and complicated so I have to write a very long name for the test\`, done => {
+test(\`does something really long and complicated so I have to write a very long name for the test\`, (done) => {
   console.log("hello!");
 });
 
@@ -888,13 +888,13 @@ test("does something really long and complicated so I have to write a very long
 });
 
 describe("does something really long and complicated so I have to write a very long name for the describe block", () => {
-  it("an example test", done => {
+  it("an example test", (done) => {
     console.log("hello!");
   });
 });
 
 describe(\`does something really long and complicated so I have to write a very long name for the describe block\`, () => {
-  it(\`an example test\`, done => {
+  it(\`an example test\`, (done) => {
     console.log("hello!");
   });
 });
@@ -976,11 +976,11 @@ it("does something quick", () => {
 }, 1000000000);
 
 it("succeeds if the test finishes in time", () =>
-  new Promise(resolve => setTimeout(resolve, 10)));
+  new Promise((resolve) => setTimeout(resolve, 10)));
 
 it(
   "succeeds if the test finishes in time",
-  () => new Promise(resolve => setTimeout(resolve, 10)),
+  () => new Promise((resolve) => setTimeout(resolve, 10)),
   250
 );
 
@@ -989,7 +989,7 @@ it(
 
 exports[`test_declarations.js 2`] = `
 ====================================options=====================================
-arrowParens: "always"
+arrowParens: "avoid"
 parsers: ["flow", "typescript"]
 printWidth: 80
                                                                                 | printWidth
@@ -1159,11 +1159,11 @@ it(\`handles
   console.log("hello!");
 });
 
-test("does something really long and complicated so I have to write a very long name for the test", (done) => {
+test("does something really long and complicated so I have to write a very long name for the test", done => {
   console.log("hello!");
 });
 
-test(\`does something really long and complicated so I have to write a very long name for the test\`, (done) => {
+test(\`does something really long and complicated so I have to write a very long name for the test\`, done => {
   console.log("hello!");
 });
 
@@ -1172,13 +1172,13 @@ test("does something really long and complicated so I have to write a very long
 });
 
 describe("does something really long and complicated so I have to write a very long name for the describe block", () => {
-  it("an example test", (done) => {
+  it("an example test", done => {
     console.log("hello!");
   });
 });
 
 describe(\`does something really long and complicated so I have to write a very long name for the describe block\`, () => {
-  it(\`an example test\`, (done) => {
+  it(\`an example test\`, done => {
     console.log("hello!");
   });
 });
@@ -1260,11 +1260,11 @@ it("does something quick", () => {
 }, 1000000000);
 
 it("succeeds if the test finishes in time", () =>
-  new Promise((resolve) => setTimeout(resolve, 10)));
+  new Promise(resolve => setTimeout(resolve, 10)));
 
 it(
   "succeeds if the test finishes in time",
-  () => new Promise((resolve) => setTimeout(resolve, 10)),
+  () => new Promise(resolve => setTimeout(resolve, 10)),
   250
 );
 
diff --git a/tests/test_declarations/jsfmt.spec.js b/tests/test_declarations/jsfmt.spec.js
index 5d28b6e40ff4..10bb50ed9548 100644
--- a/tests/test_declarations/jsfmt.spec.js
+++ b/tests/test_declarations/jsfmt.spec.js
@@ -1,2 +1,2 @@
 run_spec(__dirname, ["flow", "typescript"]);
-run_spec(__dirname, ["flow", "typescript"], { arrowParens: "always" });
+run_spec(__dirname, ["flow", "typescript"], { arrowParens: "avoid" });
diff --git a/tests/typescript/compiler/__snapshots__/jsfmt.spec.js.snap b/tests/typescript/compiler/__snapshots__/jsfmt.spec.js.snap
index e30627af66bb..663f6195b6bd 100644
--- a/tests/typescript/compiler/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/typescript/compiler/__snapshots__/jsfmt.spec.js.snap
@@ -280,7 +280,7 @@ var r23 = dot(id)(id);
 =====================================output=====================================
 // dot f g x = f(g(x))
 var dot: <T, S>(f: (_: T) => S) => <U>(g: (_: U) => T) => (_: U) => S;
-dot = <T, S>(f: (_: T) => S) => <U>(g: (_: U) => T): ((r: U) => S) => x =>
+dot = <T, S>(f: (_: T) => S) => <U>(g: (_: U) => T): ((r: U) => S) => (x) =>
   f(g(x));
 var id: <T>(x: T) => T;
 var r23 = dot(id)(id);
diff --git a/tests/typescript/conformance/expressions/asOperator/__snapshots__/jsfmt.spec.js.snap b/tests/typescript/conformance/expressions/asOperator/__snapshots__/jsfmt.spec.js.snap
index f577806454db..ef7ce0cb14a4 100644
--- a/tests/typescript/conformance/expressions/asOperator/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/typescript/conformance/expressions/asOperator/__snapshots__/jsfmt.spec.js.snap
@@ -11,7 +11,7 @@ var x = (v => v) as (x: number) => string;
 
 =====================================output=====================================
 // should error
-var x = (v => v) as (x: number) => string;
+var x = ((v) => v) as (x: number) => string;
 
 ================================================================================
 `;
diff --git a/tests/typescript/conformance/types/functions/__snapshots__/jsfmt.spec.js.snap b/tests/typescript/conformance/types/functions/__snapshots__/jsfmt.spec.js.snap
index a59063cc57af..deb922f4b18a 100644
--- a/tests/typescript/conformance/types/functions/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/typescript/conformance/types/functions/__snapshots__/jsfmt.spec.js.snap
@@ -494,35 +494,35 @@ class AnotherClass {
 // if f is a contextually typed function expression, the inferred return type is the union type
 // of the types of the return statement expressions in the function body,
 // ignoring return statements with no expressions.
-var f7: (x: number) => string | number = x => {
+var f7: (x: number) => string | number = (x) => {
   // should be (x: number) => number | string
   if (x < 0) {
     return x;
   }
   return x.toString();
 };
-var f8: (x: number) => any = x => {
+var f8: (x: number) => any = (x) => {
   // should be (x: number) => Base
   return new Base();
   return new Derived2();
 };
-var f9: (x: number) => any = x => {
+var f9: (x: number) => any = (x) => {
   // should be (x: number) => Base
   return new Base();
   return new Derived();
   return new Derived2();
 };
-var f10: (x: number) => any = x => {
+var f10: (x: number) => any = (x) => {
   // should be (x: number) => Derived | Derived1
   return new Derived();
   return new Derived2();
 };
-var f11: (x: number) => any = x => {
+var f11: (x: number) => any = (x) => {
   // should be (x: number) => Base | AnotherClass
   return new Base();
   return new AnotherClass();
 };
-var f12: (x: number) => any = x => {
+var f12: (x: number) => any = (x) => {
   // should be (x: number) => Base | AnotherClass
   return new Base();
   return; // should be ignored
diff --git a/tests/typescript_typeparams/__snapshots__/jsfmt.spec.js.snap b/tests/typescript_typeparams/__snapshots__/jsfmt.spec.js.snap
index b0b4c643e1ff..d1b410fd2262 100644
--- a/tests/typescript_typeparams/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/typescript_typeparams/__snapshots__/jsfmt.spec.js.snap
@@ -125,7 +125,7 @@ export class Thing2 implements OtherThing {
 }
 
 export class Thing3 implements OtherThing {
-  do: (type: Type) => Provider<Prop> = memoize(type => {
+  do: (type: Type) => Provider<Prop> = memoize((type) => {
     const someVar = doSomething(type);
     if (someVar) {
       return someVar.method();
@@ -342,7 +342,7 @@ export const RedBox = styled.div<{foo: string}>\`
 =====================================output=====================================
 export const RedBox = styled.div<{ foo: string }>\`
   background: red;
-  \${props => props.foo}
+  \${(props) => props.foo}
 \`;
 
 ================================================================================
diff --git a/tests/yield/__snapshots__/jsfmt.spec.js.snap b/tests/yield/__snapshots__/jsfmt.spec.js.snap
index 909b60a3c320..c676b7f025a3 100644
--- a/tests/yield/__snapshots__/jsfmt.spec.js.snap
+++ b/tests/yield/__snapshots__/jsfmt.spec.js.snap
@@ -14,9 +14,9 @@ function *f() {
 
 =====================================output=====================================
 function *f() {
-  yield a => a;
-  yield async a => a;
-  yield async a => a;
+  yield (a) => a;
+  yield async (a) => a;
+  yield async (a) => a;
 }
 
 ================================================================================
diff --git a/tests_integration/__tests__/__snapshots__/early-exit.js.snap b/tests_integration/__tests__/__snapshots__/early-exit.js.snap
index db5bcfb8bc4d..b34e4a7df233 100644
--- a/tests_integration/__tests__/__snapshots__/early-exit.js.snap
+++ b/tests_integration/__tests__/__snapshots__/early-exit.js.snap
@@ -58,9 +58,9 @@ Output options:
 
 Format options:
 
-  --arrow-parens <avoid|always>
+  --arrow-parens <always|avoid>
                            Include parentheses around a sole arrow function parameter.
-                           Defaults to avoid.
+                           Defaults to always.
   --no-bracket-spacing     Do not print spaces between brackets.
   --end-of-line <lf|crlf|cr|auto>
                            Which end of line characters to apply.
@@ -214,9 +214,9 @@ Output options:
 
 Format options:
 
-  --arrow-parens <avoid|always>
+  --arrow-parens <always|avoid>
                            Include parentheses around a sole arrow function parameter.
-                           Defaults to avoid.
+                           Defaults to always.
   --no-bracket-spacing     Do not print spaces between brackets.
   --end-of-line <lf|crlf|cr|auto>
                            Which end of line characters to apply.
diff --git a/tests_integration/__tests__/__snapshots__/help-options.js.snap b/tests_integration/__tests__/__snapshots__/help-options.js.snap
index 5757513eb86f..0efcbedaf283 100644
--- a/tests_integration/__tests__/__snapshots__/help-options.js.snap
+++ b/tests_integration/__tests__/__snapshots__/help-options.js.snap
@@ -3,16 +3,16 @@
 exports[`show detailed usage with --help arrow-parens (stderr) 1`] = `""`;
 
 exports[`show detailed usage with --help arrow-parens (stdout) 1`] = `
-"--arrow-parens <avoid|always>
+"--arrow-parens <always|avoid>
 
   Include parentheses around a sole arrow function parameter.
 
 Valid options:
 
-  avoid    Omit parens when possible. Example: \`x => x\`
   always   Always include parens. Example: \`(x) => x\`
+  avoid    Omit parens when possible. Example: \`x => x\`
 
-Default: avoid
+Default: always
 "
 `;
 
diff --git a/tests_integration/__tests__/__snapshots__/plugin-options-string.js.snap b/tests_integration/__tests__/__snapshots__/plugin-options-string.js.snap
index 9ffaf73be2df..87144ea3a6c9 100644
--- a/tests_integration/__tests__/__snapshots__/plugin-options-string.js.snap
+++ b/tests_integration/__tests__/__snapshots__/plugin-options-string.js.snap
@@ -6,7 +6,7 @@ exports[` 1`] = `
 + Second value
 
 @@ -17,10 +17,12 @@
-                             Defaults to avoid.
+                             Defaults to always.
     --no-bracket-spacing     Do not print spaces between brackets.
     --end-of-line <lf|crlf|cr|auto>
                              Which end of line characters to apply.
diff --git a/tests_integration/__tests__/__snapshots__/plugin-options.js.snap b/tests_integration/__tests__/__snapshots__/plugin-options.js.snap
index fda2e64c41ef..d3f524fda8c2 100644
--- a/tests_integration/__tests__/__snapshots__/plugin-options.js.snap
+++ b/tests_integration/__tests__/__snapshots__/plugin-options.js.snap
@@ -6,7 +6,7 @@ exports[` 1`] = `
 + Second value
 
 @@ -17,10 +17,12 @@
-                             Defaults to avoid.
+                             Defaults to always.
     --no-bracket-spacing     Do not print spaces between brackets.
     --end-of-line <lf|crlf|cr|auto>
                              Which end of line characters to apply.
diff --git a/tests_integration/__tests__/__snapshots__/schema.js.snap b/tests_integration/__tests__/__snapshots__/schema.js.snap
index bc89850e3994..06ee0a419d11 100644
--- a/tests_integration/__tests__/__snapshots__/schema.js.snap
+++ b/tests_integration/__tests__/__snapshots__/schema.js.snap
@@ -7,19 +7,19 @@ Object {
     "optionsDefinition": Object {
       "properties": Object {
         "arrowParens": Object {
-          "default": "avoid",
+          "default": "always",
           "description": "Include parentheses around a sole arrow function parameter.",
           "oneOf": Array [
             Object {
-              "description": "Omit parens when possible. Example: \`x => x\`",
+              "description": "Always include parens. Example: \`(x) => x\`",
               "enum": Array [
-                "avoid",
+                "always",
               ],
             },
             Object {
-              "description": "Always include parens. Example: \`(x) => x\`",
+              "description": "Omit parens when possible. Example: \`x => x\`",
               "enum": Array [
-                "always",
+                "avoid",
               ],
             },
           ],
diff --git a/tests_integration/__tests__/__snapshots__/support-info.js.snap b/tests_integration/__tests__/__snapshots__/support-info.js.snap
index fcf21fbae3e0..a86d19913552 100644
--- a/tests_integration/__tests__/__snapshots__/support-info.js.snap
+++ b/tests_integration/__tests__/__snapshots__/support-info.js.snap
@@ -480,8 +480,8 @@ exports[`API getSupportInfo() with version 1.8.2 -> 1.16.0 1`] = `
     \\"options\\": Object {
 +     \\"arrowParens\\": Object {
 +       \\"choices\\": Array [
-+         \\"avoid\\",
 +         \\"always\\",
++         \\"avoid\\",
 +       ],
 +       \\"default\\": \\"avoid\\",
 +       \\"type\\": \\"choice\\",
@@ -609,6 +609,19 @@ exports[`API getSupportInfo() with version 1.16.0 -> undefined 1`] = `
       ],
       \\"Markdown\\": Array [
         \\"markdown\\",
+@@ -68,11 +71,11 @@
+      \\"arrowParens\\": Object {
+        \\"choices\\": Array [
+          \\"always\\",
+          \\"avoid\\",
+        ],
+-       \\"default\\": \\"avoid\\",
++       \\"default\\": \\"always\\",
+        \\"type\\": \\"choice\\",
+      },
+      \\"bracketSpacing\\": Object {
+        \\"default\\": true,
+        \\"type\\": \\"boolean\\",
 @@ -91,11 +94,11 @@
           \\"lf\\",
           \\"crlf\\",
@@ -1105,16 +1118,16 @@ exports[`CLI --support-info (stdout) 1`] = `
     {
       \\"category\\": \\"JavaScript\\",
       \\"choices\\": [
-        {
-          \\"description\\": \\"Omit parens when possible. Example: \`x => x\`\\",
-          \\"value\\": \\"avoid\\"
-        },
         {
           \\"description\\": \\"Always include parens. Example: \`(x) => x\`\\",
           \\"value\\": \\"always\\"
+        },
+        {
+          \\"description\\": \\"Omit parens when possible. Example: \`x => x\`\\",
+          \\"value\\": \\"avoid\\"
         }
       ],
-      \\"default\\": \\"avoid\\",
+      \\"default\\": \\"always\\",
       \\"description\\": \\"Include parentheses around a sole arrow function parameter.\\",
       \\"name\\": \\"arrowParens\\",
       \\"pluginDefaults\\": {},