Full Code of arijs/prettier-miscellaneous for AI

master ca96030affb1 cached
3387 files
7.2 MB
2.1M tokens
1 requests
Download .txt
Showing preview only (8,318K chars total). Download the full file or copy to clipboard to get everything.
Repository: arijs/prettier-miscellaneous
Branch: master
Commit: ca96030affb1
Files: 3387
Total size: 7.2 MB

Directory structure:
gitextract_9pedfg9r/

├── .codecov.yml
├── .eslintignore
├── .eslintrc.js
├── .flowconfig
├── .gitignore
├── .ignore
├── .npmignore
├── .pre-commit-hooks.yaml
├── .travis.yml
├── .yarnrc
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── Rationale.md
├── bin/
│   └── prettier.js
├── commands.md
├── docs/
│   ├── CNAME
│   └── en/
│       ├── editors.md
│       ├── options.md
│       ├── usage.md
│       └── why-prettier.md
├── editors/
│   ├── atom.md
│   ├── emacs/
│   │   └── README.md
│   ├── vim/
│   │   └── README.md
│   └── webstorm/
│       └── README.md
├── index.js
├── jest.config.js
├── package.json
├── scripts/
│   ├── build/
│   │   ├── .eslintrc.js
│   │   ├── build.js
│   │   ├── rollup.base.config.js
│   │   ├── rollup.bin.config.js
│   │   ├── rollup.docs.config.js
│   │   ├── rollup.index.config.js
│   │   └── rollup.parser.config.js
│   ├── run-external-typescript-tests.js
│   └── sync-flow-tests.js
├── src/
│   ├── clean-ast.js
│   ├── comments.js
│   ├── deprecated.js
│   ├── doc-builders.js
│   ├── doc-debug.js
│   ├── doc-printer.js
│   ├── doc-utils.js
│   ├── fast-path.js
│   ├── multiparser.js
│   ├── options.js
│   ├── parser-babylon.js
│   ├── parser-create-error.js
│   ├── parser-flow.js
│   ├── parser-graphql.js
│   ├── parser-include-shebang.js
│   ├── parser-json.js
│   ├── parser-parse5.js
│   ├── parser-postcss.js
│   ├── parser-typescript.js
│   ├── parser.js
│   ├── printer-graphql.js
│   ├── printer-htmlparser2.js
│   ├── printer-postcss.js
│   ├── printer.js
│   ├── resolve-config.js
│   └── util.js
├── tests/
│   ├── .eslintrc.js
│   ├── align-object-properties/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── o.js
│   ├── array_spread/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── multiple.js
│   ├── arrays/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── empty.js
│   │   ├── jsfmt.spec.js
│   │   ├── last.js
│   │   └── preserve_empty_lines.js
│   ├── arrow-call/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── arrow_call.js
│   │   └── jsfmt.spec.js
│   ├── arrows/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── arrow-parens.js
│   │   ├── arrow_function_expression.js
│   │   ├── block_like.js
│   │   ├── call.js
│   │   ├── comment.js
│   │   ├── currying.js
│   │   ├── jsfmt.spec.js
│   │   ├── long-call-no-args.js
│   │   ├── long-contents.js
│   │   ├── short_body.js
│   │   └── type_params.js
│   ├── arrows_bind/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── arrows-bind.js
│   │   └── jsfmt.spec.js
│   ├── assignment/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── binaryish.js
│   │   ├── jsfmt.spec.js
│   │   └── sequence.js
│   ├── assignment_comments/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── assignment_comments.js
│   │   └── jsfmt.spec.js
│   ├── assignment_expression/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── assignment_expression.js
│   │   └── jsfmt.spec.js
│   ├── async/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── async-iteration.js
│   │   ├── await_parse.js
│   │   ├── conditional-expression.js
│   │   ├── jsfmt.spec.js
│   │   └── parens.js
│   ├── binary-expressions/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── arrow.js
│   │   ├── bitwise-flags.js
│   │   ├── comment.js
│   │   ├── equality.js
│   │   ├── exp.js
│   │   ├── if.js
│   │   ├── inline-object-array.js
│   │   ├── jsfmt.spec.js
│   │   ├── jsx_parent.js
│   │   ├── math.js
│   │   ├── short-right.js
│   │   ├── test.js
│   │   └── unary.js
│   ├── binary_math/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── parens.js
│   ├── bind_expressions/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── bind_parens.js
│   │   ├── jsfmt.spec.js
│   │   └── method_chain.js
│   ├── bracketSpacing/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── array.js
│   │   ├── jsfmt.spec.js
│   │   └── object.js
│   ├── break-calls/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── break.js
│   │   ├── jsfmt.spec.js
│   │   └── parent.js
│   ├── class_comment/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── comments.js
│   │   └── jsfmt.spec.js
│   ├── class_extends/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── extends.js
│   │   └── jsfmt.spec.js
│   ├── classes/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── binary.js
│   │   ├── break.js
│   │   ├── call.js
│   │   ├── empty.js
│   │   ├── jsfmt.spec.js
│   │   ├── member.js
│   │   ├── method.js
│   │   └── ternary.js
│   ├── comments/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── assignment-pattern.js
│   │   ├── before-comma.js
│   │   ├── blank.js
│   │   ├── call_comment.js
│   │   ├── dangling.js
│   │   ├── dangling_array.js
│   │   ├── dangling_for.js
│   │   ├── export.js
│   │   ├── first-line.js
│   │   ├── flow_union.js
│   │   ├── function-declaration.js
│   │   ├── if.js
│   │   ├── issues.js
│   │   ├── jsfmt.spec.js
│   │   ├── jsx.js
│   │   ├── last-arg.js
│   │   ├── preserve-new-line-last.js
│   │   ├── return-statement.js
│   │   ├── switch.js
│   │   ├── template-literal.js
│   │   ├── trailing_space.js
│   │   ├── try.js
│   │   └── variable_declarator.js
│   ├── computed_props/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── classes.js
│   │   └── jsfmt.spec.js
│   ├── conditional/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── comments.js
│   │   ├── jsfmt.spec.js
│   │   ├── new-expression.js
│   │   └── no-confusing-arrow.js
│   ├── css_atrule/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── if-else.css
│   │   └── jsfmt.spec.js
│   ├── css_attribute/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── insensitive.css
│   │   └── jsfmt.spec.js
│   ├── css_atword/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── atword.css
│   │   └── jsfmt.spec.js
│   ├── css_bom/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── bom.css
│   │   └── jsfmt.spec.js
│   ├── css_colon/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── colon.css
│   │   └── jsfmt.spec.js
│   ├── css_color/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── hexcolor.css
│   │   └── jsfmt.spec.js
│   ├── css_combinator/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── combinator.css
│   │   ├── jsfmt.spec.js
│   │   └── leading.css
│   ├── css_comments/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── block.css
│   │   ├── bug.css
│   │   ├── jsfmt.spec.js
│   │   ├── places.css
│   │   ├── prettier-ignore.css
│   │   ├── selector.css
│   │   └── trailing_star_slash.css
│   ├── css_composes/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── composes.css
│   │   └── jsfmt.spec.js
│   ├── css_empty/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── empty.css
│   │   └── jsfmt.spec.js
│   ├── css_extend/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── extend.css
│   │   └── jsfmt.spec.js
│   ├── css_fill_value/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── fill.css
│   │   └── jsfmt.spec.js
│   ├── css_import/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── directives.css
│   │   ├── jsfmt.spec.js
│   │   └── url.css
│   ├── css_important/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── important.css
│   │   └── jsfmt.spec.js
│   ├── css_indent/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── indent.css
│   │   ├── jsfmt.spec.js
│   │   └── selectors.css
│   ├── css_inline_url/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── empty.css
│   │   ├── inline_url.css
│   │   └── jsfmt.spec.js
│   ├── css_less_docs/
│   │   └── less_docs.css
│   ├── css_long_rule/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── long_rule.css
│   ├── css_loose/
│   │   └── loose.js
│   ├── css_media/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── overflow.css
│   ├── css_params/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── params.css
│   ├── css_parens/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── parens.js
│   ├── css_prefix/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── prefix.css
│   ├── css_pseudo_call/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── pseudo_call.css
│   ├── css_scss/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── import_comma.css
│   │   ├── jsfmt.spec.js
│   │   └── scss.css
│   ├── css_selector_call/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── call.css
│   │   └── jsfmt.spec.js
│   ├── css_selector_list/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── selectors.css
│   ├── css_selector_string/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── string.css
│   ├── css_trailing_comma/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── trailing.css
│   ├── cursor/
│   │   └── jsfmt.spec.js
│   ├── decorators/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── comments.js
│   │   ├── jsfmt.spec.js
│   │   ├── methods.js
│   │   ├── mobx.js
│   │   ├── multiple.js
│   │   └── redux.js
│   ├── destructuring/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── destructuring.js
│   │   └── jsfmt.spec.js
│   ├── directives/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── escaped.js
│   │   ├── jsfmt.spec.js
│   │   ├── last-line-0.js
│   │   ├── last-line-1.js
│   │   ├── last-line-2.js
│   │   ├── newline.js
│   │   ├── no-newline.js
│   │   └── test.js
│   ├── do/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── do.js
│   │   └── jsfmt.spec.js
│   ├── dynamic_import/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── test.js
│   ├── empty/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── empty.js
│   │   └── jsfmt.spec.js
│   ├── empty_paren_comment/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── class.js
│   │   ├── empty_paren_comment.js
│   │   └── jsfmt.spec.js
│   ├── empty_statement/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── body.js
│   │   ├── jsfmt.spec.js
│   │   └── no-newline.js
│   ├── es6modules/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── export_default_arrow_expression.js
│   │   ├── export_default_call_expression.js
│   │   ├── export_default_class_declaration.js
│   │   ├── export_default_class_expression.js
│   │   ├── export_default_function_declaration.js
│   │   ├── export_default_function_declaration_async.js
│   │   ├── export_default_function_declaration_named.js
│   │   ├── export_default_function_expression.js
│   │   ├── export_default_function_expression_named.js
│   │   ├── export_default_new_expression.js
│   │   └── jsfmt.spec.js
│   ├── exact_object/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── test.js
│   ├── export/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── bracket.js
│   │   ├── empty.js
│   │   └── jsfmt.spec.js
│   ├── export_default/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── body.js
│   │   └── jsfmt.spec.js
│   ├── export_extension/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── export.js
│   │   └── jsfmt.spec.js
│   ├── exports/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── test.js
│   ├── expression_statement/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   ├── no_regression.js
│   │   └── use_strict.js
│   ├── first_argument_expansion/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── test.js
│   ├── flow/
│   │   ├── abnormal/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── break-continue.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── return.js
│   │   │   └── toplevel_throw.js
│   │   ├── annot/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── annot.js
│   │   │   ├── any/
│   │   │   │   ├── A.js
│   │   │   │   ├── B.js
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── forward_ref.js
│   │   │   ├── issue-530.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── leak.js
│   │   │   ├── other.js
│   │   │   ├── scope.js
│   │   │   └── test.js
│   │   ├── annot2/
│   │   │   ├── A.js
│   │   │   ├── B.js
│   │   │   ├── T.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   └── jsfmt.spec.js
│   │   ├── any/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── any.js
│   │   │   ├── anyexportflowfile.js
│   │   │   ├── flowfixme.js
│   │   │   ├── flowissue.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── nonflowfile.js
│   │   │   ├── propagate.js
│   │   │   └── reach.js
│   │   ├── arith/
│   │   │   ├── Arith.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── exponent.js
│   │   │   ├── generic.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── mult.js
│   │   │   └── relational.js
│   │   ├── array-filter/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── test.js
│   │   │   └── test2.js
│   │   ├── array_spread/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── arraylib/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── array_lib.js
│   │   │   └── jsfmt.spec.js
│   │   ├── arrays/
│   │   │   ├── Arrays.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── numeric_elem.js
│   │   ├── arrows/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── advanced_arrows.js
│   │   │   ├── arrows.js
│   │   │   └── jsfmt.spec.js
│   │   ├── async/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── async.js
│   │   │   ├── async2.js
│   │   │   ├── async3.js
│   │   │   ├── async_base_class.js
│   │   │   ├── async_parse.js
│   │   │   ├── async_promise.js
│   │   │   ├── async_return_void.js
│   │   │   ├── await_parse.js
│   │   │   └── jsfmt.spec.js
│   │   ├── async_iteration/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── delegate_yield.js
│   │   │   ├── generator.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── return.js
│   │   │   └── throw.js
│   │   ├── autocomplete/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── customfun.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── unknown.js
│   │   ├── auxiliary/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── client.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── lib/
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── jsfmt.spec.js
│   │   │       └── lib.js
│   │   ├── binary/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── in.js
│   │   │   └── jsfmt.spec.js
│   │   ├── binding/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── const.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── rebinding.js
│   │   │   ├── scope.js
│   │   │   └── tdz.js
│   │   ├── bom/
│   │   │   ├── FormData.js
│   │   │   ├── MutationObserver.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   └── jsfmt.spec.js
│   │   ├── bounded_poly/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── scope.js
│   │   │   └── test.js
│   │   ├── break/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── break.js
│   │   │   └── jsfmt.spec.js
│   │   ├── builtin_uses/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── test.js
│   │   │   └── test2.js
│   │   ├── builtins/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── array.js
│   │   │   ├── genericfoo.js
│   │   │   └── jsfmt.spec.js
│   │   ├── call_caching1/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── lib/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── core.js
│   │   │   │   ├── immutable.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── test.js
│   │   │   ├── test2.js
│   │   │   └── test3.js
│   │   ├── call_caching2/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── lib/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── immutable.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── call_properties/
│   │   │   ├── A.js
│   │   │   ├── B.js
│   │   │   ├── C.js
│   │   │   ├── D.js
│   │   │   ├── E.js
│   │   │   ├── F.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   └── jsfmt.spec.js
│   │   ├── callable/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── optional.js
│   │   │   └── primitives.js
│   │   ├── check-contents/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── not_flow.js
│   │   ├── class_fields/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── base_class.js
│   │   │   ├── derived_class.js
│   │   │   ├── generic_class.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── scoping.js
│   │   ├── class_method_default_parameters/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── class_method_default_parameters.js
│   │   │   └── jsfmt.spec.js
│   │   ├── class_munging/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── with_munging.js
│   │   │   └── without_munging.js
│   │   ├── class_statics/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── class_subtyping/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── test.js
│   │   │   ├── test2.js
│   │   │   ├── test3.js
│   │   │   └── test4.js
│   │   ├── class_type/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── test.js
│   │   │   └── test2.js
│   │   ├── classes/
│   │   │   ├── A.js
│   │   │   ├── B.js
│   │   │   ├── C.js
│   │   │   ├── D.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── class_shapes.js
│   │   │   ├── expr.js
│   │   │   ├── extends_any.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── loc.js
│   │   │   └── statics.js
│   │   ├── closure/
│   │   │   ├── Closure.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── cond_havoc.js
│   │   │   ├── const.js
│   │   │   └── jsfmt.spec.js
│   │   ├── commonjs/
│   │   │   ├── Abs.js
│   │   │   ├── Rel.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   └── jsfmt.spec.js
│   │   ├── computed_props/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── test.js
│   │   │   ├── test2.js
│   │   │   ├── test3.js
│   │   │   ├── test4.js
│   │   │   ├── test5.js
│   │   │   ├── test6.js
│   │   │   └── test7.js
│   │   ├── conditional/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── conditional.js
│   │   │   └── jsfmt.spec.js
│   │   ├── config_all/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── no_at_flow.js
│   │   ├── config_all_false/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── no_at_flow.js
│   │   ├── config_all_weak/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── no_at_flow.js
│   │   ├── config_file_extensions/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── config_ignore/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── dir/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── foo.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── foo.js
│   │   │   └── jsfmt.spec.js
│   │   ├── config_module_name_mapper_PROJECT_ROOT-1.0/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── main.js
│   │   │   └── src/
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── jsfmt.spec.js
│   │   │       └── testmodule.js
│   │   ├── config_module_name_mapper_filetype/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── config_module_name_rewrite_haste/
│   │   │   ├── A.js
│   │   │   ├── Exists.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   └── jsfmt.spec.js
│   │   ├── config_module_name_rewrite_node/
│   │   │   ├── A.js
│   │   │   ├── Exists.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   └── jsfmt.spec.js
│   │   ├── config_module_system_node_resolve_dirname/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── custom_resolve_dir/
│   │   │   │   ├── testproj/
│   │   │   │   │   ├── __snapshots__/
│   │   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── jsfmt.spec.js
│   │   │   │   └── testproj2/
│   │   │   │       ├── __snapshots__/
│   │   │   │       │   └── jsfmt.spec.js.snap
│   │   │   │       ├── index.js
│   │   │   │       └── jsfmt.spec.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── subdir/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── custom_resolve_dir/
│   │   │   │   │   └── testproj2/
│   │   │   │   │       ├── __snapshots__/
│   │   │   │   │       │   └── jsfmt.spec.js.snap
│   │   │   │   │       ├── index.js
│   │   │   │   │       └── jsfmt.spec.js
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── sublevel.js
│   │   │   └── toplevel.js
│   │   ├── config_munging_underscores/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── chain.js
│   │   │   ├── commonjs_export.js
│   │   │   ├── commonjs_import.js
│   │   │   └── jsfmt.spec.js
│   │   ├── config_munging_underscores2/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── chain.js
│   │   │   └── jsfmt.spec.js
│   │   ├── const_params/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── constructor/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── constructor.js
│   │   │   └── jsfmt.spec.js
│   │   ├── constructor_annots/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── constructors.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── contents/
│   │   │   ├── ignore/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── dummy.js
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── test.js
│   │   │   └── no_flow/
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── dummy.js
│   │   │       ├── jsfmt.spec.js
│   │   │       └── test.js
│   │   ├── core_tests/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── boolean.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── map.js
│   │   │   ├── regexp.js
│   │   │   └── weakset.js
│   │   ├── covariance/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── cycle/
│   │   │   ├── A.js
│   │   │   ├── B.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   └── jsfmt.spec.js
│   │   ├── date/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── date.js
│   │   │   └── jsfmt.spec.js
│   │   ├── declaration_files_haste/
│   │   │   ├── ExplicitProvidesModuleDifferentName.js
│   │   │   ├── ExplicitProvidesModuleSameName.js
│   │   │   ├── ImplicitProvidesModule.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── external/
│   │   │   │   └── _d3/
│   │   │   │       ├── __snapshots__/
│   │   │   │       │   └── jsfmt.spec.js.snap
│   │   │   │       ├── jsfmt.spec.js
│   │   │   │       └── min.js
│   │   │   ├── foo/
│   │   │   │   └── bar/
│   │   │   │       ├── __snapshots__/
│   │   │   │       │   └── jsfmt.spec.js.snap
│   │   │   │       ├── jsfmt.spec.js
│   │   │   │       └── nested_test.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── md5.js
│   │   │   ├── test.js
│   │   │   └── ws/
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── index.js
│   │   │       ├── jsfmt.spec.js
│   │   │       └── test/
│   │   │           ├── __snapshots__/
│   │   │           │   └── jsfmt.spec.js.snap
│   │   │           ├── client.js
│   │   │           └── jsfmt.spec.js
│   │   ├── declaration_files_incremental_haste/
│   │   │   ├── A.js
│   │   │   ├── ExplicitProvidesModuleDifferentName.js
│   │   │   ├── ExplicitProvidesModuleSameName.js
│   │   │   ├── ImplicitProvidesModule.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── external/
│   │   │   │   └── _d3/
│   │   │   │       ├── __snapshots__/
│   │   │   │       │   └── jsfmt.spec.js.snap
│   │   │   │       ├── jsfmt.spec.js
│   │   │   │       └── min.js
│   │   │   ├── foo/
│   │   │   │   └── bar/
│   │   │   │       ├── __snapshots__/
│   │   │   │       │   └── jsfmt.spec.js.snap
│   │   │   │       ├── jsfmt.spec.js
│   │   │   │       └── nested_test.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── md5.js
│   │   │   ├── test.js
│   │   │   └── ws/
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── index.js
│   │   │       ├── jsfmt.spec.js
│   │   │       └── test/
│   │   │           ├── __snapshots__/
│   │   │           │   └── jsfmt.spec.js.snap
│   │   │           ├── client.js
│   │   │           └── jsfmt.spec.js
│   │   ├── declaration_files_incremental_haste_name_reducers/
│   │   │   ├── A.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── index.js
│   │   │   └── jsfmt.spec.js
│   │   ├── declaration_files_incremental_node/
│   │   │   ├── A.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── test_absolute.js
│   │   │   └── test_relative.js
│   │   ├── declaration_files_node/
│   │   │   ├── A.js
│   │   │   ├── CJS.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── test_absolute.js
│   │   │   └── test_relative.js
│   │   ├── declare_class/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── declare_class.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── lib/
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── jsfmt.spec.js
│   │   │       └── test.js
│   │   ├── declare_export/
│   │   │   ├── B.js
│   │   │   ├── C.js
│   │   │   ├── CommonJS_Clobbering_Class.js
│   │   │   ├── CommonJS_Clobbering_Lit.js
│   │   │   ├── CommonJS_Named.js
│   │   │   ├── ES6_DefaultAndNamed.js
│   │   │   ├── ES6_Default_AnonFunction1.js
│   │   │   ├── ES6_Default_AnonFunction2.js
│   │   │   ├── ES6_Default_NamedClass1.js
│   │   │   ├── ES6_Default_NamedClass2.js
│   │   │   ├── ES6_Default_NamedFunction1.js
│   │   │   ├── ES6_Default_NamedFunction2.js
│   │   │   ├── ES6_ExportAllFromMulti.js
│   │   │   ├── ES6_ExportAllFrom_Intermediary1.js
│   │   │   ├── ES6_ExportAllFrom_Intermediary2.js
│   │   │   ├── ES6_ExportAllFrom_Source1.js
│   │   │   ├── ES6_ExportAllFrom_Source2.js
│   │   │   ├── ES6_ExportFrom_Intermediary1.js
│   │   │   ├── ES6_ExportFrom_Intermediary2.js
│   │   │   ├── ES6_ExportFrom_Source1.js
│   │   │   ├── ES6_ExportFrom_Source2.js
│   │   │   ├── ES6_Named1.js
│   │   │   ├── ES6_Named2.js
│   │   │   ├── ProvidesModuleA.js
│   │   │   ├── ProvidesModuleCJSDefault.js
│   │   │   ├── ProvidesModuleD.js
│   │   │   ├── ProvidesModuleES6Default.js
│   │   │   ├── SideEffects.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── es6modules.js
│   │   │   └── jsfmt.spec.js
│   │   ├── declare_fun/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── declare_module_exports/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── flow-typed/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── libs.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── main.js
│   │   ├── declare_type/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── import_declare_type.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── lib/
│   │   │       ├── DeclareModule_TypeAlias.js
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── declare_type_exports.js
│   │   │       └── jsfmt.spec.js
│   │   ├── def_site_variance/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── demo/
│   │   │   ├── 1/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── f.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   └── 2/
│   │   │       ├── A.js
│   │   │       ├── B.js
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       └── jsfmt.spec.js
│   │   ├── deps/
│   │   │   ├── A.js
│   │   │   ├── B.js
│   │   │   ├── C.js
│   │   │   ├── D.js
│   │   │   ├── E.js
│   │   │   ├── F.js
│   │   │   ├── G.js
│   │   │   ├── H.js
│   │   │   ├── I.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   └── jsfmt.spec.js
│   │   ├── destructuring/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── array_rest.js
│   │   │   ├── computed.js
│   │   │   ├── defaults.js
│   │   │   ├── destructuring.js
│   │   │   ├── eager.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── poly.js
│   │   │   ├── rec.js
│   │   │   ├── refinement_non_termination.js
│   │   │   ├── string_lit.js
│   │   │   └── unannotated.js
│   │   ├── dictionary/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── any.js
│   │   │   ├── compatible.js
│   │   │   ├── dictionary.js
│   │   │   ├── incompatible.js
│   │   │   ├── issue-1745.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── test.js
│   │   │   └── test_client.js
│   │   ├── disjoint-union-perf/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── ast.js
│   │   │   ├── emit.js
│   │   │   ├── jsAst.js
│   │   │   └── jsfmt.spec.js
│   │   ├── docblock_flow/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── license_with_flow.js
│   │   │   ├── max_header_tokens.js
│   │   │   ├── multiple_flows_1.js
│   │   │   ├── multiple_flows_2.js
│   │   │   ├── multiple_providesModule_1.js
│   │   │   ├── multiple_providesModule_2.js
│   │   │   ├── use_strict_with_flow.js
│   │   │   ├── with_flow.js
│   │   │   └── without_flow.js
│   │   ├── dom/
│   │   │   ├── CanvasRenderingContext2D.js
│   │   │   ├── CustomEvent.js
│   │   │   ├── Document.js
│   │   │   ├── Element.js
│   │   │   ├── HTMLCanvasElement.js
│   │   │   ├── HTMLElement.js
│   │   │   ├── HTMLInputElement.js
│   │   │   ├── URL.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── eventtarget.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── path2d.js
│   │   │   ├── registerElement.js
│   │   │   └── traversal.js
│   │   ├── dump-types/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── import.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── duplicate_methods/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── encaps/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── encaps.js
│   │   │   └── jsfmt.spec.js
│   │   ├── enumerror/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── enumerror.js
│   │   │   └── jsfmt.spec.js
│   │   ├── equals/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── equals.js
│   │   │   └── jsfmt.spec.js
│   │   ├── error_messages/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── errors.js
│   │   │   └── jsfmt.spec.js
│   │   ├── es6modules/
│   │   │   ├── B.js
│   │   │   ├── C.js
│   │   │   ├── CommonJS_Clobbering_Class.js
│   │   │   ├── CommonJS_Clobbering_Frozen.js
│   │   │   ├── CommonJS_Clobbering_Lit.js
│   │   │   ├── CommonJS_Named.js
│   │   │   ├── ES6_DefaultAndNamed.js
│   │   │   ├── ES6_Default_AnonClass1.js
│   │   │   ├── ES6_Default_AnonClass2.js
│   │   │   ├── ES6_Default_AnonFunction1.js
│   │   │   ├── ES6_Default_AnonFunction2.js
│   │   │   ├── ES6_Default_NamedClass1.js
│   │   │   ├── ES6_Default_NamedClass2.js
│   │   │   ├── ES6_Default_NamedFunction1.js
│   │   │   ├── ES6_Default_NamedFunction2.js
│   │   │   ├── ES6_ExportAllFromMulti.js
│   │   │   ├── ES6_ExportAllFrom_Intermediary1.js
│   │   │   ├── ES6_ExportAllFrom_Intermediary2.js
│   │   │   ├── ES6_ExportAllFrom_Source1.js
│   │   │   ├── ES6_ExportAllFrom_Source2.js
│   │   │   ├── ES6_ExportFrom_Intermediary1.js
│   │   │   ├── ES6_ExportFrom_Intermediary2.js
│   │   │   ├── ES6_ExportFrom_Source1.js
│   │   │   ├── ES6_ExportFrom_Source2.js
│   │   │   ├── ES6_Named1.js
│   │   │   ├── ES6_Named2.js
│   │   │   ├── ExportType.js
│   │   │   ├── ProvidesModuleA.js
│   │   │   ├── ProvidesModuleCJSDefault.js
│   │   │   ├── ProvidesModuleD.js
│   │   │   ├── ProvidesModuleES6Default.js
│   │   │   ├── SideEffects.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── es6modules.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test_imports_are_frozen.js
│   │   ├── es_declare_module/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── es_declare_module.js
│   │   │   ├── flow-typed/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── declares.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   └── jsfmt.spec.js
│   │   ├── esproposal_class_instance_fields.ignore/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── esproposal_class_instance_fields.warn/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── esproposal_class_static_fields.ignore/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── esproposal_class_static_fields.warn/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── esproposal_export_star_as.enable/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── dest.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── source.js
│   │   │   └── test.js
│   │   ├── esproposal_export_star_as.ignore/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── dest.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── source.js
│   │   │   └── test.js
│   │   ├── esproposal_export_star_as.warn/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── export_default/
│   │   │   ├── P.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── lib/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── lib.js
│   │   │   └── test.js
│   │   ├── export_type/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── cjs_with_types.js
│   │   │   ├── importer.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── types_only.js
│   │   │   └── types_only2.js
│   │   ├── extensions/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── foo.js
│   │   │   └── jsfmt.spec.js
│   │   ├── facebook_fbt_none/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── main.js
│   │   ├── facebook_fbt_some/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── flow-typed/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── fbt.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── main.js
│   │   ├── facebookisms/
│   │   │   ├── Bar.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── copyProperties.js
│   │   │   ├── invariant.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── lib.js
│   │   │   ├── mergeInto.js
│   │   │   └── test.js
│   │   ├── fetch/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── fetch.js
│   │   │   ├── headers.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── request.js
│   │   │   ├── response.js
│   │   │   └── urlsearchparams.js
│   │   ├── find-module/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── req.js
│   │   │   └── test.js
│   │   ├── fixpoint/
│   │   │   ├── Fun.js
│   │   │   ├── Ycombinator.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   └── jsfmt.spec.js
│   │   ├── flow_ast.template_strings/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── foo.js
│   │   │   └── jsfmt.spec.js
│   │   ├── focus-check/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── a.js
│   │   │   ├── b.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── for/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── abnormal.js
│   │   │   ├── abnormal_for_in.js
│   │   │   ├── abnormal_for_of.js
│   │   │   └── jsfmt.spec.js
│   │   ├── forof/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── forof.js
│   │   │   └── jsfmt.spec.js
│   │   ├── function/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── apply.js
│   │   │   ├── bind.js
│   │   │   ├── call.js
│   │   │   ├── function.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── rest.js
│   │   │   └── rest_type.js
│   │   ├── funrec/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── funrec.js
│   │   │   └── jsfmt.spec.js
│   │   ├── generators/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── class.js
│   │   │   ├── class_failure.js
│   │   │   ├── generators.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── refi.js
│   │   │   ├── return.js
│   │   │   ├── throw.js
│   │   │   └── variance.js
│   │   ├── generics/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── generics.js
│   │   │   └── jsfmt.spec.js
│   │   ├── geolocation/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── a.js
│   │   │   └── jsfmt.spec.js
│   │   ├── get-def/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── example.js
│   │   │   ├── helpers/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── exports_default.js
│   │   │   │   ├── exports_named.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── imports.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── library.js
│   │   ├── get-def2/
│   │   │   ├── Parent.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── lib/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── jsx.js
│   │   │   ├── main.js
│   │   │   ├── override.js
│   │   │   ├── react.js
│   │   │   └── types.js
│   │   ├── get-imports/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── a.js
│   │   │   ├── b.js
│   │   │   ├── c.js
│   │   │   └── jsfmt.spec.js
│   │   ├── getters_and_setters_disabled/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── getters_and_setters.js
│   │   │   └── jsfmt.spec.js
│   │   ├── getters_and_setters_enabled/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── class.js
│   │   │   ├── declare_class.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── object.js
│   │   │   ├── object_type.js
│   │   │   ├── react.js
│   │   │   └── variance.js
│   │   ├── haste_cycle/
│   │   │   ├── API.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── models/
│   │   │       ├── OpenGraphAction.js
│   │   │       ├── OpenGraphObject.js
│   │   │       ├── OpenGraphValueContainer.js
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       └── jsfmt.spec.js
│   │   ├── haste_dupe/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── dupe1.js
│   │   │   ├── dupe2.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── requires_dupe.js
│   │   ├── haste_name_reducers_defaults/
│   │   │   ├── Module1.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── index.js
│   │   │   └── jsfmt.spec.js
│   │   ├── haste_use_name_reducers/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── dir1/
│   │   │   │   ├── Module1.js
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── dir2/
│   │   │   │   ├── Module2.ios.js
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── index.js
│   │   │   └── jsfmt.spec.js
│   │   ├── ignore_package/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── foo.js
│   │   │   └── jsfmt.spec.js
│   │   ├── immutable_methods/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── implements/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── import_type/
│   │   │   ├── ExportCJSDefault_Class.js
│   │   │   ├── ExportCJSNamed_Class.js
│   │   │   ├── ExportDefault_Class.js
│   │   │   ├── ExportNamed_Alias.js
│   │   │   ├── ExportNamed_Class.js
│   │   │   ├── ExportsANumber.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── import_type.js
│   │   │   ├── issue-359.js
│   │   │   └── jsfmt.spec.js
│   │   ├── import_typeof/
│   │   │   ├── ExportCJSDefault_Class.js
│   │   │   ├── ExportCJSDefault_Number.js
│   │   │   ├── ExportCJSNamed_Class.js
│   │   │   ├── ExportCJSNamed_Number.js
│   │   │   ├── ExportDefault_Class.js
│   │   │   ├── ExportDefault_Number.js
│   │   │   ├── ExportNamed_Alias.js
│   │   │   ├── ExportNamed_Class.js
│   │   │   ├── ExportNamed_Multi.js
│   │   │   ├── ExportNamed_Number.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── import_typeof.js
│   │   │   └── jsfmt.spec.js
│   │   ├── include/
│   │   │   ├── foo/
│   │   │   │   └── batman/
│   │   │   │       ├── __snapshots__/
│   │   │   │       │   └── jsfmt.spec.js.snap
│   │   │   │       ├── baz.js
│   │   │   │       └── jsfmt.spec.js
│   │   │   └── included/
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── jsfmt.spec.js
│   │   │       └── test.js
│   │   ├── include_suppressed/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── incremental/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── a.js
│   │   │   ├── b.js
│   │   │   ├── dup_a.js
│   │   │   └── jsfmt.spec.js
│   │   ├── incremental_basic/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── a.js
│   │   │   ├── b.js
│   │   │   ├── c.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── tmp1/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── b.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmp2/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── a.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   └── tmp3/
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── b.js
│   │   │       └── jsfmt.spec.js
│   │   ├── incremental_cycle/
│   │   │   ├── A.js
│   │   │   ├── B.js
│   │   │   ├── C.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── tmp1/
│   │   │   │   ├── B.js
│   │   │   │   ├── C.js
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmp2/
│   │   │   │   ├── B.js
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   └── jsfmt.spec.js
│   │   │   └── tmp3/
│   │   │       ├── B.js
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       └── jsfmt.spec.js
│   │   ├── incremental_cycle_break/
│   │   │   ├── A.js
│   │   │   ├── B.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── tmp1/
│   │   │       ├── A.js
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       └── jsfmt.spec.js
│   │   ├── incremental_delete/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── a.js
│   │   │   ├── b.js
│   │   │   ├── c.js
│   │   │   ├── dupe1.js
│   │   │   ├── dupe2.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── requires_dupe.js
│   │   │   ├── requires_unchecked.js
│   │   │   └── unchecked.js
│   │   ├── incremental_duplicate_delete/
│   │   │   ├── A.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   └── jsfmt.spec.js
│   │   ├── incremental_haste_blacklist/
│   │   │   ├── A.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── index.js
│   │   │   └── jsfmt.spec.js
│   │   ├── incremental_haste_name_reducers_duplicate/
│   │   │   ├── A.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── index.js
│   │   │   └── jsfmt.spec.js
│   │   ├── incremental_json/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── incremental_mixed_naming_cycle/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── a.js
│   │   │   ├── b.js
│   │   │   ├── c.js
│   │   │   ├── d.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── root.js
│   │   │   └── tmp1/
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── jsfmt.spec.js
│   │   │       └── root.js
│   │   ├── incremental_non_flow_move/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── foo.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── incremental_path/
│   │   │   └── dir/
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── a.js
│   │   │       └── jsfmt.spec.js
│   │   ├── indexer/
│   │   │   ├── A.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── multiple.js
│   │   ├── init/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── hoisted.js
│   │   │   ├── hoisted2.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── let.js
│   │   │   └── nullable-init.js
│   │   ├── instanceof/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── instanceof.js
│   │   │   └── jsfmt.spec.js
│   │   ├── integration/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── bar.js
│   │   │   ├── foo.js
│   │   │   └── jsfmt.spec.js
│   │   ├── interface/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── import.js
│   │   │   ├── indexer.js
│   │   │   ├── interface.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── test.js
│   │   │   ├── test2.js
│   │   │   ├── test3.js
│   │   │   └── test4.js
│   │   ├── intersection/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── intersection.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── lib/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── lib.js
│   │   │   ├── objassign.js
│   │   │   ├── pred.js
│   │   │   ├── test_fun.js
│   │   │   └── test_obj.js
│   │   ├── issues-11/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── export.js
│   │   │   ├── import.js
│   │   │   └── jsfmt.spec.js
│   │   ├── iter/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── iter.js
│   │   │   └── jsfmt.spec.js
│   │   ├── iterable/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── array.js
│   │   │   ├── caching_bug.js
│   │   │   ├── iter.js
│   │   │   ├── iterator_result.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── map.js
│   │   │   ├── set.js
│   │   │   ├── string.js
│   │   │   └── variance.js
│   │   ├── jsx_intrinsics.builtin/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── main.js
│   │   │   └── strings.js
│   │   ├── jsx_intrinsics.custom/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── lib/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── jsx.js
│   │   │   ├── main.js
│   │   │   └── strings.js
│   │   ├── keys/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── keys.js
│   │   ├── keyvalue/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── keyvalue.js
│   │   ├── last_duplicate_property_wins/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── lib/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── libtest.js
│   │   ├── lib_interfaces/
│   │   │   └── declarations/
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── jsfmt.spec.js
│   │   │       └── underscore.js
│   │   ├── libconfig/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── libA.js
│   │   │   ├── libB.js
│   │   │   └── libtest.js
│   │   ├── libdef_ignored_module/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── lib/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── foo.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── liberr/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── a.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── libs/
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── jsfmt.spec.js
│   │   │       └── type_error.js
│   │   ├── libflow-typed/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── flow-typed/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── dino.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── libtest.js
│   │   ├── librec/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── lib/
│   │   │   │   ├── A/
│   │   │   │   │   ├── __snapshots__/
│   │   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   │   ├── jsfmt.spec.js
│   │   │   │   │   └── libA.js
│   │   │   │   └── B/
│   │   │   │       ├── __snapshots__/
│   │   │   │       │   └── jsfmt.spec.js.snap
│   │   │   │       ├── jsfmt.spec.js
│   │   │   │       └── libB.js
│   │   │   └── libtest.js
│   │   ├── literal/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── enum.js
│   │   │   ├── enum_client.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── number.js
│   │   ├── locals/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── lex.js
│   │   │   └── locals.js
│   │   ├── logical/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── logical.js
│   │   ├── loners/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── loners.js
│   │   ├── malformed_code/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── text.js
│   │   ├── match_failure/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── disjoint_union.js
│   │   │   ├── enum.js
│   │   │   └── jsfmt.spec.js
│   │   ├── method_properties/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── exports_optional_prop.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── misc/
│   │   │   ├── A.js
│   │   │   ├── B.js
│   │   │   ├── C.js
│   │   │   ├── D.js
│   │   │   ├── E.js
│   │   │   ├── F.js
│   │   │   ├── G.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   └── jsfmt.spec.js
│   │   ├── missing_annotation/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── array.js
│   │   │   ├── async_return.js
│   │   │   ├── infer.js
│   │   │   └── jsfmt.spec.js
│   │   ├── modified_lib/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── lib/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── lib.js
│   │   │   └── test.js
│   │   ├── module_not_found_errors/
│   │   │   └── src/
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── index.js
│   │   │       └── jsfmt.spec.js
│   │   ├── module_redirect/
│   │   │   ├── A.js
│   │   │   ├── B.js
│   │   │   ├── C.js
│   │   │   ├── D.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   └── jsfmt.spec.js
│   │   ├── module_use_strict/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── modules/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── cli.js
│   │   │   ├── cli2.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── lib.js
│   │   ├── more_annot/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── client_object.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── object.js
│   │   │   ├── proto.js
│   │   │   └── super.js
│   │   ├── more_classes/
│   │   │   ├── Bar.js
│   │   │   ├── Foo.js
│   │   │   ├── Qux.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   └── jsfmt.spec.js
│   │   ├── more_generics/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── poly.js
│   │   ├── more_path/
│   │   │   ├── Condition.js
│   │   │   ├── FlowSA.js
│   │   │   ├── Sigma.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── more_react/
│   │   │   ├── API.react.js
│   │   │   ├── App.react.js
│   │   │   ├── InitializedFields.js
│   │   │   ├── JSX.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── checkPropTypes.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── propTypes.js
│   │   ├── more_statics/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── class_static.js
│   │   │   └── jsfmt.spec.js
│   │   ├── multiflow/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── apply.js
│   │   │   ├── issue3443.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── jsx.js
│   │   │   └── spread.js
│   │   ├── multiflow_with_flowlib/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── spread.js
│   │   ├── name_prop/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── class.js
│   │   │   ├── function.js
│   │   │   └── jsfmt.spec.js
│   │   ├── namespace/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── client.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── namespace.js
│   │   ├── new_react/
│   │   │   ├── FeedUFI.react.js
│   │   │   ├── Mixin.js
│   │   │   ├── UFILikeCount.react.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── bad_default_props.js
│   │   │   ├── classes.js
│   │   │   ├── fakelib/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── type_aliases.js
│   │   │   ├── import-react.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── new_react.js
│   │   │   ├── propTypes.js
│   │   │   ├── props.js
│   │   │   ├── props2.js
│   │   │   ├── props3.js
│   │   │   ├── props4.js
│   │   │   ├── props5.js
│   │   │   ├── state.js
│   │   │   ├── state2.js
│   │   │   ├── state3.js
│   │   │   ├── state4.js
│   │   │   └── state5.js
│   │   ├── new_spread/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── type.js
│   │   │   ├── type_any.js
│   │   │   ├── type_contra.js
│   │   │   ├── type_dict.js
│   │   │   ├── type_generic.js
│   │   │   ├── type_instance.js
│   │   │   ├── type_intersection.js
│   │   │   ├── type_intersection_optional.js
│   │   │   ├── type_optional.js
│   │   │   └── type_union.js
│   │   ├── node_haste/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── client.js
│   │   │   ├── external/
│   │   │   │   └── _d3/
│   │   │   │       ├── __snapshots__/
│   │   │   │       │   └── jsfmt.spec.js.snap
│   │   │   │       ├── jsfmt.spec.js
│   │   │   │       └── min.js
│   │   │   ├── foo/
│   │   │   │   └── bar/
│   │   │   │       ├── __snapshots__/
│   │   │   │       │   └── jsfmt.spec.js.snap
│   │   │   │       ├── client.js
│   │   │   │       └── jsfmt.spec.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── md5.js
│   │   │   └── ws/
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── index.js
│   │   │       ├── jsfmt.spec.js
│   │   │       └── test/
│   │   │           ├── __snapshots__/
│   │   │           │   └── jsfmt.spec.js.snap
│   │   │           ├── client.js
│   │   │           └── jsfmt.spec.js
│   │   ├── node_modules_with_symlinks/
│   │   │   ├── root/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── foo.js
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── symlink_lib/
│   │   │   │       ├── __snapshots__/
│   │   │   │       │   └── jsfmt.spec.js.snap
│   │   │   │       ├── index.js
│   │   │   │       └── jsfmt.spec.js
│   │   │   └── symlink_lib_outside_root/
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── index.js
│   │   │       └── jsfmt.spec.js
│   │   ├── node_modules_without_json/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── node_tests/
│   │   │   ├── assert/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── assert.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── basic/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── bar.js
│   │   │   │   ├── foo.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── basic_file/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── bar.js
│   │   │   │   ├── foo.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── basic_node_modules/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── foo.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── basic_node_modules_with_path/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── foo.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── basic_package/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── bar_lib/
│   │   │   │   │   ├── __snapshots__/
│   │   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   │   ├── bar.js
│   │   │   │   │   └── jsfmt.spec.js
│   │   │   │   ├── foo.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── buffer/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── buffer.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── child_process/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── exec.js
│   │   │   │   ├── execFile.js
│   │   │   │   ├── execSync.js
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── spawn.js
│   │   │   ├── crypto/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── crypto.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── fs/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── fs.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── json_file/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   ├── package2/
│   │   │   │   │   ├── __snapshots__/
│   │   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── jsfmt.spec.js
│   │   │   │   └── test.js
│   │   │   ├── os/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── userInfo.js
│   │   │   ├── package_file/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── bar_lib/
│   │   │   │   │   ├── __snapshots__/
│   │   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   │   ├── bar.js
│   │   │   │   │   └── jsfmt.spec.js
│   │   │   │   ├── bar_lib.js
│   │   │   │   ├── foo.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── package_file_node_modules/
│   │   │   │   └── foo/
│   │   │   │       ├── __snapshots__/
│   │   │   │       │   └── jsfmt.spec.js.snap
│   │   │   │       ├── foo.js
│   │   │   │       └── jsfmt.spec.js
│   │   │   ├── path_node_modules/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── foo.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── path_node_modules_with_short_main/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── foo.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── path_node_modules_without_main/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── foo.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── path_package/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── foo.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── process/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── nextTick.js
│   │   │   ├── stream/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── stream.js
│   │   │   ├── timers/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── timers.js
│   │   │   └── url/
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── jsfmt.spec.js
│   │   │       └── url.js
│   │   ├── nullable/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── maybe.js
│   │   │   ├── nullable.js
│   │   │   └── simple_nullable.js
│   │   ├── number_constants/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── number_constants.js
│   │   ├── object-method/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── id.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── subtype.js
│   │   │   ├── test.js
│   │   │   ├── test2.js
│   │   │   └── test3.js
│   │   ├── object_annot/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── object_api/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── a.js
│   │   │   ├── b.js
│   │   │   ├── c.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── object_assign.js
│   │   │   ├── object_create.js
│   │   │   ├── object_getprototypeof.js
│   │   │   ├── object_keys.js
│   │   │   ├── object_missing.js
│   │   │   └── object_prototype.js
│   │   ├── object_assign/
│   │   │   ├── A.js
│   │   │   ├── B.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── apply.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── non_objects.js
│   │   │   ├── spread.js
│   │   │   └── undefined.js
│   │   ├── object_freeze/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── object_freeze.js
│   │   ├── object_is/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── object_is.js
│   │   ├── objects/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── compatibility.js
│   │   │   ├── conversion.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── objects.js
│   │   │   └── unaliased_assign.js
│   │   ├── objmap/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── objmap.js
│   │   ├── optional/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── client_optional.js
│   │   │   ├── default.js
│   │   │   ├── generic.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── loop.js
│   │   │   ├── maybe.js
│   │   │   ├── nullable.js
│   │   │   ├── optional.js
│   │   │   ├── optional_param.js
│   │   │   ├── optional_param2.js
│   │   │   ├── optional_param3.js
│   │   │   ├── optional_param4.js
│   │   │   ├── undefined.js
│   │   │   └── undefined2.js
│   │   ├── optional_props/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── test.js
│   │   │   ├── test2.js
│   │   │   ├── test3.js
│   │   │   ├── test3_exact_annot.js
│   │   │   └── test3_failure.js
│   │   ├── overload/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── lib/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── lib.js
│   │   │   ├── overload.js
│   │   │   ├── test.js
│   │   │   ├── test2.js
│   │   │   ├── test3.js
│   │   │   └── union.js
│   │   ├── parse/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── no_parse_error.js
│   │   ├── parse_error_haste/
│   │   │   ├── Client.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   └── jsfmt.spec.js
│   │   ├── parse_error_node/
│   │   │   ├── Client.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   └── jsfmt.spec.js
│   │   ├── path/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── while.js
│   │   ├── plsummit/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── arrays.js
│   │   │   ├── export_class.js
│   │   │   ├── generics.js
│   │   │   ├── import_class.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── locals.js
│   │   │   └── objects.js
│   │   ├── poly/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── annot.js
│   │   │   ├── implicit_bounded_instantiation.js
│   │   │   ├── issue-1029.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── poly.js
│   │   │   └── test.js
│   │   ├── poly_class_export/
│   │   │   ├── A.js
│   │   │   ├── B.js
│   │   │   ├── C.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   └── jsfmt.spec.js
│   │   ├── poly_overload/
│   │   │   └── decls/
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── jsfmt.spec.js
│   │   │       └── typescript-deferred.js
│   │   ├── predicates-abstract/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── filter-union.js
│   │   │   ├── filter.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── refine.js
│   │   │   ├── sanity-filter-union.js
│   │   │   ├── sanity-filter.js
│   │   │   └── sanity-refine.js
│   │   ├── predicates-declared/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── function-bind.js
│   │   │   ├── function-union.js
│   │   │   ├── is-string-decl.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── logical-or.js
│   │   │   ├── object-invariant.js
│   │   │   ├── orig-string-tag-check.js
│   │   │   ├── sanity-fall-through.js
│   │   │   ├── sanity-invalid-calls.js
│   │   │   ├── sanity-is-string-bug.js
│   │   │   ├── sanity-parameter-mismatch.js
│   │   │   ├── sanity-pred-with-body.js
│   │   │   └── sanity-return-type.js
│   │   ├── predicates-inferred/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── sanity-multi-params.js
│   │   │   ├── sanity-ordering.js
│   │   │   ├── sanity-unbound-var.js
│   │   │   ├── sanity.js
│   │   │   ├── simple-predicate-func-post.js
│   │   │   └── simple-predicate-func.js
│   │   ├── predicates-parsing/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── fail-0.js
│   │   │   ├── fail-1.js
│   │   │   ├── fail-2.js
│   │   │   ├── fail-3.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── pass.js
│   │   ├── private/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── private.js
│   │   ├── promises/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── all.js
│   │   │   ├── covariance.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── promise.js
│   │   │   ├── resolve_global.js
│   │   │   └── resolve_void.js
│   │   ├── pure_component/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── qualified/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── qualified.js
│   │   ├── react/
│   │   │   ├── ArityError.react.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── createElementRequiredProp_string.js
│   │   │   ├── createElement_string.js
│   │   │   ├── create_class.js
│   │   │   ├── create_class_initial_state_sealed.js
│   │   │   ├── create_class_statics_sealed.js
│   │   │   ├── import_react.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── jsx_spread.js
│   │   │   ├── proptype_any.js
│   │   │   ├── proptype_arrayOf.js
│   │   │   ├── proptype_custom_validator.js
│   │   │   ├── proptype_func.js
│   │   │   ├── proptype_incompatible.js
│   │   │   ├── proptype_instanceOf.js
│   │   │   ├── proptype_missing.js
│   │   │   ├── proptype_object.js
│   │   │   ├── proptype_objectOf.js
│   │   │   ├── proptype_oneOf.js
│   │   │   ├── proptype_oneOfType.js
│   │   │   ├── proptype_shape.js
│   │   │   ├── proptypes_builtins.js
│   │   │   └── proptypes_sealed.js
│   │   ├── react_functional/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── react_modules/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── createclass-callsite.js
│   │   │   ├── createclass-module.js
│   │   │   ├── es6class-proptypes-callsite.js
│   │   │   ├── es6class-proptypes-module.js
│   │   │   ├── es6class-types-callsite.js
│   │   │   ├── es6class-types-module.js
│   │   │   └── jsfmt.spec.js
│   │   ├── rec/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── issue-1228.js
│   │   │   ├── issue-598.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── test.js
│   │   │   ├── test2.js
│   │   │   ├── test3.js
│   │   │   ├── test4.js
│   │   │   └── test5.js
│   │   ├── recheck/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── a1.js
│   │   │   ├── a2.js
│   │   │   ├── a3.js
│   │   │   ├── b0.js
│   │   │   ├── b1.js
│   │   │   ├── b2.js
│   │   │   ├── b3.js
│   │   │   ├── c1.js
│   │   │   ├── c2.js
│   │   │   ├── c3.js
│   │   │   ├── d1.js
│   │   │   ├── d2.js
│   │   │   ├── e1.js
│   │   │   ├── e2.js
│   │   │   ├── f1.js
│   │   │   ├── f2.js
│   │   │   ├── g1.js
│   │   │   ├── g2.js
│   │   │   ├── g3.js
│   │   │   ├── h1.js
│   │   │   ├── h2.js
│   │   │   ├── i1.js
│   │   │   ├── i2.js
│   │   │   ├── j1.js
│   │   │   ├── j2.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── k.js
│   │   │   ├── tmp1a/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── a1.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmp1b/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── b1.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmp1c/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── c2.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmp1d/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── d1.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmp1e/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── e2.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmp1f/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── f1.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmp1g/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── g1.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmp1h/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── h1.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmp1i/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── i1.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmp1j/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── j1.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmp2a/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── a1.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmp2b/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── b0.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmp2c/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── c1.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmp2e/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── e1.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmp2f/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── f1.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmp3e/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── e1.js
│   │   │   │   ├── e2.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmp3f/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── f1.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmp4f/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── f1.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmpk/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── k.js
│   │   │   └── tmplibk/
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── jsfmt.spec.js
│   │   │       ├── libk1.js
│   │   │       └── libk2.js
│   │   ├── recheck-haste/
│   │   │   ├── A1.js
│   │   │   ├── A3.js
│   │   │   ├── B1.js
│   │   │   ├── B3.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── dir1B/
│   │   │   │   ├── B2.js
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── tmp1A/
│   │   │   │   ├── A2.js
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   └── jsfmt.spec.js
│   │   │   └── tmp2A/
│   │   │       ├── A3.js
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       └── jsfmt.spec.js
│   │   ├── record/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── refi/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── bound.js
│   │   │   ├── heap.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── lex.js
│   │   │   ├── local.js
│   │   │   ├── null_tests.js
│   │   │   ├── switch.js
│   │   │   ├── typeof_tests.js
│   │   │   ├── undef_tests.js
│   │   │   └── void_tests.js
│   │   ├── refinements/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── assignment.js
│   │   │   ├── ast_node.js
│   │   │   ├── bool.js
│   │   │   ├── computed_string_literal.js
│   │   │   ├── cond_prop.js
│   │   │   ├── constants.js
│   │   │   ├── eq.js
│   │   │   ├── exists.js
│   │   │   ├── func_call.js
│   │   │   ├── hasOwnProperty.js
│   │   │   ├── heap_defassign.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── lib.js
│   │   │   ├── missing-property-cond.js
│   │   │   ├── mixed.js
│   │   │   ├── node1.js
│   │   │   ├── not.js
│   │   │   ├── null.js
│   │   │   ├── number.js
│   │   │   ├── property.js
│   │   │   ├── refinements.js
│   │   │   ├── string.js
│   │   │   ├── super_member.js
│   │   │   ├── switch.js
│   │   │   ├── tagged_union.js
│   │   │   ├── tagged_union_import.js
│   │   │   ├── typeof.js
│   │   │   ├── undef.js
│   │   │   ├── union.js
│   │   │   └── void.js
│   │   ├── reflection/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── type.js
│   │   ├── regexp/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── regexp.js
│   │   ├── replace/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── require/
│   │   │   ├── B.js
│   │   │   ├── C.js
│   │   │   ├── E.js
│   │   │   ├── ProvidesModuleA.js
│   │   │   ├── ProvidesModuleD.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── not_builtin_require.js
│   │   │   ├── not_builtin_require2.js
│   │   │   └── require.js
│   │   ├── requireLazy/
│   │   │   ├── A.js
│   │   │   ├── B.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── requireLazy.js
│   │   ├── return/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── function_return.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── void.js
│   │   ├── return_new/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── test.js
│   │   │   └── test2.js
│   │   ├── seal/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── imp.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── obj_annot.js
│   │   ├── sealed/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── function.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── proto.js
│   │   │   └── sealed.js
│   │   ├── sealed_objects/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── shape/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── shadow.js
│   │   │   └── test.js
│   │   ├── simple_arrays/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── array.js
│   │   │   ├── array2.js
│   │   │   └── jsfmt.spec.js
│   │   ├── singleton/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── boolean.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── number.js
│   │   │   └── string.js
│   │   ├── spread/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── test.js
│   │   │   ├── test2.js
│   │   │   ├── test3.js
│   │   │   ├── test4.js
│   │   │   ├── test5.js
│   │   │   ├── test6.js
│   │   │   └── test7.js
│   │   ├── static_overload/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── lib/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── lib.js
│   │   │   └── test.js
│   │   ├── statics/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── class_statics.js
│   │   │   ├── funstatics.js
│   │   │   └── jsfmt.spec.js
│   │   ├── strict/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── annot.js
│   │   │   ├── fun.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── obj.js
│   │   ├── strict_requires/
│   │   │   ├── A.js
│   │   │   ├── B.js
│   │   │   ├── C.js
│   │   │   ├── D.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   └── jsfmt.spec.js
│   │   ├── structural_subtyping/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── builtin.js
│   │   │   ├── class.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── obj.js
│   │   │   └── optional.js
│   │   ├── suggest/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── lib.js
│   │   │   └── suggest.js
│   │   ├── super/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── constructor.js
│   │   │   ├── import.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── super.js
│   │   │   └── test.js
│   │   ├── suppress/
│   │   │   ├── A.js
│   │   │   ├── B.js
│   │   │   ├── C.js
│   │   │   ├── D.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── lib.js
│   │   ├── suppress_incremental/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── suppress_traces/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── traces.js
│   │   ├── switch/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── more_switch.js
│   │   │   ├── switch.js
│   │   │   ├── switch_default_fallthrough.js
│   │   │   └── trailing_cases.js
│   │   ├── symbol/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── symbol.js
│   │   ├── symlink/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── bar.js
│   │   │   ├── foo.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── qux.js
│   │   ├── tagged-unions/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── classes.js
│   │   │   ├── interfaces-neg.js
│   │   │   ├── interfaces-pos.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── type-decls-neg.js
│   │   │   └── type-decls-pos.js
│   │   ├── taint/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── adder.js
│   │   │   ├── any_object.js
│   │   │   ├── call-object-property.js
│   │   │   ├── comparator.js
│   │   │   ├── function.js
│   │   │   ├── globals.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── lib.js
│   │   │   ├── taint1.js
│   │   │   ├── taint2.js
│   │   │   ├── taint3.js
│   │   │   ├── taint4.js
│   │   │   └── use-types.js
│   │   ├── template/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── template.js
│   │   ├── this/
│   │   │   ├── This.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── arrows.js
│   │   │   └── jsfmt.spec.js
│   │   ├── this_ctor/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── this_type/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── class_expr.js
│   │   │   ├── contra.js
│   │   │   ├── export.js
│   │   │   ├── generics.js
│   │   │   ├── import.js
│   │   │   ├── interface.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── lib/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── decl.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── lib_client.js
│   │   │   ├── self.js
│   │   │   ├── statics.js
│   │   │   └── test.js
│   │   ├── throw/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── traces/
│   │   │   ├── Traces.js
│   │   │   ├── Traces2.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   └── jsfmt.spec.js
│   │   ├── traits/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── test.js
│   │   │   └── test2.js
│   │   ├── try/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── abnormals.js
│   │   │   ├── init.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── return.js
│   │   │   └── test.js
│   │   ├── tuples/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── array.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── optional.js
│   │   │   ├── too-few.js
│   │   │   └── tuples.js
│   │   ├── type-at-pos/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── destructuring.js
│   │   │   ├── function_expressions.js
│   │   │   ├── generics.js
│   │   │   ├── import.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── object_special_cases.js
│   │   │   ├── optional.js
│   │   │   ├── predicates.js
│   │   │   ├── react.js
│   │   │   ├── templates.js
│   │   │   ├── test.js
│   │   │   └── trycatch.js
│   │   ├── type-destructors/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── non_maybe_type.js
│   │   │   ├── property_type.js
│   │   │   └── union.js
│   │   ├── type-printer/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── printBinaryExpression.js
│   │   │   └── types.js
│   │   ├── type_args_nonstrict/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── type_args_strict/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── type_only_vars/
│   │   │   ├── A.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── bad_shadowing.js
│   │   │   ├── good_shadowing.js
│   │   │   ├── import_type.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── type_alias.js
│   │   ├── type_param_defaults/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── classes.js
│   │   │   └── jsfmt.spec.js
│   │   ├── type_param_scope/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── class.js
│   │   │   ├── default_params.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── method_shadow.js
│   │   ├── type_param_variance/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── promise.js
│   │   ├── type_param_variance2/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── libs/
│   │   │   │   ├── Promise.js
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   └── jsfmt.spec.js
│   │   │   └── promise.js
│   │   ├── typeapp_perf/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── test1.js
│   │   │   └── test2.js
│   │   ├── typecast/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── typecast.js
│   │   ├── typeof/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── typeof.js
│   │   ├── unary/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── unary.js
│   │   │   └── update.js
│   │   ├── unchecked_haste_module_vs_lib/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── buffer.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── unchecked_node_module_vs_lib/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── undefined/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── issue-518.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── undefined.js
│   │   │   └── undefined2.js
│   │   ├── unicode/
│   │   │   ├── UnicodeUtils.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   └── jsfmt.spec.js
│   │   ├── union/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── blowup.js
│   │   │   ├── fields.js
│   │   │   ├── fields2.js
│   │   │   ├── issue-17.js
│   │   │   ├── issue-198.js
│   │   │   ├── issue-256.js
│   │   │   ├── issue-323-lib.js
│   │   │   ├── issue-323.js
│   │   │   ├── issue-324.js
│   │   │   ├── issue-325.js
│   │   │   ├── issue-326.js
│   │   │   ├── issue-582.js
│   │   │   ├── issue-963.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── test-lib.js
│   │   │   ├── test.js
│   │   │   ├── type-app.js
│   │   │   ├── union.js
│   │   │   └── yuge.js
│   │   ├── union-intersection/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── gen_big_disjoint_union.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── union_new/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── issue-1349.js
│   │   │   ├── issue-1371.js
│   │   │   ├── issue-1455-helper.js
│   │   │   ├── issue-1455.js
│   │   │   ├── issue-1462-i.js
│   │   │   ├── issue-1462-ii.js
│   │   │   ├── issue-1664.js
│   │   │   ├── issue-1759.js
│   │   │   ├── issue-2232.js
│   │   │   ├── issue-815.js
│   │   │   ├── issue-824-helper.js
│   │   │   ├── issue-824.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── lib/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   ├── test23_lib.js
│   │   │   │   ├── test25_lib.js
│   │   │   │   └── test32_lib.js
│   │   │   ├── test1.js
│   │   │   ├── test10.js
│   │   │   ├── test11.js
│   │   │   ├── test12.js
│   │   │   ├── test13.js
│   │   │   ├── test14.js
│   │   │   ├── test15.js
│   │   │   ├── test16.js
│   │   │   ├── test17.js
│   │   │   ├── test18.js
│   │   │   ├── test19.js
│   │   │   ├── test2.js
│   │   │   ├── test20.js
│   │   │   ├── test21.js
│   │   │   ├── test22.js
│   │   │   ├── test23.js
│   │   │   ├── test24.js
│   │   │   ├── test25.js
│   │   │   ├── test26.js
│   │   │   ├── test27.js
│   │   │   ├── test29.js
│   │   │   ├── test3.js
│   │   │   ├── test30-helper.js
│   │   │   ├── test30.js
│   │   │   ├── test31.js
│   │   │   ├── test32.js
│   │   │   ├── test4.js
│   │   │   ├── test5.js
│   │   │   ├── test6.js
│   │   │   ├── test7.js
│   │   │   ├── test8.js
│   │   │   └── test9.js
│   │   ├── unreachable/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── typecheck.js
│   │   │   └── unreachable.js
│   │   ├── unused_function_args/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── value/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── value.js
│   │   ├── vim_emacs_errors/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── weakmode/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── should_fail_without_weak.js
│   │   │   └── should_pass_with_weak.js
│   │   ├── while/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── abnormal.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── window/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── window1.js
│   │   │   └── window2.js
│   │   └── x/
│   │       ├── XControllerURIBuilder.js
│   │       ├── __snapshots__/
│   │       │   └── jsfmt.spec.js.snap
│   │       └── jsfmt.spec.js
│   ├── flow_array_comments/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── test.js
│   ├── flow_array_union/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── test.js
│   ├── flow_class_field/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── override.js
│   ├── flow_comments/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── arrow.js
│   │   ├── jsfmt.spec.js
│   │   └── object_type_annotation.js
│   ├── flow_function_parentheses/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   ├── single.js
│   │   └── test.js
│   ├── flow_generic/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── break.js
│   │   ├── generic.js
│   │   ├── jsfmt.spec.js
│   │   ├── nullable.js
│   │   ├── trailing.js
│   │   ├── type.js
│   │   └── union.js
│   ├── flow_import_type_specifier/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── test.js
│   ├── flow_jsx/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── return_type.js
│   ├── flow_method/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── comment.js
│   │   ├── jsfmt.spec.js
│   │   └── method.js
│   ├── flow_object_comment/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── flow_object_comment.js
│   │   └── jsfmt.spec.js
│   ├── flow_object_order/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── order.js
│   ├── flow_return_arrow/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── issue-1249.js
│   │   ├── jsfmt.spec.js
│   │   └── parens.js
│   ├── flow_type_declarations/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── declare_type.js
│   │   ├── jsfmt.spec.js
│   │   └── long.js
│   ├── flow_type_spread/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── comments.js
│   │   └── jsfmt.spec.js
│   ├── flow_union/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── union.js
│   ├── flow_variance/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── variance.js
│   ├── for/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── comment.js
│   │   ├── for.js
│   │   ├── in.js
│   │   ├── jsfmt.spec.js
│   │   └── var.js
│   ├── function/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── function_expression.js
│   │   ├── jsfmt.spec.js
│   │   └── single_expand.js
│   ├── function_single_destructuring/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── test.js
│   ├── graphql_arguments/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── hello.graphql
│   │   └── jsfmt.spec.js
│   ├── graphql_bracket_spacing/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── bracket_spacing.graphql
│   │   └── jsfmt.spec.js
│   ├── graphql_comments/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── argument_comment.graphql
│   │   ├── fields.graphql
│   │   ├── jsfmt.spec.js
│   │   └── tokens.graphql
│   ├── graphql_definitions/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── fields.graphql
│   │   └── jsfmt.spec.js
│   ├── graphql_directive_decl/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── directive_decl.graphql
│   │   └── jsfmt.spec.js
│   ├── graphql_directives/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── directives.graphql
│   │   └── jsfmt.spec.js
│   ├── graphql_enum/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── enum.graphql
│   │   └── jsfmt.spec.js
│   ├── graphql_fields/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── fields.graphql
│   │   └── jsfmt.spec.js
│   ├── graphql_fragments/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── fragments.graphql
│   │   └── jsfmt.spec.js
│   ├── graphql_hello/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── hello.graphql
│   │   └── jsfmt.spec.js
│   ├── graphql_interface/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── interface.graphql
│   │   └── jsfmt.spec.js
│   ├── graphql_kitchen_sink/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── kitchen_sink.graphql
│   ├── graphql_lists/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── lists.graphql
│   ├── graphql_object_type_def/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── arguments.graphql
│   │   ├── directives.graphql
│   │   ├── extend.graphql
│   │   ├── implements.graphql
│   │   ├── input.graphql
│   │   ├── jsfmt.spec.js
│   │   └── object_type_def.graphql
│   ├── graphql_objects/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── objects.graphql
│   ├── graphql_scalar/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── scalar.graphql
│   ├── graphql_schema/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── schema.graphql
│   ├── graphql_trailing_comma/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── trailing.graphql
│   ├── graphql_union_types/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── union_types.graphql
│   ├── graphql_variable_definitions/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── variable_definitions.graphql
│   ├── html_basics/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── hello-world.html
│   │   ├── html-fragment.html
│   │   └── jsfmt.spec.js
│   ├── if/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── curly_braces.js
│   │   ├── else.js
│   │   ├── if_comments.js
│   │   ├── jsfmt.spec.js
│   │   └── trailing_comment.js
│   ├── ignore/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── ignore.js
│   │   └── jsfmt.spec.js
│   ├── import/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── brackets.js
│   │   ├── comments.js
│   │   ├── empty-import.js
│   │   ├── inline.js
│   │   ├── jsfmt.spec.js
│   │   ├── long-line.js
│   │   └── multiple_standalones.js
│   ├── import_meta/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── import_meta.js
│   │   └── jsfmt.spec.js
│   ├── import_then/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   ├── long.js
│   │   └── then.js
│   ├── interface/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── break.js
│   │   ├── jsfmt.spec.js
│   │   └── module.js
│   ├── intersection/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── intersection.js
│   │   └── jsfmt.spec.js
│   ├── json/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── boolean.json
│   │   ├── jsfmt.spec.js
│   │   ├── multi-line.json
│   │   ├── null.json
│   │   ├── number.json
│   │   ├── pass1.json
│   │   ├── single-line.json
│   │   ├── string.json
│   │   └── trailingComma.notjson
│   ├── jsx/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── conditional-expression.js
│   │   ├── expression.js
│   │   ├── flow_fix_me.js
│   │   ├── html_escape.js
│   │   ├── hug.js
│   │   ├── jsfmt.spec.js
│   │   ├── logical-expression.js
│   │   ├── object-property.js
│   │   ├── open-break.js
│   │   ├── parens.js
│   │   ├── quotes.js
│   │   ├── return-statement.js
│   │   └── spacing.js
│   ├── jsx-multiline-assign/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── test.js
│   ├── jsx-newlines/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   ├── test.js
│   │   └── windows.js
│   ├── jsx-significant-space/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── comments.js
│   │   ├── jsfmt.spec.js
│   │   └── test.js
│   ├── jsx-split-attrs/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── test.js
│   ├── jsx-stateless-arrow-fn/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── test.js
│   ├── jsx-text-wrap/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── test.js
│   ├── jsx-whitespace/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── test.js
│   ├── jsx_escape/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── escape.js
│   │   ├── jsfmt.spec.js
│   │   └── nbsp.js
│   ├── jsx_ignore/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── jsx_ignore.js
│   ├── jsx_last_line/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── last_line.js
│   ├── jsx_namespace/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── jsx_namespaced_name.js
│   ├── jsx_template/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── styled-components.js
│   ├── label/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── comment.js
│   │   ├── empty_label.js
│   │   └── jsfmt.spec.js
│   ├── last_argument_expansion/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── arrow.js
│   │   ├── break-parent.js
│   │   ├── break.js
│   │   ├── edge_case.js
│   │   ├── jsfmt.spec.js
│   │   ├── jsx.js
│   │   ├── object.js
│   │   └── overflow.js
│   ├── line/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── windows.js
│   ├── line_suffix_boundary/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── boundary.js
│   │   └── jsfmt.spec.js
│   ├── literal/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── number.js
│   ├── literal-numeric-separator/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── test.js
│   ├── member/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── expand.js
│   │   └── jsfmt.spec.js
│   ├── method-chain/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── bracket_0.js
│   │   ├── break-last-call.js
│   │   ├── break-last-member.js
│   │   ├── comment.js
│   │   ├── computed.js
│   │   ├── first_long.js
│   │   ├── inline_merge.js
│   │   ├── jsfmt.spec.js
│   │   ├── logical.js
│   │   ├── multiple-members.js
│   │   ├── square_0.js
│   │   ├── test.js
│   │   └── this.js
│   ├── multiparser_comments/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── comments.js
│   │   └── jsfmt.spec.js
│   ├── multiparser_html_css/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── html-with-css-style.html
│   │   └── jsfmt.spec.js
│   ├── multiparser_html_js/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── html-with-js-script.html
│   │   └── jsfmt.spec.js
│   ├── multiparser_html_ts/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── html-with-ts-script.html
│   │   └── jsfmt.spec.js
│   ├── multiparser_js_css/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── styled-components.js
│   ├── multiparser_js_graphql/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── graphql-tag.js
│   │   ├── jsfmt.spec.js
│   │   └── react-relay.js
│   ├── multiparser_text/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── text.js
│   ├── multiparser_vue/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   ├── template-bind.vue
│   │   ├── template-class.vue
│   │   └── vue-component.vue
│   ├── new_expression/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── call.js
│   │   ├── jsfmt.spec.js
│   │   └── new_expression.js
│   ├── newline/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── backslash_2028.js
│   │   ├── backslash_2029.js
│   │   └── jsfmt.spec.js
│   ├── no-semi/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── comments.js
│   │   ├── issue2006.js
│   │   ├── jsfmt.spec.js
│   │   └── no-semi.js
│   ├── no-semi-babylon-extensions/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── no-semi.js
│   ├── non-strict/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── argument-name-clash.js
│   │   ├── jsfmt.spec.js
│   │   ├── keywords.js
│   │   └── octal-number.js
│   ├── object-prop-break-in/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── comment.js
│   │   ├── jsfmt.spec.js
│   │   ├── long-value.js
│   │   └── test.js
│   ├── object_colon_bug/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── bug.js
│   │   └── jsfmt.spec.js
│   ├── object_property_comment/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── after-key.js
│   │   ├── comment.js
│   │   └── jsfmt.spec.js
│   ├── objects/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── expand.js
│   │   ├── expression.js
│   │   ├── jsfmt.spec.js
│   │   ├── method.js
│   │   ├── range.js
│   │   └── right_break.js
│   ├── optional-type-name/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── test.js
│   ├── performance/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   ├── nested-real.js
│   │   └── nested.js
│   ├── preserve_line/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── comments.js
│   │   └── jsfmt.spec.js
│   ├── quotes/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── functions.js
│   │   ├── jsfmt.spec.js
│   │   └── strings.js
│   ├── range/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── class-declaration.js
│   │   ├── different-levels.js
│   │   ├── function-declaration.js
│   │   ├── ignore-indentation.js
│   │   ├── jsfmt.spec.js
│   │   ├── module-export1.js
│   │   ├── module-export2.js
│   │   ├── module-export3.js
│   │   ├── module-import.js
│   │   ├── multiple-statements.js
│   │   ├── multiple-statements2.js
│   │   ├── nested.js
│   │   ├── nested2.js
│   │   ├── nested3.js
│   │   ├── range-end.js
│   │   ├── range-start.js
│   │   ├── range.js
│   │   ├── try-catch.js
│   │   └── whitespace.js
│   ├── range_css/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── issue2267.css
│   │   └── jsfmt.spec.js
│   ├── range_graphql/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── issue2296.graphql
│   │   └── jsfmt.spec.js
│   ├── range_json/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── identifier.json
│   │   ├── issue2297.json
│   │   └── jsfmt.spec.js
│   ├── regex/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── test.js
│   ├── require/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── require.js
│   ├── rest/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── trailing-commas.js
│   ├── return/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── binaryish.js
│   │   ├── comment.js
│   │   └── jsfmt.spec.js
│   ├── return-outside-function/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── return-outside-function.js
│   ├── sequence_break/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── break.js
│   │   └── jsfmt.spec.js
│   ├── shebang/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   ├── shebang-newline.js
│   │   └── shebang.js
│   ├── space-before-function-paren/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── eslint.js
│   │   └── jsfmt.spec.js
│   ├── strings/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   ├── strings.js
│   │   └── template-literals.js
│   ├── stylefmt/
│   │   ├── at-apply/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── at-apply.css
│   │   │   └── jsfmt.spec.js
│   │   ├── at-media/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── at-media.css
│   │   │   └── jsfmt.spec.js
│   │   ├── attr-selector/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── attr-selector.css
│   │   │   └── jsfmt.spec.js
│   │   ├── charset/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── charset.css
│   │   │   └── jsfmt.spec.js
│   │   ├── charset-2/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── charset-2.css
│   │   │   └── jsfmt.spec.js
│   │   ├── color-hex-lowercase/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── color-hex-lowercase.css
│   │   │   └── jsfmt.spec.js
│   │   ├── comment/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── comment.css
│   │   │   └── jsfmt.spec.js
│   │   ├── comment-in-rules/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── comment-in-rules.css
│   │   │   └── jsfmt.spec.js
│   │   ├── content/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── content.css
│   │   │   └── jsfmt.spec.js
│   │   ├── cssnext-example/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── cssnext-example.css
│   │   │   └── jsfmt.spec.js
│   │   ├── custom-media-queries/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── custom-media-queries.css
│   │   │   └── jsfmt.spec.js
│   │   ├── custom-properties/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── custom-properties.css
│   │   │   └── jsfmt.spec.js
│   │   ├── custom-selectors/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── custom-selectors.css
│   │   │   └── jsfmt.spec.js
│   │   ├── data-url/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── data-url.css
│   │   │   └── jsfmt.spec.js
│   │   ├── font-face/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── font-face.css
│   │   │   └── jsfmt.spec.js
│   │   ├── font-shorthand/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── font-shorthand.css
│   │   │   └── jsfmt.spec.js
│   │   ├── ie-hacks/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── ie-hacks.css
│   │   │   └── jsfmt.spec.js
│   │   ├── import/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── import.css
│   │   │   └── jsfmt.spec.js
│   │   ├── important/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── important.css
│   │   │   └── jsfmt.spec.js
│   │   ├── inline-comment/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── inline-comment.css
│   │   │   └── jsfmt.spec.js
│   │   ├── lowercase/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── lowercase.css
│   │   ├── media-indent/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── media-indent.css
│   │   ├── media-indent-with-import/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── media-indent-with-import.css
│   │   ├── media-queries-ranges/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── media-queries-ranges.css
│   │   ├── nested/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── nested.css
│   │   ├── nested-2/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── nested-2.css
│   │   ├── nested-atrule/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── nested-atrule.css
│   │   ├── nested-indention/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── nested-indention.css
│   │   ├── nested-indention-2/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── nested-indention-2.css
│   │   ├── nested-mixin/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── nested-mixin.css
│   │   ├── nested-mixin-2/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── nested-mixin-2.css
│   │   ├── non-nested-combinator/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── non-nested-combinator.css
│   │   ├── pseudo-element/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── pseudo-element.css
│   │   ├── readme/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── readme.css
│   │   ├── shorthand-with-sass-variables/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── shorthand-with-sass-variables.css
│   │   ├── values/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── values.css
│   │   ├── var-notation/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── var-notation.css
│   │   └── vendor-prefix/
│   │       ├── __snapshots__/
│   │       │   └── jsfmt.spec.js.snap
│   │       ├── jsfmt.spec.js
│   │       └── vendor-prefix.css
│   ├── switch/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── comments.js
│   │   ├── empty_lines.js
│   │   ├── empty_statement.js
│   │   ├── empty_switch.js
│   │   └── jsfmt.spec.js
│   ├── tabWith/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── class.js
│   │   ├── jsfmt.spec.js
│   │   └── nested-functions.spec.js
│   ├── template/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── arrow.js
│   │   ├── call.js
│   │   ├── comment.js
│   │   ├── faulty-locations.js
│   │   ├── graphql.js
│   │   ├── inline.js
│   │   ├── jsfmt.spec.js
│   │   └── parenthesis.js
│   ├── template_align/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── indent.js
│   │   └── jsfmt.spec.js
│   ├── template_literals/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   ├── styled-components-with-expressions.js
│   │   ├── styled-jsx-with-expressions.js
│   │   └── styled-jsx.js
│   ├── ternaries/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── binary.js
│   │   ├── indent.js
│   │   ├── jsfmt.spec.js
│   │   ├── nested.js
│   │   ├── parenthesis.js
│   │   └── test.js
│   ├── test_declarations/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── test_declarations.js
│   ├── trailing_comma/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── es5.js
│   │   ├── export.js
│   │   ├── function-calls.js
│   │   ├── import.js
│   │   ├── jsfmt.spec.js
│   │   ├── object.js
│   │   └── trailing_whitespace.js
│   ├── trailing_whitespace/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── trailing.js
│   ├── try/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── empty.js
│   │   ├── jsfmt.spec.js
│   │   └── try.js
│   ├── typescript/
│   │   ├── compiler/
│   │   │   ├── ClassDeclaration22.ts
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── anyIsAssignableToObject.ts
│   │   │   ├── badArrayIndex.ts
│   │   │   ├── castOfAwait.ts
│   │   │   ├── castParentheses.ts
│   │   │   ├── castTest.ts
│   │   │   ├── checkInfiniteExpansionTermination.ts
│   │   │   ├── commentInNamespaceDeclarationWithIdentifierPathName.ts
│   │   │   ├── commentsInterface.ts
│   │   │   ├── contextualSignatureInstantiation2.ts
│   │   │   ├── declareDottedModuleName.ts
│   │   │   ├── decrementAndIncrementOperators.ts
│   │   │   ├── downlevelLetConst1.ts
│   │   │   ├── errorOnInitializerInInterfaceProperty.ts
│   │   │   ├── es5ExportDefaultClassDeclaration4.ts
│   │   │   ├── functionOverloadsOnGenericArity1.ts
│   │   │   ├── globalIsContextualKeyword.ts
│   │   │   ├── indexSignatureWithInitializer.ts
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── mappedTypeWithCombinedTypeMappers.ts
│   │   │   ├── modifiersOnInterfaceIndexSignature1.ts
│   │   │   └── privacyGloImport.ts
│   │   ├── conformance/
│   │   │   ├── ambient/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── ambientDeclarations.ts
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── classes/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── classDeclarations/
│   │   │   │   │   ├── __snapshots__/
│   │   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   │   ├── classAbstractKeyword/
│   │   │   │   │   │   ├── __snapshots__/
│   │   │   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   │   │   ├── classAbstractAccessor.ts
│   │   │   │   │   │   ├── classAbstractAsIdentifier.ts
│   │   │   │   │   │   ├── classAbstractAssignabilityConstructorFunction.ts
│   │   │   │   │   │   ├── classAbstractClinterfaceAssignability.ts
│   │   │   │   │   │   ├── classAbstractConstructorAssignability.ts
│   │   │   │   │   │   ├── classAbstractCrashedOnce.ts
│   │   │   │   │   │   ├── classAbstractExtends.ts
│   │   │   │   │   │   ├── classAbstractFactoryFunction.ts
│   │   │   │   │   │   ├── classAbstractGeneric.ts
│   │   │   │   │   │   ├── classAbstractImportInstantiation.ts
│   │   │   │   │   │   ├── classAbstractInAModule.ts
│   │   │   │   │   │   ├── classAbstractInheritance.ts
│   │   │   │   │   │   ├── classAbstractInstantiations1.ts
│   │   │   │   │   │   ├── classAbstractInstantiations2.ts
│   │   │   │   │   │   ├── classAbstractMethodInNonAbstractClass.ts
│   │   │   │   │   │   ├── classAbstractMethodWithImplementation.ts
│   │   │   │   │   │   ├── classAbstractMixedWithModifiers.ts
│   │   │   │   │   │   ├── classAbstractOverloads.ts
│   │   │   │   │   │   ├── classAbstractOverrideWithAbstract.ts
│   │   │   │   │   │   ├── classAbstractProperties.ts
│   │   │   │   │   │   ├── classAbstractSingleLineDecl.ts
│   │   │   │   │   │   ├── classAbstractSuperCalls.ts
│   │   │   │   │   │   ├── classAbstractUsingAbstractMethod1.ts
│   │   │   │   │   │   ├── classAbstractUsingAbstractMethods2.ts
│   │   │   │   │   │   ├── classAbstractWithInterface.ts
│   │   │   │   │   │   └── jsfmt.spec.js
│   │   │   │   │   ├── classHeritageSpecification/
│   │   │   │   │   │   ├── __snapshots__/
│   │   │   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   │   │   ├── classAppearsToHaveMembersOfObject.ts
│   │   │   │   │   │   ├── classExtendingClass.ts
│   │   │   │   │   │   ├── classExtendsItselfIndirectly.ts
│   │   │   │   │   │   ├── classIsSubtypeOfBaseType.ts
│   │   │   │   │   │   └── jsfmt.spec.js
│   │   │   │   │   ├── classInsideBlock.ts
│   │   │   │   │   └── jsfmt.spec.js
│   │   │   │   ├── classExpression.ts
│   │   │   │   ├── constructorDeclarations/
│   │   │   │   │   └── constructorParameters/
│   │   │   │   │       ├── __snapshots__/
│   │   │   │   │       │   └── jsfmt.spec.js.snap
│   │   │   │   │       ├── constructorDefaultValuesReferencingThis.ts
│   │   │   │   │       ├── constructorImplementationWithDefaultValues.ts
│   │   │   │   │       ├── constructorImplementationWithDefaultValues2.ts
│   │   │   │   │       ├── constructorOverloadsWithDefaultValues.ts
│   │   │   │   │       ├── constructorOverloadsWithOptionalParameters.ts
│   │   │   │   │       ├── constructorParameterProperties.ts
│   │   │   │   │       ├── constructorParameterProperties2.ts
│   │   │   │   │       ├── declarationEmitReadonly.ts
│   │   │   │   │       ├── jsfmt.spec.js
│   │   │   │   │       ├── readonlyConstructorAssignment.ts
│   │   │   │   │       ├── readonlyInConstructorParameters.ts
│   │   │   │   │       └── readonlyReadonly.ts
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   ├── mixinAccessModifiers.ts
│   │   │   │   ├── mixinClassesAnnotated.ts
│   │   │   │   ├── mixinClassesAnonymous.ts
│   │   │   │   ├── mixinClassesMembers.ts
│   │   │   │   └── nestedClassDeclaration.ts
│   │   │   ├── comments/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── comments.ts
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── declarationEmit/
│   │   │   │   └── typePredicates/
│   │   │   │       ├── __snapshots__/
│   │   │   │       │   └── jsfmt.spec.js.snap
│   │   │   │       ├── declarationEmitThisPredicatesWithPrivateName01.ts
│   │   │   │       └── jsfmt.spec.js
│   │   │   ├── es6/
│   │   │   │   ├── Symbols/
│   │   │   │   │   ├── __snapshots__/
│   │   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   │   ├── jsfmt.spec.js
│   │   │   │   │   └── symbolProperty15.ts
│   │   │   │   └── templates/
│   │   │   │       ├── __snapshots__/
│   │   │   │       │   └── jsfmt.spec.js.snap
│   │   │   │       ├── jsfmt.spec.js
│   │   │   │       └── templateStringWithEmbeddedTypeAssertionOnAdditionES6.ts
│   │   │   ├── expressions/
│   │   │   │   ├── asOperator/
│   │   │   │   │   ├── __snapshots__/
│   │   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   │   ├── asOperatorContextualType.ts
│   │   │   │   │   └── jsfmt.spec.js
│   │   │   │   └── functionCalls/
│   │   │   │       ├── __snapshots__/
│   │   │   │       │   └── jsfmt.spec.js.snap
│   │   │   │       ├── callWithSpreadES6.ts
│   │   │   │       └── jsfmt.spec.js
│   │   │   ├── interfaces/
│   │   │   │   └── interfaceDeclarations/
│   │   │   │       ├── __snapshots__/
│   │   │   │       │   └── jsfmt.spec.js.snap
│   │   │   │       ├── interfaceWithMultipleBaseTypes2.ts
│   │   │   │       └── jsfmt.spec.js
│   │   │   ├── internalModules/
│   │   │   │   └── importDeclarations/
│   │   │   │       ├── __snapshots__/
│   │   │   │       │   └── jsfmt.spec.js.snap
│   │   │   │       ├── circularImportAlias.ts
│   │   │   │       ├── exportImportAlias.ts
│   │   │   │       ├── exportInterface.ts
│   │   │   │       ├── importAliasIdentifiers.ts
│   │   │   │       ├── invalidImportAliasIdentifiers.ts
│   │   │   │       ├── jsfmt.spec.js
│   │   │   │       └── shadowedInternalModule.ts
│   │   │   ├── parser/
│   │   │   │   └── ecmascript5/
│   │   │   │       └── Statements/
│   │   │   │           ├── __snapshots__/
│   │   │   │           │   └── jsfmt.spec.js.snap
│   │   │   │           ├── jsfmt.spec.js
│   │   │   │           ├── parserES5ForOfStatement2.ts
│   │   │   │           ├── parserES5ForOfStatement21.ts
│   │   │   │           └── parserForInStatement2.ts
│   │   │   └── types/
│   │   │       ├── abstractKeyword/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── abstractKeyword.ts
│   │   │       │   └── jsfmt.spec.js
│   │   │       ├── any/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── anyAsConstructor.ts
│   │   │       │   ├── anyAsFunctionCall.ts
│   │   │       │   ├── anyAsGenericFunctionCall.ts
│   │   │       │   ├── anyPropertyAccess.ts
│   │   │       │   └── jsfmt.spec.js
│   │   │       ├── constKeyword/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── constKeyword.ts
│   │   │       │   └── jsfmt.spec.js
│   │   │       ├── constructorType/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── cunstructorType.ts
│   │   │       │   └── jsfmt.spec.js
│   │   │       ├── decorator/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── decorator.ts
│   │   │       │   └── jsfmt.spec.js
│   │   │       ├── enumDeclaration/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── enumDeclaration.ts
│   │   │       │   └── jsfmt.spec.js
│   │   │       ├── firstTypeNode/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── firstTypeNode.ts
│   │   │       │   └── jsfmt.spec.js
│   │   │       ├── functions/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── functionImplementationErrors.ts
│   │   │       │   ├── functionImplementations.ts
│   │   │       │   ├── functionOverloadCompatibilityWithVoid01.ts
│   │   │       │   ├── functionOverloadCompatibilityWithVoid02.ts
│   │   │       │   ├── functionOverloadCompatibilityWithVoid03.ts
│   │   │       │   ├── functionOverloadErrorsSyntax.ts
│   │   │       │   ├── functionTypeTypeParameters.ts
│   │   │       │   ├── jsfmt.spec.js
│   │   │       │   └── parameterInitializersForwardReferencing.ts
│   │   │       ├── importEqualsDeclaration/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── importEqualsDeclaration.ts
│   │   │       │   └── jsfmt.spec.js
│   │   │       ├── indexedAccesType/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── indexedAccesType.ts
│   │   │       │   └── jsfmt.spec.js
│   │   │       ├── interfaceDeclaration/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── interfaceDeclaration.ts
│   │   │       │   └── jsfmt.spec.js
│   │   │       ├── intersectionType/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── intersectionType.ts
│   │   │       │   └── jsfmt.spec.js
│   │   │       ├── lastTypeNode/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── jsfmt.spec.js
│   │   │       │   └── lastTypeNode.ts
│   │   │       ├── mappedType/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── jsfmt.spec.js
│   │   │       │   └── mappedType.ts
│   │   │       ├── methodSignature/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── jsfmt.spec.js
│   │   │       │   └── methodSignature.ts
│   │   │       ├── moduleDeclaration/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── jsfmt.spec.js
│   │   │       │   └── moduleDeclaration.ts
│   │   │       ├── namespaceExportDeclaration/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── exportAsNamespace.d.ts
│   │   │       │   └── jsfmt.spec.js
│   │   │       ├── never/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── jsfmt.spec.js
│   │   │       │   └── never.ts
│   │   │       ├── nonNullExpression/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── jsfmt.spec.js
│   │   │       │   └── nonNullExpression.ts
│   │   │       ├── parameterProperty/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── jsfmt.spec.js
│   │   │       │   └── parameterProperty.ts
│   │   │       ├── symbol/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── jsfmt.spec.js
│   │   │       │   └── symbol.ts
│   │   │       ├── thisType/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── jsfmt.spec.js
│   │   │       │   └── thisType.ts
│   │   │       ├── tuple/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── contextualTypeWithTuple.ts
│   │   │       │   ├── emptyTuples/
│   │   │       │   │   ├── __snapshots__/
│   │   │       │   │   │   └── jsfmt.spec.js.snap
│   │   │       │   │   ├── emptyTuplesTypeAssertion02.ts
│   │   │       │   │   └── jsfmt.spec.js
│   │   │       │   ├── indexerWithTuple.ts
│   │   │       │   ├── jsfmt.spec.js
│   │   │       │   ├── tupleElementTypes1.ts
│   │   │       │   ├── tupleElementTypes2.ts
│   │   │       │   ├── tupleElementTypes3.ts
│   │   │       │   ├── tupleElementTypes4.ts
│   │   │       │   ├── typeInferenceWithTupleType.ts
│   │   │       │   ├── wideningTuples1.ts
│   │   │       │   ├── wideningTuples2.ts
│   │   │       │   ├── wideningTuples3.ts
│   │   │       │   ├── wideningTuples4.ts
│   │   │       │   ├── wideningTuples5.ts
│   │   │       │   ├── wideningTuples6.ts
│   │   │       │   └── wideningTuples7.ts
│   │   │       ├── typeOperator/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── jsfmt.spec.js
│   │   │       │   └── typeOperator.ts
│   │   │       ├── typeParameter/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── jsfmt.spec.js
│   │   │       │   └── typeParameter.ts
│   │   │       ├── typeParameters/
│   │   │       │   └── typeParameterLists/
│   │   │       │       ├── __snapshots__/
│   │   │       │       │   └── jsfmt.spec.js.snap
│   │   │       │       ├── innerTypeParameterShadowingOuterOne.ts
│   │   │       │       ├── innerTypeParameterShadowingOuterOne2.ts
│   │   │       │       ├── jsfmt.spec.js
│   │   │       │       ├── staticMembersUsingClassTypeParameter.ts
│   │   │       │       └── typeParametersAvailableInNestedScope2.ts
│   │   │       ├── typeReference/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── jsfmt.spec.js
│   │   │       │   └── typeReference.ts
│   │   │       ├── undefined/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── jsfmt.spec.js
│   │   │       │   └── undefined.ts
│   │   │       ├── union/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── jsfmt.spec.js
│   │   │       │   ├── unionTypeCallSignatures.ts
│   │   │       │   ├── unionTypeCallSignatures3.ts
│   │   │       │   ├── unionTypeCallSignatures4.ts
│   │   │       │   ├── unionTypeConstructSignatures.ts
│   │   │       │   ├── unionTypeEquivalence.ts
│   │   │       │   ├── unionTypeFromArrayLiteral.ts
│   │   │       │   ├── unionTypeIndexSignature.ts
│   │   │       │   └── unionTypePropertyAccessibility.ts
│   │   │       └── variableDeclarator/
│   │   │           ├── __snapshots__/
│   │   │           │   └── jsfmt.spec.js.snap
│   │   │           ├── jsfmt.spec.js
│   │   │           └── variableDeclarator.ts
│   │   ├── custom/
│   │   │   ├── abstract/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── abstractNewlineHandling.ts
│   │   │   │   ├── abstractProperties.ts
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── call/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── callSignature.ts
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── computedProperties/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   ├── string.ts
│   │   │   │   └── symbol.ts
│   │   │   ├── declare/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── declareModifier.d.ts
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── modifiers/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   ├── question.ts
│   │   │   │   └── readonly.ts
│   │   │   ├── module/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── global.ts
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   ├── moduleNamespace.ts
│   │   │   │   └── nestedNamespace.ts
│   │   │   ├── new/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── newKeyword.ts
│   │   │   ├── stability/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── moduleBlock.ts
│   │   │   └── typeParameters/
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── callAndConstructSignatureLong.ts
│   │   │       ├── functionTypeLong.ts
│   │   │       ├── interfaceParamsLong.ts
│   │   │       ├── jsfmt.spec.js
│   │   │       └── typeParametersLong.ts
│   │   └── webhost/
│   │       ├── __snapshots__/
│   │       │   └── jsfmt.spec.js.snap
│   │       ├── jsfmt.spec.js
│   │       └── webtsc.ts
│   ├── typescript_ambient/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── ambient.ts
│   │   └── jsfmt.spec.js
│   ├── typescript_array/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── comment.js
│   │   └── jsfmt.spec.js
│   ├── typescript_as/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── as.js
│   │   └── jsfmt.spec.js
│   ├── typescript_cast/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── hug-args.ts
│   │   ├── jsfmt.spec.js
│   │   └── parenthesis.ts
│   ├── typescript_class/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── constructor.ts
│   │   ├── dunder.ts
│   │   ├── generics.ts
│   │   ├── jsfmt.spec.js
│   │   ├── methods.ts
│   │   └── optional.ts
│   ├── typescript_comments/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── abstract_class.ts
│   │   ├── jsfmt.spec.js
│   │   ├── jsx.ts
│   │   ├── location.ts
│   │   ├── type-parameters.ts
│   │   └── types.ts
│   ├── typescript_decorators/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── decorators.js
│   │   ├── inline-decorators.ts
│   │   └── jsfmt.spec.js
│   ├── typescript_destructuring/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── destructuring.ts
│   │   └── jsfmt.spec.js
│   ├── typescript_enum/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── enum.ts
│   │   └── jsfmt.spec.js
│   ├── typescript_export/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── comment.js
│   │   ├── export-class.js
│   │   ├── export.ts
│   │   └── jsfmt.spec.js
│   ├── typescript_import_require/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── import_require.js
│   │   └── jsfmt.spec.js
│   ├── typescript_index_signature/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── index-signature.ts
│   │   └── jsfmt.spec.js
│   ├── typescript_interface/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── abstract.ts
│   │   ├── comments.js
│   │   ├── jsfmt.spec.js
│   │   ├── long-extends.ts
│   │   └── separator.ts
│   ├── typescript_keyof/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── keyof.ts
│   ├── typescript_keywords/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── keywords.js
│   ├── typescript_method/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   ├── semi.js
│   │   └── type_literal_optional_method.ts
│   ├── typescript_module/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── empty.js
│   │   ├── global.js
│   │   ├── jsfmt.spec.js
│   │   └── namespace_function.ts
│   ├── typescript_new/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── new-signature.ts
│   ├── typescript_non_null/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── parens.ts
│   ├── typescript_nosemi/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── index-signature.ts
│   │   ├── interface.ts
│   │   ├── jsfmt.spec.js
│   │   └── type.js
│   ├── typescript_readonly/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── readonly.ts
│   ├── typescript_rest/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── rest.ts
│   ├── typescript_semi/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── no-semi.ts
│   ├── typescript_trailing_comma/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── trailing.ts
│   ├── typescript_tsx/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   ├── keyword.tsx
│   │   ├── not-react.ts
│   │   ├── react.tsx
│   │   └── this.tsx
│   ├── typescript_tuple/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   ├── trailing-comma.ts
│   │   └── tuple.ts
│   ├── typescript_typeparams/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── long-function-arg.ts
│   ├── typescript_union/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── inlining.ts
│   │   ├── jsfmt.spec.js
│   │   └── union-parens.ts
│   ├── unary/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   ├── object.js
│   │   └── series.js
│   ├── unary_expression/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── urnary_expression.js
│   ├── unicode/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── keys.js
│   ├── union_intersection/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── test.js
│   ├── update_expression/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── update_expression.js
│   ├── variable_declarator/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   ├── multiple.js
│   │   └── string.js
│   ├── while/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── indent.js
│   │   └── jsfmt.spec.js
│   ├── windows/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   ├── line-ending.js
│   │   └── template.js
│   ├── with/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── indent.js
│   │   └── jsfmt.spec.js
│   └── yield/
│       ├── __snapshots__/
│       │   └── jsfmt.spec.js.snap
│       ├── conditional.js
│       └── jsfmt.spec.js
├── tests_config/
│   ├── .eslintrc.js
│   ├── raw-serializer.js
│   └── run_spec.js
├── tests_integration/
│   ├── .eslintrc.js
│   ├── __tests__/
│   │   ├── __snapshots__/
│   │   │   ├── config-resolution.js.snap
│   │   │   ├── ignore-path.js.snap
│   │   │   ├── multiple-patterns.js.snap
│   │   │   ├── parser-api.js.snap
│   │   │   ├── with-node-modules.js.snap
│   │   │   ├── with-parser-inference.js.snap
│   │   │   └── with-shebang.js.snap
│   │   ├── config-resolution.js
│   │   ├── debug-check.js
│   │   ├── debug-print-doc.js
│   │   ├── ignore-path.js
│   │   ├── list-different.js
│   │   ├── multiple-patterns.js
│   │   ├── parser-api.js
│   │   ├── syntax-error.js
│   │   ├── with-node-modules.js
│   │   ├── with-parser-inference.js
│   │   └── with-shebang.js
│   ├── cli/
│   │   ├── config/
│   │   │   ├── .prettierrc
│   │   │   ├── jest/
│   │   │   │   ├── .prettierrc
│   │   │   │   ├── Component.js
│   │   │   │   ├── Component.test.js
│   │   │   │   └── __best-tests__/
│   │   │   │       └── file.js
│   │   │   ├── js/
│   │   │   │   ├── file.js
│   │   │   │   └── prettier.config.js
│   │   │   ├── no-config/
│   │   │   │   ├── file.js
│   │   │   │   └── file.ts
│   │   │   ├── package/
│   │   │   │   ├── file.js
│   │   │   │   ├── file.ts
│   │   │   │   └── package.json
│   │   │   └── rc-json/
│   │   │       ├── .prettierrc
│   │   │       └── file.js
│   │   ├── ignore-path/
│   │   │   ├── .gitignore
│   │   │   ├── .prettierignore
│   │   │   └── regular-module.js
│   │   ├── multiple-patterns/
│   │   │   ├── directory/
│   │   │   │   ├── file.js
│   │   │   │   └── nested-directory/
│   │   │   │       └── nested-directory-file.js
│   │   │   ├── other-directory/
│   │   │   │   ├── file.js
│   │   │   │   └── nested-directory/
│   │   │   │       └── nested-directory-file.js
│   │   │   ├── other-regular-modules.js
│   │   │   └── regular-module.js
│   │   ├── with-node-modules/
│   │   │   ├── not_node_modules/
│   │   │   │   └── file.js
│   │   │   └── regular-module.js
│   │   ├── with-parser-inference/
│   │   │   ├── javascript.js
│   │   │   └── stylesheet.css
│   │   └── with-shebang/
│   │       └── issue1890.js
│   ├── custom-parsers/
│   │   ├── custom-rename-input.js
│   │   └── custom-rename-parser.js
│   └── runPrettier.js
└── website/
    ├── .eslintrc.js
    ├── README.md
    ├── core/
    │   └── Footer.js
    ├── deploy.sh
    ├── editors.json
    ├── languages.json
    ├── package.json
    ├── pages/
    │   ├── en/
    │   │   ├── help/
    │   │   │   └── index.js
    │   │   ├── index.js
    │   │   └── users/
    │   │       └── index.js
    │   └── playground/
    │       └── index.html
    ├── siteConfig.js
    ├── static/
    │   ├── CNAME
    │   ├── install-service-worker.js
    │   ├── lib/
    │   │   ├── index.js
    │   │   ├── parser-babylon.js
    │   │   ├── parser-flow.js
    │   │   ├── parser-graphql.js
    │   │   ├── parser-json.js
    │   │   ├── parser-parse5.js
    │   │   ├── parser-postcss.js
    │   │   ├── parser-typescript.js
    │   │   ├── prettier-version.js
    │   │   └── sw-toolbox.js
    │   ├── manifest.json
    │   ├── playground.js
    │   ├── redirect.js
    │   ├── service-worker.js
    │   └── worker.js
    └── users.json

================================================
FILE CONTENTS
================================================

================================================
FILE: .codecov.yml
================================================
comment: off

coverage:
  status:
    patch:
      default:
        target: 80%
    project:
      default:
        target: auto


================================================
FILE: .eslintignore
================================================
!/*.js
/tests/**/*.js
!/tests/**/jsfmt.spec.js
!/**/.eslintrc.js
/test.js
/dist/
**/node_modules/**
/website/static/lib/


================================================
FILE: .eslintrc.js
================================================
"use strict";

module.exports = {
  env: {
    es6: true,
    node: true
  },
  extends: ["eslint:recommended", "plugin:react/recommended"],
  plugins: ["prettier", "react", "import"],
  rules: {
    curly: "error",
    "import/no-extraneous-dependencies": [
      "error",
      { devDependencies: ["tests*/**", "scripts/**"] }
    ],
    "no-console": "off",
    "no-else-return": "error",
    "no-inner-declarations": "error",
    "no-unneeded-ternary": "error",
    "no-useless-return": "error",
    "no-var": "error",
    "one-var": ["error", "never"],
    "prefer-arrow-callback": "error",
    "prefer-const": "error",
    "prettier/prettier": "error",
    "react/no-deprecated": "off",
    strict: "error",
    "symbol-description": "error",
    yoda: ["error", "never", { exceptRange: true }]
  },
  parserOptions: {
    ecmaFeatures: {
      jsx: true
    }
  }
};


================================================
FILE: .flowconfig
================================================
[ignore]
.*/tests/.*
.*/node_modules/.*
.*/dist/.*


================================================
FILE: .gitignore
================================================
/node_modules
npm-debug.log
/bin/prettier-with-tabs.js
/bin/prettier-spaces.js
/errors
/test.js
/test.ts
/test.css
/.vscode
/dist
/website/node_modules
.DS_Store
coverage


================================================
FILE: .ignore
================================================
docs/index.js
docs/parser-babylon.js
docs/parser-flow.js
docs/parser-postcss.js
docs/parser-typescript.js
dist


================================================
FILE: .npmignore
================================================
yarn.lock
tests
tests_config


================================================
FILE: .pre-commit-hooks.yaml
================================================
-   id: prettier
    name: prettier
    entry: prettier --write
    language: node
    types: [javascript]


================================================
FILE: .travis.yml
================================================
---
language: node_js
node_js:
  - 4
  - stable
cache:
  yarn: true
  directories:
  - node_modules
env:
  - NODE_ENV=development
  - NODE_ENV=production
matrix:
  allow_failures:
    - env: NODE_ENV=production
  fast_finish: true
install:
  - yarn install --production=false
before_script:
  - if [ "${NODE_ENV}" = "production" ]; then yarn build; fi
script:
  - yarn lint
  - AST_COMPARE=1 yarn test -- --runInBand
  - if [ "${NODE_ENV}" = "development" ]; then yarn codecov; fi
deploy:
  provider: script
  script: website/deploy.sh
  skip_cleanup: true
  on:
    branch: master
    node: stable


================================================
FILE: .yarnrc
================================================
save-prefix ""


================================================
FILE: CHANGELOG.md
================================================
# 1.5.3

[link](https://github.com/jlongster/prettier/compare/1.5.2...1.5.3)

* Force trailingComma option to "none" when parser is JSON (#2335)

# 1.5.2

[link](https://github.com/jlongster/prettier/compare/1.5.1...1.5.2)

* Full printing support for GraphQL and various bug fixes
* Fixes for range formatting for JSON and CSS (#2295, #2298)

# 1.5.1

[link](https://github.com/jlongster/prettier/compare/1.5.0...1.5.1)

* Go back to babylon beta 13 (#2289)
* Inline import('x') to avoid having trailing comma (#2288)

# 1.5.0

[link](https://github.com/jlongster/prettier/compare/1.4.4...1.5.0)

* [Release Notes](https://github.com/prettier/prettier/releases/tag/1.5.0)

# 1.4.4

* Fix postcss, I forgot to re-run the build script :(

# 1.4.3

[link](https://github.com/jlongster/prettier/compare/1.4.2...1.4.3)

* Fix support for node 4 (#1988)
* Fix website on iOS Safari (#1970)

Formatting change:
* Position JSX whitespace (`{" "}`) at the end of lines (#1964)

Lots of small fixes, mainly for TypeScript.

# 1.4.2

[link](https://github.com/jlongster/prettier/compare/1.4.1...1.4.2)

* fix(decorators): do not inline methods with decorators with babylon (#1934)
* fix(typescript): print semi with inline interfaces/types (#1936)
* fix(typescript): no semi after export default abstract class, fixes (#1937)
* TypeScript: fix trailing comma in enum (#1938)

# 1.4.1

[link](https://github.com/jlongster/prettier/compare/1.4.0...1.4.1)

* Lots of fixes for TypeScript and regressions from 1.4.0. If you are using 1.4.0, you should migrate to 1.4.1 asap ;)

# 1.4.0

[link](https://github.com/jlongster/prettier/compare/1.3.1...1.4.0)

* [Release Notes](https://github.com/prettier/prettier/releases/tag/1.4.0)

# 1.3.1

* Respect template inline-ness (#1497)

# 1.3.0

[link](https://github.com/jlongster/prettier/compare/1.2.2...1.3.0)

* add printer branches for some TypeScript nodes (#1331)
* Skip trailing commas with FlowShorthandWithOneArg (#1364)
* add TSLastTypeNode and TSIndexedAccessType (#1370)
* add TSConstructorType (#1367)
* fix do-while break (#1373)
* Fix missing trailing commas on flow generics (#1381)
* Add example of using yarn test with arguments (#1383)
* Have --debug-check also run ast verification (#1337)
* Fix empty line in block with EmptyStatement (#1375)
* parent decides how to print type annotations (#1391)
* add TSTypeOperator (#1396)
* fix TSTypeReference not printing typeArguments (#1392)
* add TSMappedType and TSTypeParameter (#1393)
* fix TSFunctionType failing on TypeParameters (#1394)
* add TSIntersectionType (#1395)
* fix typeParameters printing TSFunctionType w/o breaking flow (#1397)
* Fix optional flow parenthesis (#1357)
* [experimental] Add linting step in test pipeline (#1172)
* fix VariableDeclarator not printing type parameters (#1415)
* add TSMethodSignature (#1416)
* Add TSParameterProperty, TSAbstractClassDeclaration and TSAbstractMethodDefinition (#1410)
* Inline nullable in flow generics (#1426)
* fixed method 'check' error 'format' of undefined (#1424)
* feat(typescript): add delcare modifier support for vars, classes and functions (#1436)
* Allow flow declarations to break on StringLiteralTypeAnnotations (#1437)
* Require '::a.b' to have a preceding ; in no-semi style (#1442)
* Require '(a || b).c++' to have a preceding ; in no-semi style (#1443)
* Upgrade flow parser to 0.45 (#1447)
* Add supertype tests and add TSAbstractClassProperty (#1467)
* Break class expression returned by arrow call (#1464)
* update typescript snapshots to account for #1464 (#1470)
* [WIP] add TSNamespaceExportDeclaration (#1459)
* update yarn.lock (#1471)
* [RFC] Do not indent calls with a single template literal argument (#873)
* Proper indentation for template literals (#1385)
* Add parenthesis for unusual nested ternaries (#1386)
* Preserve inline comment as last argument (#1390)
* Only add parenthesis on ternaries inside of arrow functions if doesn't break (#1450)
* Fix windows line ending on template literals (#1439)
* Add space around `=` for flow generics default arguments (#1476)
* Don't break for unparenthesised single argument flow function (#1452)
* Don't break on empty arrays and objects (#1440)
* Do not break on [0] (#1441)
* Reorder flow object props (#1451)
* Break inline object first in function arguments (#1453)
* Break inline object first in function arguments (#1453) (#1173)
* Inline template literals as arrow body (#1485)

# 1.2.2

[link](https://github.com/jlongster/prettier/compare/1.2.1...1.2.2)

* Only break for conditionals (#1350)

# 1.2.1

[link](https://github.com/jlongster/prettier/compare/1.2.0...1.2.1)

* Fix duplicate comments in classes (#1349)

# 1.2.0

[link](https://github.com/jlongster/prettier/compare/1.1.0...1.2.0)

* match jsx files in pre-commit hook (#1276)
* Fix isPreviousLineEmpty on Windows (#1263)
* Add --dev option to suggested install cmd (#1289)
* Write out change CLI changes synchronously. Fixes #1287. (#1292)
* Remove emoji part from lint-staged's name (#1302)
* omit 'doc' key from options object before passing it to format() (#1299)
* Skip globbing filenames with node-glob when the filename is not a glob (#1307)
* FIX: more documentation for jetbrains (#1265)
* Fix template literal comments (#1296)
* Double quotes for option values in Readme file (#1314)
* Do not print the sub-tree when using prettier-ignore (#1286)
* Bail when traversing === groups (#1294)
* Avoid breaking arguments for last arg expansion (#1305)
* Add typescript as a valid parser value (#1318)
* Add jestbrains filewatcher docs (#1310)
* Add prettier_d to Related Projects (#1328)
* Add parentheses for assignment as body of arrow (#1326)
* Add information about Vim's other autocmd events (#1333)
* add printer branch for TSFirstTypeNode (#1332)
* Optimize `prettier --help` for humans (#1340)
* Update link to @vjeux's React London presentation (#1330)
* Improve regex printing (#1341)
* Fix arrow function parenthesis with comments in flow (#1339)
* Break if () if conditional inside breaks (#1344)
* Don't inline paren at right of arguments (#1345)

# 1.1.0

[link](https://github.com/jlongster/prettier/compare/1.0.0...1.1.0)

* Prettier 1.0 is the stabler release we've been waiting for (#1242)
* fix small typo (#1255)
* Fix : ReferenceError: err is not defined (#1254)
* Document debugging strategies (#1253)
* Do not inline member expressions as part of assignments (#1256)
* Fix flow union params (#1251)
* Use a whitelist instead of blacklist for member breaking (#1261)
* Remove trailing whitespace (#1259)
* Get rid of fixFaultyLocations code (#1252)
* Fixing n.comments check in printer (#1239)
* [WIP] no-semi comments (#1257)

# 1.0.1

* change semi default

# 1.0.0

[link](https://github.com/jlongster/prettier/compare/0.22.0...1.0.0)

* See announcement blog post: [http://jlongster.com/prettier-1.0](http://jlongster.com/prettier-1.0)

# 0.22.0

[link](https://github.com/jlongster/prettier/compare/0.21.0...0.22.0)

* Run 0.21.0 (#876)
* Fix paren removal on UnionTypeAnnotation (#878)
* Fix typo (#891)
* Ensure no parens for JSX inside of an ArrayExpression (#895)
* Fix object expression in arrow function expression (#897)
* Fix unprinted comments in destructuring (#898)
* Fix bug with importing empty type (#904)
* Fix broken export comment (#899)
* Add CLI Example to Readme (#909)
* Fix 0.5e0 (#911)
* Fix binary expression instanceof in arrow function expression (#913)
* Improve readme CLI usage example (#910)
* Do not break long it/test calls when template literal (#893)
* Update lint-staged docs to use husky for less config. (#923)
* Fix files with comments only (#813)
* Update README.md (#928)
* Fix binary op as body in arrow expression (#921)
* cleanup needsParens (#935)
* [JSX] Break if opening element breaks (#942)
* Parenthesize function expressions in expression position (#941)
* update the README to add a pre-commit hook (#944)
* Fix #951: properly parenthesize ** expressions (#952)
* [WIP] TypeScript Parser (#915)
* Do not break long `describe` calls (#953)
* Recursively find leading comments inside ReturnStatements (#955)
* Fix `in` inside of a for in a nested way (#954)
* Make comments around empty parenthesis be inside (#957)
* Stabilize comment after object label (#958)
* Inline BinaryExpressions inside JSXExpression (#965)
* Only allow same-line arrow-less body for explicit nodes (#966)

# 0.21.0

[link](https://github.com/jlongster/prettier/compare/0.20.0...0.21.0)

* [JSX] Break before and after jsx whitespace (#836)
* re-run snapshot tests
* Run prettier 0.20.0 (#835)
* [JSX] Don't wrap JSX Elements in parentheses in {} (#845)
* Fix comment after the last argument of a function (#856)
* Fix travis build imag
* Do not break require calls (#841)
* Stabilize import as comments (#855)
* Fix jsx expression comment that break (#852)
* Inline last arg function arguments (#847)
* Keep parenthesis on export default function (#844)
* Inline short expressions for boolean operators too (#826)
* Introduce -l option (#854)
* Add parenthesis around assignments (#862)
* Do not put \n after label (#860)
* Fix comment for `call( // comment` (#858)
* Do not break long it calls (#842)
* Fix flow union comments (#853)

# 0.20.0

[link](https://github.com/jlongster/prettier/compare/0.19.0...0.20.0)

* Fix extra parens for update expressions (#796)
* Fix empty options (#803)
* Eagerly evaluate `ifBreak` when processing template literals (fixes #795
* Fix function declaration params comments (#802)
* Update flow to 0.40 (#808)
* Correct link for travis
* Fix function call args (#809)
* Properly support `do` (#811)
* Do not put parenthesis around not named default export (#819)
* Adds another preset to related projects (#820)
* Fix trailing commas in docs (#825)
* Put short body of arrow functions on the same line (#829)
* Preserve new lines for comments after `=` (#830)
* Fix indentation of a merged group (#828)
* Migrate class comments to the beginning (#831)
* Update list of related projects (#833)
* Allow breaking for logical expressions in member chains (#827)

# 0.19.0

[link](https://github.com/jlongster/prettier/compare/0.18.0...0.19.0)

* docs(README): use yarn add for consistency (#734)
* Make trailing-comma option support 2 different modes (#641)
* Update README with valid trailingComma options
* Fix await ternary parenthesis (#740)
* Fix missing dangling comment in exports (#741)
* Fix missing dangling comments in arrays (#744)
* Remove extra parenthesis around await inside of unary expression (#745)
* Fix missing dangling comments in for loop (#742)
* Add note about trailingComma option in versions 0.18.0 and below
* Add missing explanatory comment in ForStatement case (#748)
* Fix leading & operators in flow types (#738)
* Fix missing comments in assignment pattern (#704)
* Correctly place trailing comments in conditionals (#754)
* Use double quotes in script wildcards to support windows `cmd.exe`. (#761)
* Upgrade to Jest 19 (#762)
* Upgrade to Jest 19.0.1 (#779)
* Remove extra parens around ternary arguments of a new call (#776)
* Do not attach comments to EmptyStatements in try/catch (#763)
* Bump babylon & add test for async func decl (#790)
* Add `this` for Member factory whitelist and remove softline (#782)
* Do not expand empty catch (#783)
* Group [0] at the end of the previous chain instead of beginning of next one (#784)
* Do not format template literals (#749)
* Revert babylon bump (#792)
* Do not put trailing commas for function declaration in es5 mode (#791)
* [WIP] Fix comments in template literals (#643)
* Introduce line-suffix-boundary (#750)
* [RFC] Add parenthesis around && inside of || (#780)
* Fix tests on node 4

# 0.18.0

[link](https://github.com/jlongster/prettier/compare/0.17.0...0.18.0)

* fix --debug-check
* [JSX] Don't add newline following newline (#690)
* [Docs] Use replaceState API when demo code changes (#710)
* Do not inline new as last argument (#705)
* Inline objects & arrays as right part of a boolean expression (#692)
* [RFC] Remove parenthesis object special case (#689)
* Ensure importKind is printed (#718)
* [Docs]: update Readme to reference VS extension (#720)
* docs: Add pre-commit hook with 🚫💩 lint-staged section to the README (#714)
* [RFC] Preserve new lines between array elements (#707)
* Do not put \n inside of empty object method bodies (#706)
* Align boolean inside of arrow functions (#691)
* Fix trailing new lines preservation (#724)
* Unified Split

# 0.17.1

* Use `readline` api to manipulate `process.stdout` output. (#687)

# 0.17.0

[link](https://github.com/jlongster/prettier/compare/0.16.0...0.17.0)

* [JSX] Fix spurious newline (fixes #614) (#628)
* Add --debug-check cli option (#627)
* Remove last trailing line for directives-only files (#609)
* Expand vim instructions
* Fix formatting in readme
* Update snapshots
* Preserve empty line before last comment (#594)
* test on current release of node.js (#595)
* [JSX] jsx-whitespace breaks with parent (fixes #622) (#626)
* Log filename with [update] or [ignore] flags during `--write` process. (#584)
* Do not indent binary expressions inside of if (#604)
* Put short elements at right of single binary expression on same line (#605)
* Run prettier 0.16.0 on the codebase (#631)
* Preserve blank lines inside of objects (#606)
* fix typo in JetBrains External Tool config readme (#679)
* Fix dangling comments for arrays (#665)
* Print line-suffix in --debug-print-doc (#676)
* Avoid unneeded parenthesis for colon with comments (#673)
* Stabilize comments inside of if/then/else before { (#672)
* Soft break the first member of a chain (#667)
* Stabilize comments inside of ternaries (#666)
* Fix trailing commas with a trailing comment (#664)
* Fix Flow union type annotations indentation (#650)
* Ensure that all comments are printed (#571)
* Properly support member chains comments (#668)
* [WIP] Fix Flow DeclareTypeAlias (#669)
* Add option for putting > on the last line in jsx (#661)
* Always put a hardline before dangling comment (#675)
* Fix comments in return statement argument (#657)
* [RFC] Introduce prettier-ignore-next (#671)

# 0.16.0

[link](https://github.com/jlongster/prettier/compare/0.15.0...0.16.0)

* Revert "Print \x and \u escapes in strings and regexes lowercase (#522)
* Fix ternary indent bug (#577)
* jsx parentheses fix (#580)
* Run prettier on 0.15.0 (#558)
* Add parenthesis around single argument arrow if comments (#573)
* Use breakParent inside of last arrow expansion (#559)
* Support dangling comments in ClassBody (#570)
* Make all the member expressions but the last one part of the first group (#589)
* Break long imports (#590)
* Remove the concept of globalPrecedingNode (#561)
* Remove test.js and put it back in the gitignore
* Fix use strict as expression statement (#602)
* Use arrow function when inputted that way for flow objects (#608)
* Better support try/catch comments (#607)
* Print CallExpression comments inside of memberChain (#600)
* Do not attach comments to EmptyStatement (#599)
* Fix files with only comments on the flow parser (#598)
* Remove first line special case (#597)
* Fix single indented JSX comment (#596)
* Print dangling on ast on all the paths

# 0.15.0

[link](https://github.com/jlongster/prettier/compare/0.14.1...0.15.0)

* Fix syntax error in empty object with dangling comment (#533)
* Fix closing call expression commented out (#530)
* Update `bracketSpacing` comment to say it's about {} (#529)
* Add 0.14.1 to CHANGELOG (#525)
* Print \x and \u escapes in strings and regexes lowercase (#522)
* Fix Jetbrains example screenshot url. (#534)
* Preserve next line with trailing comment (#535)
* Break nested calls (#517)
* Update snapshot tests from conflicting PRs
* Reimplement MemberExpression printing (#469)
* Remove spurious test.js
* Fix small typo on Jetbrains section (#552)
* [JSX] Handle non-breaking space (#557)
* Make comments between if & else to look good (#544)
* Whitelist UnaryExpression for parentless objects (#545)
* Make comments inside of MemberExpression look good (#556)

# 0.14.1

[link](https://github.com/jlongster/prettier/compare/0.14.0...0.14.1)

* Fix range for object newline detection (#520)
  * a bugfix for "Keep expanded objects expanded" (#495)

# 0.14.0

[link](https://github.com/jlongster/prettier/compare/0.13.0...0.14.0)

* Only write to files if the change (#511)
* Remove extra group when printing object values (#502)
* Add documentation for JetBrains products. (#509)
* Don't print trailing commas for object destructuring and rest (#512)
* Mention eslint-config-prettier (#516)
* [RFC] Keep expanded objects expanded (#495)
* Do not always put an empty lines after directives (#505)
* Print numbers in a uniform way (#498)

# 0.13.0

[link](https://github.com/jlongster/prettier/compare/0.12.0...0.13.0)

* Simplify arrow functions that use blocks (#496)
* Properly print comments for BinaryExpression (#494)
* Preserve empty line after comment (#493)
* [JSX] Handle each line of text separately (#455)
* Proper support for dangling comments (#492)

# 0.12.0

[link](https://github.com/jlongster/prettier/compare/0.11.0...0.12.0)

* [WIP] Add rationale document (#372)
* Proper parenthesis for yield and await in conditional (#436)
* Don't print double newlines at EOF to stdout (#437)
* Explain the `--color` option in a comment (#434)
* Validate user-provided config with jest-validate (#301)
* Propagate breaks upwards automatically, introduce `breakParent` (#440)
* Fix typo in variable name (#441)
* Refactor traversal (#442)
* Do not put a newline on empty `{}` for functions (#447)
* Better error message for assertDoc (#449)
* Remove `multilineGroup` (#450)
* Ability to break on `:` for objects (#314)
* Update snapshots
* [RFC] Do not put spacing inside of arrays with bracketSpacing (#446)
* Fix integer CLI arguments (#452)
* Move tests around (#454)
* Update package.json, use ast-types 0.9.4 (#453)
* Update lockfile
* Support printing import("a") (#458)
* Explain that you can pass options to the spec runner (#460)
* Fix spurious whitespace (#463)
* Preserve new lines after directives (#464)
* Put decorators on the same line (#459)
* docs: add related projects (#456)
* Add break points for class declaration (#466)
* Added parens around in operator in for loops 🚀. (#468)
* CLI improvements (#478)
* [RFC] Hug Conditionals in JSX (#473)
* Refactor comment algorithm and improve newline/spaces detection (#482)
* Indent ternaries (#484)
* Indent computed member (#471)
* Maintain windows line ending (#472)
* Don't break up JSXOpeningElement if it only has a single text (#488)
* Add CallExpression to the last argument expansion whitelist (#470)
* Mention eslint-plugin-prettier in Related Projects (#490)
* Stop using conditionalGroup inside of UnionTypeAnnotation (#491)

# 0.11.0

[link](https://github.com/jlongster/prettier/compare/0.0.10...0.11.0)

Now using minor versions instead of patch versions for the releases.

 * Swap quotes (#355)
 * Drop jsesc (#357)
 * Use a Symbol instead of the private dep (#359)
 * Add parens for default export FunctionExpressions (#345)
 * Fix export extension output (#361)
 * Exit with an error if an unknown CLI option is passed (#365)
 * Warn if using deprecated CLI options (#364)
 * s/jscodefmt/prettier/ (#370)
 * Fix CLI options (#369)
 * Fix some parens cases for UpdateExpressions (#381)
 * Output strings with the minimum amount of escaped quotes (#390)
 * Ignore EmptyStatement inside of switch case (#391)
 * Support multiple standalones in import (#389)
 * Fix missing semi-colon in for loop and var body (#388)
 * Fix empty labels (#383)
 * Fix forced trailing comma (#382)
 * Empty switch should not have an empty line (#384)
 * add formatAST() for formatting ASTs directly (#393)
 * Fix class extends parenthesis (#396)
 * Fix class inside of binary expression missing parenthesis (#397)
 * Fix parenthesis in object as left-hand-side of template (#398)
 * Remove unneeded parens for FunctionExpression inside LogicalExpression (#399)
 * Remove trailing comma for array destructuring with rest (#400)
 * Fix +++x (#401)
 * Also do the class extend parenthesis for class expressions (#403)
 * Fix various parenthesis issues on the left side of template (#404)
 * Fix in inside of the first group of a for (#406)
 * Add parenthesis for arrow function inside of ternary (#408)
 * Add parenthesis around class expression when left side of call expression (#409)
 * Ensure computed method names don't lose quotes (#419)
 * Add parenthesis for yield inside of a conditional (#418)
 * Add parenthesis around assignment for arrow function body (#422)
 * Add parenthesis around export default assignments (#423)
 * Add parenthesis for class expression on left of member expression (#421)
 * Fix missing parens around object in MemberExpression (#424)
 * Re-run snapshot tests
 * Workaround flow bug around trailing comma (#427)
 * Add parenthesis when class expressions are left of a ternary (#428)
 * Revert "Workaround flow bug around trailing comma" (#429)
 * Update commands.md (#430)
 * Improve vim integration section (#416)
 * Add glob support to the CLI (#363)
 * Use babel-code-frame for syntax errors (#367)
 * Update yarn.lock

# 0.0.10

[link](https://github.com/jlongster/prettier/compare/0.0.9...0.0.10)

* Add description to package.json (#320)
* Fix crash for single rest on class declaration (#315)
* Add canonical link to Prettier SublimeText package. (#318)
* Properly escape JSXText (#329)
* Hug objects and arrays inside of JSXExpressionContainer (#213)
* Add quotes around unicode keys in flow parser (#328)
* Add tests for comments (#330)
* Print dangling comments in blocks (#331)
* Remove Printer module in favor of single function (#333)
* Split pp.js into doc-{printer,builders,utils}.js (#334)
* Fix node 4 (#336)
* Remove unused functions from recast (#337)
* Kill fromString (#335)
* Extract parser.js (#338)
* Normalize exports (#339)
* Refactor index.js (#340)
* Add semicolon to more default exports (#343)
* Introduce --parser/parser option and deprecate --flow-parser/useFlowParser (#342)
* Remove parens around AwaitExpression in ternary (#346)
* Indent while test the same way as if test (#352)
* Add debugging support for doc IR (#347)

# 0.0.9

[link](https://github.com/jlongster/prettier/compare/0.0.8...0.0.9)

* Workaround flow bug parsing astral unicode characters (#277)
* Allow specifying the major mode that `defun-before-save` will use. (#276
* Fix space missing before `,` on export with bracket spacing off (#278)
* Fix space missing before `,` on import with bracket spacing off (#279)
* Add newline after shebang if necessary. (#215)
* Remove +1 from newline detection (#261)
* Fix path when printing member chains so parens work properly (fixes #243
* Ensure parens on NewExpression with function callee (#282)
* Fix missing semi when default exporting CallExpression (#287)
* Workaround flow parser bug with spread in arrays (#285)
* Update flow-parser to 0.38 (#290)
* Allow customizing args sent to prettier-command (#289)
* Do not output trailing commas with rest arguments (#283)
* Use exact versions in package.json (#291)
* Use js native String.repeat() (#293)
* Handle additional export default parens cases (#298)
* Fix parens around anonymous functions (#297)
* Introduce second argument to ifBreak (#302)
* Fix bracketSpacing typo in tests (#299)
* Remove unused variable (#304)
* Fix trailing whitespace (#300)
* add version flag (#294)
* Add --run-in-band to travis (#306)
* [JSX] Split elements on newlines and preserve whitespace (w/@yamafaktory) (#234)
* Print binary and logical expressions in a nicer format (#262)

# 0.0.8

[link](https://github.com/jlongster/prettier/compare/e447971...0192d58)

* Fix await parenthesis (#185)
* Add note about Sublime Test github issue in readme
* Remove legacy Recast code and simplify API. (#191)
* Don't break to new line if logical/loop statements are without brackets. (#194)
* Fix parenthesis for UpdateExpression (#198)
* Fix directives printing for empty functions (#199)
* Fix key quotes omission for flow parser (#203)
* Fix comma when an arrow function with no arguments breaks (#210)
* Last argument expansion works for arrow functions that return JSX (#211)
* Remove faulty location check on template literals that throws in Nuclide (#218)
* Add flow parser experimental options (#221)
* Fix empty exports (#225)
* Fix cases of missing parens with NewExpression (#230)
* Fix issue with ArrowFunctionExpression parens (#236)
* Add npm version badge (#240)
* Consolidate badges in readme
* Fix parens issue with nested UrnaryExpressions (#237)
* Escape strings using jsesc (#229)
* Add newline for empty blocks {} (#205)
* Fix empty export with from clause (#248)
* Fix missing parenthesis for typeof and arrow functions (#249)
* Fix FunctionExpression parens issues (#250)
* Fix last element of an array being null (#232)
* Make sure empty for loops generate valid code (#224)
* Fix parens for functions inside TaggedTemplateExpression (#259)
* Preserve the way numbers were written (#257)

# 0.0.7

[link](https://github.com/jlongster/prettier/compare/7e31610...6f5df0e2b6b7db252e28ce80ebc54814fdc61497)

* Update live editor to 0.0.6
* Adds various prettier-browser changes (#175)
* Fix `[(0)]` (#179)
* Do not advance for forward skipSpaces (#176)
* Fix windows line-endings (#177)
* add license to package.json (#178)
* Fix exponent in babylon (#181)
* Make `declare type` consistent between babylon and flow (#183)
* Fix DeclareInterface (#182)
* Change test to workaround babylon bug (#184)

# 0.0.6

[link](https://github.com/jlongster/prettier/compare/faed09ceea32fcdd58b525aa09b880afb9fa55b7...3af7da5748d64efaed781104ec198924c8c369f9)

* Format property names consistently
* remove node 0.10 from travis config, add travis badge to readme
* Update snapshots
* chore: link prettier package to its github project
* add gitter badge to readme
* add instructions for Visual Studio plugin
* Do not unquote string properties
* Add prettier-browser
* v0.0.5 -- Accidentally didn't push this commit out before others landed; 0.0.5 is actually based on commit faed09ceea32fcdd58b525aa09b880afb9fa55b7
* update yarn.lock
* remove recast (not used)
* Always use double quotes for JSX and properly escape
* remove unused recast ref
* Fix typo in README.
* Support type annotation for rest argument on babylon parser
* Use `setq' instead of `infc' and `decf'
* Add title and encoding to the REPL
* Fix old name reference in tests_config
* Minimize string escapes
* Support method generics on babylon parser
* Break long `exports` into multiple lines.
* Use group instead of conditionalGroup
* Fix misprinting of computed properties in method chains. (#157)
* treat shebang outside of parsing (#137)
* Break multiline imports (#167)
* Do not put spaces on empty for loop (#169)
* Add trailing comma support for multiline exports (#168)
* Update run_spec to support options
* Add tests for bracketSpacing option
* Add tests for quotes option
* Add tests for tabWiths option
* Add tests for trailingComma option
* Fix for Node 4
* Add test for shebang and move to index.js (#170)
* Numeric literal callees should keep parens (#141)
* Remove leftover `arrowParensAlways` option (#171)
* Wrap Stateless JSX Arrow Functions and Assignment in Parens (fixes part of #73)
* Break JSXOpeningElement between attributes (fixes #15)
* JSX maintains spaces that matter (fixes #30 and thus part of #73)
* Multiline JSX opening tag breaks children out too (for #73)
* Add regression tests for long JSX Expression contents
* include index.js in format:all script (#132)
* Wrap ForStatement in a block for const decls (#172)
* Reprint all the files!


================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to Prettier

To get up and running, install the dependencies and run the tests:

```
yarn
yarn lint
yarn test
```

Here's what you need to know about the tests:

* The tests uses [Jest](https://facebook.github.io/jest/) snapshots.
* You can make changes and run `jest -u` (or `yarn test -- -u`) to update the
  snapshots. Then run `git diff` to take a look at what changed. Always update
  the snapshots when opening a PR.
* You can run `AST_COMPARE=1 jest` for a more robust test run. That formats each
  file, re-parses it, and compares the new AST with the original one and makes
  sure they are semantically equivalent.
* Each test folder has a `jsfmt.spec.js` that runs the tests. Normally you can
  just put `run_spec(__dirname);` there. You can also pass options and
  additional parsers, like this:
  `run_spec(__dirname, { trailingComma: "es5" }, ["babylon"]);`
* `tests/flow/` contains the Flow test suite, and is not supposed to be edited
  by hand. To update it, clone the Flow repo next to the Prettier repo and run:
  `node scripts/sync-flow-tests.js ../flow/tests/`.
* If you would like to debug prettier locally, you can either debug it in node
  or the browser. The easiest way to debug it in the browser is to run the
  interactive `docs` REPL locally. The easiest way to debug it in node, is to
  create a local test file and run it in an editor like VS Code.

Run `yarn lint -- --fix` to automatically format files.

If you can, take look at [commands.md](commands.md) and check out [Wadler's
paper](http://homepages.inf.ed.ac.uk/wadler/papers/prettier/prettier.pdf) to
understand how Prettier works.


================================================
FILE: LICENSE
================================================
Copyright 2017 James Long

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

================================================
FILE: README.md
================================================
# Prettier Miscellaneous

[![Gitter](https://badges.gitter.im/gitterHQ/gitter.svg)](https://gitter.im/jlongster/prettier)
[![Build Status](https://travis-ci.org/arijs/prettier-miscellaneous.svg?branch=master)](https://travis-ci.org/arijs/prettier-miscellaneous)
[![CircleCI Status](https://circleci.com/gh/arijs/prettier-miscellaneous.svg?style=shield&circle-token=5b135ff8817790a20e0eb1c5853752b931bc42c0)](https://circleci.com/gh/arijs/prettier-miscellaneous)
[![Codecov](https://img.shields.io/codecov/c/github/arijs/prettier-miscellaneous.svg)](https://codecov.io/gh/arijs/prettier-miscellaneous)
[![NPM version](https://img.shields.io/npm/v/prettier-miscellaneous.svg)](https://www.npmjs.com/package/prettier-miscellaneous)
[![styled with prettier](https://img.shields.io/badge/styled_with-prettier_misc-ff69b4.svg)](https://github.com/arijs/prettier-miscellaneous)

> # CONFIGURATION WELCOME
>
> This is a fork of [prettier/prettier](https://github.com/prettier/prettier), with a goal of supporting additional options not picked up by official Prettier.
>
> If you want to add an option to Prettier Miscellaneous, please send a PR! 😃
>
> ![Happyness](https://i.redd.it/p63sznfyu38y.jpg)

Prettier is an opinionated code formatter with support for:
* JavaScript, including [ES2017](https://github.com/tc39/proposals/blob/master/finished-proposals.md)
* [JSX](https://facebook.github.io/jsx/)
* [Flow](https://flow.org/)
* [TypeScript](https://www.typescriptlang.org/)
* CSS, [LESS](http://lesscss.org/), and [SCSS](http://sass-lang.com)
* [JSON](http://json.org/)
* [GraphQL](http://graphql.org/)

It removes all original styling[\*](#styling-footnote) and ensures that all outputted code
conforms to a consistent style. (See this [blog post](http://jlongster.com/A-Prettier-Formatter))

<details>
<summary><strong>Table of Contents</strong></summary>

* [What does Prettier do?](#what-does-prettier-do)
* [Why Prettier?](#why-prettier)
  + [Building and enforcing a style guide](#building-and-enforcing-a-style-guide)
  + [Helping Newcomers](#helping-newcomers)
  + [Writing code](#writing-code)
  + [Easy to adopt](#easy-to-adopt)
  + [Clean up an existing codebase](#clean-up-an-existing-codebase)
  + [Ride the hype train](#ride-the-hype-train)
* [How does it compare to ESLint (or TSLint, stylelint...)?](#how-does-it-compare-to-eslint-or-tslint-stylelint)
* [Usage](#usage)
  + [CLI](#cli)
  + [ESLint](#eslint)
  + [Pre-commit Hook](#pre-commit-hook)
  + [API](#api)
  + [Excluding code from formatting](#excluding-code-from-formatting)
* [Options](#options)
  + [Print Width](#print-width)
  + [Tab Width](#tab-width)
  + [Tabs](#tabs)
  + [Semicolons](#semicolons)
  + [Quotes](#quotes)
  + [Trailing Commas](#trailing-commas)
  + [Bracket Spacing](#bracket-spacing)
  + [JSX Brackets](#jsx-brackets)
  + [Range](#range)
  + [Parser](#parser)
  + [Filepath](#filepath)
* [Configuration File](#configuration-file)
  + [Basic Configuration](#basic-configuration)
  + [Configuration Overrides](#configuration-overrides)
  + [Configuration Schema](#configuration-schema)
* [Editor Integration](#editor-integration)
  + [Atom](#atom)
  + [Emacs](#emacs)
  + [Vim](#vim)
  + [Visual Studio Code](#visual-studio-code)
  + [Visual Studio](#visual-studio)
  + [Sublime Text](#sublime-text)
  + [JetBrains WebStorm, PHPStorm, PyCharm...](#jetbrains-webstorm-phpstorm-pycharm)
* [Language Support](#language-support)
* [Related Projects](#related-projects)
* [Technical Details](#technical-details)
* [Badge](#badge)
* [Contributing](#contributing)
</details>

--------------------------------------------------------------------------------

## What does Prettier do?

Prettier takes your code and reprints it from scratch by taking the line length into account.

For example, take the following code:

```js
foo(arg1, arg2, arg3, arg4);
```

It fits in a single line so it's going to stay as is. However, we've all run into this situation:

```js
foo(reallyLongArg(), omgSoManyParameters(), IShouldRefactorThis(), isThereSeriouslyAnotherOne());
```

Suddenly our previous format for calling function breaks down because this is too long. Prettier is going to do the painstaking work of reprinting it like that for you:

```js
foo(
  reallyLongArg(),
  omgSoManyParameters(),
  IShouldRefactorThis(),
  isThereSeriouslyAnotherOne()
);
```

Prettier enforces a consistent code **style** (i.e. code formatting that won't affect the AST) across your entire codebase because it disregards the original styling[\*](#styling-footnote) by parsing it away and re-printing the parsed AST with its own rules that take the maximum line length
into account, wrapping code when necessary.

<a href="#styling-footnote" name="styling-footnote">\*</a>_Well actually, some
original styling is preserved when practical—see [empty lines] and [multi-line
objects]._

[empty lines]:Rationale.md#empty-lines
[multi-line objects]:Rationale.md#multi-line-objects

If you want to learn more, these two conference talks are great introductions:

<a href="https://www.youtube.com/watch?v=hkfBvpEfWdA"><img width="298" src="https://cloud.githubusercontent.com/assets/197597/24886367/dda8a6f0-1e08-11e7-865b-22492450f10f.png"></a> <a href="https://www.youtube.com/watch?v=0Q4kUNx85_4"><img width="298" src="https://cloud.githubusercontent.com/assets/197597/24886368/ddacd6f8-1e08-11e7-806a-9febd23cbf47.png"></a>


## Why Prettier?

### Building and enforcing a style guide

By far the biggest reason for adopting Prettier is to stop all the on-going debates over styles. It is generally accepted that having a common style guide is valuable for a project and team but getting there is a very painful and unrewarding process. People get very emotional around particular ways of writing code and nobody likes spending time writing and receiving nits.
- “We want to free mental threads and end discussions around style. While sometimes fruitful, these discussions are for the most part wasteful.”
- “Literally had an engineer go through a huge effort of cleaning up all of our code because we were debating ternary style for the longest time and were inconsistent about it. It was dumb, but it was a weird on-going "great debate" that wasted lots of little back and forth bits. It's far easier for us all to agree now: just run Prettier, and go with that style.”
- “Getting tired telling people how to style their product code.”
- “Our top reason was to stop wasting our time debating style nits.”
- “Having a githook set up has reduced the amount of style issues in PRs that result in broken builds due to ESLint rules or things I have to nit-pick or clean up later.”
- “I don't want anybody to nitpick any other person ever again.”
- “It reminds me of how Steve Jobs used to wear the same clothes every day because he has a million decisions to make and he didn't want to be bothered to make trivial ones like picking out clothes. I think Prettier is like that.”

### Helping Newcomers

Prettier is usually introduced by people with experience in the current codebase and JavaScript but the people that disproportionally benefit from it are newcomers to the codebase. One may think that it's only useful for people with very limited programming experience, but we've seen it quicken the ramp up time from experienced engineers joining the company, as they likely used a different coding style before, and developers coming from a different programming language.
- “My motivations for using Prettier are: appearing that I know how to write JavaScript well.”
- “I always put spaces in the wrong place, now I don't have to worry about it anymore.”
- “When you're a beginner you're making a lot of mistakes caused by the syntax. Thanks to Prettier, you can reduce these mistakes and save a lot of time to focus on what really matters.”
- “As a teacher, I will also tell to my students to install Prettier to help them to learn the JS syntax and have readable files.”

### Writing code

What usually happens once people are using Prettier is that they realize that they actually spend a lot of time and mental energy formatting their code. With Prettier editor integration, you can just press that magic key binding and poof, the code is formatted. This is an eye opening experience if anything else.
- “I want to write code. Not spend cycles on formatting.”
- “It removed 5% that sucks in our daily life - aka formatting”
- “We're in 2017 and it's still painful to break a call into multiple lines when you happen to add an argument that makes it go over the 80 columns limit :(“

### Easy to adopt

We've worked very hard to use the least controversial coding styles, went through many rounds of fixing all the edge cases and polished the getting started experience. When you're ready to push Prettier into your codebase, not only should it be painless for you to do it technically but the newly formatted codebase should not generate major controversy and be accepted painlessly by your co-workers.
- “It's low overhead. We were able to throw Prettier at very different kinds of repos without much work.”
- “It's been mostly bug free. Had there been major styling issues during the course of implementation we would have been wary about throwing this at our JS codebase. I'm happy to say that's not the case.”
- “Everyone runs it as part of their pre commit scripts, a couple of us use the editor on save extensions as well.”
- “It's fast, against one of our larger JS codebases we were able to run Prettier in under 13 seconds.”
- “The biggest benefit for Prettier for us was being able to format the entire code base at once.”

### Clean up an existing codebase

Since coming up with a coding style and enforcing it is a big undertaking, it often slips through the cracks and you are left working on inconsistent codebases. Running Prettier in this case is a quick win, the codebase is now uniform and easier to read without spending hardly any time.
- “Take a look at the code :) I just need to restore sanity.”
- “We inherited a ~2000 module ES6 code base, developed by 20 different developers over 18 months, in a global team. Felt like such a win without much research.

### Ride the hype train

Purely technical aspects of the projects aren't the only thing people look into when choosing to adopt Prettier. Who built and uses it and how quickly it spreads through the community has a non-trivial impact.
- “The amazing thing, for me, is: 1) Announced 2 months ago. 2) Already adopted by, it seems, every major JS project. 3) 7000 stars, 100,000 npm downloads/mo”
- “Was built by the same people as React & React Native.”
- “I like to be part of the hot new things.”
- “Because soon enough people are gonna ask for it.”

A few of the [many projects](https://www.npmjs.com/browse/depended/prettier) using Prettier:

<table>
<tr>
<td><p align="center"><a href="https://facebook.github.io/react/"><img src="website/static/images/react-200x100.png" alt="React" width="200" height="100"><br>React</a></p></td>
<td><p align="center"><a href="https://facebook.github.io/jest/"><img src="website/static/images/jest-200x100.png" alt="Jest" width="200" height="100"><br>Jest</a></p></td>
<td><p align="center"><a href="https://yarnpkg.com"><img src="website/static/images/yarn-200x100.png" alt="Yarn" width="200" height="100"><br>Yarn</a></p></td>
</tr>
<tr>
<td><p align="center"><a href="https://babeljs.io/"><img src="website/static/images/babel-200x100.png" alt="Babel" width="200" height="100"><br>Babel</a></p></td>
<td><p align="center"><a href="https://zeit.co/"><img src="website/static/images/zeit-200x100.png" alt="Zeit" width="200" height="100"><br>Zeit</a></p></td>
<td><p align="center"><a href="https://webpack.js.org/api/cli/"><img src="website/static/images/webpack-200x100.png" alt="Webpack-cli" width="200" height="100"><br>Webpack-cli</a></p></td>
</tr>
</table>


## How does it compare to ESLint (or TSLint, stylelint...)?

Linters have two categories of rules:

**Formatting rules**: eg: [max-len](http://eslint.org/docs/rules/max-len), [no-mixed-spaces-and-tabs](http://eslint.org/docs/rules/no-mixed-spaces-and-tabs), [keyword-spacing](http://eslint.org/docs/rules/keyword-spacing), [comma-style](http://eslint.org/docs/rules/comma-style)...

Prettier alleviates the need for this whole category of rules! Prettier is going to reprint the entire program from scratch in a consistent way, so it's not possible for the programmer to make a mistake there anymore :)

**Code-quality rules**: eg [no-unused-vars](http://eslint.org/docs/rules/no-unused-vars), [no-extra-bind](http://eslint.org/docs/rules/no-extra-bind), [no-implicit-globals](http://eslint.org/docs/rules/no-implicit-globals), [prefer-promise-reject-errors](http://eslint.org/docs/rules/prefer-promise-reject-errors)...

Prettier does nothing to help with those kind of rules. They are also the most important ones provided by linters as they are likely to catch real bugs with your code!


## Usage

Install:

```
yarn add prettier-miscellaneous --dev
```

You can install it globally if you like:

```
yarn global add prettier-miscellaneous
```

*We're using `yarn` but you can use `npm` if you like:*

```
npm install [--save-dev|--global] prettier-miscellaneous
```

### CLI

Run Prettier through the CLI with this script. Run it without any
arguments to see the [options](#options).

To format a file in-place, use `--write`. You may want to consider
committing your code before doing that, just in case.

```bash
prettier [opts] [filename ...]
```

In practice, this may look something like:

```bash
prettier --single-quote --trailing-comma es5 --write "{app,__{tests,mocks}__}/**/*.js"
```

Don't forget the quotes around the globs! The quotes make sure that Prettier
expands the globs rather than your shell, for cross-platform usage.
The [glob syntax from the glob module](https://github.com/isaacs/node-glob/blob/master/README.md#glob-primer)
is used.

#### `--with-node-modules`

Prettier CLI will ignore files located in `node_modules` directory. To opt-out from this behavior use `--with-node-modules` flag.

#### `--list-different`

Another useful flag is `--list-different` (or `-l`) which prints the filenames of files that are different from Prettier formatting. If there are differences the script errors out, which is useful in a CI scenario.

```bash
prettier --single-quote --list-different "src/**/*.js"
```

#### `--find-config-path` and `--config`

If you are repeatedly formatting individual files with `prettier`, you will incur a small performance cost
when prettier attempts to look up a [configuration file](#configuration-file). In order to skip this, you may
ask prettier to find the config file once, and re-use it later on.

```bash
prettier --find-config-path ./my/file.js
./my/.prettierrc
```

This will provide you with a path to the configuration file, which you can pass to `--config`:

```bash
prettier --config ./my/.prettierrc --write ./my/file.js
```

You can also use `--config` if your configuration file lives somewhere where prettier cannot find it,
such as a `config/` directory.

If you don't have a configuration file, or want to ignore it if it does exist,
you can pass `--no-config` instead.

#### `--debug-check`

If you're worried that Prettier will change the correctness of your code, add `--debug-check` to the command.
This will cause Prettier to print an error message if it detects that code correctness might have changed.
Note that `--write` cannot be used with `--debug-check`.

### ESLint

If you are using ESLint, integrating Prettier to your workflow is straightforward:

Just add Prettier as an ESLint rule using [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier).

```js
yarn add --dev prettier eslint-plugin-prettier

// .eslintrc
{
  "plugins": [
    "prettier"
  ],
  "rules": {
    "prettier/prettier": "error"
  }
}
```

We also recommend that you use [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) to disable all the existing formatting rules. It's a one liner that can be added on-top of any existing ESLint configuration.

```
$ yarn add --dev eslint-config-prettier
```

.eslintrc.json:

```json
{
  "extends": [
    "prettier"
  ]
}
```


### Pre-commit Hook

You can use Prettier with a pre-commit tool. This can re-format your files that are marked as "staged" via `git add` before you commit.

##### Option 1. [lint-staged](https://github.com/okonet/lint-staged)

Install it along with [husky](https://github.com/typicode/husky):

```bash
yarn add lint-staged husky --dev
```

and add this config to your `package.json`:

```json
{
  "scripts": {
    "precommit": "lint-staged"
  },
  "lint-staged": {
    "*.js": [
      "prettier --write",
      "git add"
    ]
  }
}
```

See https://github.com/okonet/lint-staged#configuration for more details about how you can configure lint-staged.


##### Option 2. [pre-commit](https://github.com/pre-commit/pre-commit)

Copy the following config into your `.pre-commit-config.yaml` file:

```yaml

    -   repo: https://github.com/prettier/prettier
        sha: ''  # Use the sha or tag you want to point at
        hooks:
        -   id: prettier

```

Find more info from [here](http://pre-commit.com).

##### Option 3. bash script

Alternately you can save this script as `.git/hooks/pre-commit` and give it execute permission:

```bash
#!/bin/sh
jsfiles=$(git diff --cached --name-only --diff-filter=ACM | grep '\.jsx\?$' | tr '\n' ' ')
[ -z "$jsfiles" ] && exit 0

# Prettify all staged .js files
echo "$jsfiles" | xargs ./node_modules/.bin/prettier --write

# Add back the modified/prettified files to staging
echo "$jsfiles" | xargs git add

exit 0
```

### Options

Prettier ships with a handful of customizable format options, usable in both the CLI and API.

| Option | Default | Override |
| ------ | ------- | -------- |
| **Print Width** - Specify the length of line that the printer will wrap on.<br /><br /><strong>We strongly recommend against using more than 80 columns</strong>. Prettier works by cramming as much content as possible until it reaches the limit, which happens to work well for 80 columns but makes lines that are very crowded. When a bigger column count is used in styleguides, it usually means that code is allowed to go beyond 80 columns, but not to make every single line go there, like prettier would do.  | `80` | CLI: `--print-width <int>` <br />API: `printWidth: <int>`
| **Tab Width** - Specify the number of spaces per indentation-level. | `2` | CLI: `--tab-width <int>` <br />API: `tabWidth: <int>` |
| **Tabs** - Indent lines with tabs instead of spaces. | `false` | CLI: `--use-tabs` <br />API: `useTabs: <bool>` |
| **Semicolons** - Print semicolons at the ends of statements.<br /><br />Valid options: <ul><li>`true` - add a semicolon at the end of every statement</li><li>`false` - only add semicolons at the beginning of lines that may introduce ASI failures</li></ul> | `true` | CLI: `--no-semi` <br />API: `semi: <bool>` |
| **Quotes** - Use single quotes instead of double quotes.<br /><br />Notes:<ul><li>Quotes in JSX will always be double and ignore this setting, unless `--jsx-single-quote` is used.</li><li>If the number of quotes outweighs the other quote, the quote which is less used will be used to format the string - Example: `"I'm double quoted"` results in `"I'm double quoted"` and `"This \"example\" is single quoted"` results in `'This "example" is single quoted'`.</li></ul> | `false` | CLI: `--single-quote` <br />API: `singleQuote: <bool>` |
| **JSX Single Quote** - Use single quotes instead of double quotes for JSX attributes. | `false` | CLI: `--jsx-single-quote` <br />API: `jsxSingleQuote: <bool>` |
| **Trailing Commas** - Print trailing commas wherever possible.<br /><br />Valid options: <ul><li>`"none"` - no trailing commas </li><li>`"es5"` - trailing commas where valid in ES5 (objects, arrays, etc.)</li><li>`"all"` - trailing commas wherever possible (function arguments). This requires node 8 or a [transform](https://babeljs.io/docs/plugins/syntax-trailing-function-commas/).</li></ul> | `"none"` | CLI: <code>--trailing-comma <none&#124;es5&#124;all></code> <br />API: <code>trailingComma: "<none&#124;es5&#124;all>"</code> |
| **Trailing Commas (extended)** - You can also customize each place to use trailing commas:<br /><br />Valid options: <br /> - `"array"` <br/> - `"object"` <br /> - `"import"` <br /> - `"export"` <br /> - `"arguments"` | `"none"` | You can use a comma separated string list, or an object in the API.<br /><br />CLI: <code>--trailing-comma "array,object,import,export,arguments"</code> <br />API: <code>trailingComma: { array: true, object: true, import: true, export: true, arguments: false }</code> |
| **Bracket Spacing** - Print spaces between brackets in array literals.<br /><br />Valid options: <br /> - `true` - Example: `[ foo: bar ]` <br /> - `false` - Example: `[foo: bar]` | `true` | CLI: `--no-bracket-spacing` <br/>API: `bracketSpacing: <bool>` |
| **Braces Spacing** - Print spaces between braces in object literals.<br /><br />Valid options: <ul><li>`true` - Example: `{ foo: bar }`</li><li>`false` - Example: `{foo: bar}`</li> | `true` | CLI: `--no-braces-spacing` <br />API: `bracesSpacing: <bool>` |
| **JSX Brackets on Same Line** - Put the `>` of a multi-line JSX element at the end of the last line instead of being alone on the next line | `false` | CLI: `--jsx-bracket-same-line` <br />API: `jsxBracketSameLine: <bool>` |
| **Align Object Properties** - Align colons in multiline object literals. Does nothing if object has computed property names. | `false` | CLI: `--align-object-properties` <br/>API: `alignObjectProperties: <bool>` |
| **No Space in Empty Function** - Omit space before empty anonymous function body.<br /><br />Valid options: <br /> - `true` <br /> - `false` | `false` | CLI: `--no-space-empty-fn` <br/>API: `noSpaceEmptyFn: <bool>` |
| **Space before Function Paren** - Put a [space before function parenthesis](http://eslint.org/docs/rules/space-before-function-paren#always).<br /><br />Valid options: <br /> - `true` <br /> - `false` | `false` | CLI: `--space-before-function-paren` <br/>API: `spaceBeforeFunctionParen: <bool>` |
| **Cursor Offset** - Specify where the cursor is. This option only works with `prettier.formatWithCursor`, and cannot be used with `rangeStart` and `rangeEnd`. | `-1` | CLI: `--cursor-offset <int>` <br />API: `cursorOffset: <int>` |
| **Range Start** - Format code starting at a given character offset. The range will extend backwards to the start of the first line containing the selected statement. This option cannot be used with `cursorOffset`. | `0` | CLI: `--range-start <int>` <br />API: `rangeStart: <int>` |
| **Range End** - Format code ending at a given character offset (exclusive). The range will extend forwards to the end of the selected statement. This option cannot be used with `cursorOffset`. | `Infinity` | CLI: `--range-end <int>` <br />API: `rangeEnd: <int>` |
| **Parser** - Specify which parser to use. Both the `babylon` and `flow` parsers support the same set of JavaScript features (including Flow). Prettier automatically infers the parser from the input file path, so you shouldn't have to change this setting. <br />Built-in parsers: <ul><li>`babylon`</li><li>`flow`</li><li>`typescript`</li><li>`postcss`</li><li>`json`</li></ul>[Custom parsers](#custom-parser-api) are also supported. | `babylon` | CLI: <br />`--parser <string>` <br />`--parser ./path/to/my-parser` <br />API: <br />`parser: "<string>"` <br />`parser: require("./my-parser")` |
| **Filepath** - Specify the input filepath this will be used to do parser inference.<br /><br /> Example: <br />`cat foo \| prettier --stdin-filepath foo.css`<br /> will default to use `postcss` parser |  | CLI: `--stdin-filepath` <br />API: `filepath: "<string>"` |

### API

```js
const prettier = require("prettier-miscellaneous");
```

#### `prettier.format(source [, options])`

`format` is used to format text using Prettier. [Options](#options) may be provided to override the defaults.

```js
prettier.format("foo ( );", { semi: false });
// -> "foo()"
```

#### `prettier.check(source [, options])`

`check` checks to see if the file has been formatted with Prettier given those options and returns a `Boolean`.
This is similar to the `--list-different` parameter in the CLI and is useful for running Prettier in CI scenarios.

#### `prettier.formatWithCursor(source [, options])`

`formatWithCursor` both formats the code, and translates a cursor position from unformatted code to formatted code.
This is useful for editor integrations, to prevent the cursor from moving when code is formatted.

The `cursorOffset` option should be provided, to specify where the cursor is. This option cannot be used with `rangeStart` and `rangeEnd`.

```js
prettier.formatWithCursor(" 1", { cursorOffset: 2 });
// -> { formatted: '1;\n', cursorOffset: 1 }
```

#### `prettier.resolveConfig([filePath] [, options])`

`resolveConfig` can be used to resolve configuration for a given source file.
The function optionally accepts an input file path as an argument, which defaults to the current working directory.
A promise is returned which will resolve to:
* An options object, providing a [config file](#configuration-file) was found.
* `null`, if no file was found.

The promise will be rejected if there was an error parsing the configuration file.

If `options.withCache` is `false`, all caching will be bypassed.

```js
const text = fs.readFileSync(filePath, "utf8");
prettier.resolveConfig(filePath).then(options => {
  const formatted = prettier.format(text, options);
})
```

#### `prettier.clearConfigCache()`

As you repeatedly call `resolveConfig`, the file system structure will be cached for performance.
This function will clear the cache. Generally this is only needed for editor integrations that
know that the file system has changed since the last format took place.

#### Custom Parser API

If you need to make modifications to the AST (such as codemods), or you want to provide an alternate parser, you can do so by setting the `parser` option to a function. The function signature of the parser function is:
```js
(text: string, parsers: object, options: object) => AST;
```

Prettier's built-in parsers are exposed as properties on the `parsers` argument.

```js
prettier.format("lodash ( )", {
  parser(text, { babylon }) {
    const ast = babylon(text);
    ast.program.body[0].expression.callee.name = "_";
    return ast;
  }
});
// -> "_();\n"
```

The `--parser` CLI option may be a path to a node.js module exporting a parse function.

### Excluding code from formatting

A JavaScript comment of `// prettier-ignore` will exclude the next node in the abstract syntax tree from formatting.

For example:

```js
matrix(
  1, 0, 0,
  0, 1, 0,
  0, 0, 1
)

// prettier-ignore
matrix(
  1, 0, 0,
  0, 1, 0,
  0, 0, 1
)
```

will be transformed to:

```js
matrix(1, 0, 0, 0, 1, 0, 0, 0, 1);

// prettier-ignore
matrix(
  1, 0, 0,
  0, 1, 0,
  0, 0, 1
)
```

## Options
Prettier ships with a handful of customizable format options, usable in both the CLI and API.

### Print Width
Specify the line length that the printer will wrap on.

> **For readability we recommend against using more than 80 characters:**
>
>In code styleguides, maximum line length rules are often set to 100 or 120. However, when humans write code, they don't strive to reach the maximum number of columns on every line. Developers often use whitespace to break up long lines for readability. In practice, the average line length often ends up well below the maximum.
>
> Prettier, on the other hand, strives to fit the most code into every line. With the print width set to 120, prettier may produce overly compact, or otherwise undesirable code.

Default | CLI Override | API Override
--------|--------------|-------------
`80` | `--print-width <int>` | `printWidth: <int>`

### Tab Width
Specify the number of spaces per indentation-level.

Default | CLI Override | API Override
--------|--------------|-------------
 `2` | `--tab-width <int>` | `tabWidth: <int>`

### Tabs
Indent lines with tabs instead of spaces

Default | CLI Override | API Override
--------|--------------|-------------
`false` | `--use-tabs` | `useTabs: <bool>`

### Semicolons
Print semicolons at the ends of statements.

Valid options:

 * `true` - Add a semicolon at the end of every statement.
 * `false` - Only add semicolons at the beginning of lines that may introduce ASI failures.

Default | CLI Override | API Override
--------|--------------|-------------
`true` | `--no-semi` | `semi: <bool>`

### Quotes
Use single quotes instead of double quotes.

Notes:
* Quotes in JSX will always be double and ignore this setting.
* If the number of quotes outweighs the other quote, the quote which is less used will be used to format the string - Example: `"I'm double quoted"` results in `"I'm double quoted"` and `"This \"example\" is single quoted"` results in `'This "example" is single quoted'`.

Default | CLI Override | API Override
--------|--------------|-------------
`false` |  `--single-quote` | `singleQuote: <bool>`

### Trailing Commas
Print trailing commas wherever possible.

Valid options:
 * `"none"` - No trailing commas.
 * `"es5"` - Trailing commas where valid in ES5 (objects, arrays, etc.)
 * `"all"` - Trailing commas wherever possible (function arguments). This requires node 8 or a [transform](https://babeljs.io/docs/plugins/syntax-trailing-function-commas/).

Default | CLI Override | API Override
--------|--------------|-------------
`"none"` | <code>--trailing-comma <none&#124;es5&#124;all></code> | <code>trailingComma: "<none&#124;es5&#124;all>"</code>

### Bracket Spacing
Print spaces between brackets in object literals.

Valid options:
 * `true` - Example: `{ foo: bar }`.
 * `false` - Example: `{foo: bar}`.

Default | CLI Override | API Override
--------|--------------|-------------
`true` | `--no-bracket-spacing` | `bracketSpacing: <bool>`

### JSX Brackets
Put the `>` of a multi-line JSX element at the end of the last line instead of being alone on the next line.

Default | CLI Override | API Override
--------|--------------|-------------
`false` | `--jsx-bracket-same-line` | `jsxBracketSameLine: <bool>`

### Range
Format only a segment of a file.

These two options can be used to format code starting and ending at a given character offset (inclusive and exclusive, respectively). The range will extend:
* Backwards to the start of the first line containing the selected statement.
* Forwards to the end of the selected statement.

These options cannot be used with `cursorOffset`.

Default | CLI Override | API Override
--------|--------------|-------------
`0`        | `--range-start <int>`| `rangeStart: <int>`
`Infinity` | `--range-end <int>`  | `rangeEnd: <int>`

### Parser
Specify which parser to use.

Both the `babylon` and `flow` parsers support the same set of JavaScript features (including Flow). Prettier automatically infers the parser from the input file path, so you shouldn't have to change this setting.

Built-in parsers:
 * [`babylon`](https://github.com/babel/babylon/)
 * [`flow`](https://github.com/facebook/flow/tree/master/src/parser)
 * [`typescript`](https://github.com/eslint/typescript-eslint-parser) _Since v1.4.0_
 * [`postcss`](https://github.com/postcss/postcss) _Since v1.4.0_
 * [`json`](https://github.com/vtrushin/json-to-ast) _Since v1.5.0_
 * [`graphql`](https://github.com/graphql/graphql-js/tree/master/src/language) _Since v1.5.0_

[Custom parsers](#custom-parser-api) are also supported.  _Since v1.5.0_

Default | CLI Override | API Override
--------|--------------|-------------
`babylon` | `--parser <string>`<br />`--parser ./my-parser` | `parser: "<string>"`<br />`parser: require("./my-parser")`

### Filepath
Specify the input filepath. This will be used to do parser inference.

For example, the following will use `postcss` parser:

```bash
cat foo | prettier --stdin-filepath foo.css
```

Default | CLI Override | API Override
--------|--------------|-------------
None | `--stdin-filepath <string>` | `filepath: "<string>"`


## Configuration File

Prettier uses [cosmiconfig](https://github.com/davidtheclark/cosmiconfig) for configuration file support.
This means you can configure prettier via:

* A `.prettierrc` file, written in YAML or JSON.
* A `prettier.config.js` file that exports an object.
* A `"prettier"` key in your `package.json` file.

The configuration file will be resolved starting from the location of the file being formatted,
and searching up the file tree until a config file is (or isn't) found.

The options to the configuration file are the same the [API options](#options).

### Basic Configuration

JSON:

```json
// .prettierrc
{
  "printWidth": 100,
  "parser": "flow"
}
```

YAML:

```yaml
# .prettierrc
printWidth: 100
parser: flow
```

### Configuration Overrides

Prettier borrows eslint's [override format](http://eslint.org/docs/user-guide/configuring#example-configuration).
This allows you to apply configuration to specific files.

JSON:

```json
{
  "semi": false,
  "overrides": [{
    "files": "*.test.js",
    "options": {
      "semi": true
    }
  }]
}
```

YAML:

```yaml
semi: false
overrides:
- files: "*.test.js"
  options:
    semi: true
```

`files` is required for each override, and may be a string or array of strings.
`excludeFiles` may be optionally provided to exclude files for a given rule, and may also be a string or array of strings.

To get prettier to format its own `.prettierrc` file, you can do:

```json
{
  "overrides": [{
    "files": ".prettierrc",
    "options": { "parser": "json" }
  }]
}
```

For more information on how to use the CLI to locate a file, see the [CLI](#cli) section.

### Configuration Schema

If you'd like a JSON schema to validate your configuration, one is available here: http://json.schemastore.org/prettierrc.

## Editor Integration

### Atom

Atom users can simply install the [`prettier-atom-with-tabs`](https://atom.io/packages/prettier-atom-with-tabs) package and use
`Ctrl+Alt+F` to format a file (or format on save if enabled).

### Emacs

Emacs users should see [this repository](https://github.com/prettier/prettier-emacs)
for on-demand formatting.

### Vim

Vim users can simply install either [sbdchd](https://github.com/sbdchd)/[neoformat](https://github.com/sbdchd/neoformat), [w0rp](https://github.com/w0rp)/[ale](https://github.com/w0rp/ale), or [mitermayer](https://github.com/mitermayer)/[vim-prettier](https://github.com/mitermayer/vim-prettier), for more details see [this directory](https://github.com/prettier/prettier/tree/master/editors/vim).

### Visual Studio Code

Can be installed using the extension sidebar. Search for `Prettier - JavaScript formatter`.

Can also be installed using `ext install prettier-vscode-with-tabs`

[Check its repository for configuration and shortcuts](https://marketplace.visualstudio.com/items?itemName=passionkind.prettier-vscode-with-tabs)

### Visual Studio

Install the [JavaScript Prettier extension](https://github.com/madskristensen/JavaScriptPrettier).

### Sublime Text

Sublime Text support is available through Package Control and
the [JsPrettier](https://packagecontrol.io/packages/JsPrettier) plug-in.

### JetBrains WebStorm, PHPStorm, PyCharm...

See the [WebStorm
guide](https://github.com/jlongster/prettier/tree/master/editors/webstorm/README.md).

## Language Support

Prettier attempts to support all JavaScript language features,
including non-standardized ones. By default it uses the
[Babylon](https://github.com/babel/babylon) parser with all language
features enabled, but you can also use the
[Flow](https://github.com/facebook/flow) parser with the
`parser` API or `--parser` CLI [option](#options).

All of JSX and Flow syntax is supported. In fact, the test suite in
`tests` *is* the entire Flow test suite and they all pass.

Prettier also supports [TypeScript](https://www.typescriptlang.org/), CSS, [LESS](http://lesscss.org/), [SCSS](http://sass-lang.com), [JSON](http://json.org/), and [GraphQL](http://graphql.org/).

The minimum version of TypeScript supported is 2.1.3 as it introduces the ability to have leading `|` for type definitions which prettier outputs.

## Related Projects

- [`eslint-plugin-prettier`](https://github.com/prettier/eslint-plugin-prettier) plugs Prettier into your ESLint workflow
- [`eslint-config-prettier`](https://github.com/prettier/eslint-config-prettier) turns off all ESLint rules that are unnecessary or might conflict with Prettier
- [`prettier-eslint`](https://github.com/prettier/prettier-eslint)
passes `prettier` output to `eslint --fix`
- [`prettier-standard`](https://github.com/sheerun/prettier-standard)
uses `prettier` and `prettier-eslint` to format code with standard rules
- [`prettier-standard-formatter`](https://github.com/dtinth/prettier-standard-formatter)
passes `prettier` output to `standard --fix`
- [`prettier-miscellaneous`](https://github.com/arijs/prettier-miscellaneous)
`prettier` with a few minor extra options
- [`neutrino-preset-prettier`](https://github.com/SpencerCDixon/neutrino-preset-prettier) allows you to use Prettier as a Neutrino preset
- [`prettier_d`](https://github.com/josephfrazier/prettier_d.js) runs Prettier as a server to avoid Node.js startup delay. It also supports configuration via `.prettierrc`, `package.json`, and `.editorconfig`.
- [`Prettier Bookmarklet`](https://prettier.glitch.me/) provides a bookmarklet and exposes a REST API for Prettier that allows to format CodeMirror editor in your browser
- [`prettier-github`](https://github.com/jgierer12/prettier-github) formats code in GitHub comments

## Technical Details

This printer is a fork of
[recast](https://github.com/benjamn/recast)'s printer with its
algorithm replaced by the one described by Wadler in "[A prettier
printer](http://homepages.inf.ed.ac.uk/wadler/papers/prettier/prettier.pdf)".
There still may be leftover code from recast that needs to be cleaned
up.

The basic idea is that the printer takes an AST and returns an
intermediate representation of the output, and the printer uses that
to generate a string. The advantage is that the printer can "measure"
the IR and see if the output is going to fit on a line, and break if
not.

This means that most of the logic of printing an AST involves
generating an abstract representation of the output involving certain
commands. For example, `concat(["(", line, arg, line ")"])` would
represent a concatenation of opening parens, an argument, and closing
parens. But if that doesn't fit on one line, the printer can break
where `line` is specified.

More (rough) details can be found in [commands.md](commands.md).

## Badge

Show the world you're using *Prettier* → [![styled with prettier](https://img.shields.io/badge/styled_with-prettier-ff69b4.svg)](https://github.com/prettier/prettier)

```md
[![styled with prettier](https://img.shields.io/badge/styled_with-prettier-ff69b4.svg)](https://github.com/prettier/prettier)
```

## Contributing

See [CONTRIBUTING.md](CONTRIBUTING.md).


================================================
FILE: Rationale.md
================================================
# Rationale

Prettier is an opinionated JavaScript formatter. This document gives a rationale behind those opinions.


## What prettier is concerned about

### Consistency

Prettier exists for one purpose: to enforce consistency across your entire project. Not only do we output code with consistent whitespace, prettier will lay out code according to a wrapping algorithm based on a maximum line width. That means that long expressions will be broken up across lines, removing the need for manual layout from the programmer which inevitably leads to inconsistency.

### Correctness

The first requirement of prettier is to output valid JavaScript and code that has the exact same behavior as before formatting. Please report any JavaScript code where prettier fails to follow these correctness rules — that's a bug which needs to be fixed!


### Whitespace: indentation and line breaks

This is the core of prettier. The formatting rules are going to be explained in a later section.


### Semi-colons

...TBD...


### Strings

Prettier enforces double quotes by default, but has a setting for enforcing single quotes instead. There are two exceptions:

- The number of escaped quotes are minimized. For example, if you have a string with a single quote inside, it will be enclosed in double quotes regardless of the quote setting: `"that's a double quote"`, not `'that\'s a double quote'`.
- JSX always uses double quotes. JSX takes its roots from HTML, where the dominant use of quotes for attributes is double quotes. Browser developer tools also follow this convention by always displaying HTML with double quotes, even if the source code uses single quotes.

Prettier maintains the way your string is escaped. For example, `"🙂"` won't be formatted into `"\uD83D\uDE42"` and vice versa.


### Parentheses

Prettier outputs the minimum number of parentheses required to ensure that the behavior of the formatted code stays unchanged. This may lead to code that feels ambiguous. If that's the case, you are encouraged to extract the ambiguous parts into variables.


### Empty lines

It turns out that empty lines are very hard to automatically generate. The approach that prettier takes is to preserve empty lines the way they were in the original source code. The only constraint is that prettier disallows several empty lines in a row. They are collapsed to a single one.


### Multi-line objects

It is tempting to collapse an object to a single line if it fits, but there are times when it is better for sibling/cousin keys to stay vertically aligned—see [object lists], [nested configs], [stylesheets], and [keyed methods]. To avoid unfavorable collapsing, prettier simply formats any object as multi-line if it appears as such in the original source code. This is the same strategy used by [elm-format] for multi-line records.

[object lists]:https://github.com/prettier/prettier/issues/74#issue-199965534
[nested configs]:https://github.com/prettier/prettier/issues/88#issuecomment-275448346
[stylesheets]:https://github.com/prettier/prettier/issues/74#issuecomment-275262094
[keyed methods]:https://github.com/prettier/prettier/pull/495#issuecomment-275745434
[elm-format]:https://github.com/prettier/prettier/issues/74#issuecomment-275621526

## What prettier is _not_ concerned about

Here are a few examples of things that are out of scope for prettier:

- Turning single/double quotes into template literals or vice versa.
- Adding/removing `{}` and `return` where they are optional.
- Turning `?:` into `if then else`.


## Formatting rules

... TBD ...


### Function calls


### Method calls


### JSX


### Boolean expressions


### String concatenation


================================================
FILE: bin/prettier.js
================================================
#!/usr/bin/env node

"use strict";

const chalk = require("chalk");
const dashify = require("dashify");
const fs = require("fs");
const getStream = require("get-stream");
const globby = require("globby");
const minimist = require("minimist");
const path = require("path");
const readline = require("readline");
const ignore = require("ignore");

const prettier = eval("require")("../index");
const cleanAST = require("../src/clean-ast").cleanAST;
const resolver = require("../src/resolve-config");

const args = process.argv.slice(2);

const booleanOptionNames = [
  "use-tabs",
  "semi",
  "single-quote",
  "bracket-spacing",
  "braces-spacing",
  "break-property",
  "arrow-parens",
  "array-expand",
  "break-before-else",
  "flatten-ternaries",
  "align-object-properties",
  "space-empty-fn",
  "space-before-function-paren",
  "jsx-single-quote",
  "jsx-bracket-same-line",
  // Deprecated in 0.0.10
  "flow-parser"
];
const stringOptionNames = [
  "print-width",
  "tab-width",
  "parser",
  "trailing-comma"
];

const argv = minimist(args, {
  boolean: [
    "write",
    "stdin",
    // The supports-color package (a sub sub dependency) looks directly at
    // `process.argv` for `--no-color` and such-like options. The reason it is
    // listed here is to avoid "Ignored unknown option: --no-color" warnings.
    // See https://github.com/chalk/supports-color/#info for more information.
    "color",
    "list-different",
    "help",
    "version",
    "debug-print-doc",
    "debug-check",
    "with-node-modules"
  ],
  string: [
    "cursor-offset",
    "range-start",
    "range-end",
    "stdin-filepath",
    "config",
    "find-config-path",
    "ignore-path"
  ],
  default: {
    color: true,
    "ignore-path": ".prettierignore"
  },
  alias: {
    help: "h",
    version: "v",
    "list-different": "l"
  },
  unknown: param => {
	if (param.startsWith("-")) {
      const paramName = param.replace(/--(no-)?/, "");
	  if (
        booleanOptionNames.indexOf(paramName) === -1 &&
        stringOptionNames.indexOf(paramName) === -1
      ) {
        console.warn("Ignored unknown option: " + param + "\n");
        return false;
      }
    }
  }
});

if (argv["version"]) {
  console.log(prettier.version);
  process.exit(0);
}

const filepatterns = argv["_"];
const write = argv["write"];
const stdin = argv["stdin"] || (!filepatterns.length && !process.stdin.isTTY);
const ignoreNodeModules = argv["with-node-modules"] === false;
const ignoreNodeModulesGlobs = ["!**/node_modules/**", "!./node_modules/**"];
const ignorePath = argv["ignore-path"];
const globOptions = {
  dot: true
};

if (write && argv["debug-check"]) {
  console.error("Cannot use --write and --debug-check together.");
  process.exit(1);
}

if (argv["find-config-path"] && filepatterns.length) {
  console.error("Cannot use --find-config-path with multiple files");
  process.exit(1);
}

function getOptionsForFile(filePath) {
  return resolver
    .resolveConfig(filePath, { configFile: argv["config"] })
    .then(options => {
      const parsedArgs = minimist(args, {
        boolean: booleanOptionNames,
        string: stringOptionNames,
        default: Object.assign(
          {
            semi: true,
            "bracket-spacing": true,
            parser: "babylon"
          },
          dashifyObject(options)
        )
      });

      return getOptions(Object.assign({}, argv, parsedArgs));
    })
    .catch(error => {
      console.error("Invalid configuration file:", error.toString());
      process.exit(2);
    });
}

function getOptions(argv) {
  return {
    cursorOffset: getIntOption(argv, "cursor-offset"),
    rangeStart: getIntOption(argv, "range-start"),
    rangeEnd: getIntOption(argv, "range-end"),
    useTabs: argv["use-tabs"],
    semi: argv["semi"],
    printWidth: getIntOption(argv, "print-width"),
    tabWidth: getIntOption(argv, "tab-width"),
    bracketSpacing: argv["bracket-spacing"],
    bracesSpacing: argv["braces-spacing"],
    singleQuote: argv["single-quote"],
    breakProperty: argv["break-property"],
    arrowParens: argv["arrow-parens"],
    arrayExpand: argv["array-expand"],
    breakBeforeElse: argv["break-before-else"],
    flattenTernaries: argv["flatten-ternaries"],
    alignObjectProperties: argv["align-object-properties"],
    noSpaceEmptyFn: !argv["space-empty-fn"],
    spaceBeforeFunctionParen: argv["space-before-function-paren"],
    jsxSingleQuote: argv["jsx-single-quote"],
    jsxBracketSameLine: argv["jsx-bracket-same-line"],
    filepath: argv["stdin-filepath"],
    trailingComma: getTrailingComma(argv),
    parser: getParserOption(argv)
  };
}

function getParserOption(argv) {
  const value = argv.parser;

  if (value === undefined) {
    return value;
  }

  // For backward compatibility. Deprecated in 0.0.10
  if (argv["flow-parser"]) {
    console.warn("`--flow-parser` is deprecated. Use `--parser flow` instead.");
    return "flow";
  }

  return value;
}

function getIntOption(argv, optionName) {
  const value = argv[optionName];

  if (value === undefined) {
    return value;
  }

  if (/^\d+$/.test(value)) {
    return Number(value);
  }

  console.error(
    "Invalid --" +
      optionName +
      " value. Expected an integer, but received: " +
      JSON.stringify(value)
  );
  process.exit(1);
}

function getTrailingComma(argv) {
  switch (argv["trailing-comma"]) {
    case undefined:
    case "none":
      return "none";
    case "":
      console.warn(
        "Warning: `--trailing-comma` was used without an argument. This is deprecated. " +
          'Specify "none", "es5", or "all".'
      );
      return "es5";
    case "es5":
      return "es5";
    case "all":
      return "all";
    default:
      // Allow user to customize each item separated with commas
      // see src/options.js
      return argv["trailing-comma"];
    //throw new Error("Invalid option for --trailing-comma");
  }
}

function dashifyObject(object) {
  return Object.keys(object || {}).reduce((output, key) => {
    output[dashify(key)] = object[key];
    return output;
  }, {});
}

function diff(a, b) {
  return require("diff").createTwoFilesPatch("", "", a, b, "", "", {
    context: 2
  });
}

function format(input, opt) {
  if (argv["debug-print-doc"]) {
    const doc = prettier.__debug.printToDoc(input, opt);
    return { formatted: prettier.__debug.formatDoc(doc) };
  }

  if (argv["debug-check"]) {
    const pp = prettier.format(input, opt);
    const pppp = prettier.format(pp, opt);
    if (pp !== pppp) {
      throw "prettier(input) !== prettier(prettier(input))\n" + diff(pp, pppp);
    } else {
      const ast = cleanAST(prettier.__debug.parse(input, opt));
      const past = cleanAST(prettier.__debug.parse(pp, opt));

      if (ast !== past) {
        const MAX_AST_SIZE = 2097152; // 2MB
        const astDiff =
          ast.length > MAX_AST_SIZE || past.length > MAX_AST_SIZE
            ? "AST diff too large to render"
            : diff(ast, past);
        throw "ast(input) !== ast(prettier(input))\n" +
          astDiff +
          "\n" +
          diff(input, pp);
      }
    }
    return { formatted: opt.filepath || "(stdin)\n" };
  }

  return prettier.formatWithCursor(input, opt);
}

function handleError(filename, e) {
  const isParseError = Boolean(e && e.loc);
  const isValidationError = /Validation Error/.test(e && e.message);

  // For parse errors and validation errors, we only want to show the error
  // message formatted in a nice way. `String(e)` takes care of that. Other
  // (unexpected) errors are passed as-is as a separate argument to
  // `console.error`. That includes the stack trace (if any), and shows a nice
  // `util.inspect` of throws things that aren't `Error` objects. (The Flow
  // parser has mistakenly thrown arrays sometimes.)
  if (isParseError) {
    console.error(filename + ": " + String(e));
  } else if (isValidationError) {
    console.error(String(e));
    // If validation fails for one file, it will fail for all of them.
    process.exit(1);
  } else {
    console.error(filename + ":", e.stack || e);
  }

  // Don't exit the process if one file failed
  process.exitCode = 2;
}

if (
  argv["help"] ||
  (!filepatterns.length && !stdin && !argv["find-config-path"])
) {
  console.log(
    "Usage: prettier [opts] [filename ...]\n\n" +
      "Available options:\n" +
      "  --write                  Edit the file in-place. (Beware!)\n" +
      "  --list-different or -l   Print filenames of files that are different from Prettier formatting.\n" +
      "  --config                 Path to a prettier configuration file (.prettierrc, package.json, prettier.config.js).\n" +
      "  --no-config              Do not look for a configuration file.\n" +
      "  --find-config-path <path>\n" +
      "                           Finds and prints the path to a configuration file for a given input file.\n" +
      "  --ignore-path <path>     Path to a file containing patterns that describe files to ignore.\n" +
      "                           Defaults to ./.prettierignore.\n" +
      "  --stdin                  Read input from stdin.\n" +
      "  --stdin-filepath         Path to the file used to read from stdin.\n" +
      "  --print-width <int>      Specify the length of line that the printer will wrap on. Defaults to 80.\n" +
      "  --tab-width <int>        Specify the number of spaces per indentation-level. Defaults to 2.\n" +
      "  --use-tabs               Indent lines with tabs instead of spaces.\n" +
      "  --no-semi                Do not print semicolons, except at the beginning of lines which may need them.\n" +
      "  --single-quote           Use single quotes instead of double quotes.\n" +
      "  --jsx-single-quote       Use single quotes instead of double quotes for JSX attributes.\n" +
      "  --bracket-spacing        Print spaces between [brackets].\n" +
      "  --no-braces-spacing      Do not print spaces between {braces}.\n" +
      "  --break-property         Allow object properties to break lines.\n" +
      "  --arrow-parens           Always put parentheses on arrow function arguments.\n" +
      "  --array-expand           Expand arrays into one item per line.\n" +
      "  --flatten-ternaries      Format ternaries in a flat style.\n" +
      "  --break-before-else      Put `else` clause in a new line.\n" +
      "  --jsx-bracket-same-line  Put > on the last line instead of at a new line.\n" +
      "  --trailing-comma <none|es5|all>\n" +
      "                           Print trailing commas wherever possible. Defaults to none.\n" +
      "                           You can customize with a comma separated list. 'all' is equivalent to:\n" +
      "                           'array,object,import,export,arguments'\n" +
      "  --align-object-properties\n" +
      "                           Align colons in multiline object literals. Does nothing if object has computed property names.\n" +
      "  --no-space-empty-fn      Omit space before empty function body. Defaults to false.\n" +
      "  --space-before-function-paren\n" +
      "                           Put a space before function parenthesis. Defaults to false.\n" +
      "  --parser <flow|babylon|typescript|postcss|json>\n" +
      "                           Specify which parse to use. Defaults to babylon.\n" +
      "  --cursor-offset <int>    Print (to stderr) where a cursor at the given position would move to after formatting.\n" +
      "                           This option cannot be used with --range-start and --range-end\n" +
      "  --range-start <int>      Format code starting at a given character offset.\n" +
      "                           The range will extend backwards to the start of the first line containing the selected statement.\n" +
      "                           This option cannot be used with --cursor-offset.\n" +
      "                           Defaults to 0.\n" +
      "  --range-end <int>        Format code ending at a given character offset (exclusive).\n" +
      "                           The range will extend forwards to the end of the selected statement.\n" +
      "                           This option cannot be used with --cursor-offset.\n" +
      "                           Defaults to Infinity.\n" +
      "  --no-color               Do not colorize error messages.\n" +
      "  --with-node-modules      Process files inside `node_modules` directory.\n" +
      "  --version or -v          Print Prettier version.\n" +
      "\n"
  );
  process.exit(argv["help"] ? 0 : 1);
}

if (argv["find-config-path"]) {
  resolveConfig(argv["find-config-path"]);
} else if (stdin) {
  getStream(process.stdin).then(input => {
    getOptionsForFile(process.cwd()).then(options => {
      if (listDifferent(input, options, "(stdin)")) {
        return;
      }

      try {
        writeOutput(format(input, options), options);
      } catch (e) {
        handleError("stdin", e);
      }
    });
  });
} else {
  eachFilename(filepatterns, (filename, options) => {
    if (write) {
      // Don't use `console.log` here since we need to replace this line.
      process.stdout.write(filename);
    }

    let input;
    try {
      input = fs.readFileSync(filename, "utf8");
    } catch (e) {
      // Add newline to split errors from filename line.
      process.stdout.write("\n");

      console.error("Unable to read file: " + filename + "\n" + e);
      // Don't exit the process if one file failed
      process.exitCode = 2;
      return;
    }

    listDifferent(input, options, filename);

    const start = Date.now();

    let result;
    let output;

    try {
      result = format(
        input,
        Object.assign({}, options, { filepath: filename })
      );
      output = result.formatted;
    } catch (e) {
      // Add newline to split errors from filename line.
      process.stdout.write("\n");

      handleError(filename, e);
      return;
    }

    if (write) {
      // Remove previously printed filename to log it with duration.
      readline.clearLine(process.stdout, 0);
      readline.cursorTo(process.stdout, 0, null);

      // Don't write the file if it won't change in order not to invalidate
      // mtime based caches.
      if (output === input) {
        if (!argv["list-different"]) {
          console.log(chalk.grey("%s %dms"), filename, Date.now() - start);
        }
      } else {
        if (argv["list-different"]) {
          console.log(filename);
        } else {
          console.log("%s %dms", filename, Date.now() - start);
        }

        try {
          fs.writeFileSync(filename, output, "utf8");
        } catch (err) {
          console.error("Unable to write file: " + filename + "\n" + err);
          // Don't exit the process if one file failed
          process.exitCode = 2;
        }
      }
    } else if (argv["debug-check"]) {
      if (output) {
        console.log(output);
      } else {
        process.exitCode = 2;
      }
    } else if (!argv["list-different"]) {
      writeOutput(result, options);
    }
  });
}

function listDifferent(input, options, filename) {
  if (!argv["list-different"]) {
    return;
  }

  options = Object.assign({}, options, { filepath: filename });

  if (!prettier.check(input, options)) {
    if (!write) {
      console.log(filename);
    }
    process.exitCode = 1;
  }

  return true;
}

function resolveConfig(filePath) {
  resolver.resolveConfigFile(filePath).then(configFile => {
    if (configFile) {
      console.log(path.relative(process.cwd(), configFile));
    } else {
      process.exitCode = 1;
    }
  });
}

function writeOutput(result, options) {
  // Don't use `console.log` here since it adds an extra newline at the end.
  process.stdout.write(result.formatted);

  if (options.cursorOffset) {
    process.stderr.write(result.cursorOffset + "\n");
  }
}

function eachFilename(patterns, callback) {
  // The ignorer will be used to filter file paths after the glob is checked,
  // before any files are actually read
  const ignoreFilePath = path.resolve(ignorePath);
  let ignoreText = "";

  try {
    ignoreText = fs.readFileSync(ignoreFilePath, "utf8");
  } catch (readError) {
    if (readError.code !== "ENOENT") {
      console.error(`Unable to read ${ignoreFilePath}:`, readError);
      process.exit(2);
    }
  }

  const ignorer = ignore().add(ignoreText);

  if (ignoreNodeModules) {
    patterns = patterns.concat(ignoreNodeModulesGlobs);
  }

  return globby(patterns, globOptions)
    .then(filePaths => {
      if (filePaths.length === 0) {
        console.error(
          "No matching files. Patterns tried: " + patterns.join(" ")
        );
        process.exitCode = 2;
        return;
      }
      // Use map series to ensure idempotency
      mapSeries(ignorer.filter(filePaths), filePath => {
        return getOptionsForFile(filePath).then(options =>
          callback(filePath, options)
        );
      });
    })
    .catch(err => {
      console.error(
        "Unable to expand glob patterns: " + patterns.join(" ") + "\n" + err
      );
      // Don't exit the process if one pattern failed
      process.exitCode = 2;
    });
}

function mapSeries(array, iteratee) {
  let current = Promise.resolve();

  const promises = array.map((item, i) => {
    current = current.then(() => {
      return iteratee(item, i, array);
    });
    return current;
  });

  return Promise.all(promises);
}


================================================
FILE: commands.md
================================================
The core of the algorithm is implemented in `doc-{printer,builders,utils,debug}.js`. The printer should
use the basic formatting abstractions provided to construct a format
when printing a node. Parts of the API only exist to be compatible
with recast's previous API to ease migration, but over time we can
clean it up.

The following commands are available:

### concat

Combine an array into a single string.

### group

Mark a group of items which the printer should try to fit on one line.
This is the basic command to tell the printer when to break. Groups
are usually nested, and the printer will try to fit everything on one
line, but if it doesn't fit it will break the outermost group first
and try again. It will continue breaking groups until everything fits
(or there are no more groups to break).

A document can force parent groups to break by including `breakParent`
(see below). A hard and literal line automatically include this so
they always break parent groups. Breaks are propagated to all parent
groups, so if a deeply nested expression has a hard break, everything
with break. This only matters for "hard" breaks, i.e. newlines that
are printed no matter what and can be statically analyzed.

For example, an array will try to fit on one line:

```js
[1, "foo", { bar: 2 }]
```

However, if any of the items inside the array have a hard break, the
array will *always* break as well:

```js
[
  1,
  function() {
    return 2
  },
  3
]
```

Functions always break after the opening curly brace no matter what,
so the array breaks as well for consistent formatting. See the
implementation of `ArrayExpression` for an example.

### conditionalGroup

This should be used as **last resort** as it triggers an exponential complexity when nested. This will try to print the first argument, if it fit use it, otherwise go to the next one and so on.

```js
conditionalGroup([a, b, c])
```

### fill

This is an alternative type of group which behave like text layout: it's going to add a break whenever the next element doesn't fit in the line anymore. The difference with a typical group is that it's not going to break all the separators, just the ones that are at the end of lines.

```js
fill(["I", line, "love", line, "prettier"])
```


### ifBreak

Prints something if the current group breaks and something else if it doesn't.

```js
ifBreak(";", " ")
```

### breakParent

Include this anywhere to force all parent groups to break. See `group`
for more info. Example:

```js
group(
  concat([
    " ",
    expr,
    " ",
    breakParent
  ])
)
```

### join

Join an array of items with a separator.

### line

Specify a line break. If an expression fits on one line, the line
break will be replaced with a space. Line breaks always indent the
next line with the current level of indentation.

### softline

Specify a line break. The difference from `line` is that if the
expression fits on one line, it will be replaced with nothing.

### hardline

Specify a line break that is **always** included in the output, no
matter if the expression fits on one line or not.

### literalline

Specify a line break that is **always** included in the output, and
don't indent the next line. This is used for template literals.

### lineSuffix

This is used to implement trailing comments. In practice, it is not practical to find where the line ends and you don't want to accidentally print some code at the end of the comment. `lineSuffix` will buffer the output and flush it before any new line.

```js
concat(["a", lineSuffix(" // comment"), ";", hardline])
```

will output

```js
a; // comment
```

### lineSuffixBoundary

In cases where you embed code inside of templates, comments shouldn't be able to leave the code part. lineSuffixBoundary is an explicit marker you can use to flush code in addition to newlines.

```js
concat(["{", lineSuffix(" // comment"), lineSuffixBoundary, "}", hardline])
```

will output

```js
{ // comment
}
```

and **not**

```js
{} // comment
```

### indent

Increase the level of indentation.

### align

This is similar to indent but it increases the level of indentation by a fixed number. When using tabs, it's going to print spaces. You should prefer using `indent` whenever possible.

### cursor

This is a placeholder value where the cursor is in the original input in order to find where it would be printed.

## Example

For an example, here's the implementation of the `ArrayExpression` node type:

```js
group(
  concat([
    "[",
    indent(
      options.tabWidth,
      concat([
        line,
        join(
          concat([",", line]),
          path.map(print, "elements")
        )
      ])
    ),
    line,
    "]"
  ])
)
```

This is a group with opening and closing brackets, and possibly
indented contents. Because it's a `group` it will always be
broken up if any of the sub-expressions are broken.


================================================
FILE: docs/CNAME
================================================
prettier.io

================================================
FILE: docs/en/editors.md
================================================
---
id: editors
title: Editor Integration
layout: docs
category: Prettier
permalink: docs/en/editors.html
previous: options
---


## Atom

Atom users can simply install the [prettier-atom](https://github.com/prettier/prettier-atom) package and use
`Ctrl+Alt+F` to format a file (or format on save if enabled).

## Emacs

Emacs users should see [this repository](https://github.com/prettier/prettier-emacs)
for on-demand formatting.

## Vim

Vim users can simply install either [sbdchd](https://github.com/sbdchd)/[neoformat](https://github.com/sbdchd/neoformat), [w0rp](https://github.com/w0rp)/[ale](https://github.com/w0rp/ale), or [mitermayer](https://github.com/mitermayer)/[vim-prettier](https://github.com/mitermayer/vim-prettier), for more details see [this directory](https://github.com/prettier/prettier/tree/master/editors/vim).

## Visual Studio Code

Can be installed using the extension sidebar. Search for `Prettier - JavaScript formatter`.

Can also be installed using `ext install prettier-vscode`.

[Check its repository for configuration and shortcuts](https://github.com/esbenp/prettier-vscode)

## Visual Studio

Install the [JavaScript Prettier extension](https://github.com/madskristensen/JavaScriptPrettier).

## Sublime Text

Sublime Text support is available through Package Control and
the [JsPrettier](https://packagecontrol.io/packages/JsPrettier) plug-in.

## JetBrains WebStorm, PHPStorm, PyCharm...

See the [WebStorm
guide](https://github.com/jlongster/prettier/tree/master/editors/webstorm/README.md).



================================================
FILE: docs/en/options.md
================================================
---
id: options
title: Options
layout: docs
category: Prettier
permalink: docs/en/options.html
previous: usage
next: editors
---

Prettier ships with a handful of customizable format options, usable in both the CLI and API.

## Print Width
Specify the length of line that the printer will wrap on.

**We strongly recommend against using more than 80 columns.**

Prettier works by cramming as much content as possible until it reaches the limit, which happens to work well for 80 columns but makes lines that are very crowded. When a bigger column count is used in styleguides, it usually means that code is allowed to go beyond 80 columns, but not to make every single line go there, like Prettier would do.

Default | CLI Override | API Override
--------|--------------|-------------
`80` | `--print-width <int>` | `printWidth: <int>`

## Tab Width
Specify the number of spaces per indentation-level.

Default | CLI Override | API Override
--------|--------------|-------------
 `2` | `--tab-width <int>` | `tabWidth: <int>`

## Tabs
Indent lines with tabs instead of spaces

Default | CLI Override | API Override
--------|--------------|-------------
`false` | `--use-tabs` | `useTabs: <bool>`

## Semicolons
Print semicolons at the ends of statements.

Valid options:

 * `true` - Add a semicolon at the end of every statement.
 * `false` - Only add semicolons at the beginning of lines that may introduce ASI failures.

Default | CLI Override | API Override
--------|--------------|-------------
`true` | `--no-semi` | `semi: <bool>`

## Quotes
Use single quotes instead of double quotes.

Notes:

* Quotes in JSX will always be double and ignore this setting.
* If the number of quotes outweighs the other quote, the quote which is less used will be used to format the string - Example: `"I'm double quoted"` results in `"I'm double quoted"` and `"This \"example\" is single quoted"` results in `'This "example" is single quoted'`.

Default | CLI Override | API Override
--------|--------------|-------------
`false` |  `--single-quote` | `singleQuote: <bool>`

## Trailing Commas
Print trailing commas wherever possible.

Valid options:

 * `"none"` - No trailing commas.
 * `"es5"` - Trailing commas where valid in ES5 (objects, arrays, etc.)
 * `"all"` - Trailing commas wherever possible (function arguments). This requires node 8 or a [transform](https://babeljs.io/docs/plugins/syntax-trailing-function-commas/).

Default | CLI Override | API Override
--------|--------------|-------------
`"none"` | `--trailing-comma <none,es5,all>` | `trailingComma: "<none,es5,all>"`

## Bracket Spacing
Print spaces between brackets in object literals.

Valid options:
 * `true` - Example: `{ foo: bar }`.
 * `false` - Example: `{foo: bar}`.

Default | CLI Override | API Override
--------|--------------|-------------
`true` | `--no-bracket-spacing` | `bracketSpacing: <bool>`

## JSX Brackets
Put the `>` of a multi-line JSX element at the end of the last line instead of being alone on the next line.

Default | CLI Override | API Override
--------|--------------|-------------
`false` | `--jsx-bracket-same-line` | `jsxBracketSameLine: <bool>`

## Range
Format only a segment of a file.

These two options can be used to format code starting and ending at a given character offset (inclusive and exclusive, respectively). The range will extend:

* Backwards to the start of the first line containing the selected statement.
* Forwards to the end of the selected statement.

These options cannot be used with `cursorOffset`.

Default | CLI Override | API Override
--------|--------------|-------------
`0`        | `--range-start <int>`| `rangeStart: <int>`
`Infinity` | `--range-end <int>`  | `rangeEnd: <int>`

## Parser
Specify which parser to use.

Both the `babylon` and `flow` parsers support the same set of JavaScript features (including Flow). Prettier automatically infers the parser from the input file path, so you shouldn't have to change this setting.

Built-in parsers:

 * [`babylon`](https://github.com/babel/babylon/)
 * [`flow`](https://github.com/facebook/flow/tree/master/src/parser)
 * [`typescript`](https://github.com/eslint/typescript-eslint-parser) _Since v1.4.0_
 * [`postcss`](https://github.com/postcss/postcss) _Since v1.4.0_
 * [`json`](https://github.com/vtrushin/json-to-ast) _Since v1.5.0_
 * [`graphql`](https://github.com/graphql/graphql-js/tree/master/src/language) _Since v1.5.0_

[Custom parsers](#custom-parser-api) are also supported.  _Since v1.5.0_

Default | CLI Override | API Override
--------|--------------|-------------
`babylon` | `--parser <string>` or `--parser ./my-parser` | `parser: "<string>"` or `parser: require("./my-parser")`

## Filepath
Specify the input filepath. This will be used to do parser inference.

For example, the following will use `postcss` parser:

```bash
cat foo | prettier --stdin-filepath foo.css
```

Default | CLI Override | API Override
--------|--------------|-------------
None | `--stdin-filepath <string>` | `filepath: "<string>"`



================================================
FILE: docs/en/usage.md
================================================
---
id: usage
title: Usage
layout: docs
category: Prettier
permalink: docs/en/usage.html
previous: why-prettier
next: options
---


## Install

```
yarn add prettier --dev
```

You can install it globally if you like:

```
yarn global add prettier
```

*We're using `yarn` but you can use `npm` if you like:*

```
npm install [--save-dev|--global] prettier
```

## CLI

Run Prettier through the CLI with this script. Run it without any
arguments to see the [options](#options).

To format a file in-place, use `--write`. You may want to consider
committing your code before doing that, just in case.

```bash
prettier [opts] [filename ...]
```

In practice, this may look something like:

```bash
prettier --single-quote --trailing-comma es5 --write "{app,__{tests,mocks}__}/**/*.js"
```

Don't forget the quotes around the globs! The quotes make sure that Prettier
expands the globs rather than your shell, for cross-platform usage.
The [glob syntax from the glob module](https://github.com/isaacs/node-glob/blob/master/README.md#glob-primer)
is used.

Prettier CLI will ignore files located in `node_modules` directory. To opt-out from this behavior use `--with-node-modules` flag.

If you're worried that Prettier will change the correctness of your code, add `--debug-check` to the command.
This will cause Prettier to print an error message if it detects that code correctness might have changed.
Note that `--write` cannot be used with `--debug-check`.

Another useful flag is `--list-different` (or `-l`) which prints the filenames of files that are different from Prettier formatting. If there are differences the script errors out, which is useful in a CI scenario.

```bash
prettier --single-quote --list-different "src/**/*.js"
```

## ESLint

If you are using ESLint, integrating Prettier to your workflow is straightforward:

Just add Prettier as an ESLint rule using [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier).

```js
yarn add --dev prettier eslint-plugin-prettier

// .eslintrc
{
  "plugins": [
    "prettier"
  ],
  "rules": {
    "prettier/prettier": "error"
  }
}
```

We also recommend that you use [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) to disable all the existing formatting rules. It's a one liner that can be added on-top of any existing ESLint configuration.

```
$ yarn add --dev eslint-config-prettier
```

.eslintrc.json:

```json
{
  "extends": [
    "prettier"
  ]
}
```


## Pre-commit Hook

You can use Prettier with a pre-commit tool. This can re-format your files that are marked as "staged" via `git add` before you commit.

#### Option 1. [lint-staged](https://github.com/okonet/lint-staged)

Install it along with [husky](https://github.com/typicode/husky):

```bash
yarn add lint-staged husky --dev
```

and add this config to your `package.json`:

```json
{
  "scripts": {
    "precommit": "lint-staged"
  },
  "lint-staged": {
    "*.js": [
      "prettier --write",
      "git add"
    ]
  }
}
```

See https://github.com/okonet/lint-staged#configuration for more details about how you can configure lint-staged.


#### Option 2. [pre-commit](https://github.com/pre-commit/pre-commit)

Copy the following config into your `.pre-commit-config.yaml` file:

```yaml

    -   repo: https://github.com/prettier/prettier
        sha: ''  # Use the sha or tag you want to point at
        hooks:
        -   id: prettier
 ```

Find more info from [here](https://github.com/awebdeveloper/pre-commit-prettier).

#### Option 3. bash script

Alternately you can save this script as `.git/hooks/pre-commit` and give it execute permission:

```bash
#!/bin/sh
jsfiles=$(git diff --cached --name-only --diff-filter=ACM | grep '\.jsx\?$' | tr '\n' ' ')
[ -z "$jsfiles" ] && exit 0

# Prettify all staged .js files
echo "jsfiles" | xargs ./node_modules/.bin/prettier --write

# Add back the modified/prettified files to staging
echo "jsfiles" | xargs git add

exit 0
```

## API

The API has three functions:  `format`, `check`, and `formatWithCursor`.

```js
const prettier = require("prettier");
```

### `prettier.format(source [, options])`

`format` is used to format text using Prettier. [Options](#options) may be provided to override the defaults.

```js
prettier.format("foo ( );", { semi: false });
// -> "foo()"
```

### `prettier.check(source [, options])`

`check` checks to see if the file has been formatted with Prettier given those options and returns a `Boolean`.
This is similar to the `--list-different` parameter in the CLI and is useful for running Prettier in CI scenarios.

### `prettier.formatWithCursor(source [, options])`

`formatWithCursor` both formats the code, and translates a cursor position from unformatted code to formatted code.
This is useful for editor integrations, to prevent the cursor from moving when code is formatted.

The `cursorOffset` option should be provided, to specify where the cursor is. This option cannot be used with `rangeStart` and `rangeEnd`.

```js
prettier.formatWithCursor(" 1", { cursorOffset: 2 });
// -> { formatted: '1;\n', cursorOffset: 1 }
```

### Custom Parser API

If you need to make modifications to the AST (such as codemods), or you want to provide an alternate parser, you can do so by setting the `parser` option to a function. The function signature of the parser function is:
```js
(text: string, parsers: object, options: object) => AST;
```

Prettier's built-in parsers are exposed as properties on the `parsers` argument.

```js
prettier.format("lodash ( )", {
  parser(text, { babylon }) {
    const ast = babylon(text);
    ast.program.body[0].expression.callee.name = "_";
    return ast;
  }
});
// -> "_();\n"
```

The `--parser` CLI option may be a path to a node.js module exporting a parse function.

## Excluding code from formatting

A JavaScript comment of `// prettier-ignore` will exclude the next node in the abstract syntax tree from formatting.

For example:

```js
matrix(
  1, 0, 0,
  0, 1, 0,
  0, 0, 1
)

// prettier-ignore
matrix(
  1, 0, 0,
  0, 1, 0,
  0, 0, 1
)
```

will be transformed to:

```js
matrix(1, 0, 0, 0, 1, 0, 0, 0, 1);

// prettier-ignore
matrix(
  1, 0, 0,
  0, 1, 0,
  0, 0, 1
)
```


================================================
FILE: docs/en/why-prettier.md
================================================
---
id: why-prettier
title: Why Prettier?
layout: docs
category: Prettier
permalink: docs/en/why-prettier.html
next: usage
---

## Building and enforcing a style guide

By far the biggest reason for adopting prettier is to stop all the ongoing debates over styles. It is generally accepted that having a common style guide is valuable for a project & team but getting there is a very painful and unrewarding process. People get very emotional around particular ways of writing code and nobody likes spending time writing and receiving nits.

- “We want to free mental threads and end discussions around style. While sometimes fruitful, these discussions are for the most part wasteful.”
- “Literally had an engineer go through a huge effort of cleaning up all of our code because we were debating ternary style for the longest time and were inconsistent about it. It was dumb, but it was a weird on-going "great debate" that wasted lots of little back and forth bits. It's far easier for us all to agree now: just run prettier, and go with that style.”
- “Getting tired telling people how to style their product code.”
- “Our top reason was to stop wasting our time debating style nits.”
- “Having a githook set up has reduced the amount of style issues in PRs that result in broken builds due to ESLint rules or things I have to nit-pick or clean up later.”
- “I don't want anybody to nitpick any other person ever again.”
- “It reminds me of how Steve Jobs used to wear the same clothes every day because he has a million decisions to make and he didn't want to be bothered to make trivial ones like picking out clothes. I think Prettier is like that.”

## Helping Newcomers

Prettier is usually introduced by people with experience in the current codebase and JavaScript but the people that disproportionally benefit from it are newcomers to the codebase. One may think that it's only useful for people with very limited programming experience, but we've seen it quicken the ramp up time from experienced engineers joining the company, as they likely used a different coding style before, and developers coming from a different programming language.

- “My motivations for using Prettier are: appearing that I know how to write JavaScript well.”
- “I always put spaces in the wrong place, now I don't have to worry about it anymore.”
- “When you're a beginner you're making a lot of mistakes caused by the syntax. Thanks to Prettier, you can reduce these mistakes and save a lot of time to focus on what really matters.”
- “As a teacher, I will also tell to my students to install Prettier to help them to learn the JS syntax and have readable files.”

## Writing code

What usually happens once people are using prettier is that they realize that they actually spend a lot of time and mental energy formatting their code. With prettier editor integration, you can just press that magic key binding and poof, the code is formatted. This is an eye opening experience if anything else.

- “I want to write code. Not spend cycles on formatting.”
- “It removed 5% that sucks in our daily life - aka formatting”
- “We're in 2017 and it's still painful to break a call into multiple lines when you happen to add an argument that makes it go over the 80 columns limit :(“

## Easy to adopt

We've worked very hard to use the least controversial coding styles, went through many rounds of fixing all the edge cases and polished the getting started experience. When you're ready to push prettier into your codebase, not only should it be painless for you to do it technically but the newly formatted codebase should not generate major controversy and be accepted painlessly by your co-workers.

- “It's low overhead. We were able to throw Prettier at very different kinds of repos without much work.”
- “It's been mostly bug free. Had there been major styling issues during the course of implementation we would have been wary about throwing this at our JS codebase. I'm happy to say that's not the case.”
- “Everyone runs it as part of their pre commit scripts, a couple of us use the editor on save extensions as well.”
- “It's fast, against one of our larger JS codebases we were able to run Prettier in under 13 seconds.”
- “The biggest benefit for prettier for us was being able to format the entire code base at once.”

## Clean up an existing codebase

Since coming up with a coding style and enforcing it is a big undertaking, it often slips through the cracks and you are left working on inconsistent codebases. Running prettier in this case is a quick win, the codebase is now uniform and easier to read without spending hardly any time.

- “Take a look at the code :) I just need to restore sanity.”
- “We inherited a ~2000 module ES6 code base, developed by 20 different developers over 18 months, in a global team. Felt like such a win without much research.

## Ride the hype train

Purely technical aspects of the projects aren't the only thing people look into when choosing to adopt prettier. Who built and uses it and how quickly it spreads through the community have a non trivial impact.

- “The amazing thing, for me, is: 1) Announced 2 months ago. 2) Already adopted by, it seems, every major JS project. 3) 7000 stars, 100,000 npm downloads/mo”
- “Was built by the same people as React & React Native.”
- “I like to be part of the hot new things.”
- “Because soon enough people are gonna ask for it.”


================================================
FILE: editors/atom.md
================================================
See https://github.com/prettier/prettier-atom


================================================
FILE: editors/emacs/README.md
================================================
This package has been moved to https://github.com/prettier/prettier-emacs.

Please, update your configuration to use the new location.


================================================
FILE: editors/vim/README.md
================================================
# Vim Prettier

<details>
<summary><strong>Table of Contents</strong></summary>

- [Vim and Prettier integration](#vim-and-prettier-integration)
  * [Neoformat](#neoformat)
    + [Neoformat - Installation](#neoformat---installation)
    + [Neoformat - Usage](#neoformat---usage)
    + [Neoformat - Other autocmd events](#neoformat---other-autocmd-events)
    + [Neoformat - Customizing Prettier](#neoformat---customizing-prettier)
  * [vim-prettier](#vim-prettier-1)
    + [vim-prettier - Installation](#vim-prettier---installation)
    + [vim-prettier - Usage](#vim-prettier---usage)
    + [vim-prettier - Configuration](#vim-prettier---configuration)
  * [ALE](#ale)
    + [ALE - Installation](#ale---installation)
    + [ALE - Usage](#ale---usage)
    + [ALE - Configuration](#ale---configuration)
  * [Running manually](#running-manually)
    + [Running Prettier manually in Vim](#running-prettier-manually-in-vim)
</details>

--------------------------------------------------------------------------------

## Vim and Prettier integration

Vim users can simply install either [sbdchd](https://github.com/sbdchd)/[neoformat](https://github.com/sbdchd/neoformat), [w0rp](https://github.com/w0rp)/[ale](https://github.com/w0rp/ale), or [mitermayer](https://github.com/mitermayer)/[vim-prettier](https://github.com/mitermayer/vim-prettier).

--------------------------------------------------------------------------------

### Neoformat 

#### Neoformat - Installation

Add [sbdchd](https://github.com/sbdchd)/[neoformat](https://github.com/sbdchd/neoformat) to your list based on the tool you use:

```vim
Plug 'sbdchd/neoformat'
```

#### Neoformat - Usage

Then make Neoformat run on save:

```vim
autocmd BufWritePre *.js Neoformat
```

#### Neoformat - Other `autocmd` events

You can also make Vim format your code more frequently, by setting an `autocmd` for other events. Here are a couple of useful ones:

* `TextChanged`: after a change was made to the text in Normal mode
* `InsertLeave`: when leaving Insert mode

For example, you can format on both of the above events together with `BufWritePre` like this:

```vim
autocmd BufWritePre,TextChanged,InsertLeave *.js Neoformat
```

See `:help autocmd-events` in Vim for details.

#### Neoformat - Customizing Prettier 

If your project requires settings other than the default Prettier settings, you can pass arguments to do so in your `.vimrc` or [vim project](http://vim.wikia.com/wiki/Project_specific_settings), you can do so:

```vim
autocmd FileType javascript setlocal formatprg=prettier\ --stdin\ --parser\ flow\ --single-quote\ --trailing-comma\ es5
" Use formatprg when available
let g:neoformat_try_formatprg = 1
```

Each space in prettier options should be escaped with `\`.

--------------------------------------------------------------------------------

### vim-prettier

![vim-prettier](https://raw.githubusercontent.com/mitermayer/vim-prettier/master/media/vim-prettier.gif?raw=true "vim-prettier")
 
#### vim-prettier - Installation

Install with [vim-plug](https://github.com/junegunn/vim-plug), assumes node and yarn|npm installed globally.

By default it will auto format **javascript**, **typescript**, **less**, **scss** and **css** files that have "@format" annotation in the header of the file.

```vim
" post install (yarn install | npm install) then load plugin only for editing supported files
Plug 'mitermayer/vim-prettier', { 
    \ 'do': 'npm install', 
    \ 'for': ['javascript', 'typescript', 'css', 'less', 'scss'] } 
```

If using other vim plugin managers or doing manual setup make sure to have `prettier` installed globally or go to your vim-prettier directory and either do `npm install` or `yarn install`

When installed via vim-plug, a default prettier executable is installed inside vim-prettier.

vim-prettier executable resolution:

1. Tranverse parents and search for Prettier installation inside `node_modules`
2. Look for a global prettier installation
3. Use locally installed vim-prettier prettier executable

#### vim-prettier - Usage

Prettier by default will run on auto save but can also be manualy triggered by:

```vim
<Leader>p
```
or 
```vim
:Prettier
```

If your are on vim 8+ you can also trigger async formatting by:

```vim
:PrettierAsync
```

#### vim-prettier - Configuration

Disable auto formatting of files that have "@format" tag 

```vim
let g:prettier#autoformat = 0
```

The command `:Prettier` by default is synchronous but can also be forced async

```vim
let g:prettier#exec_cmd_async = 1
```

By default parsing errors will open the quickfix but can also be disabled

```vim
let g:prettier#quickfix_enabled = 0
```

To enable vim-prettier to run in files without requiring the "@format" doc tag.
First disable the default autoformat, then update to your own custom behaviour

Running before saving sync:

```vim
let g:prettier#autoformat = 0
autocmd BufWritePre *.js,*.css,*.scss,*.less Prettier
```

Running before saving async (vim 8+):

```vim
let g:prettier#autoformat = 0
autocmd BufWritePre *.js,*.css,*.scss,*.less PrettierAsync
```

Running before saving, changing text or leaving insert mode: 

```vim
" when running at every change you may want to disable quickfix
let g:prettier#quickfix_enabled = 0

let g:prettier#autoformat = 0
autocmd BufWritePre,TextChanged,InsertLeave *.js,*.css,*.scss,*.less PrettierAsync
```

**Vim-prettier default formatting settings are different from the prettier defaults, but they can be configured** 

```vim
" max line lengh that prettier will wrap on
g:prettier#config#print_width = 80

" number of spaces per indentation level
g:prettier#config#tab_width = 2

" use tabs over spaces
g:prettier#config#use_tabs = 'false'

" print semicolons
g:prettier#config#semi = 'true'

" single quotes over double quotes
g:prettier#config#single_quote = 'true' 

" print spaces between brackets
g:prettier#config#bracket_spacing = 'false' 

" put > on the last line instead of new line
g:prettier#config#jsx_bracket_same_line = 'true' 

" none|es5|all
g:prettier#config#trailing_comma = 'all'

" flow|babylon|typescript|postcss
g:prettier#config#parser = 'flow'

```
--------------------------------------------------------------------------------

### ALE

#### ALE - Installation

[ALE](https://github.com/w0rp/ale) is an asynchronous lint engine for Vim that
also has the ability to run formatters over code, including Prettier. For ALE
to work you'll have to be using either Vim 8 or Neovim as ALE makes use of the
asynchronous abilities that both Vim 8 and Neovim provide.

The best way to install ALE is with your favourite plugin manager for Vim, such
as [Vim-Plug](https://github.com/junegunn/vim-plug):

```vim
Plug 'w0rp/ale'
```

You can find further instructions on the [ALE repository](https://github.com/w0rp/ale#3-installation).

#### ALE - Usage

Once you've installed ALE you need to enable the Prettier fixer:

```vim
let g:ale_fixers = {}
let g:ale_fixers['javascript'] = ['prettier']
```

ALE will first use the Prettier installed locally (in
`node_modules/.bin/prettier`) before looking for a global installation.

You can then run `:ALEFix` in a JavaScript file to run Prettier.

#### ALE - Configuration

To have ALE run `prettier` when you save a file you can tell ALE to run
automatically:

```vim
let g:ale_fix_on_save = 1
```

To configure Prettier, you can set `g:ale_javascript_prettier_options`. This is
a string that will be passed through to the Prettier command line tool:

```vim
let g:ale_javascript_prettier_options = '--single-quote --trailing-comma es5'
```

--------------------------------------------------------------------------------

### Running manually  

#### Running Prettier manually in Vim

If you need a little more control over when prettier is run, you can create a
custom key binding. In this example, `gp` (mnemonic: "get pretty") is used to
run prettier (with options) in the currently active buffer:

```vim
nnoremap gp :silent %!prettier --stdin --trailing-comma all --single-quote<CR>
```


================================================
FILE: editors/webstorm/README.md
================================================
## Configure External Tool

https://blog.jetbrains.com/webstorm/2016/08/using-external-tools/

Go to *File | Settings | Tools | External Tools* for Windows and Linux or *WebStorm | Preferences | Tools | External Tools* for OS X and click **+** to add a new tool. Let’s name it **Prettier**.

* **Program** set `prettier`

> If on the other hand you have `prettier` installed locally, replace the **Program** with `./node_modules/.bin/prettier` (on OS X and Linux) or `.\node_modules\.bin\prettier.cmd` (on Windows).

* **Parameters** set `--write [other opts] $FilePathRelativeToProjectRoot$`
* **Working directory** set `$ProjectFileDir$`

![Example](https://raw.githubusercontent.com/prettier/prettier/master/editors/webstorm/with-prettier.png)

### Process directories

* Clone the External tool created above and name it `Prettier Directories`
* **Parameters** set `--write [other opts] $FileDirRelativeToProjectRoot$/**/(*.js|*.jsx)`

## Usage

* Cmd-Shift-A on OS X or Ctrl+Shift+A on Windows and Linux
* Type: 'prettier' and hit enter

### Configure Keymap

Now when you setup **External Tool** I guess you want to add hotkey for it. Go to *File | Settings | Keymap* for Windows and Linux *WebStorm | Preferences | Keymap* and type external tool name in search box.

See [this documentation](https://www.jetbrains.com/help/webstorm/configuring-keyboard-shortcuts.html) about configuring keyboard shortcuts.

## Using File Watcher

To automatically format using `prettier` on save, you can use a file watcher.

Go to *File | Settings | Tools | File Watchers* for Windows and Linux or *WebStorm | Preferences | Tools | File Watchers* for OS X and click **+** to add a new tool. Let’s name it **Prettier**.

* **Program** set the full path to a `prettier` executable, such as `/Users/developer/repo/jest/node_modules/.bin/prettier` (on OS X and Linux) or `C:/\Users\developer\repo\jest\node_modules\.bin\prettier.cmd` (on Windows).
* **Parameters** set `--write [other opts] $FilePath$`
* **Working directory** set `$ProjectFileDir$`
* **Immediate file synchronization**: Uncheck to reformat on Save only (otherwise code will jump around while you type)


================================================
FILE: index.js
================================================
"use strict";

const stripBom = require("strip-bom");
const comments = require("./src/comments");
const version = require("./package.json").version;
const printAstToDoc = require("./src/printer").printAstToDoc;
const util = require("./src/util");
const printDocToString = require("./src/doc-printer").printDocToString;
const normalizeOptions = require("./src/options").normalize;
const parser = require("./src/parser");
const printDocToDebug = require("./src/doc-debug").printDocToDebug;
const config = require("./src/resolve-config");

function guessLineEnding(text) {
  const index = text.indexOf("\n");
  if (index >= 0 && text.charAt(index - 1) === "\r") {
    return "\r\n";
  }
  return "\n";
}

function attachComments(text, ast, opts) {
  const astComments = ast.comments;
  if (astComments) {
    delete ast.comments;
    comments.attach(astComments, ast, text, opts);
  }
  ast.tokens = [];
  opts.originalText = text.trimRight();
  return astComments;
}

function ensureAllCommentsPrinted(astComments) {
  if (!astComments) {
    return;
  }

  for (let i = 0; i < astComments.length; ++i) {
    if (astComments[i].value.trim() === "prettier-ignore") {
      // If there's a prettier-ignore, we're not printing that sub-tree so we
      // don't know if the comments was printed or not.
      return;
    }
  }

  astComments.forEach(comment => {
    if (!comment.printed) {
      throw new Error(
        'Comment "' +
          comment.value.trim() +
          '" was not printed. Please report this error!'
      );
    }
    delete comment.printed;
  });
}

function formatWithCursor(text, opts, addAlignmentSize) {
  text = stripBom(text);
  addAlignmentSize = addAlignmentSize || 0;

  const ast = parser.parse(text, opts);

  const formattedRangeOnly = formatRange(text, opts, ast);
  if (formattedRangeOnly) {
    return { formatted: formattedRangeOnly };
  }

  let cursorOffset;
  if (opts.cursorOffset >= 0) {
    const cursorNodeAndParents = findNodeAtOffset(ast, opts.cursorOffset);
    const cursorNode = cursorNodeAndParents.node;
    if (cursorNode) {
      cursorOffset = opts.cursorOffset - util.locStart(cursorNode);
      opts.cursorNode = cursorNode;
    }
  }

  const astComments = attachComments(text, ast, opts);
  const doc = printAstToDoc(ast, opts, addAlignmentSize);
  opts.newLine = guessLineEnding(text);
  const toStringResult = printDocToString(doc, opts);
  const str = toStringResult.formatted;
  const cursorOffsetResult = toStringResult.cursor;
  ensureAllCommentsPrinted(astComments);
  // Remove extra leading indentation as well as the added indentation after last newline
  if (addAlignmentSize > 0) {
    return { formatted: str.trim() + opts.newLine };
  }

  if (cursorOffset !== undefined) {
    return {
      formatted: str,
      cursorOffset: cursorOffsetResult + cursorOffset
    };
  }

  return { formatted: str };
}

function format(text, opts, addAlignmentSize) {
  return formatWithCursor(text, opts, addAlignmentSize).formatted;
}

function findSiblingAncestors(startNodeAndParents, endNodeAndParents) {
  let resultStartNode = startNodeAndParents.node;
  let resultEndNode = endNodeAndParents.node;

  if (resultStartNode === resultEndNode) {
    return {
      startNode: resultStartNode,
      endNode: resultEndNode
    };
  }

  for (const endParent of endNodeAndParents.parentNodes) {
    if (
      endParent.type !== "Program" &&
      endParent.type !== "File" &&
      util.locStart(endParent) >= util.locStart(startNodeAndParents.node)
    ) {
      resultEndNode = endParent;
    } else {
      break;
    }
  }

  for (const startParent of startNodeAndParents.parentNodes) {
    if (
      startParent.type !== "Program" &&
      startParent.type !== "File" &&
      util.locEnd(startParent) <= util.locEnd(endNodeAndParents.node)
    ) {
      resultStartNode = startParent;
    } else {
      break;
    }
  }

  return {
    startNode: resultStartNode,
    endNode: resultEndNode
  };
}

function findNodeAtOffset(node, offset, predicate, parentNodes) {
  predicate = predicate || (() => true);
  parentNodes = parentNodes || [];
  const start = util.locStart(node);
  const end = util.locEnd(node);
  if (start <= offset && offset <= end) {
    for (const childNode of comments.getSortedChildNodes(node)) {
      const childResult = findNodeAtOffset(
        childNode,
        offset,
        predicate,
        [node].concat(parentNodes)
      );
      if (childResult) {
        return childResult;
      }
    }

    if (predicate(node)) {
      return {
        node: node,
        parentNodes: parentNodes
      };
    }
  }
}

// See https://www.ecma-international.org/ecma-262/5.1/#sec-A.5
function isSourceElement(opts, node) {
  if (node == null) {
    return false;
  }
  switch (node.type || node.kind) {
    case "ObjectExpression": // JSON
    case "ArrayExpression": // JSON
    case "StringLiteral": // JSON
    case "NumericLiteral": // JSON
    case "BooleanLiteral": // JSON
    case "NullLiteral": // JSON
    case "json-identifier": // JSON
      return opts.parser === "json";
    case "FunctionDeclaration":
    case "BlockStatement":
    case "BreakStatement":
    case "ContinueStatement":
    case "DebuggerStatement":
    case "DoWhileStatement":
    case "EmptyStatement":
    case "ExpressionStatement":
    case "ForInStatement":
    case "ForStatement":
    case "IfStatement":
    case "LabeledStatement":
    case "ReturnStatement":
    case "SwitchStatement":
    case "ThrowStatement":
    case "TryStatement":
    case "VariableDeclaration":
    case "WhileStatement":
    case "WithStatement":
    case "ClassDeclaration": // ES 2015
    case "ImportDeclaration": // Module
    case "ExportDefaultDeclaration": // Module
    case "ExportNamedDeclaration": // Module
    case "ExportAllDeclaration": // Module
    case "TypeAlias": // Flow
    case "InterfaceDeclaration": // Flow, Typescript
    case "TypeAliasDeclaration": // Typescript
    case "ExportAssignment": // Typescript
    case "ExportDeclaration": // Typescript
    case "OperationDefinition": // GraphQL
    case "FragmentDefinition": // GraphQL
    case "VariableDefinition": // GraphQL
    case "TypeExtensionDefinition": // GraphQL
    case "ObjectTypeDefinition": // GraphQL
    case "FieldDefinition": // GraphQL
    case "DirectiveDefinition": // GraphQL
    case "EnumTypeDefinition": // GraphQL
    case "EnumValueDefinition": // GraphQL
    case "InputValueDefinition": // GraphQL
    case "InputObjectTypeDefinition": // GraphQL
    case "SchemaDefinition": // GraphQL
    case "OperationTypeDefinition": // GraphQL
    case "InterfaceTypeDefinition": // GraphQL
    case "UnionTypeDefinition": // GraphQL
    case "ScalarTypeDefinition": // GraphQL
      return true;
  }
  return false;
}

function calculateRange(text, opts, ast) {
  // Contract the range so that it has non-whitespace characters at its endpoints.
  // This ensures we can format a range that doesn't end on a node.
  const rangeStringOrig = text.slice(opts.rangeStart, opts.rangeEnd);
  const startNonWhitespace = Math.max(
    opts.rangeStart + rangeStringOrig.search(/\S/),
    opts.rangeStart
  );
  let endNonWhitespace;
  for (
    endNonWhitespace = opts.rangeEnd;
    endNonWhitespace > opts.rangeStart;
    --endNonWhitespace
  ) {
    if (text[endNonWhitespace - 1].match(/\S/)) {
      break;
    }
  }

  const startNodeAndParents = findNodeAtOffset(ast, startNonWhitespace, node =>
    isSourceElement(opts, node)
  );
  const endNodeAndParents = findNodeAtOffset(ast, endNonWhitespace, node =>
    isSourceElement(opts, node)
  );

  if (!startNodeAndParents || !endNodeAndParents) {
    return {
      rangeStart: 0,
      rangeEnd: 0
    };
  }

  const siblingAncestors = findSiblingAncestors(
    startNodeAndParents,
    endNodeAndParents
  );
  const startNode = siblingAncestors.startNode;
  const endNode = siblingAncestors.endNode;
  const rangeStart = Math.min(util.locStart(startNode), util.locStart(endNode));
  const rangeEnd = Math.max(util.locEnd(startNode), util.locEnd(endNode));

  return {
    rangeStart: rangeStart,
    rangeEnd: rangeEnd
  };
}

function formatRange(text, opts, ast) {
  if (opts.rangeStart <= 0 && text.length <= opts.rangeEnd) {
    return;
  }

  const range = calculateRange(text, opts, ast);
  const rangeStart = range.rangeStart;
  const rangeEnd = range.rangeEnd;
  const rangeString = text.slice(rangeStart, rangeEnd);

  // Try to extend the range backwards to the beginning of the line.
  // This is so we can detect indentation correctly and restore it.
  // Use `Math.min` since `lastIndexOf` returns 0 when `rangeStart` is 0
  const rangeStart2 = Math.min(
    rangeStart,
    text.lastIndexOf("\n", rangeStart) + 1
  );
  const indentString = text.slice(rangeStart2, rangeStart);

  const alignmentSize = util.getAlignmentSize(indentString, opts.tabWidth);

  const rangeFormatted = format(
    rangeString,
    Object.assign({}, opts, {
      rangeStart: 0,
      rangeEnd: Infinity,
      printWidth: opts.printWidth - alignmentSize
    }),
    alignmentSize
  );

  // Since the range contracts to avoid trailing whitespace,
  // we need to remove the newline that was inserted by the `format` call.
  const rangeTrimmed = rangeFormatted.trimRight();

  return text.slice(0, rangeStart) + rangeTrimmed + text.slice(rangeEnd);
}

module.exports = {
  formatWithCursor: function(text, opts) {
    return formatWithCursor(text, normalizeOptions(opts));
  },

  format: function(text, opts) {
    return format(text, normalizeOptions(opts));
  },

  check: function(text, opts) {
    try {
      const formatted = format(text, normalizeOptions(opts));
      return formatted === text;
    } catch (e) {
      return false;
    }
  },

  resolveConfig: config.resolveConfig,
  clearConfigCache: config.clearCache,

  version,

  /* istanbul ignore next */
  __debug: {
    parse: function(text, opts) {
      return parser.parse(text, opts);
    },
    formatAST: function(ast, opts) {
      opts = normalizeOptions(opts);
      const doc = printAstToDoc(ast, opts);
      const str = printDocToString(doc, opts);
      return str;
    },
    // Doesn't handle shebang for now
    formatDoc: function(doc, opts) {
      opts = normalizeOptions(opts);
      const debug = printDocToDebug(doc);
      const str = format(debug, opts);
      return str;
    },
    printToDoc: function(text, opts) {
      opts = normalizeOptions(opts);
      const ast = parser.parse(text, opts);
      attachComments(text, ast, opts);
      const doc = printAstToDoc(ast, opts);
      return doc;
    },
    printDocToString: function(doc, opts) {
      opts = normalizeOptions(opts);
      const str = printDocToString(doc, opts);
      return str;
    }
  }
};


================================================
FILE: jest.config.js
================================================
"use strict";

const ENABLE_COVERAGE = !!process.env.CI;

module.exports = {
  setupFiles: ["<rootDir>/tests_config/run_spec.js"],
  snapshotSerializers: ["<rootDir>/tests_config/raw-serializer.js"],
  testRegex: "jsfmt\\.spec\\.js$|__tests__/.*\\.js$",
  testPathIgnorePatterns: ["tests/new_react", "tests/more_react"],
  collectCoverage: ENABLE_COVERAGE,
  collectCoverageFrom: ["src/**/*.js", "index.js", "!<rootDir>/node_modules/"],
  coveragePathIgnorePatterns: [
    "<rootDir>/src/doc-debug.js",
    "<rootDir>/src/clean-ast.js",
    "<rootDir>/src/deprecated.js"
  ],
  testPathIgnorePatterns: [
    "tests_integration/__tests__/the-following-tests-all-hang-forever-on-my-machine.js",
    "tests_integration/__tests__/debug-check.js",
    "tests_integration/__tests__/debug-print-doc.js",
    "tests_integration/__tests__/list-different.js",
    "tests_integration/__tests__/multiple-patterns.js",
    "tests_integration/__tests__/syntax-error.js"
  ]
};


================================================
FILE: package.json
================================================
{
  "name": "prettier-miscellaneous",
  "version": "1.5.3",
  "description": "Prettier Miscellaneous is a fork of Prettier with the goal of supporting minor extra options",
  "bin": {
    "prettier": "./bin/prettier.js"
  },
  "repository": "arijs/prettier-miscellaneous",
  "homepage": "https://prettier.io",
  "author": "Rafael Hengles",
  "license": "MIT",
  "main": "./index.js",
  "dependencies": {
    "babel-code-frame": "7.0.0-alpha.12",
    "babylon": "7.0.0-beta.13",
    "chalk": "2.0.1",
    "cosmiconfig": "2.1.3",
    "dashify": "0.2.2",
    "diff": "3.2.0",
    "esutils": "2.0.2",
    "flow-parser": "0.47.0",
    "get-stream": "3.0.0",
    "globby": "^6.1.0",
    "graphql": "0.10.1",
    "ignore": "^3.3.3",
    "jest-validate": "20.0.3",
    "json-to-ast": "2.0.0-alpha1.2",
    "minimatch": "3.0.4",
    "minimist": "1.2.0",
    "parse5": "3.0.2",
    "postcss": "^6.0.1",
    "postcss-less": "^1.0.0",
    "postcss-media-query-parser": "0.2.3",
    "postcss-scss": "1.0.0",
    "postcss-selector-parser": "2.2.3",
    "postcss-values-parser": "git://github.com/shellscape/postcss-values-parser.git#5e351360479116f3fe309602cdd15b0a233bc29f",
    "strip-bom": "3.0.0",
    "typescript": "2.5.0-dev.20170617",
    "typescript-eslint-parser": "git://github.com/eslint/typescript-eslint-parser.git#7c38401aa1452e6cc493151b8ab3a591e4d5e74a"
  },
  "devDependencies": {
    "babel-cli": "6.24.1",
    "babel-preset-es2015": "6.24.1",
    "codecov": "2.2.0",
    "cross-env": "5.0.1",
    "cross-spawn": "5.1.0",
    "eslint": "4.1.1",
    "eslint-friendly-formatter": "3.0.0",
    "eslint-plugin-import": "2.6.1",
    "eslint-plugin-prettier": "2.1.2",
    "eslint-plugin-react": "7.1.0",
    "jest": "20.0.0",
    "mkdirp": "^0.5.1",
    "prettier": "1.5.2",
    "rimraf": "2.6.1",
    "rollup": "0.41.1",
    "rollup-plugin-commonjs": "7.0.0",
    "rollup-plugin-json": "2.1.0",
    "rollup-plugin-node-builtins": "2.0.0",
    "rollup-plugin-node-globals": "1.1.0",
    "rollup-plugin-node-resolve": "2.0.0",
    "rollup-plugin-replace": "1.1.1",
    "shelljs": "0.7.8",
    "sw-toolbox": "3.6.0",
    "uglify-es": "3.0.15",
    "webpack": "2.6.1"
  },
  "scripts": {
    "test": "jest",
    "posttest": "npm run test-tabs && npm run test-tabs-inv",
    "test-tabs": "node ./bin/prettier.js --use-tabs --bracket-spacing --trailing-comma array,object -- ./bin/prettier.js > ./bin/prettier-with-tabs.js",
    "test-tabs-inv": "node ./bin/prettier-with-tabs.js -- ./bin/prettier-with-tabs.js > ./bin/prettier-spaces.js",
    "test-integration": "jest tests_integration",
    "lint": "cross-env EFF_NO_LINK_RULES=true eslint . --format node_modules/eslint-friendly-formatter",
    "build": "./scripts/build/build.js"
  }
}


================================================
FILE: scripts/build/.eslintrc.js
================================================
"use strict";

module.exports = {
  overrides: [
    {
      files: "rollup.*.config.js",
      parserOptions: {
        sourceType: "module"
      }
    }
  ]
};


================================================
FILE: scripts/build/build.js
================================================
#!/usr/bin/env node

"use strict";

const path = require("path");
const shell = require("shelljs");
const pkg = require("../../package.json");

const rootDir = path.join(__dirname, "..", "..");
const docs = path.join(rootDir, "website/static/lib");
const parsers = [
  "babylon",
  "flow",
  "typescript",
  "graphql",
  "postcss",
  "parse5",
  "json"
];

process.env.PATH += path.delimiter + path.join(rootDir, "node_modules", ".bin");

function pipe(string) {
  return new shell.ShellString(string);
}

shell.set("-e");
shell.cd(rootDir);

shell.rm("-Rf", "dist/", docs);
shell.mkdir("-p", docs);

// --- Lib ---

shell.echo("Bundling lib index...");
shell.exec("rollup -c scripts/build/rollup.index.config.js");

shell.echo("Bundling lib bin...");
shell.exec("rollup -c scripts/build/rollup.bin.config.js");
shell.chmod("+x", "./dist/bin/prettier.js");

for (const parser of parsers) {
  if (parser === "postcss") {
    continue;
  }
  shell.echo(`Bundling lib ${parser}...`);
  shell.exec(
    `rollup -c scripts/build/rollup.parser.config.js --environment parser:${parser}`
  );
}

shell.echo("Bundling lib postcss...");
// PostCSS has dependency cycles and won't work correctly with rollup :(
shell.exec(
  "webpack --hide-modules src/parser-postcss.js dist/parser-postcss.js"
);
// Prepend module.exports =
const content = shell.cat("dist/parser-postcss.js").stdout;
pipe(`module.exports = ${content}`).to("dist/parser-postcss.js");

shell.echo();

// --- Docs ---

shell.echo("Bundling docs index...");
shell.cp("dist/index.js", `${docs}/index.js`);
shell.exec(
  `node_modules/babel-cli/bin/babel.js dist/index.js --out-file ${docs}/index.js --presets=es2015`
);

shell.echo("Bundling docs babylon...");
shell.exec(
  "rollup -c scripts/build/rollup.docs.config.js --environment filepath:parser-babylon.js"
);
shell.exec(
  `node_modules/babel-cli/bin/babel.js ${docs}/parser-babylon.js --out-file ${docs}/parser-babylon.js --presets=es2015`
);

for (const parser of parsers) {
  if (parser === "babylon") {
    continue;
  }
  shell.echo(`Bundling docs ${parser}...`);
  shell.exec(
    `rollup -c scripts/build/rollup.docs.config.js --environment filepath:parser-${parser}.js`
  );
}

shell.echo();

// --- Misc ---

shell.echo("Remove eval");
shell.sed(
  "-i",
  /eval\("require"\)/,
  "require",
  "dist/index.js",
  "dist/bin/prettier.js"
);

shell.echo("Create prettier-version.js");
pipe(`prettierVersion = "${pkg.version}";`).to(`${docs}/prettier-version.js`);

shell.echo("Copy sw-toolbox.js to docs");
shell.cp("node_modules/sw-toolbox/sw-toolbox.js", `${docs}/sw-toolbox.js`);

shell.echo("Copy package.json");
const pkgWithoutDependencies = Object.assign({}, pkg);
delete pkgWithoutDependencies.dependencies;
pipe(JSON.stringify(pkgWithoutDependencies, null, 2)).to("dist/package.json");

shell.echo("Copy README.md");
shell.cp("README.md", "dist/README.md");

shell.echo("Done!");
shell.echo();
shell.echo("How to test against dist:");
shell.echo("  1) yarn test --prod");
shell.echo();
shell.echo("How to publish:");
shell.echo("  1) IMPORTANT!!! Go to dist/");
shell.echo("  2) npm publish");


================================================
FILE: scripts/build/rollup.base.config.js
================================================
export default {
  onwarn: function(warning) {
    if (
      [
        "EVAL",
        "MISSING_GLOBAL_NAME",
        "MISSING_NODE_BUILTINS",
        "UNRESOLVED_IMPORT"
      ].find(code => code === warning.code)
    ) {
      return;
    }

    console.warn(warning.message);
  }
};


================================================
FILE: scripts/build/rollup.bin.config.js
================================================
import baseConfig from "./rollup.base.config.js";
import resolve from "rollup-plugin-node-resolve";
import commonjs from "rollup-plugin-commonjs";
import json from "rollup-plugin-json";
import replace from "rollup-plugin-replace";

export default Object.assign(baseConfig, {
  entry: "bin/prettier.js",
  dest: "dist/bin/prettier.js",
  format: "cjs",
  banner: "#!/usr/bin/env node",
  plugins: [
    replace({
      "#!/usr/bin/env node": ""
    }),
    json(),
    resolve({ preferBuiltins: true }),
    commonjs()
  ],
  external: ["fs", "readline", "path", "module", "assert", "util", "events"]
});


================================================
FILE: scripts/build/rollup.docs.config.js
================================================
import baseConfig from "./rollup.base.config.js";
import resolve from "rollup-plugin-node-resolve";
import commonjs from "rollup-plugin-commonjs";
import globals from "rollup-plugin-node-globals";
import json from "rollup-plugin-json";

const filepath = process.env.filepath;
const filename = filepath.replace(/.+\//, "");
const basename = filename.replace(/\..+/, "");

export default Object.assign(baseConfig, {
  entry: "dist/" + filepath,
  dest: "website/static/lib/" + filename,
  format: "iife",
  plugins: [json(), resolve({ preferBuiltins: true }), commonjs(), globals()],
  useStrict: false,
  moduleName: basename.replace(/.+-/, ""),
  external: ["assert", "fs", "module"]
});


================================================
FILE: scripts/build/rollup.index.config.js
================================================
import baseConfig from "./rollup.base.config.js";
import resolve from "rollup-plugin-node-resolve";
import commonjs from "rollup-plugin-commonjs";
import json from "rollup-plugin-json";

export default Object.assign(baseConfig, {
  entry: "index.js",
  dest: "dist/index.js",
  format: "cjs",
  plugins: [json(), resolve({ preferBuiltins: true }), commonjs()],
  external: ["assert"]
});


================================================
FILE: scripts/build/rollup.parser.config.js
================================================
import baseConfig from "./rollup.base.config.js";
import resolve from "rollup-plugin-node-resolve";
import commonjs from "rollup-plugin-commonjs";
import json from "rollup-plugin-json";
import replace from "rollup-plugin-replace";
import uglify from "uglify-es";

const parser = process.env.parser;

export default Object.assign(baseConfig, {
  entry: "src/parser-" + parser + ".js",
  dest: "dist/parser-" + parser + ".js",
  format: "cjs",
  plugins: [
    parser === "typescript"
      ? replace({
          "exports.Syntax =": "1,",
          include: "node_modules/typescript-eslint-parser/parser.js"
        })
      : {},
    json(),
    resolve({ preferBuiltins: true }),
    commonjs(),
    {
      transformBundle(code) {
        const result = uglify.minify(code, {});
        if (result.error) {
          throw result.error;
        }
        return result;
      }
    }
  ],
  external: [
    "fs",
    "buffer",
    "path",
    "module",
    "assert",
    "util",
    "os",
    "crypto"
  ],
  useStrict: parser !== "flow"
});


================================================
FILE: scripts/run-external-typescript-tests.js
================================================
"use strict";

/**
 * There's an issue with this script's assumption that each run of prettier
 * will result in one output to stderr or stdout.
 *
 * On Mac this seems not to hold for stderr, where multiple errors are buffered
 * into one emit on the stderr stream.
 *
 * If you have any ideas on how to fix this, please send a PR!
 */
if (process.platform !== "win32") {
  console.log("Warning: this script may not work on macOS.");
}

const fs = require("fs");
const path = require("path");
const spawn = require("child_process").spawn;
const rimraf = require("rimraf");

const tsRoot = path.resolve(__dirname, "../../TypeScript");
const testsDir = path.relative(process.cwd(), path.join(tsRoot, "tests"));
const errorsPath = "./errors/";
const fileGlob = path.join(testsDir, "**/*.ts");

if (!fs.existsSync(tsRoot) || !fs.existsSync(testsDir)) {
  console.error(`Error: TypeScript is not cloned at ../TypeScript`);
  process.exit(1);
}

const badFiles = [];
const errorTypes = {};
let good = 0;
let skipped = 0;

rimraf.sync(errorsPath);

const cp = spawn("node", [
  "./bin/prettier.js",
  "--parser",
  "typescript",
  "--debug-check",
  fileGlob
]);

cp.stdout.on("data", () => {
  good++;
  printStatus();
});

cp.stderr.on("data", err => {
  const error = err.toString();
  const { file, errorType } = splitFileAndError(error);
  if (errorType.startsWith("SyntaxError:")) {
    skipped++;
  } else {
    badFiles.push({ file, errorType, error });
    errorTypes[errorType] = (errorTypes[errorType] || 0) + 1;
  }
  printStatus();
});

cp.on("close", () => {
  const total = badFiles.length + good + skipped;
  const percentNoError = (100 * (good + skipped) / total).toFixed(0);
  console.log(
    `\n${percentNoError}% of ${total} files processed without errors.\n`
  );
  Object.keys(errorTypes)
    .sort((a, b) => errorTypes[b] - errorTypes[a])
    .forEach(errorType => {
      console.log(`${errorTypes[errorType]}\t${errorType}`);
    });

  console.log(`\nWriting errors to '${errorsPath}' directory`);
  writeErrorsToFiles();
});

function printStatus() {
  process.stdout.write(
    `\r${good} good, ${skipped} skipped, ${badFiles.length} bad`
  );
}

function splitFileAndError(err) {
  const lines = err.split("\n");
  const [file, ...rest] = lines[0].split(":");
  if (rest.length) {
    return {
      file,
      errorType: rest
        .join(":")
        .replace(/\(\d+:\d+\)/, "")
        .replace(/(Comment )".*"/, '$1"<omitted>"')
        .trim()
    };
  }
  console.error("Could not process error:", err);
  return {
    file: "?",
    errorType: err
  };
}

function writeErrorsToFiles() {
  const splitter = "@".repeat(80);
  fs.mkdirSync(errorsPath);
  Object.keys(errorTypes).forEach(errorType => {
    const files = badFiles.filter(f => f.errorType === errorType);
    const contents = files
      .map(({ file, error }) => {
        // Trim file name from error.
        if (error.startsWith(file)) {
          error = error.substring(file.length);
        }
        return `\n\n${file}\n${error}\n${splitter}\n`;
      })
      .join("\n");
    fs.writeFileSync(
      path.join(errorsPath, sanitize(errorType) + ".log"),
      contents
    );
  });
}

function sanitize(string) {
  return string.replace(/[^A-Z0-9_.() -]/gi, "_").replace(/\.$/, "");
}


================================================
FILE: scripts/sync-flow-tests.js
================================================
"use strict";

const fs = require("fs");
const flowParser = require("flow-parser");
const globby = require("globby");
const mkdirp = require("mkdirp");
const path = require("path");
const rimraf = require("rimraf");

const DEFAULT_SPEC_CONTENT = "run_spec(__dirname);\n";
const SPEC_FILE_NAME = "jsfmt.spec.js";
const FLOW_TESTS_DIR = path.join(__dirname, "..", "tests", "flow");

function tryParse(file, content) {
  const ast = flowParser.parse(content, {
    esproposal_class_instance_fields: true,
    esproposal_class_static_fields: true,
    esproposal_export_star_as: true
  });

  if (ast.errors.length > 0) {
    const line = ast.errors[0].loc.start.line;
    const column = ast.errors[0].loc.start.column;
    const message = ast.errors[0].message;
    return `${file}:${line}:${column}: ${message}`;
  }

  return null;
}

function syncTests(syncDir) {
  const specFiles = globby.sync(
    path.join(FLOW_TESTS_DIR, "**", SPEC_FILE_NAME)
  );
  const filesToCopy = globby.sync(path.join(syncDir, "**/*.js"));

  if (filesToCopy.length === 0) {
    throw new Error(
      [
        "Couldn't find any files to copy.",
        `Please make sure that \`${syncDir}\` exists and contains the flow tests.`
      ].join("\n")
    );
  }

  const specContents = specFiles.reduce((obj, specFile) => {
    obj[specFile] = fs.readFileSync(specFile, "utf8");
    return obj;
  }, {});

  const skipped = [];

  rimraf.sync(FLOW_TESTS_DIR);

  filesToCopy.forEach(file => {
    const content = fs.readFileSync(file, "utf8");
    const parseError = tryParse(file, content);

    if (parseError) {
      skipped.push(parseError);
      return;
    }

    const newFile = path.join(FLOW_TESTS_DIR, path.relative(syncDir, file));
    const dirname = path.dirname(newFile);
    const specFile = path.join(dirname, SPEC_FILE_NAME);
    const specContent = specContents[specFile] || DEFAULT_SPEC_CONTENT;

    mkdirp.sync(dirname);
    fs.writeFileSync(newFile, content);
    fs.writeFileSync(specFile, specContent);
  });

  return skipped;
}

function run(argv) {
  if (argv.length !== 1) {
    console.error(
      [
        "You must provide the path to a flow tests directory to sync from!",
        "Example: node scripts/sync-flow-tests.js ../flow/tests/"
      ].join("\n")
    );
    return 1;
  }

  const syncDir = argv[0];
  let skipped = [];

  try {
    skipped = syncTests(syncDir);
  } catch (error) {
    console.error(`Failed to sync.\n${error}`);
    return 1;
  }

  if (skipped.length > 0) {
    console.log(
      [
        "Some files were skipped due to syntax errors.",
        "This is expected since flow tests for handling invalid code,",
        "but that's not interesting for Prettier's tests.",
        "This is the skipped stuff:",
        ""
      ]
        .concat(skipped, "")
        .join("\n")
    );
  }

  console.log(
    [
      "Done syncing! Now you need to:",
      "",
      `1. Optional: Adjust some ${SPEC_FILE_NAME} files.`,
      "2. Run `jest -u` to create snapshots.",
      "3. Run `git diff` to check how tests and snapshots have changed",
      "4. Take a look at new snapshots to see if they're OK."
    ].join("\n")
  );

  return 0;
}

if (require.main === module) {
  const exitCode = run(process.argv.slice(2));
  process.exit(exitCode);
}


================================================
FILE: src/clean-ast.js
================================================
"use strict";

function cleanAST(ast) {
  return JSON.stringify(massageAST(ast), null, 2);
}

function massageAST(ast) {
  if (Array.isArray(ast)) {
    return ast.map(e => massageAST(e)).filter(e => e);
  }
  if (ast && typeof ast === "object") {
    // We remove extra `;` and add them when needed
    if (ast.type === "EmptyStatement") {
      return undefined;
    }

    // We move text around, including whitespaces and add {" "}
    if (ast.type === "JSXText") {
      return undefined;
    }
    if (
      ast.type === "JSXExpressionContainer" &&
      ast.expression.type === "Literal" &&
      ast.expression.value === " "
    ) {
      return undefined;
    }

    const newObj = {};
    for (const key in ast) {
      if (typeof ast[key] !== "function") {
        newObj[key] = massageAST(ast[key]);
      }
    }

    [
      "loc",
      "range",
      "raw",
      "comments",
      "leadingComments",
      "trailingComments",
      "extra",
      "start",
      "end",
      "tokens",
      "flags",
      "raws",
      "sourceIndex",
      "id",
      "source",
      "before",
      "after",
      "trailingComma",
      "parent",
      "prev"
    ].forEach(name => {
      delete newObj[name];
    });

    if (
      ast.type === "media-query" ||
      ast.type === "media-query-list" ||
      ast.type === "media-feature-expression"
    ) {
      delete newObj.value;
    }

    if (ast.type === "css-rule") {
      delete newObj.params;
    }

    if (ast.type === "selector-combinator") {
      newObj.value = newObj.value.replace(/\s+/g, " ");
    }

    if (ast.type === "media-feature") {
      newObj.value = newObj.value.replace(/ /g, "");
    }

    if (ast.type === "value-word" && ast.isColor && ast.isHex) {
      newObj.value = newObj.value.toLowerCase();
    }

    // (TypeScript) Ignore `static` in `constructor(static p) {}`
    // and `export` in `constructor(export p) {}`
    if (
      ast.type === "TSParameterProperty" &&
      ast.accessibility === null &&
      !ast.readonly
    ) {
      return {
        type: "Identifier",
        name: ast.parameter.name,
        typeAnnotation: newObj.parameter.typeAnnotation,
        decorators: newObj.decorators
      };
    }

    // (TypeScript) ignore empty `specifiers` array
    if (
      ast.type === "TSNamespaceExportDeclaration" &&
      ast.specifiers &&
      ast.specifiers.length === 0
    ) {
      delete newObj.specifiers;
    }

    // (TypeScript) bypass TSParenthesizedType
    if (
      ast.type === "TSParenthesizedType" &&
      ast.typeAnnotation.type === "TypeAnnotation"
    ) {
      return newObj.typeAnnotation.typeAnnotation;
    }

    // We convert <div></div> to <div />
    if (ast.type === "JSXOpeningElement") {
      delete newObj.selfClosing;
    }
    if (ast.type === "JSXElement") {
      delete newObj.closingElement;
    }

    // We change {'key': value} into {key: value}
    if (
      (ast.type === "Property" ||
        ast.type === "MethodDefinition" ||
        ast.type === "ClassProperty") &&
      typeof ast.key === "object" &&
      ast.key &&
      (ast.key.type === "Literal" || ast.key.type === "Identifier")
    ) {
      delete newObj.key;
    }

    // Remove raw and cooked values from TemplateElement when it's CSS
    // styled-jsx
    if (
      ast.type === "JSXElement" &&
      ast.openingElement.name.name === "style" &&
      ast.openingElement.attributes.some(attr => attr.name.name === "jsx")
    ) {
      const templateLiterals = newObj.children
        .filter(
          child =>
            child.type === "JSXExpressionContainer" &&
            child.expression.type === "TemplateLiteral"
        )
        .map(container => container.expression);

      const quasis = templateLiterals.reduce(
        (quasis, templateLiteral) => quasis.concat(templateLiteral.quasis),
        []
      );

      quasis.forEach(q => delete q.value);
    }
    // styled-components and graphql
    if (
      ast.type === "TaggedTemplateExpression" &&
      (ast.tag.type === "MemberExpression" ||
        (ast.tag.type === "Identifier" &&
          (ast.tag.name === "gql" ||
            ast.tag.name === "graphql" ||
            ast.tag.name === "css")))
    ) {
      newObj.quasi.quasis.forEach(quasi => delete quasi.value);
    }

    return newObj;
  }
  return ast;
}

module.exports = { cleanAST, massageAST };


================================================
FILE: src/comments.js
================================================
"use strict";

const assert = require("assert");
const docBuilders = require("./doc-builders");
const concat = docBuilders.concat;
const hardline = docBuilders.hardline;
const breakParent = docBuilders.breakParent;
const indent = docBuilders.indent;
const lineSuffix = docBuilders.lineSuffix;
const join = docBuilders.join;
const cursor = docBuilders.cursor;
const util = require("./util");
const childNodesCacheKey = Symbol("child-nodes");
const locStart = util.locStart;
const locEnd = util.locEnd;
const getNextNonSpaceNonCommentCharacter =
  util.getNextNonSpaceNonCommentCharacter;

function getSortedChildNodes(node, text, resultArray) {
  if (!node) {
    return;
  }

  if (resultArray) {
    if (
      node &&
      ((node.type &&
        node.type !== "CommentBlock" &&
        node.type !== "CommentLine" &&
        node.type !== "Line" &&
        node.type !== "Block" &&
        node.type !== "EmptyStatement" &&
        node.type !== "TemplateElement") ||
        (node.kind && node.kind !== "Comment"))
    ) {
      // This reverse insertion sort almost always takes constant
      // time because we almost always (maybe always?) append the
      // nodes in order anyway.
      let i;
      for (i = resultArray.length - 1; i >= 0; --i) {
        if (
          locStart(resultArray[i]) <= locStart(node) &&
          locEnd(resultArray[i]) <= locEnd(node)
        ) {
          break;
        }
      }
      resultArray.splice(i + 1, 0, node);
      return;
    }
  } else if (node[childNodesCacheKey]) {
    return node[childNodesCacheKey];
  }

  let names;
  if (node && typeof node === "object") {
    names = Object.keys(node).filter(
      n =>
        n !== "enclosingNode" && n !== "precedingNode" && n !== "followingNode"
    );
  } else {
    return;
  }

  if (!resultArray) {
    Object.defineProperty(node, childNodesCacheKey, {
      value: (resultArray = []),
      enumerable: false
    });
  }

  for (let i = 0, nameCount = names.length; i < nameCount; ++i) {
    getSortedChildNodes(node[names[i]], text, resultArray);
  }

  return resultArray;
}

// As efficiently as possible, decorate the comment object with
// .precedingNode, .enclosingNode, and/or .followingNode properties, at
// least one of which is guaranteed to be defined.
function decorateComment(node, comment, text) {
  const childNodes = getSortedChildNodes(node, text);
  let precedingNode;
  let followingNode;
  // Time to dust off the old binary search robes and wizard hat.
  let left = 0;
  let right = childNodes.length;
  while (left < right) {
    const middle = (left + right) >> 1;
    const child = childNodes[middle];

    if (
      locStart(child) - locStart(comment) <= 0 &&
      locEnd(comment) - locEnd(child) <= 0
    ) {
      // The comment is completely contained by this child node.
      comment.enclosingNode = child;

      decorateComment(child, comment, text);
      return; // Abandon the binary search at this level.
    }

    if (locEnd(child) - locStart(comment) <= 0) {
      // This child node falls completely before the comment.
      // Because we will never consider this node or any nodes
      // before it again, this node must be the closest preceding
      // node we have encountered so far.
      precedingNode = child;
      left = middle + 1;
      continue;
    }

    if (locEnd(comment) - locStart(child) <= 0) {
      // This child node falls completely after the comment.
      // Because we will never consider this node or any nodes after
      // it again, this node must be the closest following node we
      // have encountered so far.
      followingNode = child;
      right = middle;
      continue;
    }

    throw new Error("Comment location overlaps with node location");
  }

  // We don't want comments inside of different expressions inside of the same
  // template literal to move to another expression.
  if (
    comment.enclosingNode &&
    comment.enclosingNode.type === "TemplateLiteral"
  ) {
    const quasis = comment.enclosingNode.quasis;
    const commentIndex = findExpressionIndexForComment(quasis, comment);

    if (
      precedingNode &&
      findExpressionIndexForComment(quasis, precedingNode) !== commentIndex
    ) {
      precedingNode = null;
    }
    if (
      followingNode &&
      findExpressionIndexForComment(quasis, followingNode) !== commentIndex
    ) {
      followingNode = null;
    }
  }

  if (precedingNode) {
    comment.precedingNode = precedingNode;
  }

  if (followingNode) {
    comment.followingNode = followingNode;
  }
}

function attach(comments, ast, text) {
  if (!Array.isArray(comments)) {
    return;
  }

  const tiesToBreak = [];

  comments.forEach((comment, i) => {
    decorateComment(ast, comment, text);

    const precedingNode = comment.precedingNode;
    const enclosingNode = comment.enclosingNode;
    const followingNode = comment.followingNode;

    const isLastComment = comments.length - 1 === i;

    if (util.hasNewline(text, locStart(comment), { backwards: true })) {
      // If a comment exists on its own line, prefer a leading comment.
      // We also need to check if it's the first line of the file.
      if (
        handleLastFunctionArgComments(
          text,
          precedingNode,
          enclosingNode,
          followingNode,
          comment
        ) ||
        handleMemberExpressionComments(enclosingNode, followingNode, comment) ||
        handleIfStatementComments(
          text,
          precedingNode,
          enclosingNode,
          followingNode,
          comment
        ) ||
        handleTryStatementComments(enclosingNode, followingNode, comment) ||
        handleClassComments(enclosingNode, comment) ||
        handleImportSpecifierComments(enclosingNode, comment) ||
        handleObjectPropertyComments(enclosingNode, comment) ||
        handleForComments(enclosingNode, precedingNode, comment) ||
        handleUnionTypeComments(
          precedingNode,
          enclosingNode,
          followingNode,
          comment
        ) ||
        handleOnlyComments(enclosingNode, ast, comment, isLastComment) ||
        handleImportDeclarationComments(
          text,
          enclosingNode,
          precedingNode,
          comment
        ) ||
        handleAssignmentPatternComments(enclosingNode, comment)
      ) {
        // We're good
      } else if (followingNode) {
        // Always a leading comment.
        addLeadingComment(followingNode, comment);
      } else if (precedingNode) {
        addTrailingComment(precedingNode, comment);
      } else if (enclosingNode) {
        addDanglingComment(enclosingNode, comment);
      } else {
        // There are no nodes, let's attach it to the root of the ast
        addDanglingComment(ast, comment);
      }
    } else if (util.hasNewline(text, locEnd(comment))) {
      if (
        handleLastFunctionArgComments(
          text,
          precedingNode,
          enclosingNode,
          followingNode,
          comment
        ) ||
        handleConditionalExpressionComments(
          enclosingNode,
          precedingNode,
          followingNode,
          comment,
          text
        ) ||
        handleImportSpecifierComments(enclosingNode, comment) ||
        handleIfStatementComments(
          text,
          precedingNode,
          enclosingNode,
          followingNode,
          comment
        ) ||
        handleClassComments(enclosingNode, comment) ||
        handleLabeledStatementComments(enclosingNode, comment) ||
        handleCallExpressionComments(precedingNode, enclosingNode, comment) ||
        handlePropertyComments(enclosingNode, comment) ||
        handleExportNamedDeclarationComments(enclosingNode, comment) ||
        handleOnlyComments(enclosingNode, ast, comment, isLastComment) ||
        handleClassMethodComments(enclosingNode, comment) ||
        handleTypeAliasComments(enclosingNode, followingNode, comment) ||
        handleVariableDeclaratorComments(enclosingNode, followingNode, comment)
      ) {
        // We're good
      } else if (precedingNode) {
        // There is content before this comment on the same line, but
        // none after it, so prefer a trailing comment of the previous node.
        addTrailingComment(precedingNode, comment);
      } else if (followingNode) {
        addLeadingComment(followingNode, comment);
      } else if (enclosingNode) {
        addDanglingComment(enclosingNode, comment);
      } else {
        // There are no nodes, let's attach it to the root of the ast
        addDanglingComment(ast, comment);
      }
    } else {
      if (
        handleIfStatementComments(
          text,
          precedingNode,
          enclosingNode,
          followingNode,
          comment
        ) ||
        handleObjectPropertyAssignment(enclosingNode, precedingNode, comment) ||
        handleCommentInEmptyParens(text, enclosingNode, comment) ||
        handleMethodNameComments(enclosingNode, precedingNode, comment) ||
        handleOnlyComments(enclosingNode, ast, comment, isLastComment)
      ) {
        // We're good
      } else if (precedingNode && followingNode) {
        // Otherwise, text exists both before and after the comment on
        // the same line. If there is both a preceding and following
        // node, use a tie-breaking algorithm to determine if it should
        // be attached to the next or previous node. In the last case,
        // simply attach the right node;
        const tieCount = tiesToBreak.length;
        if (tieCount > 0) {
          const lastTie = tiesToBreak[tieCount - 1];
          if (lastTie.followingNode !== comment.followingNode) {
            breakTies(tiesToBreak, text);
          }
        }
        tiesToBreak.push(comment);
      } else if (precedingNode) {
        addTrailingComment(precedingNode, comment);
      } else if (followingNode) {
        addLeadingComment(followingNode, comment);
      } else if (enclosingNode) {
        addDanglingComment(enclosingNode, comment);
      } else {
        // There are no nodes, let's attach it to the root of the ast
        addDanglingComment(ast, comment);
      }
    }
  });

  breakTies(tiesToBreak, text);

  comments.forEach(comment => {
    // These node references were useful for breaking ties, but we
    // don't need them anymore, and they create cycles in the AST that
    // may lead to infinite recursion if we don't delete them here.
    delete comment.precedingNode;
    delete comment.enclosingNode;
    delete comment.followingNode;
  });
}

function breakTies(tiesToBreak, text) {
  const tieCount = tiesToBreak.length;
  if (tieCount === 0) {
    return;
  }

  const precedingNode = tiesToBreak[0].precedingNode;
  const followingNode = tiesToBreak[0].followingNode;
  let gapEndPos = locStart(followingNode);

  // Iterate backwards through tiesToBreak, examining the gaps
  // between the tied comments. In order to qualify as leading, a
  // comment must be separated from followingNode by an unbroken series of
  // whitespace-only gaps (or other comments).
  let indexOfFirstLeadingComment;
  for (
    indexOfFirstLeadingComment = tieCount;
    indexOfFirstLeadingComment > 0;
    --indexOfFirstLeadingComment
  ) {
    const comment = tiesToBreak[indexOfFirstLeadingComment - 1];
    assert.strictEqual(comment.precedingNode, precedingNode);
    assert.strictEqual(comment.followingNode, followingNode);

    const gap = text.slice(locEnd(comment), gapEndPos);
    if (/\S/.test(gap)) {
      // The gap string contained something other than whitespace.
      break;
    }

    gapEndPos = locStart(comment);
  }

  tiesToBreak.forEach((comment, i) => {
    if (i < indexOfFirstLeadingComment) {
      addTrailingComment(precedingNode, comment);
    } else {
      addLeadingComment(followingNode, comment);
    }
  });

  tiesToBreak.length = 0;
}

function addCommentHelper(node, comment) {
  const comments = node.comments || (node.comments = []);
  comments.push(comment);
  comment.printed = false;

  // For some reason, TypeScript parses `// x` inside of JSXText as a comment
  // We already "print" it via the raw text, we don't need to re-print it as a
  // comment
  if (node.type === "JSXText") {
    comment.printed = true;
  }
}

function addLeadingComment(node, comment) {
  comment.leading = true;
  comment.trailing = false;
  addCommentHelper(node, comment);
}

function addDanglingComment(node, comment) {
  comment.leading = false;
  comment.trailing = false;
  addCommentHelper(node, comment);
}

function addTrailingComment(node, comment) {
  comment.leading = false;
  comment.trailing = true;
  addCommentHelper(node, comment);
}

function addBlockStatementFirstComment(node, comment) {
  const body = node.body.filter(n => n.type !== "EmptyStatement");
  if (body.length === 0) {
    addDanglingComment(node, comment);
  } else {
    addLeadingComment(body[0], comment);
  }
}

function addBlockOrNotComment(node, comment) {
  if (node.type === "BlockStatement") {
    addBlockStatementFirstComment(node, comment);
  } else {
    addLeadingComment(node, comment);
  }
}

// There are often comments before the else clause of if statements like
//
//   if (1) { ... }
//   // comment
//   else { ... }
//
// They are being attached as leading comments of the BlockExpression which
// is not well printed. What we want is to instead move the comment inside
// of the block and make it leadingComment of the first element of the block
// or dangling comment of the block if there is nothing inside
//
//   if (1) { ... }
//   else {
//     // comment
//     ...
//   }
function handleIfStatementComments(
  text,
  precedingNode,
  enclosingNode,
  followingNode,
  comment
) {
  if (
    !enclosingNode ||
    enclosingNode.type !== "IfStatement" ||
    !followingNode
  ) {
    return false;
  }

  // We unfortunately have no way using the AST or location of nodes to know
  // if the comment is positioned before or after the condition parenthesis:
  //   if (a /* comment */) {}
  //   if (a) /* comment */ {}
  // The only workaround I found is to look at the next character to see if
  // it is a ).
  if (getNextNonSpaceNonCommentCharacter(text, comment) === ")") {
    addTrailingComment(precedingNode, comment);
    return true;
  }

  if (followingNode.type === "BlockStatement") {
    addBlockStatementFirstComment(followingNode, comment);
    return true;
  }

  if (followingNode.type === "IfStatement") {
    addBlockOrNotComment(followingNode.consequent, comment);
    return true;
  }

  return false;
}

// Same as IfStatement but for TryStatement
function handleTryStatementComments(enclosingNode, followingNode, comment) {
  if (
    !enclosingNode ||
    enclosingNode.type !== "TryStatement" ||
    !followingNode
  ) {
    return false;
  }

  if (followingNode.type === "BlockStatement") {
    addBlockStatementFirstComment(followingNode, comment);
    return true;
  }

  if (followingNode.type === "TryStatement") {
    addBlockOrNotComment(followingNode.finalizer, comment);
    return true;
  }

  if (followingNode.type === "CatchClause") {
    addBlockOrNotComment(followingNode.body, comment);
    return true;
  }

  return false;
}

function handleMemberExpressionComments(enclosingNode, followingNode, comment) {
  if (
    enclosingNode &&
    enclosingNode.type === "MemberExpression" &&
    followingNode &&
    followingNode.type === "Identifier"
  ) {
    addLeadingComment(enclosingNode, comment);
    return true;
  }

  return false;
}

function handleConditionalExpressionComments(
  enclosingNode,
  precedingNode,
  followingNode,
  comment,
  text
) {
  const isSameLineAsPrecedingNode =
    precedingNode &&
    !util.hasNewlineInRange(text, locEnd(precedingNode), locStart(comment));

  if (
    (!precedingNode || !isSameLineAsPrecedingNode) &&
    enclosingNode &&
    enclosingNode.type === "ConditionalExpression" &&
    followingNode
  ) {
    addLeadingComment(followingNode, comment);
    return true;
  }
  return false;
}

function handleObjectPropertyAssignment(enclosingNode, precedingNode, comment) {
  if (
    enclosingNode &&
    (enclosingNode.type === "ObjectProperty" ||
      enclosingNode.type === "Property") &&
    enclosingNode.shorthand &&
    enclosingNode.key === precedingNode &&
    enclosingNode.value.type === "AssignmentPattern"
  ) {
    addTrailingComment(enclosingNode.value.left, comment);
    return true;
  }
  return false;
}

function handleMethodNameComments(enclosingNode, precedingNode, comment) {
  // This is only needed for estree parsers (flow, typescript) to attach
  // after a method name:
  // obj = { fn /*comment*/() {} };
  if (
    enclosingNode &&
    precedingNode &&
    (enclosingNode.type === "Property" ||
      enclosingNode.type === "MethodDefinition") &&
    precedingNode.type === "Identifier" &&
    enclosingNode.key === precedingNode
  ) {
    addTrailingComment(precedingNode, comment);
    return true;
  }
  return false;
}

function handleCommentInEmptyParens(text, enclosingNode, comment) {
  if (getNextNonSpaceNonCommentCharacter(text, comment) !== ")") {
    return false;
  }

  // Only add dangling comments to fix the case when no params are present,
  // i.e. a function without any argument.
  if (
    enclosingNode &&
    (((enclosingNode.type === "FunctionDeclaration" ||
      enclosingNode.type === "FunctionExpression" ||
      enclosingNode.type === "ArrowFunctionExpression" ||
      enclosingNode.type === "ClassMethod" ||
      enclosingNode.type === "ObjectMethod") &&
      enclosingNode.params.length === 0) ||
      (enclosingNode.type === "CallExpression" &&
        enclosingNode.arguments.length === 0))
  ) {
    addDanglingComment(enclosingNode, comment);
    return true;
  }
  if (
    enclosingNode &&
    (enclosingNode.type === "MethodDefinition" &&
      enclosingNode.value.params.length === 0)
  ) {
    addDanglingComment(enclosingNode.value, comment);
    return true;
  }
  return false;
}

function handleLastFunctionArgComments(
  text,
  precedingNode,
  enclosingNode,
  followingNode,
  comment
) {
  // Type definitions functions
  if (
    precedingNode &&
    precedingNode.type === "FunctionTypeParam" &&
    enclosingNode &&
    enclosingNode.type === "FunctionTypeAnnotation" &&
    followingNode &&
    followingNode.type !== "FunctionTypeParam"
  ) {
    addTrailingComment(precedingNode, comment);
    return true;
  }

  // Real functions
  if (
    precedingNode &&
    (precedingNode.type === "Identifier" ||
      precedingNode.type === "AssignmentPattern") &&
    enclosingNode &&
    (enclosingNode.type === "ArrowFunctionExpression" ||
      enclosingNode.type === "FunctionExpression" ||
      enclosingNode.type === "FunctionDeclaration" ||
      enclosingNode.type === "ObjectMethod" ||
      enclosingNode.type === "ClassMethod") &&
    getNextNonSpaceNonCommentCharacter(text, comment) === ")"
  ) {
    addTrailingComment(precedingNode, comment);
    return true;
  }
  return false;
}

function handleClassComments(enclosingNode, comment) {
  if (
    enclosingNode &&
    (enclosingNode.type === "ClassDeclaration" ||
      enclosingNode.type === "ClassExpression")
  ) {
    addLeadingComment(enclosingNode, comment);
    return true;
  }
  return false;
}

function handleImportSpecifierComments(enclosingNode, comment) {
  if (enclosingNode && enclosingNode.type === "ImportSpecifier") {
    addLeadingComment(enclosingNode, comment);
    return true;
  }
  return false;
}

function handleObjectPropertyComments(enclosingNode, comment) {
  if (enclosingNode && enclosingNode.type === "ObjectProperty") {
    addLeadingComment(enclosingNode, comment);
    return true;
  }
  return false;
}

function handleLabeledStatementComments(enclosingNode, comment) {
  if (enclosingNode && enclosingNode.type === "LabeledStatement") {
    addLeadingComment(enclosingNode, comment);
    return true;
  }
  return false;
}

function handleCallExpressionComments(precedingNode, enclosingNode, comment) {
  if (
    enclosingNode &&
    enclosingNode.type === "CallExpression" &&
    precedingNode &&
    enclosingNode.callee === precedingNode &&
    enclosingNode.arguments.length > 0
  ) {
    addLeadingComment(enclosingNode.arguments[0], comment);
    return true;
  }
  return false;
}

function handleUnionTypeComments(
  precedingNode,
  enclosingNode,
  followingNode,
  comment
) {
  if (
    enclosingNode &&
    (enclosingNode.type === "UnionTypeAnnotation" ||
      enclosingNode.type === "TSUnionType")
  ) {
    addTrailingComment(precedingNode, comment);
    return true;
  }
  return false;
}

function handlePropertyComments(enclosingNode, comment) {
  if (
    enclosingNode &&
    (enclosingNode.type === "Property" ||
      enclosingNode.type === "ObjectProperty")
  ) {
    addLeadingComment(enclosingNode, comment);
    return true;
  }
  return false;
}

function handleExportNamedDeclarationComments(enclosingNode, comment) {
  if (enclosingNode && enclosingNode.type === "ExportNamedDeclaration") {
    addLeadingComment(enclosingNode, comment);
    return true;
  }
  return false;
}

function handleOnlyComments(enclosingNode, ast, comment, isLastComment) {
  // With Flow the enclosingNode is undefined so use the AST instead.
  if (ast && ast.body && ast.body.length === 0) {
    if (isLastComment) {
      addDanglingComment(ast, comment);
    } else {
      addLeadingComment(ast, comment);
    }
    return true;
  } else if (
    enclosingNode &&
    enclosingNode.type === "Program" &&
    enclosingNode.body.length === 0 &&
    enclosingNode.directives &&
    enclosingNode.directives.length === 0
  ) {
    if (isLastComment) {
      addDanglingComment(enclosingNode, comment);
    } else {
      addLeadingComment(enclosingNode, comment);
    }
    return true;
  }
  return false;
}

function handleForComments(enclosingNode, precedingNode, comment) {
  if (
    enclosingNode &&
    (enclosingNode.type === "ForInStatement" ||
      enclosingNode.type === "ForOfStatement")
  ) {
    addLeadingComment(enclosingNode, comment);
    return true;
  }
  return false;
}

function handleImportDeclarationComments(
  text,
  enclosingNode,
  precedingNode,
  comment
) {
  if (
    precedingNode &&
    enclosingNode &&
    enclosingNode.type === "ImportDeclaration" &&
    util.hasNewline(text, util.locEnd(comment))
  ) {
    addTrailingComment(precedingNode, comment);
    return true;
  }
  return false;
}

function handleAssignmentPatternComments(enclosingNode, comment) {
  if (enclosingNode && enclosingNode.type === "AssignmentPattern") {
    addLeadingComment(enclosingNode, comment);
    return true;
  }
  return false;
}

function handleClassMethodComments(enclosingNode, comment) {
  if (enclosingNode && enclosingNode.type === "ClassMethod") {
    addTrailingComment(enclosingNode, comment);
    return true;
  }
  return false;
}

function handleTypeAliasComments(enclosingNode, followingNode, comment) {
  if (enclosingNode && enclosingNode.type === "TypeAlias") {
    addLeadingComment(enclosingNode, comment);
    return true;
  }
  return false;
}

function handleVariableDeclaratorComments(
  enclosingNode,
  followingNode,
  comment
) {
  if (
    enclosingNode &&
    enclosingNode.type === "VariableDeclarator" &&
    followingNode &&
    (followingNode.type === "ObjectExpression" ||
      followingNode.type === "ArrayExpression")
  ) {
    addLeadingComment(followingNode, comment);
    return true;
  }
  return false;
}

function printComment(commentPath, options) {
  const comment = commentPath.getValue();
  comment.printed = true;

  switch (comment.type || comment.kind) {
    case "Comment":
      return "#" + comment.value.trimRight();
    case "CommentBlock":
    case "Block":
      return "/*" + comment.value + "*/";
    case "CommentLine":
    case "Line":
      // Print shebangs with the proper comment characters
      if (options.originalText.slice(util.locStart(comment)).startsWith("#!")) {
        return "#!" + comment.value.trimRight();
      }
      return "//" + comment.value.trimRight();
    default:
      throw new Error("Not a comment: " + JSON.stringify(comment));
  }
}

function findExpressionIndexForComment(quasis, comment) {
  const startPos = locStart(comment) - 1;

  for (let i = 1; i < quasis.length; ++i) {
    if (startPos < getQuasiRange(quasis[i]).start) {
      return i - 1;
    }
  }

  // We haven't found it, it probably means that some of the locations are off.
  // Let's just return the first one.
  return 0;
}

function getQuasiRange(expr) {
  if (expr.start !== undefined) {
    // Babylon
    return { start: expr.start, end: expr.end };
  }
  // Flow
  return { start: expr.range[0], end: expr.range[1] };
}

function printLeadingComment(commentPath, print, options) {
  const comment = commentPath.getValue();
  const contents = printComment(commentPath, options);
  if (!contents) {
    return "";
  }
  const isBlock = util.isBlockComment(comment);

  // Leading block comments should see if they need to stay on the
  // same line or not.
  if (isBlock) {
    return concat([
      contents,
      util.hasNewline(options.originalText, locEnd(comment)) ? hardline : " "
    ]);
  }

  return concat([contents, hardline]);
}

function printTrailingComment(commentPath, print, options) {
  const comment = commentPath.getValue();
  const contents = printComment(commentPath, options);
  if (!contents) {
    return "";
  }
  const isBlock = util.isBlockComment(comment);

  if (
    util.hasNewline(options.originalText, locStart(comment), {
      backwards: true
    })
  ) {
    // This allows comments at the end of nested structures:
    // {
    //   x: 1,
    //   y: 2
    //   // A comment
    // }
    // Those kinds of comments are almost always leading comments, but
    // here it doesn't go "outside" the block and turns it into a
    // trailing comment for `2`. We can simulate the above by checking
    // if this a comment on its own line; normal trailing comments are
    // always at the end of another expression.

    const isLineBeforeEmpty = util.isPreviousLineEmpty(
      options.originalText,
      comment
    );

    return lineSuffix(
      concat([hardline, isLineBeforeEmpty ? hardline : "", contents])
    );
  } else if (isBlock) {
    // Trailing block comments never need a newline
    return concat([" ", contents]);
  }

  return concat([lineSuffix(" " + contents), !isBlock ? breakParent : ""]);
}

function printDanglingComments(path, options, sameIndent) {
  const parts = [];
  const node = path.getValue();

  if (!node || !node.comments) {
    return "";
  }

  path.each(commentPath => {
    const comment = commentPath.getValue();
    if (comment && !comment.leading && !comment.trailing) {
      parts.push(printComment(commentPath, options));
    }
  }, "comments");

  if (parts.length === 0) {
    return "";
  }

  if (sameIndent) {
    return join(hardline, parts);
  }
  return indent(concat([hardline, join(hardline, parts)]));
}

function prependCursorPlaceholder(path, options, printed) {
  if (path.getNode() === options.cursorNode && path.getValue()) {
    return concat([cursor, printed]);
  }
  return printed;
}

function printComments(path, print, options, needsSemi) {
  const value = path.getValue();
  const printed = print(path);
  const comments = value && value.comments;

  if (!comments || comments.length === 0) {
    return prependCursorPlaceholder(path, options, printed);
  }

  const leadingParts = [];
  const trailingParts = [needsSemi ? ";" : "", printed];

  path.each(commentPath => {
    const comment = commentPath.getValue();
    const leading = comment.leading;
    const trailing = comment.trailing;

    if (leading) {
      const contents = printLeadingComment(commentPath, print, options);
      if (!contents) {
        return;
      }
      leadingParts.push(contents);

      const text = options.originalText;
      if (util.hasNewline(text, util.skipNewline(text, util.locEnd(comment)))) {
        leadingParts.push(hardline);
      }
    } else if (trailing) {
      trailingParts.push(printTrailingComment(commentPath, print, options));
    }
  }, "comments");

  return prependCursorPlaceholder(
    path,
    options,
    concat(leadingParts.concat(trailingParts))
  );
}

module.exports = {
  attach,
  printComments,
  printDanglingComments,
  getSortedChildNodes
};


================================================
FILE: src/deprecated.js
================================================
"use strict";

const deprecated = {
  useFlowParser: config =>
    `  The ${'"useFlowParser"'} option is deprecated. Use ${'"parser"'} instead.

  Prettier now treats your configuration as:
  {
    ${'"parser"'}: ${config.useFlowParser ? '"flow"' : '"babylon"'}
  }`
};

module.exports = deprecated;


================================================
FILE: src/doc-builders.js
================================================
"use strict";

function assertDoc(val) {
  if (
    !(typeof val === "string" || (val != null && typeof val.type === "string"))
  ) {
    throw new Error(
      "Value " + JSON.stringify(val) + " is not a valid document"
    );
  }
}

function concat(parts) {
  parts.forEach(assertDoc);

  // We cannot do this until we change `printJSXElement` to not
  // access the internals of a document directly.
  // if(parts.length === 1) {
  //   // If it's a single document, no need to concat it.
  //   return parts[0];
  // }
  return { type: "concat", parts };
}

function indent(contents) {
  assertDoc(contents);

  return { type: "indent", contents };
}

function align(n, contents) {
  assertDoc(contents);

  return { type: "align", contents, n };
}

function group(contents, opts) {
  opts = opts || {};

  assertDoc(contents);

  return {
    type: "group",
    contents: contents,
    break: !!opts.shouldBreak,
    expandedStates: opts.expandedStates
  };
}

function conditionalGroup(states, opts) {
  return group(
    states[0],
    Object.assign(opts || {}, { expandedStates: states })
  );
}

function fill(parts) {
  parts.forEach(assertDoc);

  return { type: "fill", parts };
}

function ifBreak(breakContents, flatContents) {
  if (breakContents) {
    assertDoc(breakContents);
  }
  if (flatContents) {
    assertDoc(flatContents);
  }

  return { type: "if-break", breakContents, flatContents };
}

function lineSuffix(contents) {
  assertDoc(contents);
  return { type: "line-suffix", contents };
}

const lineSuffixBoundary = { type: "line-suffix-boundary" };
const breakParent = { type: "break-parent" };
const line = { type: "line" };
const softline = { type: "line", soft: true };
const hardline = concat([{ type: "line", hard: true }, breakParent]);
const literalline = concat([
  { type: "line", hard: true, literal: true },
  breakParent
]);
const cursor = { type: "cursor", placeholder: Symbol("cursor") };

function join(sep, arr) {
  const res = [];

  for (let i = 0; i < arr.length; i++) {
    if (i !== 0) {
      res.push(sep);
    }

    res.push(arr[i]);
  }

  return concat(res);
}

function addAlignmentToDoc(doc, size, tabWidth) {
  let aligned = doc;
  if (size > 0) {
    // Use indent to add tabs for all the levels of tabs we need
    for (let i = 0; i < Math.floor(size / tabWidth); ++i) {
      aligned = indent(aligned);
    }
    // Use align for all the spaces that are needed
    aligned = align(size % tabWidth, aligned);
    // size is absolute from 0 and not relative to the current
    // indentation, so we use -Infinity to reset the indentation to 0
    aligned = align(-Infinity, aligned);
  }
  return aligned;
}

module.exports = {
  concat,
  join,
  line,
  softline,
  hardline,
  literalline,
  group,
  conditionalGroup,
  fill,
  lineSuffix,
  lineSuffixBoundary,
  cursor,
  breakParent,
  ifBreak,
  indent,
  align,
  addAlignmentToDoc
};


================================================
FILE: src/doc-debug.js
================================================
"use strict";

function flattenDoc(doc) {
  if (doc.type === "concat") {
    const res = [];

    for (let i = 0; i < doc.parts.length; ++i) {
      const doc2 = doc.parts[i];
      if (typeof doc2 !== "string" && doc2.type === "concat") {
        [].push.apply(res, flattenDoc(doc2).parts);
      } else {
        const flattened = flattenDoc(doc2);
        if (flattened !== "") {
          res.push(flattened);
        }
      }
    }

    return Object.assign({}, doc, { parts: res });
  } else if (doc.type === "if-break") {
    return Object.assign({}, doc, {
      breakContents:
        doc.breakContents != null ? flattenDoc(doc.breakContents) : null,
      flatContents:
        doc.flatContents != null ? flattenDoc(doc.flatContents) : null
    });
  } else if (doc.type === "group") {
    return Object.assign({}, doc, {
      contents: flattenDoc(doc.contents),
      expandedStates: doc.expandedStates
        ? doc.expandedStates.map(flattenDoc)
        : doc.expandedStates
    });
  } else if (doc.contents) {
    return Object.assign({}, doc, { contents: flattenDoc(doc.contents) });
  }
  return doc;
}

function printDoc(doc) {
  if (typeof doc === "string") {
    return JSON.stringify(doc);
  }

  if (doc.type === "line") {
    if (doc.literalline) {
      return "literalline";
    }
    if (doc.hard) {
      return "hardline";
    }
    if (doc.soft) {
      return "softline";
    }
    return "line";
  }

  if (doc.type === "break-parent") {
    return "breakParent";
  }

  if (doc.type === "concat") {
    return "[" + doc.parts.map(printDoc).join(", ") + "]";
  }

  if (doc.type === "indent") {
    return "indent(" + printDoc(doc.contents) + ")";
  }

  if (doc.type === "align") {
    return "align(" + doc.n + ", " + printDoc(doc.contents) + ")";
  }

  if (doc.type === "if-break") {
    return (
      "ifBreak(" +
      printDoc(doc.breakContents) +
      (doc.flatContents ? ", " + printDoc(doc.flatContents) : "") +
      ")"
    );
  }

  if (doc.type === "group") {
    if (doc.expandedStates) {
      return (
        "conditionalGroup(" +
        "[" +
        doc.expandedStates.map(printDoc).join(",") +
        "])"
      );
    }

    return (
      (doc.break ? "wrappedGroup" : "group") +
      "(" +
      printDoc(doc.contents) +
      ")"
    );
  }

  if (doc.type === "fill") {
    return "fill" + "(" + doc.parts.map(printDoc).join(", ") + ")";
  }

  if (doc.type === "line-suffix") {
    return "lineSuffix(" + printDoc(doc.contents) + ")";
  }

  if (doc.type === "line-suffix-boundary") {
    return "lineSuffixBoundary";
  }

  throw new Error("Unknown doc type " + doc.type);
}

module.exports = {
  printDocToDebug: function(doc) {
    return printDoc(flattenDoc(doc));
  }
};


================================================
FILE: src/doc-printer.js
================================================
"use strict";

const docBuilders = require("./doc-builders");
const concat = docBuilders.concat;
const fill = docBuilders.fill;
const cursor = docBuilders.cursor;

const MODE_BREAK = 1;
const MODE_FLAT = 2;

function rootIndent() {
  return {
    indent: 0,
    align: {
      spaces: 0,
      tabs: 0
    }
  };
}

function makeIndent(ind) {
  return {
    indent: ind.indent + 1,
    align: ind.align
  };
}

function makeAlign(ind, n) {
  if (n === -Infinity) {
    return {
      indent: 0,
      align: {
        spaces: 0,
        tabs: 0
      }
    };
  }

  return {
    indent: ind.indent,
    align: {
      spaces: ind.align.spaces + n,
      tabs: ind.align.tabs + (n ? 1 : 0)
    }
  };
}

function fits(next, restCommands, width, mustBeFlat) {
  let restIdx = restCommands.length;
  const cmds = [next];
  while (width >= 0) {
    if (cmds.length === 0) {
      if (restIdx === 0) {
        return true;
      }
      cmds.push(restCommands[restIdx - 1]);

      restIdx--;

      continue;
    }

    const x = cmds.pop();
    const ind = x[0];
    const mode = x[1];
    const doc = x[2];
    const align = x[3];

    if (typeof doc === "string") {
      width -= doc.length;
    } else {
      switch (doc.type) {
        case "concat":
          for (let i = doc.parts.length - 1; i >= 0; i--) {
            cmds.push([ind, mode, doc.parts[i]]);
          }

          break;
        case "indent":
          cmds.push([makeIndent(ind), mode, doc.contents]);

          break;
        case "align":
          cmds.push([makeAlign(ind, doc.n), mode, doc.contents]);

          break;
        case "group":
          if (mustBeFlat && doc.break) {
            return false;
          }
          cmds.push([ind, doc.break ? MODE_BREAK : mode, doc.contents]);

          break;
        case "fill":
          for (let i = doc.parts.length - 1; i >= 0; i--) {
            cmds.push([ind, mode, doc.parts[i]]);
          }

          break;
        case "if-break":
          if (mode === MODE_BREAK) {
            if (doc.breakContents) {
              cmds.push([ind, mode, doc.breakContents, al
Download .txt
Showing preview only (208K chars total). Download the full file or copy to clipboard to get everything.
gitextract_9pedfg9r/

├── .codecov.yml
├── .eslintignore
├── .eslintrc.js
├── .flowconfig
├── .gitignore
├── .ignore
├── .npmignore
├── .pre-commit-hooks.yaml
├── .travis.yml
├── .yarnrc
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── Rationale.md
├── bin/
│   └── prettier.js
├── commands.md
├── docs/
│   ├── CNAME
│   └── en/
│       ├── editors.md
│       ├── options.md
│       ├── usage.md
│       └── why-prettier.md
├── editors/
│   ├── atom.md
│   ├── emacs/
│   │   └── README.md
│   ├── vim/
│   │   └── README.md
│   └── webstorm/
│       └── README.md
├── index.js
├── jest.config.js
├── package.json
├── scripts/
│   ├── build/
│   │   ├── .eslintrc.js
│   │   ├── build.js
│   │   ├── rollup.base.config.js
│   │   ├── rollup.bin.config.js
│   │   ├── rollup.docs.config.js
│   │   ├── rollup.index.config.js
│   │   └── rollup.parser.config.js
│   ├── run-external-typescript-tests.js
│   └── sync-flow-tests.js
├── src/
│   ├── clean-ast.js
│   ├── comments.js
│   ├── deprecated.js
│   ├── doc-builders.js
│   ├── doc-debug.js
│   ├── doc-printer.js
│   ├── doc-utils.js
│   ├── fast-path.js
│   ├── multiparser.js
│   ├── options.js
│   ├── parser-babylon.js
│   ├── parser-create-error.js
│   ├── parser-flow.js
│   ├── parser-graphql.js
│   ├── parser-include-shebang.js
│   ├── parser-json.js
│   ├── parser-parse5.js
│   ├── parser-postcss.js
│   ├── parser-typescript.js
│   ├── parser.js
│   ├── printer-graphql.js
│   ├── printer-htmlparser2.js
│   ├── printer-postcss.js
│   ├── printer.js
│   ├── resolve-config.js
│   └── util.js
├── tests/
│   ├── .eslintrc.js
│   ├── align-object-properties/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── o.js
│   ├── array_spread/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── multiple.js
│   ├── arrays/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── empty.js
│   │   ├── jsfmt.spec.js
│   │   ├── last.js
│   │   └── preserve_empty_lines.js
│   ├── arrow-call/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── arrow_call.js
│   │   └── jsfmt.spec.js
│   ├── arrows/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── arrow-parens.js
│   │   ├── arrow_function_expression.js
│   │   ├── block_like.js
│   │   ├── call.js
│   │   ├── comment.js
│   │   ├── currying.js
│   │   ├── jsfmt.spec.js
│   │   ├── long-call-no-args.js
│   │   ├── long-contents.js
│   │   ├── short_body.js
│   │   └── type_params.js
│   ├── arrows_bind/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── arrows-bind.js
│   │   └── jsfmt.spec.js
│   ├── assignment/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── binaryish.js
│   │   ├── jsfmt.spec.js
│   │   └── sequence.js
│   ├── assignment_comments/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── assignment_comments.js
│   │   └── jsfmt.spec.js
│   ├── assignment_expression/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── assignment_expression.js
│   │   └── jsfmt.spec.js
│   ├── async/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── async-iteration.js
│   │   ├── await_parse.js
│   │   ├── conditional-expression.js
│   │   ├── jsfmt.spec.js
│   │   └── parens.js
│   ├── binary-expressions/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── arrow.js
│   │   ├── bitwise-flags.js
│   │   ├── comment.js
│   │   ├── equality.js
│   │   ├── exp.js
│   │   ├── if.js
│   │   ├── inline-object-array.js
│   │   ├── jsfmt.spec.js
│   │   ├── jsx_parent.js
│   │   ├── math.js
│   │   ├── short-right.js
│   │   ├── test.js
│   │   └── unary.js
│   ├── binary_math/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── parens.js
│   ├── bind_expressions/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── bind_parens.js
│   │   ├── jsfmt.spec.js
│   │   └── method_chain.js
│   ├── bracketSpacing/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── array.js
│   │   ├── jsfmt.spec.js
│   │   └── object.js
│   ├── break-calls/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── break.js
│   │   ├── jsfmt.spec.js
│   │   └── parent.js
│   ├── class_comment/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── comments.js
│   │   └── jsfmt.spec.js
│   ├── class_extends/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── extends.js
│   │   └── jsfmt.spec.js
│   ├── classes/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── binary.js
│   │   ├── break.js
│   │   ├── call.js
│   │   ├── empty.js
│   │   ├── jsfmt.spec.js
│   │   ├── member.js
│   │   ├── method.js
│   │   └── ternary.js
│   ├── comments/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── assignment-pattern.js
│   │   ├── before-comma.js
│   │   ├── blank.js
│   │   ├── call_comment.js
│   │   ├── dangling.js
│   │   ├── dangling_array.js
│   │   ├── dangling_for.js
│   │   ├── export.js
│   │   ├── first-line.js
│   │   ├── flow_union.js
│   │   ├── function-declaration.js
│   │   ├── if.js
│   │   ├── issues.js
│   │   ├── jsfmt.spec.js
│   │   ├── jsx.js
│   │   ├── last-arg.js
│   │   ├── preserve-new-line-last.js
│   │   ├── return-statement.js
│   │   ├── switch.js
│   │   ├── template-literal.js
│   │   ├── trailing_space.js
│   │   ├── try.js
│   │   └── variable_declarator.js
│   ├── computed_props/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── classes.js
│   │   └── jsfmt.spec.js
│   ├── conditional/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── comments.js
│   │   ├── jsfmt.spec.js
│   │   ├── new-expression.js
│   │   └── no-confusing-arrow.js
│   ├── css_atrule/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── if-else.css
│   │   └── jsfmt.spec.js
│   ├── css_attribute/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── insensitive.css
│   │   └── jsfmt.spec.js
│   ├── css_atword/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── atword.css
│   │   └── jsfmt.spec.js
│   ├── css_bom/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── bom.css
│   │   └── jsfmt.spec.js
│   ├── css_colon/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── colon.css
│   │   └── jsfmt.spec.js
│   ├── css_color/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── hexcolor.css
│   │   └── jsfmt.spec.js
│   ├── css_combinator/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── combinator.css
│   │   ├── jsfmt.spec.js
│   │   └── leading.css
│   ├── css_comments/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── block.css
│   │   ├── bug.css
│   │   ├── jsfmt.spec.js
│   │   ├── places.css
│   │   ├── prettier-ignore.css
│   │   ├── selector.css
│   │   └── trailing_star_slash.css
│   ├── css_composes/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── composes.css
│   │   └── jsfmt.spec.js
│   ├── css_empty/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── empty.css
│   │   └── jsfmt.spec.js
│   ├── css_extend/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── extend.css
│   │   └── jsfmt.spec.js
│   ├── css_fill_value/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── fill.css
│   │   └── jsfmt.spec.js
│   ├── css_import/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── directives.css
│   │   ├── jsfmt.spec.js
│   │   └── url.css
│   ├── css_important/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── important.css
│   │   └── jsfmt.spec.js
│   ├── css_indent/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── indent.css
│   │   ├── jsfmt.spec.js
│   │   └── selectors.css
│   ├── css_inline_url/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── empty.css
│   │   ├── inline_url.css
│   │   └── jsfmt.spec.js
│   ├── css_less_docs/
│   │   └── less_docs.css
│   ├── css_long_rule/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── long_rule.css
│   ├── css_loose/
│   │   └── loose.js
│   ├── css_media/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── overflow.css
│   ├── css_params/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── params.css
│   ├── css_parens/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── parens.js
│   ├── css_prefix/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── prefix.css
│   ├── css_pseudo_call/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── pseudo_call.css
│   ├── css_scss/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── import_comma.css
│   │   ├── jsfmt.spec.js
│   │   └── scss.css
│   ├── css_selector_call/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── call.css
│   │   └── jsfmt.spec.js
│   ├── css_selector_list/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── selectors.css
│   ├── css_selector_string/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── string.css
│   ├── css_trailing_comma/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── trailing.css
│   ├── cursor/
│   │   └── jsfmt.spec.js
│   ├── decorators/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── comments.js
│   │   ├── jsfmt.spec.js
│   │   ├── methods.js
│   │   ├── mobx.js
│   │   ├── multiple.js
│   │   └── redux.js
│   ├── destructuring/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── destructuring.js
│   │   └── jsfmt.spec.js
│   ├── directives/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── escaped.js
│   │   ├── jsfmt.spec.js
│   │   ├── last-line-0.js
│   │   ├── last-line-1.js
│   │   ├── last-line-2.js
│   │   ├── newline.js
│   │   ├── no-newline.js
│   │   └── test.js
│   ├── do/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── do.js
│   │   └── jsfmt.spec.js
│   ├── dynamic_import/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── test.js
│   ├── empty/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── empty.js
│   │   └── jsfmt.spec.js
│   ├── empty_paren_comment/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── class.js
│   │   ├── empty_paren_comment.js
│   │   └── jsfmt.spec.js
│   ├── empty_statement/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── body.js
│   │   ├── jsfmt.spec.js
│   │   └── no-newline.js
│   ├── es6modules/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── export_default_arrow_expression.js
│   │   ├── export_default_call_expression.js
│   │   ├── export_default_class_declaration.js
│   │   ├── export_default_class_expression.js
│   │   ├── export_default_function_declaration.js
│   │   ├── export_default_function_declaration_async.js
│   │   ├── export_default_function_declaration_named.js
│   │   ├── export_default_function_expression.js
│   │   ├── export_default_function_expression_named.js
│   │   ├── export_default_new_expression.js
│   │   └── jsfmt.spec.js
│   ├── exact_object/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── test.js
│   ├── export/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── bracket.js
│   │   ├── empty.js
│   │   └── jsfmt.spec.js
│   ├── export_default/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── body.js
│   │   └── jsfmt.spec.js
│   ├── export_extension/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── export.js
│   │   └── jsfmt.spec.js
│   ├── exports/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── test.js
│   ├── expression_statement/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   ├── no_regression.js
│   │   └── use_strict.js
│   ├── first_argument_expansion/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── test.js
│   ├── flow/
│   │   ├── abnormal/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── break-continue.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── return.js
│   │   │   └── toplevel_throw.js
│   │   ├── annot/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── annot.js
│   │   │   ├── any/
│   │   │   │   ├── A.js
│   │   │   │   ├── B.js
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── forward_ref.js
│   │   │   ├── issue-530.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── leak.js
│   │   │   ├── other.js
│   │   │   ├── scope.js
│   │   │   └── test.js
│   │   ├── annot2/
│   │   │   ├── A.js
│   │   │   ├── B.js
│   │   │   ├── T.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   └── jsfmt.spec.js
│   │   ├── any/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── any.js
│   │   │   ├── anyexportflowfile.js
│   │   │   ├── flowfixme.js
│   │   │   ├── flowissue.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── nonflowfile.js
│   │   │   ├── propagate.js
│   │   │   └── reach.js
│   │   ├── arith/
│   │   │   ├── Arith.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── exponent.js
│   │   │   ├── generic.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── mult.js
│   │   │   └── relational.js
│   │   ├── array-filter/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── test.js
│   │   │   └── test2.js
│   │   ├── array_spread/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── arraylib/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── array_lib.js
│   │   │   └── jsfmt.spec.js
│   │   ├── arrays/
│   │   │   ├── Arrays.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── numeric_elem.js
│   │   ├── arrows/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── advanced_arrows.js
│   │   │   ├── arrows.js
│   │   │   └── jsfmt.spec.js
│   │   ├── async/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── async.js
│   │   │   ├── async2.js
│   │   │   ├── async3.js
│   │   │   ├── async_base_class.js
│   │   │   ├── async_parse.js
│   │   │   ├── async_promise.js
│   │   │   ├── async_return_void.js
│   │   │   ├── await_parse.js
│   │   │   └── jsfmt.spec.js
│   │   ├── async_iteration/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── delegate_yield.js
│   │   │   ├── generator.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── return.js
│   │   │   └── throw.js
│   │   ├── autocomplete/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── customfun.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── unknown.js
│   │   ├── auxiliary/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── client.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── lib/
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── jsfmt.spec.js
│   │   │       └── lib.js
│   │   ├── binary/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── in.js
│   │   │   └── jsfmt.spec.js
│   │   ├── binding/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── const.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── rebinding.js
│   │   │   ├── scope.js
│   │   │   └── tdz.js
│   │   ├── bom/
│   │   │   ├── FormData.js
│   │   │   ├── MutationObserver.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   └── jsfmt.spec.js
│   │   ├── bounded_poly/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── scope.js
│   │   │   └── test.js
│   │   ├── break/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── break.js
│   │   │   └── jsfmt.spec.js
│   │   ├── builtin_uses/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── test.js
│   │   │   └── test2.js
│   │   ├── builtins/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── array.js
│   │   │   ├── genericfoo.js
│   │   │   └── jsfmt.spec.js
│   │   ├── call_caching1/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── lib/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── core.js
│   │   │   │   ├── immutable.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── test.js
│   │   │   ├── test2.js
│   │   │   └── test3.js
│   │   ├── call_caching2/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── lib/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── immutable.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── call_properties/
│   │   │   ├── A.js
│   │   │   ├── B.js
│   │   │   ├── C.js
│   │   │   ├── D.js
│   │   │   ├── E.js
│   │   │   ├── F.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   └── jsfmt.spec.js
│   │   ├── callable/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── optional.js
│   │   │   └── primitives.js
│   │   ├── check-contents/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── not_flow.js
│   │   ├── class_fields/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── base_class.js
│   │   │   ├── derived_class.js
│   │   │   ├── generic_class.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── scoping.js
│   │   ├── class_method_default_parameters/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── class_method_default_parameters.js
│   │   │   └── jsfmt.spec.js
│   │   ├── class_munging/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── with_munging.js
│   │   │   └── without_munging.js
│   │   ├── class_statics/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── class_subtyping/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── test.js
│   │   │   ├── test2.js
│   │   │   ├── test3.js
│   │   │   └── test4.js
│   │   ├── class_type/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── test.js
│   │   │   └── test2.js
│   │   ├── classes/
│   │   │   ├── A.js
│   │   │   ├── B.js
│   │   │   ├── C.js
│   │   │   ├── D.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── class_shapes.js
│   │   │   ├── expr.js
│   │   │   ├── extends_any.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── loc.js
│   │   │   └── statics.js
│   │   ├── closure/
│   │   │   ├── Closure.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── cond_havoc.js
│   │   │   ├── const.js
│   │   │   └── jsfmt.spec.js
│   │   ├── commonjs/
│   │   │   ├── Abs.js
│   │   │   ├── Rel.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   └── jsfmt.spec.js
│   │   ├── computed_props/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── test.js
│   │   │   ├── test2.js
│   │   │   ├── test3.js
│   │   │   ├── test4.js
│   │   │   ├── test5.js
│   │   │   ├── test6.js
│   │   │   └── test7.js
│   │   ├── conditional/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── conditional.js
│   │   │   └── jsfmt.spec.js
│   │   ├── config_all/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── no_at_flow.js
│   │   ├── config_all_false/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── no_at_flow.js
│   │   ├── config_all_weak/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── no_at_flow.js
│   │   ├── config_file_extensions/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── config_ignore/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── dir/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── foo.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── foo.js
│   │   │   └── jsfmt.spec.js
│   │   ├── config_module_name_mapper_PROJECT_ROOT-1.0/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── main.js
│   │   │   └── src/
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── jsfmt.spec.js
│   │   │       └── testmodule.js
│   │   ├── config_module_name_mapper_filetype/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── config_module_name_rewrite_haste/
│   │   │   ├── A.js
│   │   │   ├── Exists.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   └── jsfmt.spec.js
│   │   ├── config_module_name_rewrite_node/
│   │   │   ├── A.js
│   │   │   ├── Exists.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   └── jsfmt.spec.js
│   │   ├── config_module_system_node_resolve_dirname/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── custom_resolve_dir/
│   │   │   │   ├── testproj/
│   │   │   │   │   ├── __snapshots__/
│   │   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── jsfmt.spec.js
│   │   │   │   └── testproj2/
│   │   │   │       ├── __snapshots__/
│   │   │   │       │   └── jsfmt.spec.js.snap
│   │   │   │       ├── index.js
│   │   │   │       └── jsfmt.spec.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── subdir/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── custom_resolve_dir/
│   │   │   │   │   └── testproj2/
│   │   │   │   │       ├── __snapshots__/
│   │   │   │   │       │   └── jsfmt.spec.js.snap
│   │   │   │   │       ├── index.js
│   │   │   │   │       └── jsfmt.spec.js
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── sublevel.js
│   │   │   └── toplevel.js
│   │   ├── config_munging_underscores/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── chain.js
│   │   │   ├── commonjs_export.js
│   │   │   ├── commonjs_import.js
│   │   │   └── jsfmt.spec.js
│   │   ├── config_munging_underscores2/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── chain.js
│   │   │   └── jsfmt.spec.js
│   │   ├── const_params/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── constructor/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── constructor.js
│   │   │   └── jsfmt.spec.js
│   │   ├── constructor_annots/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── constructors.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── contents/
│   │   │   ├── ignore/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── dummy.js
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── test.js
│   │   │   └── no_flow/
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── dummy.js
│   │   │       ├── jsfmt.spec.js
│   │   │       └── test.js
│   │   ├── core_tests/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── boolean.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── map.js
│   │   │   ├── regexp.js
│   │   │   └── weakset.js
│   │   ├── covariance/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── cycle/
│   │   │   ├── A.js
│   │   │   ├── B.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   └── jsfmt.spec.js
│   │   ├── date/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── date.js
│   │   │   └── jsfmt.spec.js
│   │   ├── declaration_files_haste/
│   │   │   ├── ExplicitProvidesModuleDifferentName.js
│   │   │   ├── ExplicitProvidesModuleSameName.js
│   │   │   ├── ImplicitProvidesModule.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── external/
│   │   │   │   └── _d3/
│   │   │   │       ├── __snapshots__/
│   │   │   │       │   └── jsfmt.spec.js.snap
│   │   │   │       ├── jsfmt.spec.js
│   │   │   │       └── min.js
│   │   │   ├── foo/
│   │   │   │   └── bar/
│   │   │   │       ├── __snapshots__/
│   │   │   │       │   └── jsfmt.spec.js.snap
│   │   │   │       ├── jsfmt.spec.js
│   │   │   │       └── nested_test.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── md5.js
│   │   │   ├── test.js
│   │   │   └── ws/
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── index.js
│   │   │       ├── jsfmt.spec.js
│   │   │       └── test/
│   │   │           ├── __snapshots__/
│   │   │           │   └── jsfmt.spec.js.snap
│   │   │           ├── client.js
│   │   │           └── jsfmt.spec.js
│   │   ├── declaration_files_incremental_haste/
│   │   │   ├── A.js
│   │   │   ├── ExplicitProvidesModuleDifferentName.js
│   │   │   ├── ExplicitProvidesModuleSameName.js
│   │   │   ├── ImplicitProvidesModule.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── external/
│   │   │   │   └── _d3/
│   │   │   │       ├── __snapshots__/
│   │   │   │       │   └── jsfmt.spec.js.snap
│   │   │   │       ├── jsfmt.spec.js
│   │   │   │       └── min.js
│   │   │   ├── foo/
│   │   │   │   └── bar/
│   │   │   │       ├── __snapshots__/
│   │   │   │       │   └── jsfmt.spec.js.snap
│   │   │   │       ├── jsfmt.spec.js
│   │   │   │       └── nested_test.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── md5.js
│   │   │   ├── test.js
│   │   │   └── ws/
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── index.js
│   │   │       ├── jsfmt.spec.js
│   │   │       └── test/
│   │   │           ├── __snapshots__/
│   │   │           │   └── jsfmt.spec.js.snap
│   │   │           ├── client.js
│   │   │           └── jsfmt.spec.js
│   │   ├── declaration_files_incremental_haste_name_reducers/
│   │   │   ├── A.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── index.js
│   │   │   └── jsfmt.spec.js
│   │   ├── declaration_files_incremental_node/
│   │   │   ├── A.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── test_absolute.js
│   │   │   └── test_relative.js
│   │   ├── declaration_files_node/
│   │   │   ├── A.js
│   │   │   ├── CJS.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── test_absolute.js
│   │   │   └── test_relative.js
│   │   ├── declare_class/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── declare_class.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── lib/
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── jsfmt.spec.js
│   │   │       └── test.js
│   │   ├── declare_export/
│   │   │   ├── B.js
│   │   │   ├── C.js
│   │   │   ├── CommonJS_Clobbering_Class.js
│   │   │   ├── CommonJS_Clobbering_Lit.js
│   │   │   ├── CommonJS_Named.js
│   │   │   ├── ES6_DefaultAndNamed.js
│   │   │   ├── ES6_Default_AnonFunction1.js
│   │   │   ├── ES6_Default_AnonFunction2.js
│   │   │   ├── ES6_Default_NamedClass1.js
│   │   │   ├── ES6_Default_NamedClass2.js
│   │   │   ├── ES6_Default_NamedFunction1.js
│   │   │   ├── ES6_Default_NamedFunction2.js
│   │   │   ├── ES6_ExportAllFromMulti.js
│   │   │   ├── ES6_ExportAllFrom_Intermediary1.js
│   │   │   ├── ES6_ExportAllFrom_Intermediary2.js
│   │   │   ├── ES6_ExportAllFrom_Source1.js
│   │   │   ├── ES6_ExportAllFrom_Source2.js
│   │   │   ├── ES6_ExportFrom_Intermediary1.js
│   │   │   ├── ES6_ExportFrom_Intermediary2.js
│   │   │   ├── ES6_ExportFrom_Source1.js
│   │   │   ├── ES6_ExportFrom_Source2.js
│   │   │   ├── ES6_Named1.js
│   │   │   ├── ES6_Named2.js
│   │   │   ├── ProvidesModuleA.js
│   │   │   ├── ProvidesModuleCJSDefault.js
│   │   │   ├── ProvidesModuleD.js
│   │   │   ├── ProvidesModuleES6Default.js
│   │   │   ├── SideEffects.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── es6modules.js
│   │   │   └── jsfmt.spec.js
│   │   ├── declare_fun/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── declare_module_exports/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── flow-typed/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── libs.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── main.js
│   │   ├── declare_type/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── import_declare_type.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── lib/
│   │   │       ├── DeclareModule_TypeAlias.js
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── declare_type_exports.js
│   │   │       └── jsfmt.spec.js
│   │   ├── def_site_variance/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── demo/
│   │   │   ├── 1/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── f.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   └── 2/
│   │   │       ├── A.js
│   │   │       ├── B.js
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       └── jsfmt.spec.js
│   │   ├── deps/
│   │   │   ├── A.js
│   │   │   ├── B.js
│   │   │   ├── C.js
│   │   │   ├── D.js
│   │   │   ├── E.js
│   │   │   ├── F.js
│   │   │   ├── G.js
│   │   │   ├── H.js
│   │   │   ├── I.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   └── jsfmt.spec.js
│   │   ├── destructuring/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── array_rest.js
│   │   │   ├── computed.js
│   │   │   ├── defaults.js
│   │   │   ├── destructuring.js
│   │   │   ├── eager.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── poly.js
│   │   │   ├── rec.js
│   │   │   ├── refinement_non_termination.js
│   │   │   ├── string_lit.js
│   │   │   └── unannotated.js
│   │   ├── dictionary/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── any.js
│   │   │   ├── compatible.js
│   │   │   ├── dictionary.js
│   │   │   ├── incompatible.js
│   │   │   ├── issue-1745.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── test.js
│   │   │   └── test_client.js
│   │   ├── disjoint-union-perf/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── ast.js
│   │   │   ├── emit.js
│   │   │   ├── jsAst.js
│   │   │   └── jsfmt.spec.js
│   │   ├── docblock_flow/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── license_with_flow.js
│   │   │   ├── max_header_tokens.js
│   │   │   ├── multiple_flows_1.js
│   │   │   ├── multiple_flows_2.js
│   │   │   ├── multiple_providesModule_1.js
│   │   │   ├── multiple_providesModule_2.js
│   │   │   ├── use_strict_with_flow.js
│   │   │   ├── with_flow.js
│   │   │   └── without_flow.js
│   │   ├── dom/
│   │   │   ├── CanvasRenderingContext2D.js
│   │   │   ├── CustomEvent.js
│   │   │   ├── Document.js
│   │   │   ├── Element.js
│   │   │   ├── HTMLCanvasElement.js
│   │   │   ├── HTMLElement.js
│   │   │   ├── HTMLInputElement.js
│   │   │   ├── URL.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── eventtarget.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── path2d.js
│   │   │   ├── registerElement.js
│   │   │   └── traversal.js
│   │   ├── dump-types/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── import.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── duplicate_methods/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── encaps/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── encaps.js
│   │   │   └── jsfmt.spec.js
│   │   ├── enumerror/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── enumerror.js
│   │   │   └── jsfmt.spec.js
│   │   ├── equals/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── equals.js
│   │   │   └── jsfmt.spec.js
│   │   ├── error_messages/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── errors.js
│   │   │   └── jsfmt.spec.js
│   │   ├── es6modules/
│   │   │   ├── B.js
│   │   │   ├── C.js
│   │   │   ├── CommonJS_Clobbering_Class.js
│   │   │   ├── CommonJS_Clobbering_Frozen.js
│   │   │   ├── CommonJS_Clobbering_Lit.js
│   │   │   ├── CommonJS_Named.js
│   │   │   ├── ES6_DefaultAndNamed.js
│   │   │   ├── ES6_Default_AnonClass1.js
│   │   │   ├── ES6_Default_AnonClass2.js
│   │   │   ├── ES6_Default_AnonFunction1.js
│   │   │   ├── ES6_Default_AnonFunction2.js
│   │   │   ├── ES6_Default_NamedClass1.js
│   │   │   ├── ES6_Default_NamedClass2.js
│   │   │   ├── ES6_Default_NamedFunction1.js
│   │   │   ├── ES6_Default_NamedFunction2.js
│   │   │   ├── ES6_ExportAllFromMulti.js
│   │   │   ├── ES6_ExportAllFrom_Intermediary1.js
│   │   │   ├── ES6_ExportAllFrom_Intermediary2.js
│   │   │   ├── ES6_ExportAllFrom_Source1.js
│   │   │   ├── ES6_ExportAllFrom_Source2.js
│   │   │   ├── ES6_ExportFrom_Intermediary1.js
│   │   │   ├── ES6_ExportFrom_Intermediary2.js
│   │   │   ├── ES6_ExportFrom_Source1.js
│   │   │   ├── ES6_ExportFrom_Source2.js
│   │   │   ├── ES6_Named1.js
│   │   │   ├── ES6_Named2.js
│   │   │   ├── ExportType.js
│   │   │   ├── ProvidesModuleA.js
│   │   │   ├── ProvidesModuleCJSDefault.js
│   │   │   ├── ProvidesModuleD.js
│   │   │   ├── ProvidesModuleES6Default.js
│   │   │   ├── SideEffects.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── es6modules.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test_imports_are_frozen.js
│   │   ├── es_declare_module/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── es_declare_module.js
│   │   │   ├── flow-typed/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── declares.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   └── jsfmt.spec.js
│   │   ├── esproposal_class_instance_fields.ignore/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── esproposal_class_instance_fields.warn/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── esproposal_class_static_fields.ignore/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── esproposal_class_static_fields.warn/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── esproposal_export_star_as.enable/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── dest.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── source.js
│   │   │   └── test.js
│   │   ├── esproposal_export_star_as.ignore/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── dest.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── source.js
│   │   │   └── test.js
│   │   ├── esproposal_export_star_as.warn/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── export_default/
│   │   │   ├── P.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── lib/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── lib.js
│   │   │   └── test.js
│   │   ├── export_type/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── cjs_with_types.js
│   │   │   ├── importer.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── types_only.js
│   │   │   └── types_only2.js
│   │   ├── extensions/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── foo.js
│   │   │   └── jsfmt.spec.js
│   │   ├── facebook_fbt_none/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── main.js
│   │   ├── facebook_fbt_some/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── flow-typed/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── fbt.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── main.js
│   │   ├── facebookisms/
│   │   │   ├── Bar.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── copyProperties.js
│   │   │   ├── invariant.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── lib.js
│   │   │   ├── mergeInto.js
│   │   │   └── test.js
│   │   ├── fetch/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── fetch.js
│   │   │   ├── headers.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── request.js
│   │   │   ├── response.js
│   │   │   └── urlsearchparams.js
│   │   ├── find-module/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── req.js
│   │   │   └── test.js
│   │   ├── fixpoint/
│   │   │   ├── Fun.js
│   │   │   ├── Ycombinator.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   └── jsfmt.spec.js
│   │   ├── flow_ast.template_strings/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── foo.js
│   │   │   └── jsfmt.spec.js
│   │   ├── focus-check/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── a.js
│   │   │   ├── b.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── for/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── abnormal.js
│   │   │   ├── abnormal_for_in.js
│   │   │   ├── abnormal_for_of.js
│   │   │   └── jsfmt.spec.js
│   │   ├── forof/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── forof.js
│   │   │   └── jsfmt.spec.js
│   │   ├── function/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── apply.js
│   │   │   ├── bind.js
│   │   │   ├── call.js
│   │   │   ├── function.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── rest.js
│   │   │   └── rest_type.js
│   │   ├── funrec/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── funrec.js
│   │   │   └── jsfmt.spec.js
│   │   ├── generators/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── class.js
│   │   │   ├── class_failure.js
│   │   │   ├── generators.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── refi.js
│   │   │   ├── return.js
│   │   │   ├── throw.js
│   │   │   └── variance.js
│   │   ├── generics/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── generics.js
│   │   │   └── jsfmt.spec.js
│   │   ├── geolocation/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── a.js
│   │   │   └── jsfmt.spec.js
│   │   ├── get-def/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── example.js
│   │   │   ├── helpers/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── exports_default.js
│   │   │   │   ├── exports_named.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── imports.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── library.js
│   │   ├── get-def2/
│   │   │   ├── Parent.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── lib/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── jsx.js
│   │   │   ├── main.js
│   │   │   ├── override.js
│   │   │   ├── react.js
│   │   │   └── types.js
│   │   ├── get-imports/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── a.js
│   │   │   ├── b.js
│   │   │   ├── c.js
│   │   │   └── jsfmt.spec.js
│   │   ├── getters_and_setters_disabled/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── getters_and_setters.js
│   │   │   └── jsfmt.spec.js
│   │   ├── getters_and_setters_enabled/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── class.js
│   │   │   ├── declare_class.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── object.js
│   │   │   ├── object_type.js
│   │   │   ├── react.js
│   │   │   └── variance.js
│   │   ├── haste_cycle/
│   │   │   ├── API.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── models/
│   │   │       ├── OpenGraphAction.js
│   │   │       ├── OpenGraphObject.js
│   │   │       ├── OpenGraphValueContainer.js
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       └── jsfmt.spec.js
│   │   ├── haste_dupe/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── dupe1.js
│   │   │   ├── dupe2.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── requires_dupe.js
│   │   ├── haste_name_reducers_defaults/
│   │   │   ├── Module1.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── index.js
│   │   │   └── jsfmt.spec.js
│   │   ├── haste_use_name_reducers/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── dir1/
│   │   │   │   ├── Module1.js
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── dir2/
│   │   │   │   ├── Module2.ios.js
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── index.js
│   │   │   └── jsfmt.spec.js
│   │   ├── ignore_package/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── foo.js
│   │   │   └── jsfmt.spec.js
│   │   ├── immutable_methods/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── implements/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── import_type/
│   │   │   ├── ExportCJSDefault_Class.js
│   │   │   ├── ExportCJSNamed_Class.js
│   │   │   ├── ExportDefault_Class.js
│   │   │   ├── ExportNamed_Alias.js
│   │   │   ├── ExportNamed_Class.js
│   │   │   ├── ExportsANumber.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── import_type.js
│   │   │   ├── issue-359.js
│   │   │   └── jsfmt.spec.js
│   │   ├── import_typeof/
│   │   │   ├── ExportCJSDefault_Class.js
│   │   │   ├── ExportCJSDefault_Number.js
│   │   │   ├── ExportCJSNamed_Class.js
│   │   │   ├── ExportCJSNamed_Number.js
│   │   │   ├── ExportDefault_Class.js
│   │   │   ├── ExportDefault_Number.js
│   │   │   ├── ExportNamed_Alias.js
│   │   │   ├── ExportNamed_Class.js
│   │   │   ├── ExportNamed_Multi.js
│   │   │   ├── ExportNamed_Number.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── import_typeof.js
│   │   │   └── jsfmt.spec.js
│   │   ├── include/
│   │   │   ├── foo/
│   │   │   │   └── batman/
│   │   │   │       ├── __snapshots__/
│   │   │   │       │   └── jsfmt.spec.js.snap
│   │   │   │       ├── baz.js
│   │   │   │       └── jsfmt.spec.js
│   │   │   └── included/
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── jsfmt.spec.js
│   │   │       └── test.js
│   │   ├── include_suppressed/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── incremental/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── a.js
│   │   │   ├── b.js
│   │   │   ├── dup_a.js
│   │   │   └── jsfmt.spec.js
│   │   ├── incremental_basic/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── a.js
│   │   │   ├── b.js
│   │   │   ├── c.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── tmp1/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── b.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmp2/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── a.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   └── tmp3/
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── b.js
│   │   │       └── jsfmt.spec.js
│   │   ├── incremental_cycle/
│   │   │   ├── A.js
│   │   │   ├── B.js
│   │   │   ├── C.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── tmp1/
│   │   │   │   ├── B.js
│   │   │   │   ├── C.js
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmp2/
│   │   │   │   ├── B.js
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   └── jsfmt.spec.js
│   │   │   └── tmp3/
│   │   │       ├── B.js
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       └── jsfmt.spec.js
│   │   ├── incremental_cycle_break/
│   │   │   ├── A.js
│   │   │   ├── B.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── tmp1/
│   │   │       ├── A.js
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       └── jsfmt.spec.js
│   │   ├── incremental_delete/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── a.js
│   │   │   ├── b.js
│   │   │   ├── c.js
│   │   │   ├── dupe1.js
│   │   │   ├── dupe2.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── requires_dupe.js
│   │   │   ├── requires_unchecked.js
│   │   │   └── unchecked.js
│   │   ├── incremental_duplicate_delete/
│   │   │   ├── A.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   └── jsfmt.spec.js
│   │   ├── incremental_haste_blacklist/
│   │   │   ├── A.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── index.js
│   │   │   └── jsfmt.spec.js
│   │   ├── incremental_haste_name_reducers_duplicate/
│   │   │   ├── A.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── index.js
│   │   │   └── jsfmt.spec.js
│   │   ├── incremental_json/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── incremental_mixed_naming_cycle/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── a.js
│   │   │   ├── b.js
│   │   │   ├── c.js
│   │   │   ├── d.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── root.js
│   │   │   └── tmp1/
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── jsfmt.spec.js
│   │   │       └── root.js
│   │   ├── incremental_non_flow_move/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── foo.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── incremental_path/
│   │   │   └── dir/
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── a.js
│   │   │       └── jsfmt.spec.js
│   │   ├── indexer/
│   │   │   ├── A.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── multiple.js
│   │   ├── init/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── hoisted.js
│   │   │   ├── hoisted2.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── let.js
│   │   │   └── nullable-init.js
│   │   ├── instanceof/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── instanceof.js
│   │   │   └── jsfmt.spec.js
│   │   ├── integration/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── bar.js
│   │   │   ├── foo.js
│   │   │   └── jsfmt.spec.js
│   │   ├── interface/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── import.js
│   │   │   ├── indexer.js
│   │   │   ├── interface.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── test.js
│   │   │   ├── test2.js
│   │   │   ├── test3.js
│   │   │   └── test4.js
│   │   ├── intersection/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── intersection.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── lib/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── lib.js
│   │   │   ├── objassign.js
│   │   │   ├── pred.js
│   │   │   ├── test_fun.js
│   │   │   └── test_obj.js
│   │   ├── issues-11/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── export.js
│   │   │   ├── import.js
│   │   │   └── jsfmt.spec.js
│   │   ├── iter/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── iter.js
│   │   │   └── jsfmt.spec.js
│   │   ├── iterable/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── array.js
│   │   │   ├── caching_bug.js
│   │   │   ├── iter.js
│   │   │   ├── iterator_result.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── map.js
│   │   │   ├── set.js
│   │   │   ├── string.js
│   │   │   └── variance.js
│   │   ├── jsx_intrinsics.builtin/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── main.js
│   │   │   └── strings.js
│   │   ├── jsx_intrinsics.custom/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── lib/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── jsx.js
│   │   │   ├── main.js
│   │   │   └── strings.js
│   │   ├── keys/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── keys.js
│   │   ├── keyvalue/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── keyvalue.js
│   │   ├── last_duplicate_property_wins/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── lib/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── libtest.js
│   │   ├── lib_interfaces/
│   │   │   └── declarations/
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── jsfmt.spec.js
│   │   │       └── underscore.js
│   │   ├── libconfig/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── libA.js
│   │   │   ├── libB.js
│   │   │   └── libtest.js
│   │   ├── libdef_ignored_module/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── lib/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── foo.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── liberr/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── a.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── libs/
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── jsfmt.spec.js
│   │   │       └── type_error.js
│   │   ├── libflow-typed/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── flow-typed/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── dino.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── libtest.js
│   │   ├── librec/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── lib/
│   │   │   │   ├── A/
│   │   │   │   │   ├── __snapshots__/
│   │   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   │   ├── jsfmt.spec.js
│   │   │   │   │   └── libA.js
│   │   │   │   └── B/
│   │   │   │       ├── __snapshots__/
│   │   │   │       │   └── jsfmt.spec.js.snap
│   │   │   │       ├── jsfmt.spec.js
│   │   │   │       └── libB.js
│   │   │   └── libtest.js
│   │   ├── literal/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── enum.js
│   │   │   ├── enum_client.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── number.js
│   │   ├── locals/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── lex.js
│   │   │   └── locals.js
│   │   ├── logical/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── logical.js
│   │   ├── loners/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── loners.js
│   │   ├── malformed_code/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── text.js
│   │   ├── match_failure/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── disjoint_union.js
│   │   │   ├── enum.js
│   │   │   └── jsfmt.spec.js
│   │   ├── method_properties/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── exports_optional_prop.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── misc/
│   │   │   ├── A.js
│   │   │   ├── B.js
│   │   │   ├── C.js
│   │   │   ├── D.js
│   │   │   ├── E.js
│   │   │   ├── F.js
│   │   │   ├── G.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   └── jsfmt.spec.js
│   │   ├── missing_annotation/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── array.js
│   │   │   ├── async_return.js
│   │   │   ├── infer.js
│   │   │   └── jsfmt.spec.js
│   │   ├── modified_lib/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── lib/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── lib.js
│   │   │   └── test.js
│   │   ├── module_not_found_errors/
│   │   │   └── src/
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── index.js
│   │   │       └── jsfmt.spec.js
│   │   ├── module_redirect/
│   │   │   ├── A.js
│   │   │   ├── B.js
│   │   │   ├── C.js
│   │   │   ├── D.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   └── jsfmt.spec.js
│   │   ├── module_use_strict/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── modules/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── cli.js
│   │   │   ├── cli2.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── lib.js
│   │   ├── more_annot/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── client_object.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── object.js
│   │   │   ├── proto.js
│   │   │   └── super.js
│   │   ├── more_classes/
│   │   │   ├── Bar.js
│   │   │   ├── Foo.js
│   │   │   ├── Qux.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   └── jsfmt.spec.js
│   │   ├── more_generics/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── poly.js
│   │   ├── more_path/
│   │   │   ├── Condition.js
│   │   │   ├── FlowSA.js
│   │   │   ├── Sigma.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── more_react/
│   │   │   ├── API.react.js
│   │   │   ├── App.react.js
│   │   │   ├── InitializedFields.js
│   │   │   ├── JSX.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── checkPropTypes.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── propTypes.js
│   │   ├── more_statics/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── class_static.js
│   │   │   └── jsfmt.spec.js
│   │   ├── multiflow/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── apply.js
│   │   │   ├── issue3443.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── jsx.js
│   │   │   └── spread.js
│   │   ├── multiflow_with_flowlib/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── spread.js
│   │   ├── name_prop/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── class.js
│   │   │   ├── function.js
│   │   │   └── jsfmt.spec.js
│   │   ├── namespace/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── client.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── namespace.js
│   │   ├── new_react/
│   │   │   ├── FeedUFI.react.js
│   │   │   ├── Mixin.js
│   │   │   ├── UFILikeCount.react.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── bad_default_props.js
│   │   │   ├── classes.js
│   │   │   ├── fakelib/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── type_aliases.js
│   │   │   ├── import-react.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── new_react.js
│   │   │   ├── propTypes.js
│   │   │   ├── props.js
│   │   │   ├── props2.js
│   │   │   ├── props3.js
│   │   │   ├── props4.js
│   │   │   ├── props5.js
│   │   │   ├── state.js
│   │   │   ├── state2.js
│   │   │   ├── state3.js
│   │   │   ├── state4.js
│   │   │   └── state5.js
│   │   ├── new_spread/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── type.js
│   │   │   ├── type_any.js
│   │   │   ├── type_contra.js
│   │   │   ├── type_dict.js
│   │   │   ├── type_generic.js
│   │   │   ├── type_instance.js
│   │   │   ├── type_intersection.js
│   │   │   ├── type_intersection_optional.js
│   │   │   ├── type_optional.js
│   │   │   └── type_union.js
│   │   ├── node_haste/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── client.js
│   │   │   ├── external/
│   │   │   │   └── _d3/
│   │   │   │       ├── __snapshots__/
│   │   │   │       │   └── jsfmt.spec.js.snap
│   │   │   │       ├── jsfmt.spec.js
│   │   │   │       └── min.js
│   │   │   ├── foo/
│   │   │   │   └── bar/
│   │   │   │       ├── __snapshots__/
│   │   │   │       │   └── jsfmt.spec.js.snap
│   │   │   │       ├── client.js
│   │   │   │       └── jsfmt.spec.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── md5.js
│   │   │   └── ws/
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── index.js
│   │   │       ├── jsfmt.spec.js
│   │   │       └── test/
│   │   │           ├── __snapshots__/
│   │   │           │   └── jsfmt.spec.js.snap
│   │   │           ├── client.js
│   │   │           └── jsfmt.spec.js
│   │   ├── node_modules_with_symlinks/
│   │   │   ├── root/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── foo.js
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── symlink_lib/
│   │   │   │       ├── __snapshots__/
│   │   │   │       │   └── jsfmt.spec.js.snap
│   │   │   │       ├── index.js
│   │   │   │       └── jsfmt.spec.js
│   │   │   └── symlink_lib_outside_root/
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── index.js
│   │   │       └── jsfmt.spec.js
│   │   ├── node_modules_without_json/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── node_tests/
│   │   │   ├── assert/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── assert.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── basic/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── bar.js
│   │   │   │   ├── foo.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── basic_file/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── bar.js
│   │   │   │   ├── foo.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── basic_node_modules/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── foo.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── basic_node_modules_with_path/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── foo.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── basic_package/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── bar_lib/
│   │   │   │   │   ├── __snapshots__/
│   │   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   │   ├── bar.js
│   │   │   │   │   └── jsfmt.spec.js
│   │   │   │   ├── foo.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── buffer/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── buffer.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── child_process/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── exec.js
│   │   │   │   ├── execFile.js
│   │   │   │   ├── execSync.js
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── spawn.js
│   │   │   ├── crypto/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── crypto.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── fs/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── fs.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── json_file/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   ├── package2/
│   │   │   │   │   ├── __snapshots__/
│   │   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── jsfmt.spec.js
│   │   │   │   └── test.js
│   │   │   ├── os/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── userInfo.js
│   │   │   ├── package_file/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── bar_lib/
│   │   │   │   │   ├── __snapshots__/
│   │   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   │   ├── bar.js
│   │   │   │   │   └── jsfmt.spec.js
│   │   │   │   ├── bar_lib.js
│   │   │   │   ├── foo.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── package_file_node_modules/
│   │   │   │   └── foo/
│   │   │   │       ├── __snapshots__/
│   │   │   │       │   └── jsfmt.spec.js.snap
│   │   │   │       ├── foo.js
│   │   │   │       └── jsfmt.spec.js
│   │   │   ├── path_node_modules/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── foo.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── path_node_modules_with_short_main/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── foo.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── path_node_modules_without_main/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── foo.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── path_package/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── foo.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── process/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── nextTick.js
│   │   │   ├── stream/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── stream.js
│   │   │   ├── timers/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── timers.js
│   │   │   └── url/
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── jsfmt.spec.js
│   │   │       └── url.js
│   │   ├── nullable/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── maybe.js
│   │   │   ├── nullable.js
│   │   │   └── simple_nullable.js
│   │   ├── number_constants/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── number_constants.js
│   │   ├── object-method/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── id.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── subtype.js
│   │   │   ├── test.js
│   │   │   ├── test2.js
│   │   │   └── test3.js
│   │   ├── object_annot/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── object_api/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── a.js
│   │   │   ├── b.js
│   │   │   ├── c.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── object_assign.js
│   │   │   ├── object_create.js
│   │   │   ├── object_getprototypeof.js
│   │   │   ├── object_keys.js
│   │   │   ├── object_missing.js
│   │   │   └── object_prototype.js
│   │   ├── object_assign/
│   │   │   ├── A.js
│   │   │   ├── B.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── apply.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── non_objects.js
│   │   │   ├── spread.js
│   │   │   └── undefined.js
│   │   ├── object_freeze/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── object_freeze.js
│   │   ├── object_is/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── object_is.js
│   │   ├── objects/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── compatibility.js
│   │   │   ├── conversion.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── objects.js
│   │   │   └── unaliased_assign.js
│   │   ├── objmap/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── objmap.js
│   │   ├── optional/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── client_optional.js
│   │   │   ├── default.js
│   │   │   ├── generic.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── loop.js
│   │   │   ├── maybe.js
│   │   │   ├── nullable.js
│   │   │   ├── optional.js
│   │   │   ├── optional_param.js
│   │   │   ├── optional_param2.js
│   │   │   ├── optional_param3.js
│   │   │   ├── optional_param4.js
│   │   │   ├── undefined.js
│   │   │   └── undefined2.js
│   │   ├── optional_props/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── test.js
│   │   │   ├── test2.js
│   │   │   ├── test3.js
│   │   │   ├── test3_exact_annot.js
│   │   │   └── test3_failure.js
│   │   ├── overload/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── lib/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── lib.js
│   │   │   ├── overload.js
│   │   │   ├── test.js
│   │   │   ├── test2.js
│   │   │   ├── test3.js
│   │   │   └── union.js
│   │   ├── parse/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── no_parse_error.js
│   │   ├── parse_error_haste/
│   │   │   ├── Client.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   └── jsfmt.spec.js
│   │   ├── parse_error_node/
│   │   │   ├── Client.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   └── jsfmt.spec.js
│   │   ├── path/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── while.js
│   │   ├── plsummit/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── arrays.js
│   │   │   ├── export_class.js
│   │   │   ├── generics.js
│   │   │   ├── import_class.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── locals.js
│   │   │   └── objects.js
│   │   ├── poly/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── annot.js
│   │   │   ├── implicit_bounded_instantiation.js
│   │   │   ├── issue-1029.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── poly.js
│   │   │   └── test.js
│   │   ├── poly_class_export/
│   │   │   ├── A.js
│   │   │   ├── B.js
│   │   │   ├── C.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   └── jsfmt.spec.js
│   │   ├── poly_overload/
│   │   │   └── decls/
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── jsfmt.spec.js
│   │   │       └── typescript-deferred.js
│   │   ├── predicates-abstract/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── filter-union.js
│   │   │   ├── filter.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── refine.js
│   │   │   ├── sanity-filter-union.js
│   │   │   ├── sanity-filter.js
│   │   │   └── sanity-refine.js
│   │   ├── predicates-declared/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── function-bind.js
│   │   │   ├── function-union.js
│   │   │   ├── is-string-decl.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── logical-or.js
│   │   │   ├── object-invariant.js
│   │   │   ├── orig-string-tag-check.js
│   │   │   ├── sanity-fall-through.js
│   │   │   ├── sanity-invalid-calls.js
│   │   │   ├── sanity-is-string-bug.js
│   │   │   ├── sanity-parameter-mismatch.js
│   │   │   ├── sanity-pred-with-body.js
│   │   │   └── sanity-return-type.js
│   │   ├── predicates-inferred/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── sanity-multi-params.js
│   │   │   ├── sanity-ordering.js
│   │   │   ├── sanity-unbound-var.js
│   │   │   ├── sanity.js
│   │   │   ├── simple-predicate-func-post.js
│   │   │   └── simple-predicate-func.js
│   │   ├── predicates-parsing/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── fail-0.js
│   │   │   ├── fail-1.js
│   │   │   ├── fail-2.js
│   │   │   ├── fail-3.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── pass.js
│   │   ├── private/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── private.js
│   │   ├── promises/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── all.js
│   │   │   ├── covariance.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── promise.js
│   │   │   ├── resolve_global.js
│   │   │   └── resolve_void.js
│   │   ├── pure_component/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── qualified/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── qualified.js
│   │   ├── react/
│   │   │   ├── ArityError.react.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── createElementRequiredProp_string.js
│   │   │   ├── createElement_string.js
│   │   │   ├── create_class.js
│   │   │   ├── create_class_initial_state_sealed.js
│   │   │   ├── create_class_statics_sealed.js
│   │   │   ├── import_react.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── jsx_spread.js
│   │   │   ├── proptype_any.js
│   │   │   ├── proptype_arrayOf.js
│   │   │   ├── proptype_custom_validator.js
│   │   │   ├── proptype_func.js
│   │   │   ├── proptype_incompatible.js
│   │   │   ├── proptype_instanceOf.js
│   │   │   ├── proptype_missing.js
│   │   │   ├── proptype_object.js
│   │   │   ├── proptype_objectOf.js
│   │   │   ├── proptype_oneOf.js
│   │   │   ├── proptype_oneOfType.js
│   │   │   ├── proptype_shape.js
│   │   │   ├── proptypes_builtins.js
│   │   │   └── proptypes_sealed.js
│   │   ├── react_functional/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── react_modules/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── createclass-callsite.js
│   │   │   ├── createclass-module.js
│   │   │   ├── es6class-proptypes-callsite.js
│   │   │   ├── es6class-proptypes-module.js
│   │   │   ├── es6class-types-callsite.js
│   │   │   ├── es6class-types-module.js
│   │   │   └── jsfmt.spec.js
│   │   ├── rec/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── issue-1228.js
│   │   │   ├── issue-598.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── test.js
│   │   │   ├── test2.js
│   │   │   ├── test3.js
│   │   │   ├── test4.js
│   │   │   └── test5.js
│   │   ├── recheck/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── a1.js
│   │   │   ├── a2.js
│   │   │   ├── a3.js
│   │   │   ├── b0.js
│   │   │   ├── b1.js
│   │   │   ├── b2.js
│   │   │   ├── b3.js
│   │   │   ├── c1.js
│   │   │   ├── c2.js
│   │   │   ├── c3.js
│   │   │   ├── d1.js
│   │   │   ├── d2.js
│   │   │   ├── e1.js
│   │   │   ├── e2.js
│   │   │   ├── f1.js
│   │   │   ├── f2.js
│   │   │   ├── g1.js
│   │   │   ├── g2.js
│   │   │   ├── g3.js
│   │   │   ├── h1.js
│   │   │   ├── h2.js
│   │   │   ├── i1.js
│   │   │   ├── i2.js
│   │   │   ├── j1.js
│   │   │   ├── j2.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── k.js
│   │   │   ├── tmp1a/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── a1.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmp1b/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── b1.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmp1c/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── c2.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmp1d/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── d1.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmp1e/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── e2.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmp1f/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── f1.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmp1g/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── g1.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmp1h/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── h1.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmp1i/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── i1.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmp1j/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── j1.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmp2a/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── a1.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmp2b/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── b0.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmp2c/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── c1.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmp2e/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── e1.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmp2f/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── f1.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmp3e/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── e1.js
│   │   │   │   ├── e2.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmp3f/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── f1.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmp4f/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── f1.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── tmpk/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── k.js
│   │   │   └── tmplibk/
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── jsfmt.spec.js
│   │   │       ├── libk1.js
│   │   │       └── libk2.js
│   │   ├── recheck-haste/
│   │   │   ├── A1.js
│   │   │   ├── A3.js
│   │   │   ├── B1.js
│   │   │   ├── B3.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── dir1B/
│   │   │   │   ├── B2.js
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── tmp1A/
│   │   │   │   ├── A2.js
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   └── jsfmt.spec.js
│   │   │   └── tmp2A/
│   │   │       ├── A3.js
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       └── jsfmt.spec.js
│   │   ├── record/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── refi/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── bound.js
│   │   │   ├── heap.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── lex.js
│   │   │   ├── local.js
│   │   │   ├── null_tests.js
│   │   │   ├── switch.js
│   │   │   ├── typeof_tests.js
│   │   │   ├── undef_tests.js
│   │   │   └── void_tests.js
│   │   ├── refinements/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── assignment.js
│   │   │   ├── ast_node.js
│   │   │   ├── bool.js
│   │   │   ├── computed_string_literal.js
│   │   │   ├── cond_prop.js
│   │   │   ├── constants.js
│   │   │   ├── eq.js
│   │   │   ├── exists.js
│   │   │   ├── func_call.js
│   │   │   ├── hasOwnProperty.js
│   │   │   ├── heap_defassign.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── lib.js
│   │   │   ├── missing-property-cond.js
│   │   │   ├── mixed.js
│   │   │   ├── node1.js
│   │   │   ├── not.js
│   │   │   ├── null.js
│   │   │   ├── number.js
│   │   │   ├── property.js
│   │   │   ├── refinements.js
│   │   │   ├── string.js
│   │   │   ├── super_member.js
│   │   │   ├── switch.js
│   │   │   ├── tagged_union.js
│   │   │   ├── tagged_union_import.js
│   │   │   ├── typeof.js
│   │   │   ├── undef.js
│   │   │   ├── union.js
│   │   │   └── void.js
│   │   ├── reflection/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── type.js
│   │   ├── regexp/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── regexp.js
│   │   ├── replace/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── require/
│   │   │   ├── B.js
│   │   │   ├── C.js
│   │   │   ├── E.js
│   │   │   ├── ProvidesModuleA.js
│   │   │   ├── ProvidesModuleD.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── not_builtin_require.js
│   │   │   ├── not_builtin_require2.js
│   │   │   └── require.js
│   │   ├── requireLazy/
│   │   │   ├── A.js
│   │   │   ├── B.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── requireLazy.js
│   │   ├── return/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── function_return.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── void.js
│   │   ├── return_new/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── test.js
│   │   │   └── test2.js
│   │   ├── seal/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── imp.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── obj_annot.js
│   │   ├── sealed/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── function.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── proto.js
│   │   │   └── sealed.js
│   │   ├── sealed_objects/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── shape/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── shadow.js
│   │   │   └── test.js
│   │   ├── simple_arrays/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── array.js
│   │   │   ├── array2.js
│   │   │   └── jsfmt.spec.js
│   │   ├── singleton/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── boolean.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── number.js
│   │   │   └── string.js
│   │   ├── spread/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── test.js
│   │   │   ├── test2.js
│   │   │   ├── test3.js
│   │   │   ├── test4.js
│   │   │   ├── test5.js
│   │   │   ├── test6.js
│   │   │   └── test7.js
│   │   ├── static_overload/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── lib/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── lib.js
│   │   │   └── test.js
│   │   ├── statics/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── class_statics.js
│   │   │   ├── funstatics.js
│   │   │   └── jsfmt.spec.js
│   │   ├── strict/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── annot.js
│   │   │   ├── fun.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── obj.js
│   │   ├── strict_requires/
│   │   │   ├── A.js
│   │   │   ├── B.js
│   │   │   ├── C.js
│   │   │   ├── D.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   └── jsfmt.spec.js
│   │   ├── structural_subtyping/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── builtin.js
│   │   │   ├── class.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── obj.js
│   │   │   └── optional.js
│   │   ├── suggest/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── lib.js
│   │   │   └── suggest.js
│   │   ├── super/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── constructor.js
│   │   │   ├── import.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── super.js
│   │   │   └── test.js
│   │   ├── suppress/
│   │   │   ├── A.js
│   │   │   ├── B.js
│   │   │   ├── C.js
│   │   │   ├── D.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── lib.js
│   │   ├── suppress_incremental/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── suppress_traces/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── traces.js
│   │   ├── switch/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── more_switch.js
│   │   │   ├── switch.js
│   │   │   ├── switch_default_fallthrough.js
│   │   │   └── trailing_cases.js
│   │   ├── symbol/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── symbol.js
│   │   ├── symlink/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── bar.js
│   │   │   ├── foo.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── qux.js
│   │   ├── tagged-unions/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── classes.js
│   │   │   ├── interfaces-neg.js
│   │   │   ├── interfaces-pos.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── type-decls-neg.js
│   │   │   └── type-decls-pos.js
│   │   ├── taint/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── adder.js
│   │   │   ├── any_object.js
│   │   │   ├── call-object-property.js
│   │   │   ├── comparator.js
│   │   │   ├── function.js
│   │   │   ├── globals.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── lib.js
│   │   │   ├── taint1.js
│   │   │   ├── taint2.js
│   │   │   ├── taint3.js
│   │   │   ├── taint4.js
│   │   │   └── use-types.js
│   │   ├── template/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── template.js
│   │   ├── this/
│   │   │   ├── This.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── arrows.js
│   │   │   └── jsfmt.spec.js
│   │   ├── this_ctor/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── this_type/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── class_expr.js
│   │   │   ├── contra.js
│   │   │   ├── export.js
│   │   │   ├── generics.js
│   │   │   ├── import.js
│   │   │   ├── interface.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── lib/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── decl.js
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── lib_client.js
│   │   │   ├── self.js
│   │   │   ├── statics.js
│   │   │   └── test.js
│   │   ├── throw/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── traces/
│   │   │   ├── Traces.js
│   │   │   ├── Traces2.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   └── jsfmt.spec.js
│   │   ├── traits/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── test.js
│   │   │   └── test2.js
│   │   ├── try/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── abnormals.js
│   │   │   ├── init.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── return.js
│   │   │   └── test.js
│   │   ├── tuples/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── array.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── optional.js
│   │   │   ├── too-few.js
│   │   │   └── tuples.js
│   │   ├── type-at-pos/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── destructuring.js
│   │   │   ├── function_expressions.js
│   │   │   ├── generics.js
│   │   │   ├── import.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── object_special_cases.js
│   │   │   ├── optional.js
│   │   │   ├── predicates.js
│   │   │   ├── react.js
│   │   │   ├── templates.js
│   │   │   ├── test.js
│   │   │   └── trycatch.js
│   │   ├── type-destructors/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── non_maybe_type.js
│   │   │   ├── property_type.js
│   │   │   └── union.js
│   │   ├── type-printer/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── printBinaryExpression.js
│   │   │   └── types.js
│   │   ├── type_args_nonstrict/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── type_args_strict/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── type_only_vars/
│   │   │   ├── A.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── bad_shadowing.js
│   │   │   ├── good_shadowing.js
│   │   │   ├── import_type.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── type_alias.js
│   │   ├── type_param_defaults/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── classes.js
│   │   │   └── jsfmt.spec.js
│   │   ├── type_param_scope/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── class.js
│   │   │   ├── default_params.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── method_shadow.js
│   │   ├── type_param_variance/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── promise.js
│   │   ├── type_param_variance2/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── libs/
│   │   │   │   ├── Promise.js
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   └── jsfmt.spec.js
│   │   │   └── promise.js
│   │   ├── typeapp_perf/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── test1.js
│   │   │   └── test2.js
│   │   ├── typecast/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── typecast.js
│   │   ├── typeof/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── typeof.js
│   │   ├── unary/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── unary.js
│   │   │   └── update.js
│   │   ├── unchecked_haste_module_vs_lib/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── buffer.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── unchecked_node_module_vs_lib/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── undefined/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── issue-518.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── undefined.js
│   │   │   └── undefined2.js
│   │   ├── unicode/
│   │   │   ├── UnicodeUtils.js
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   └── jsfmt.spec.js
│   │   ├── union/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── blowup.js
│   │   │   ├── fields.js
│   │   │   ├── fields2.js
│   │   │   ├── issue-17.js
│   │   │   ├── issue-198.js
│   │   │   ├── issue-256.js
│   │   │   ├── issue-323-lib.js
│   │   │   ├── issue-323.js
│   │   │   ├── issue-324.js
│   │   │   ├── issue-325.js
│   │   │   ├── issue-326.js
│   │   │   ├── issue-582.js
│   │   │   ├── issue-963.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── test-lib.js
│   │   │   ├── test.js
│   │   │   ├── type-app.js
│   │   │   ├── union.js
│   │   │   └── yuge.js
│   │   ├── union-intersection/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── gen_big_disjoint_union.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── union_new/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── issue-1349.js
│   │   │   ├── issue-1371.js
│   │   │   ├── issue-1455-helper.js
│   │   │   ├── issue-1455.js
│   │   │   ├── issue-1462-i.js
│   │   │   ├── issue-1462-ii.js
│   │   │   ├── issue-1664.js
│   │   │   ├── issue-1759.js
│   │   │   ├── issue-2232.js
│   │   │   ├── issue-815.js
│   │   │   ├── issue-824-helper.js
│   │   │   ├── issue-824.js
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── lib/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   ├── test23_lib.js
│   │   │   │   ├── test25_lib.js
│   │   │   │   └── test32_lib.js
│   │   │   ├── test1.js
│   │   │   ├── test10.js
│   │   │   ├── test11.js
│   │   │   ├── test12.js
│   │   │   ├── test13.js
│   │   │   ├── test14.js
│   │   │   ├── test15.js
│   │   │   ├── test16.js
│   │   │   ├── test17.js
│   │   │   ├── test18.js
│   │   │   ├── test19.js
│   │   │   ├── test2.js
│   │   │   ├── test20.js
│   │   │   ├── test21.js
│   │   │   ├── test22.js
│   │   │   ├── test23.js
│   │   │   ├── test24.js
│   │   │   ├── test25.js
│   │   │   ├── test26.js
│   │   │   ├── test27.js
│   │   │   ├── test29.js
│   │   │   ├── test3.js
│   │   │   ├── test30-helper.js
│   │   │   ├── test30.js
│   │   │   ├── test31.js
│   │   │   ├── test32.js
│   │   │   ├── test4.js
│   │   │   ├── test5.js
│   │   │   ├── test6.js
│   │   │   ├── test7.js
│   │   │   ├── test8.js
│   │   │   └── test9.js
│   │   ├── unreachable/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── typecheck.js
│   │   │   └── unreachable.js
│   │   ├── unused_function_args/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── value/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── value.js
│   │   ├── vim_emacs_errors/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── weakmode/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── should_fail_without_weak.js
│   │   │   └── should_pass_with_weak.js
│   │   ├── while/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── abnormal.js
│   │   │   ├── jsfmt.spec.js
│   │   │   └── test.js
│   │   ├── window/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── window1.js
│   │   │   └── window2.js
│   │   └── x/
│   │       ├── XControllerURIBuilder.js
│   │       ├── __snapshots__/
│   │       │   └── jsfmt.spec.js.snap
│   │       └── jsfmt.spec.js
│   ├── flow_array_comments/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── test.js
│   ├── flow_array_union/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── test.js
│   ├── flow_class_field/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── override.js
│   ├── flow_comments/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── arrow.js
│   │   ├── jsfmt.spec.js
│   │   └── object_type_annotation.js
│   ├── flow_function_parentheses/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   ├── single.js
│   │   └── test.js
│   ├── flow_generic/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── break.js
│   │   ├── generic.js
│   │   ├── jsfmt.spec.js
│   │   ├── nullable.js
│   │   ├── trailing.js
│   │   ├── type.js
│   │   └── union.js
│   ├── flow_import_type_specifier/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── test.js
│   ├── flow_jsx/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── return_type.js
│   ├── flow_method/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── comment.js
│   │   ├── jsfmt.spec.js
│   │   └── method.js
│   ├── flow_object_comment/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── flow_object_comment.js
│   │   └── jsfmt.spec.js
│   ├── flow_object_order/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── order.js
│   ├── flow_return_arrow/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── issue-1249.js
│   │   ├── jsfmt.spec.js
│   │   └── parens.js
│   ├── flow_type_declarations/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── declare_type.js
│   │   ├── jsfmt.spec.js
│   │   └── long.js
│   ├── flow_type_spread/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── comments.js
│   │   └── jsfmt.spec.js
│   ├── flow_union/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── union.js
│   ├── flow_variance/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── variance.js
│   ├── for/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── comment.js
│   │   ├── for.js
│   │   ├── in.js
│   │   ├── jsfmt.spec.js
│   │   └── var.js
│   ├── function/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── function_expression.js
│   │   ├── jsfmt.spec.js
│   │   └── single_expand.js
│   ├── function_single_destructuring/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── test.js
│   ├── graphql_arguments/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── hello.graphql
│   │   └── jsfmt.spec.js
│   ├── graphql_bracket_spacing/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── bracket_spacing.graphql
│   │   └── jsfmt.spec.js
│   ├── graphql_comments/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── argument_comment.graphql
│   │   ├── fields.graphql
│   │   ├── jsfmt.spec.js
│   │   └── tokens.graphql
│   ├── graphql_definitions/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── fields.graphql
│   │   └── jsfmt.spec.js
│   ├── graphql_directive_decl/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── directive_decl.graphql
│   │   └── jsfmt.spec.js
│   ├── graphql_directives/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── directives.graphql
│   │   └── jsfmt.spec.js
│   ├── graphql_enum/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── enum.graphql
│   │   └── jsfmt.spec.js
│   ├── graphql_fields/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── fields.graphql
│   │   └── jsfmt.spec.js
│   ├── graphql_fragments/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── fragments.graphql
│   │   └── jsfmt.spec.js
│   ├── graphql_hello/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── hello.graphql
│   │   └── jsfmt.spec.js
│   ├── graphql_interface/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── interface.graphql
│   │   └── jsfmt.spec.js
│   ├── graphql_kitchen_sink/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── kitchen_sink.graphql
│   ├── graphql_lists/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── lists.graphql
│   ├── graphql_object_type_def/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── arguments.graphql
│   │   ├── directives.graphql
│   │   ├── extend.graphql
│   │   ├── implements.graphql
│   │   ├── input.graphql
│   │   ├── jsfmt.spec.js
│   │   └── object_type_def.graphql
│   ├── graphql_objects/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── objects.graphql
│   ├── graphql_scalar/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── scalar.graphql
│   ├── graphql_schema/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── schema.graphql
│   ├── graphql_trailing_comma/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── trailing.graphql
│   ├── graphql_union_types/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── union_types.graphql
│   ├── graphql_variable_definitions/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── variable_definitions.graphql
│   ├── html_basics/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── hello-world.html
│   │   ├── html-fragment.html
│   │   └── jsfmt.spec.js
│   ├── if/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── curly_braces.js
│   │   ├── else.js
│   │   ├── if_comments.js
│   │   ├── jsfmt.spec.js
│   │   └── trailing_comment.js
│   ├── ignore/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── ignore.js
│   │   └── jsfmt.spec.js
│   ├── import/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── brackets.js
│   │   ├── comments.js
│   │   ├── empty-import.js
│   │   ├── inline.js
│   │   ├── jsfmt.spec.js
│   │   ├── long-line.js
│   │   └── multiple_standalones.js
│   ├── import_meta/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── import_meta.js
│   │   └── jsfmt.spec.js
│   ├── import_then/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   ├── long.js
│   │   └── then.js
│   ├── interface/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── break.js
│   │   ├── jsfmt.spec.js
│   │   └── module.js
│   ├── intersection/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── intersection.js
│   │   └── jsfmt.spec.js
│   ├── json/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── boolean.json
│   │   ├── jsfmt.spec.js
│   │   ├── multi-line.json
│   │   ├── null.json
│   │   ├── number.json
│   │   ├── pass1.json
│   │   ├── single-line.json
│   │   ├── string.json
│   │   └── trailingComma.notjson
│   ├── jsx/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── conditional-expression.js
│   │   ├── expression.js
│   │   ├── flow_fix_me.js
│   │   ├── html_escape.js
│   │   ├── hug.js
│   │   ├── jsfmt.spec.js
│   │   ├── logical-expression.js
│   │   ├── object-property.js
│   │   ├── open-break.js
│   │   ├── parens.js
│   │   ├── quotes.js
│   │   ├── return-statement.js
│   │   └── spacing.js
│   ├── jsx-multiline-assign/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── test.js
│   ├── jsx-newlines/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   ├── test.js
│   │   └── windows.js
│   ├── jsx-significant-space/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── comments.js
│   │   ├── jsfmt.spec.js
│   │   └── test.js
│   ├── jsx-split-attrs/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── test.js
│   ├── jsx-stateless-arrow-fn/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── test.js
│   ├── jsx-text-wrap/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── test.js
│   ├── jsx-whitespace/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── test.js
│   ├── jsx_escape/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── escape.js
│   │   ├── jsfmt.spec.js
│   │   └── nbsp.js
│   ├── jsx_ignore/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── jsx_ignore.js
│   ├── jsx_last_line/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── last_line.js
│   ├── jsx_namespace/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── jsx_namespaced_name.js
│   ├── jsx_template/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── styled-components.js
│   ├── label/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── comment.js
│   │   ├── empty_label.js
│   │   └── jsfmt.spec.js
│   ├── last_argument_expansion/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── arrow.js
│   │   ├── break-parent.js
│   │   ├── break.js
│   │   ├── edge_case.js
│   │   ├── jsfmt.spec.js
│   │   ├── jsx.js
│   │   ├── object.js
│   │   └── overflow.js
│   ├── line/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── windows.js
│   ├── line_suffix_boundary/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── boundary.js
│   │   └── jsfmt.spec.js
│   ├── literal/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── number.js
│   ├── literal-numeric-separator/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── test.js
│   ├── member/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── expand.js
│   │   └── jsfmt.spec.js
│   ├── method-chain/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── bracket_0.js
│   │   ├── break-last-call.js
│   │   ├── break-last-member.js
│   │   ├── comment.js
│   │   ├── computed.js
│   │   ├── first_long.js
│   │   ├── inline_merge.js
│   │   ├── jsfmt.spec.js
│   │   ├── logical.js
│   │   ├── multiple-members.js
│   │   ├── square_0.js
│   │   ├── test.js
│   │   └── this.js
│   ├── multiparser_comments/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── comments.js
│   │   └── jsfmt.spec.js
│   ├── multiparser_html_css/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── html-with-css-style.html
│   │   └── jsfmt.spec.js
│   ├── multiparser_html_js/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── html-with-js-script.html
│   │   └── jsfmt.spec.js
│   ├── multiparser_html_ts/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── html-with-ts-script.html
│   │   └── jsfmt.spec.js
│   ├── multiparser_js_css/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── styled-components.js
│   ├── multiparser_js_graphql/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── graphql-tag.js
│   │   ├── jsfmt.spec.js
│   │   └── react-relay.js
│   ├── multiparser_text/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── text.js
│   ├── multiparser_vue/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   ├── template-bind.vue
│   │   ├── template-class.vue
│   │   └── vue-component.vue
│   ├── new_expression/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── call.js
│   │   ├── jsfmt.spec.js
│   │   └── new_expression.js
│   ├── newline/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── backslash_2028.js
│   │   ├── backslash_2029.js
│   │   └── jsfmt.spec.js
│   ├── no-semi/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── comments.js
│   │   ├── issue2006.js
│   │   ├── jsfmt.spec.js
│   │   └── no-semi.js
│   ├── no-semi-babylon-extensions/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── no-semi.js
│   ├── non-strict/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── argument-name-clash.js
│   │   ├── jsfmt.spec.js
│   │   ├── keywords.js
│   │   └── octal-number.js
│   ├── object-prop-break-in/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── comment.js
│   │   ├── jsfmt.spec.js
│   │   ├── long-value.js
│   │   └── test.js
│   ├── object_colon_bug/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── bug.js
│   │   └── jsfmt.spec.js
│   ├── object_property_comment/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── after-key.js
│   │   ├── comment.js
│   │   └── jsfmt.spec.js
│   ├── objects/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── expand.js
│   │   ├── expression.js
│   │   ├── jsfmt.spec.js
│   │   ├── method.js
│   │   ├── range.js
│   │   └── right_break.js
│   ├── optional-type-name/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── test.js
│   ├── performance/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   ├── nested-real.js
│   │   └── nested.js
│   ├── preserve_line/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── comments.js
│   │   └── jsfmt.spec.js
│   ├── quotes/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── functions.js
│   │   ├── jsfmt.spec.js
│   │   └── strings.js
│   ├── range/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── class-declaration.js
│   │   ├── different-levels.js
│   │   ├── function-declaration.js
│   │   ├── ignore-indentation.js
│   │   ├── jsfmt.spec.js
│   │   ├── module-export1.js
│   │   ├── module-export2.js
│   │   ├── module-export3.js
│   │   ├── module-import.js
│   │   ├── multiple-statements.js
│   │   ├── multiple-statements2.js
│   │   ├── nested.js
│   │   ├── nested2.js
│   │   ├── nested3.js
│   │   ├── range-end.js
│   │   ├── range-start.js
│   │   ├── range.js
│   │   ├── try-catch.js
│   │   └── whitespace.js
│   ├── range_css/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── issue2267.css
│   │   └── jsfmt.spec.js
│   ├── range_graphql/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── issue2296.graphql
│   │   └── jsfmt.spec.js
│   ├── range_json/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── identifier.json
│   │   ├── issue2297.json
│   │   └── jsfmt.spec.js
│   ├── regex/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── test.js
│   ├── require/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── require.js
│   ├── rest/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── trailing-commas.js
│   ├── return/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── binaryish.js
│   │   ├── comment.js
│   │   └── jsfmt.spec.js
│   ├── return-outside-function/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── return-outside-function.js
│   ├── sequence_break/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── break.js
│   │   └── jsfmt.spec.js
│   ├── shebang/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   ├── shebang-newline.js
│   │   └── shebang.js
│   ├── space-before-function-paren/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── eslint.js
│   │   └── jsfmt.spec.js
│   ├── strings/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   ├── strings.js
│   │   └── template-literals.js
│   ├── stylefmt/
│   │   ├── at-apply/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── at-apply.css
│   │   │   └── jsfmt.spec.js
│   │   ├── at-media/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── at-media.css
│   │   │   └── jsfmt.spec.js
│   │   ├── attr-selector/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── attr-selector.css
│   │   │   └── jsfmt.spec.js
│   │   ├── charset/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── charset.css
│   │   │   └── jsfmt.spec.js
│   │   ├── charset-2/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── charset-2.css
│   │   │   └── jsfmt.spec.js
│   │   ├── color-hex-lowercase/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── color-hex-lowercase.css
│   │   │   └── jsfmt.spec.js
│   │   ├── comment/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── comment.css
│   │   │   └── jsfmt.spec.js
│   │   ├── comment-in-rules/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── comment-in-rules.css
│   │   │   └── jsfmt.spec.js
│   │   ├── content/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── content.css
│   │   │   └── jsfmt.spec.js
│   │   ├── cssnext-example/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── cssnext-example.css
│   │   │   └── jsfmt.spec.js
│   │   ├── custom-media-queries/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── custom-media-queries.css
│   │   │   └── jsfmt.spec.js
│   │   ├── custom-properties/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── custom-properties.css
│   │   │   └── jsfmt.spec.js
│   │   ├── custom-selectors/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── custom-selectors.css
│   │   │   └── jsfmt.spec.js
│   │   ├── data-url/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── data-url.css
│   │   │   └── jsfmt.spec.js
│   │   ├── font-face/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── font-face.css
│   │   │   └── jsfmt.spec.js
│   │   ├── font-shorthand/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── font-shorthand.css
│   │   │   └── jsfmt.spec.js
│   │   ├── ie-hacks/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── ie-hacks.css
│   │   │   └── jsfmt.spec.js
│   │   ├── import/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── import.css
│   │   │   └── jsfmt.spec.js
│   │   ├── important/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── important.css
│   │   │   └── jsfmt.spec.js
│   │   ├── inline-comment/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── inline-comment.css
│   │   │   └── jsfmt.spec.js
│   │   ├── lowercase/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── lowercase.css
│   │   ├── media-indent/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── media-indent.css
│   │   ├── media-indent-with-import/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── media-indent-with-import.css
│   │   ├── media-queries-ranges/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── media-queries-ranges.css
│   │   ├── nested/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── nested.css
│   │   ├── nested-2/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── nested-2.css
│   │   ├── nested-atrule/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── nested-atrule.css
│   │   ├── nested-indention/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── nested-indention.css
│   │   ├── nested-indention-2/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── nested-indention-2.css
│   │   ├── nested-mixin/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── nested-mixin.css
│   │   ├── nested-mixin-2/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── nested-mixin-2.css
│   │   ├── non-nested-combinator/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── non-nested-combinator.css
│   │   ├── pseudo-element/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── pseudo-element.css
│   │   ├── readme/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── readme.css
│   │   ├── shorthand-with-sass-variables/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── shorthand-with-sass-variables.css
│   │   ├── values/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── values.css
│   │   ├── var-notation/
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── jsfmt.spec.js
│   │   │   └── var-notation.css
│   │   └── vendor-prefix/
│   │       ├── __snapshots__/
│   │       │   └── jsfmt.spec.js.snap
│   │       ├── jsfmt.spec.js
│   │       └── vendor-prefix.css
│   ├── switch/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── comments.js
│   │   ├── empty_lines.js
│   │   ├── empty_statement.js
│   │   ├── empty_switch.js
│   │   └── jsfmt.spec.js
│   ├── tabWith/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── class.js
│   │   ├── jsfmt.spec.js
│   │   └── nested-functions.spec.js
│   ├── template/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── arrow.js
│   │   ├── call.js
│   │   ├── comment.js
│   │   ├── faulty-locations.js
│   │   ├── graphql.js
│   │   ├── inline.js
│   │   ├── jsfmt.spec.js
│   │   └── parenthesis.js
│   ├── template_align/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── indent.js
│   │   └── jsfmt.spec.js
│   ├── template_literals/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   ├── styled-components-with-expressions.js
│   │   ├── styled-jsx-with-expressions.js
│   │   └── styled-jsx.js
│   ├── ternaries/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── binary.js
│   │   ├── indent.js
│   │   ├── jsfmt.spec.js
│   │   ├── nested.js
│   │   ├── parenthesis.js
│   │   └── test.js
│   ├── test_declarations/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── test_declarations.js
│   ├── trailing_comma/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── es5.js
│   │   ├── export.js
│   │   ├── function-calls.js
│   │   ├── import.js
│   │   ├── jsfmt.spec.js
│   │   ├── object.js
│   │   └── trailing_whitespace.js
│   ├── trailing_whitespace/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── trailing.js
│   ├── try/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── empty.js
│   │   ├── jsfmt.spec.js
│   │   └── try.js
│   ├── typescript/
│   │   ├── compiler/
│   │   │   ├── ClassDeclaration22.ts
│   │   │   ├── __snapshots__/
│   │   │   │   └── jsfmt.spec.js.snap
│   │   │   ├── anyIsAssignableToObject.ts
│   │   │   ├── badArrayIndex.ts
│   │   │   ├── castOfAwait.ts
│   │   │   ├── castParentheses.ts
│   │   │   ├── castTest.ts
│   │   │   ├── checkInfiniteExpansionTermination.ts
│   │   │   ├── commentInNamespaceDeclarationWithIdentifierPathName.ts
│   │   │   ├── commentsInterface.ts
│   │   │   ├── contextualSignatureInstantiation2.ts
│   │   │   ├── declareDottedModuleName.ts
│   │   │   ├── decrementAndIncrementOperators.ts
│   │   │   ├── downlevelLetConst1.ts
│   │   │   ├── errorOnInitializerInInterfaceProperty.ts
│   │   │   ├── es5ExportDefaultClassDeclaration4.ts
│   │   │   ├── functionOverloadsOnGenericArity1.ts
│   │   │   ├── globalIsContextualKeyword.ts
│   │   │   ├── indexSignatureWithInitializer.ts
│   │   │   ├── jsfmt.spec.js
│   │   │   ├── mappedTypeWithCombinedTypeMappers.ts
│   │   │   ├── modifiersOnInterfaceIndexSignature1.ts
│   │   │   └── privacyGloImport.ts
│   │   ├── conformance/
│   │   │   ├── ambient/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── ambientDeclarations.ts
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── classes/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── classDeclarations/
│   │   │   │   │   ├── __snapshots__/
│   │   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   │   ├── classAbstractKeyword/
│   │   │   │   │   │   ├── __snapshots__/
│   │   │   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   │   │   ├── classAbstractAccessor.ts
│   │   │   │   │   │   ├── classAbstractAsIdentifier.ts
│   │   │   │   │   │   ├── classAbstractAssignabilityConstructorFunction.ts
│   │   │   │   │   │   ├── classAbstractClinterfaceAssignability.ts
│   │   │   │   │   │   ├── classAbstractConstructorAssignability.ts
│   │   │   │   │   │   ├── classAbstractCrashedOnce.ts
│   │   │   │   │   │   ├── classAbstractExtends.ts
│   │   │   │   │   │   ├── classAbstractFactoryFunction.ts
│   │   │   │   │   │   ├── classAbstractGeneric.ts
│   │   │   │   │   │   ├── classAbstractImportInstantiation.ts
│   │   │   │   │   │   ├── classAbstractInAModule.ts
│   │   │   │   │   │   ├── classAbstractInheritance.ts
│   │   │   │   │   │   ├── classAbstractInstantiations1.ts
│   │   │   │   │   │   ├── classAbstractInstantiations2.ts
│   │   │   │   │   │   ├── classAbstractMethodInNonAbstractClass.ts
│   │   │   │   │   │   ├── classAbstractMethodWithImplementation.ts
│   │   │   │   │   │   ├── classAbstractMixedWithModifiers.ts
│   │   │   │   │   │   ├── classAbstractOverloads.ts
│   │   │   │   │   │   ├── classAbstractOverrideWithAbstract.ts
│   │   │   │   │   │   ├── classAbstractProperties.ts
│   │   │   │   │   │   ├── classAbstractSingleLineDecl.ts
│   │   │   │   │   │   ├── classAbstractSuperCalls.ts
│   │   │   │   │   │   ├── classAbstractUsingAbstractMethod1.ts
│   │   │   │   │   │   ├── classAbstractUsingAbstractMethods2.ts
│   │   │   │   │   │   ├── classAbstractWithInterface.ts
│   │   │   │   │   │   └── jsfmt.spec.js
│   │   │   │   │   ├── classHeritageSpecification/
│   │   │   │   │   │   ├── __snapshots__/
│   │   │   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   │   │   ├── classAppearsToHaveMembersOfObject.ts
│   │   │   │   │   │   ├── classExtendingClass.ts
│   │   │   │   │   │   ├── classExtendsItselfIndirectly.ts
│   │   │   │   │   │   ├── classIsSubtypeOfBaseType.ts
│   │   │   │   │   │   └── jsfmt.spec.js
│   │   │   │   │   ├── classInsideBlock.ts
│   │   │   │   │   └── jsfmt.spec.js
│   │   │   │   ├── classExpression.ts
│   │   │   │   ├── constructorDeclarations/
│   │   │   │   │   └── constructorParameters/
│   │   │   │   │       ├── __snapshots__/
│   │   │   │   │       │   └── jsfmt.spec.js.snap
│   │   │   │   │       ├── constructorDefaultValuesReferencingThis.ts
│   │   │   │   │       ├── constructorImplementationWithDefaultValues.ts
│   │   │   │   │       ├── constructorImplementationWithDefaultValues2.ts
│   │   │   │   │       ├── constructorOverloadsWithDefaultValues.ts
│   │   │   │   │       ├── constructorOverloadsWithOptionalParameters.ts
│   │   │   │   │       ├── constructorParameterProperties.ts
│   │   │   │   │       ├── constructorParameterProperties2.ts
│   │   │   │   │       ├── declarationEmitReadonly.ts
│   │   │   │   │       ├── jsfmt.spec.js
│   │   │   │   │       ├── readonlyConstructorAssignment.ts
│   │   │   │   │       ├── readonlyInConstructorParameters.ts
│   │   │   │   │       └── readonlyReadonly.ts
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   ├── mixinAccessModifiers.ts
│   │   │   │   ├── mixinClassesAnnotated.ts
│   │   │   │   ├── mixinClassesAnonymous.ts
│   │   │   │   ├── mixinClassesMembers.ts
│   │   │   │   └── nestedClassDeclaration.ts
│   │   │   ├── comments/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── comments.ts
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── declarationEmit/
│   │   │   │   └── typePredicates/
│   │   │   │       ├── __snapshots__/
│   │   │   │       │   └── jsfmt.spec.js.snap
│   │   │   │       ├── declarationEmitThisPredicatesWithPrivateName01.ts
│   │   │   │       └── jsfmt.spec.js
│   │   │   ├── es6/
│   │   │   │   ├── Symbols/
│   │   │   │   │   ├── __snapshots__/
│   │   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   │   ├── jsfmt.spec.js
│   │   │   │   │   └── symbolProperty15.ts
│   │   │   │   └── templates/
│   │   │   │       ├── __snapshots__/
│   │   │   │       │   └── jsfmt.spec.js.snap
│   │   │   │       ├── jsfmt.spec.js
│   │   │   │       └── templateStringWithEmbeddedTypeAssertionOnAdditionES6.ts
│   │   │   ├── expressions/
│   │   │   │   ├── asOperator/
│   │   │   │   │   ├── __snapshots__/
│   │   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   │   ├── asOperatorContextualType.ts
│   │   │   │   │   └── jsfmt.spec.js
│   │   │   │   └── functionCalls/
│   │   │   │       ├── __snapshots__/
│   │   │   │       │   └── jsfmt.spec.js.snap
│   │   │   │       ├── callWithSpreadES6.ts
│   │   │   │       └── jsfmt.spec.js
│   │   │   ├── interfaces/
│   │   │   │   └── interfaceDeclarations/
│   │   │   │       ├── __snapshots__/
│   │   │   │       │   └── jsfmt.spec.js.snap
│   │   │   │       ├── interfaceWithMultipleBaseTypes2.ts
│   │   │   │       └── jsfmt.spec.js
│   │   │   ├── internalModules/
│   │   │   │   └── importDeclarations/
│   │   │   │       ├── __snapshots__/
│   │   │   │       │   └── jsfmt.spec.js.snap
│   │   │   │       ├── circularImportAlias.ts
│   │   │   │       ├── exportImportAlias.ts
│   │   │   │       ├── exportInterface.ts
│   │   │   │       ├── importAliasIdentifiers.ts
│   │   │   │       ├── invalidImportAliasIdentifiers.ts
│   │   │   │       ├── jsfmt.spec.js
│   │   │   │       └── shadowedInternalModule.ts
│   │   │   ├── parser/
│   │   │   │   └── ecmascript5/
│   │   │   │       └── Statements/
│   │   │   │           ├── __snapshots__/
│   │   │   │           │   └── jsfmt.spec.js.snap
│   │   │   │           ├── jsfmt.spec.js
│   │   │   │           ├── parserES5ForOfStatement2.ts
│   │   │   │           ├── parserES5ForOfStatement21.ts
│   │   │   │           └── parserForInStatement2.ts
│   │   │   └── types/
│   │   │       ├── abstractKeyword/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── abstractKeyword.ts
│   │   │       │   └── jsfmt.spec.js
│   │   │       ├── any/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── anyAsConstructor.ts
│   │   │       │   ├── anyAsFunctionCall.ts
│   │   │       │   ├── anyAsGenericFunctionCall.ts
│   │   │       │   ├── anyPropertyAccess.ts
│   │   │       │   └── jsfmt.spec.js
│   │   │       ├── constKeyword/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── constKeyword.ts
│   │   │       │   └── jsfmt.spec.js
│   │   │       ├── constructorType/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── cunstructorType.ts
│   │   │       │   └── jsfmt.spec.js
│   │   │       ├── decorator/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── decorator.ts
│   │   │       │   └── jsfmt.spec.js
│   │   │       ├── enumDeclaration/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── enumDeclaration.ts
│   │   │       │   └── jsfmt.spec.js
│   │   │       ├── firstTypeNode/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── firstTypeNode.ts
│   │   │       │   └── jsfmt.spec.js
│   │   │       ├── functions/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── functionImplementationErrors.ts
│   │   │       │   ├── functionImplementations.ts
│   │   │       │   ├── functionOverloadCompatibilityWithVoid01.ts
│   │   │       │   ├── functionOverloadCompatibilityWithVoid02.ts
│   │   │       │   ├── functionOverloadCompatibilityWithVoid03.ts
│   │   │       │   ├── functionOverloadErrorsSyntax.ts
│   │   │       │   ├── functionTypeTypeParameters.ts
│   │   │       │   ├── jsfmt.spec.js
│   │   │       │   └── parameterInitializersForwardReferencing.ts
│   │   │       ├── importEqualsDeclaration/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── importEqualsDeclaration.ts
│   │   │       │   └── jsfmt.spec.js
│   │   │       ├── indexedAccesType/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── indexedAccesType.ts
│   │   │       │   └── jsfmt.spec.js
│   │   │       ├── interfaceDeclaration/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── interfaceDeclaration.ts
│   │   │       │   └── jsfmt.spec.js
│   │   │       ├── intersectionType/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── intersectionType.ts
│   │   │       │   └── jsfmt.spec.js
│   │   │       ├── lastTypeNode/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── jsfmt.spec.js
│   │   │       │   └── lastTypeNode.ts
│   │   │       ├── mappedType/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── jsfmt.spec.js
│   │   │       │   └── mappedType.ts
│   │   │       ├── methodSignature/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── jsfmt.spec.js
│   │   │       │   └── methodSignature.ts
│   │   │       ├── moduleDeclaration/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── jsfmt.spec.js
│   │   │       │   └── moduleDeclaration.ts
│   │   │       ├── namespaceExportDeclaration/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── exportAsNamespace.d.ts
│   │   │       │   └── jsfmt.spec.js
│   │   │       ├── never/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── jsfmt.spec.js
│   │   │       │   └── never.ts
│   │   │       ├── nonNullExpression/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── jsfmt.spec.js
│   │   │       │   └── nonNullExpression.ts
│   │   │       ├── parameterProperty/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── jsfmt.spec.js
│   │   │       │   └── parameterProperty.ts
│   │   │       ├── symbol/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── jsfmt.spec.js
│   │   │       │   └── symbol.ts
│   │   │       ├── thisType/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── jsfmt.spec.js
│   │   │       │   └── thisType.ts
│   │   │       ├── tuple/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── contextualTypeWithTuple.ts
│   │   │       │   ├── emptyTuples/
│   │   │       │   │   ├── __snapshots__/
│   │   │       │   │   │   └── jsfmt.spec.js.snap
│   │   │       │   │   ├── emptyTuplesTypeAssertion02.ts
│   │   │       │   │   └── jsfmt.spec.js
│   │   │       │   ├── indexerWithTuple.ts
│   │   │       │   ├── jsfmt.spec.js
│   │   │       │   ├── tupleElementTypes1.ts
│   │   │       │   ├── tupleElementTypes2.ts
│   │   │       │   ├── tupleElementTypes3.ts
│   │   │       │   ├── tupleElementTypes4.ts
│   │   │       │   ├── typeInferenceWithTupleType.ts
│   │   │       │   ├── wideningTuples1.ts
│   │   │       │   ├── wideningTuples2.ts
│   │   │       │   ├── wideningTuples3.ts
│   │   │       │   ├── wideningTuples4.ts
│   │   │       │   ├── wideningTuples5.ts
│   │   │       │   ├── wideningTuples6.ts
│   │   │       │   └── wideningTuples7.ts
│   │   │       ├── typeOperator/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── jsfmt.spec.js
│   │   │       │   └── typeOperator.ts
│   │   │       ├── typeParameter/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── jsfmt.spec.js
│   │   │       │   └── typeParameter.ts
│   │   │       ├── typeParameters/
│   │   │       │   └── typeParameterLists/
│   │   │       │       ├── __snapshots__/
│   │   │       │       │   └── jsfmt.spec.js.snap
│   │   │       │       ├── innerTypeParameterShadowingOuterOne.ts
│   │   │       │       ├── innerTypeParameterShadowingOuterOne2.ts
│   │   │       │       ├── jsfmt.spec.js
│   │   │       │       ├── staticMembersUsingClassTypeParameter.ts
│   │   │       │       └── typeParametersAvailableInNestedScope2.ts
│   │   │       ├── typeReference/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── jsfmt.spec.js
│   │   │       │   └── typeReference.ts
│   │   │       ├── undefined/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── jsfmt.spec.js
│   │   │       │   └── undefined.ts
│   │   │       ├── union/
│   │   │       │   ├── __snapshots__/
│   │   │       │   │   └── jsfmt.spec.js.snap
│   │   │       │   ├── jsfmt.spec.js
│   │   │       │   ├── unionTypeCallSignatures.ts
│   │   │       │   ├── unionTypeCallSignatures3.ts
│   │   │       │   ├── unionTypeCallSignatures4.ts
│   │   │       │   ├── unionTypeConstructSignatures.ts
│   │   │       │   ├── unionTypeEquivalence.ts
│   │   │       │   ├── unionTypeFromArrayLiteral.ts
│   │   │       │   ├── unionTypeIndexSignature.ts
│   │   │       │   └── unionTypePropertyAccessibility.ts
│   │   │       └── variableDeclarator/
│   │   │           ├── __snapshots__/
│   │   │           │   └── jsfmt.spec.js.snap
│   │   │           ├── jsfmt.spec.js
│   │   │           └── variableDeclarator.ts
│   │   ├── custom/
│   │   │   ├── abstract/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── abstractNewlineHandling.ts
│   │   │   │   ├── abstractProperties.ts
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── call/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── callSignature.ts
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── computedProperties/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   ├── string.ts
│   │   │   │   └── symbol.ts
│   │   │   ├── declare/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── declareModifier.d.ts
│   │   │   │   └── jsfmt.spec.js
│   │   │   ├── modifiers/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   ├── question.ts
│   │   │   │   └── readonly.ts
│   │   │   ├── module/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── global.ts
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   ├── moduleNamespace.ts
│   │   │   │   └── nestedNamespace.ts
│   │   │   ├── new/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── newKeyword.ts
│   │   │   ├── stability/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── jsfmt.spec.js.snap
│   │   │   │   ├── jsfmt.spec.js
│   │   │   │   └── moduleBlock.ts
│   │   │   └── typeParameters/
│   │   │       ├── __snapshots__/
│   │   │       │   └── jsfmt.spec.js.snap
│   │   │       ├── callAndConstructSignatureLong.ts
│   │   │       ├── functionTypeLong.ts
│   │   │       ├── interfaceParamsLong.ts
│   │   │       ├── jsfmt.spec.js
│   │   │       └── typeParametersLong.ts
│   │   └── webhost/
│   │       ├── __snapshots__/
│   │       │   └── jsfmt.spec.js.snap
│   │       ├── jsfmt.spec.js
│   │       └── webtsc.ts
│   ├── typescript_ambient/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── ambient.ts
│   │   └── jsfmt.spec.js
│   ├── typescript_array/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── comment.js
│   │   └── jsfmt.spec.js
│   ├── typescript_as/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── as.js
│   │   └── jsfmt.spec.js
│   ├── typescript_cast/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── hug-args.ts
│   │   ├── jsfmt.spec.js
│   │   └── parenthesis.ts
│   ├── typescript_class/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── constructor.ts
│   │   ├── dunder.ts
│   │   ├── generics.ts
│   │   ├── jsfmt.spec.js
│   │   ├── methods.ts
│   │   └── optional.ts
│   ├── typescript_comments/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── abstract_class.ts
│   │   ├── jsfmt.spec.js
│   │   ├── jsx.ts
│   │   ├── location.ts
│   │   ├── type-parameters.ts
│   │   └── types.ts
│   ├── typescript_decorators/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── decorators.js
│   │   ├── inline-decorators.ts
│   │   └── jsfmt.spec.js
│   ├── typescript_destructuring/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── destructuring.ts
│   │   └── jsfmt.spec.js
│   ├── typescript_enum/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── enum.ts
│   │   └── jsfmt.spec.js
│   ├── typescript_export/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── comment.js
│   │   ├── export-class.js
│   │   ├── export.ts
│   │   └── jsfmt.spec.js
│   ├── typescript_import_require/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── import_require.js
│   │   └── jsfmt.spec.js
│   ├── typescript_index_signature/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── index-signature.ts
│   │   └── jsfmt.spec.js
│   ├── typescript_interface/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── abstract.ts
│   │   ├── comments.js
│   │   ├── jsfmt.spec.js
│   │   ├── long-extends.ts
│   │   └── separator.ts
│   ├── typescript_keyof/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── keyof.ts
│   ├── typescript_keywords/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── keywords.js
│   ├── typescript_method/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   ├── semi.js
│   │   └── type_literal_optional_method.ts
│   ├── typescript_module/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── empty.js
│   │   ├── global.js
│   │   ├── jsfmt.spec.js
│   │   └── namespace_function.ts
│   ├── typescript_new/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── new-signature.ts
│   ├── typescript_non_null/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── parens.ts
│   ├── typescript_nosemi/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── index-signature.ts
│   │   ├── interface.ts
│   │   ├── jsfmt.spec.js
│   │   └── type.js
│   ├── typescript_readonly/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── readonly.ts
│   ├── typescript_rest/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── rest.ts
│   ├── typescript_semi/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── no-semi.ts
│   ├── typescript_trailing_comma/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── trailing.ts
│   ├── typescript_tsx/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   ├── keyword.tsx
│   │   ├── not-react.ts
│   │   ├── react.tsx
│   │   └── this.tsx
│   ├── typescript_tuple/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   ├── trailing-comma.ts
│   │   └── tuple.ts
│   ├── typescript_typeparams/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── long-function-arg.ts
│   ├── typescript_union/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── inlining.ts
│   │   ├── jsfmt.spec.js
│   │   └── union-parens.ts
│   ├── unary/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   ├── object.js
│   │   └── series.js
│   ├── unary_expression/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── urnary_expression.js
│   ├── unicode/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── keys.js
│   ├── union_intersection/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── test.js
│   ├── update_expression/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   └── update_expression.js
│   ├── variable_declarator/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   ├── multiple.js
│   │   └── string.js
│   ├── while/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── indent.js
│   │   └── jsfmt.spec.js
│   ├── windows/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── jsfmt.spec.js
│   │   ├── line-ending.js
│   │   └── template.js
│   ├── with/
│   │   ├── __snapshots__/
│   │   │   └── jsfmt.spec.js.snap
│   │   ├── indent.js
│   │   └── jsfmt.spec.js
│   └── yield/
│       ├── __snapshots__/
│       │   └── jsfmt.spec.js.snap
│       ├── conditional.js
│       └── jsfmt.spec.js
├── tests_config/
│   ├── .eslintrc.js
│   ├── raw-serializer.js
│   └── run_spec.js
├── tests_integration/
│   ├── .eslintrc.js
│   ├── __tests__/
│   │   ├── __snapshots__/
│   │   │   ├── config-resolution.js.snap
│   │   │   ├── ignore-path.js.snap
│   │   │   ├── multiple-patterns.js.snap
│   │   │   ├── parser-api.js.snap
│   │   │   ├── with-node-modules.js.snap
│   │   │   ├── with-parser-inference.js.snap
│   │   │   └── with-shebang.js.snap
│   │   ├── config-resolution.js
│   │   ├── debug-check.js
│   │   ├── debug-print-doc.js
│   │   ├── ignore-path.js
│   │   ├── list-different.js
│   │   ├── multiple-patterns.js
│   │   ├── parser-api.js
│   │   ├── syntax-error.js
│   │   ├── with-node-modules.js
│   │   ├── with-parser-inference.js
│   │   └── with-shebang.js
│   ├── cli/
│   │   ├── config/
│   │   │   ├── .prettierrc
│   │   │   ├── jest/
│   │   │   │   ├── .prettierrc
│   │   │   │   ├── Component.js
│   │   │   │   ├── Component.test.js
│   │   │   │   └── __best-tests__/
│   │   │   │       └── file.js
│   │   │   ├── js/
│   │   │   │   ├── file.js
│   │   │   │   └── prettier.config.js
│   │   │   ├── no-config/
│   │   │   │   ├── file.js
│   │   │   │   └── file.ts
│   │   │   ├── package/
│   │   │   │   ├── file.js
│   │   │   │   ├── file.ts
│   │   │   │   └── package.json
│   │   │   └── rc-json/
│   │   │       ├── .prettierrc
│   │   │       └── file.js
│   │   ├── ignore-path/
│   │   │   ├── .gitignore
│   │   │   ├── .prettierignore
│   │   │   └── regular-module.js
│   │   ├── multiple-patterns/
│   │   │   ├── directory/
│   │   │   │   ├── file.js
│   │   │   │   └── nested-directory/
│   │   │   │       └── nested-directory-file.js
│   │   │   ├── other-directory/
│   │   │   │   ├── file.js
│   │   │   │   └── nested-directory/
│   │   │   │       └── nested-directory-file.js
│   │   │   ├── other-regular-modules.js
│   │   │   └── regular-module.js
│   │   ├── with-node-modules/
│   │   │   ├── not_node_modules/
│   │   │   │   └── file.js
│   │   │   └── regular-module.js
│   │   ├── with-parser-inference/
│   │   │   ├── javascript.js
│   │   │   └── stylesheet.css
│   │   └── with-shebang/
│   │       └── issue1890.js
│   ├── custom-parsers/
│   │   ├── custom-rename-input.js
│   │   └── custom-rename-parser.js
│   └── runPrettier.js
└── website/
    ├── .eslintrc.js
    ├── README.md
    ├── core/
    │   └── Footer.js
    ├── deploy.sh
    ├── editors.json
    ├── languages.json
    ├── package.json
    ├── pages/
    │   ├── en/
    │   │   ├── help/
    │   │   │   └── index.js
    │   │   ├── index.js
    │   │   └── users/
    │   │       └── index.js
    │   └── playground/
    │       └── index.html
    ├── siteConfig.js
    ├── static/
    │   ├── CNAME
    │   ├── install-service-worker.js
    │   ├── lib/
    │   │   ├── index.js
    │   │   ├── parser-babylon.js
    │   │   ├── parser-flow.js
    │   │   ├── parser-graphql.js
    │   │   ├── parser-json.js
    │   │   ├── parser-parse5.js
    │   │   ├── parser-postcss.js
    │   │   ├── parser-typescript.js
    │   │   ├── prettier-version.js
    │   │   └── sw-toolbox.js
    │   ├── manifest.json
    │   ├── playground.js
    │   ├── redirect.js
    │   ├── service-worker.js
    │   └── worker.js
    └── users.json
Condensed preview — 3387 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (8,639K chars).
[
  {
    "path": ".codecov.yml",
    "chars": 129,
    "preview": "comment: off\n\ncoverage:\n  status:\n    patch:\n      default:\n        target: 80%\n    project:\n      default:\n        targ"
  },
  {
    "path": ".eslintignore",
    "chars": 121,
    "preview": "!/*.js\n/tests/**/*.js\n!/tests/**/jsfmt.spec.js\n!/**/.eslintrc.js\n/test.js\n/dist/\n**/node_modules/**\n/website/static/lib/"
  },
  {
    "path": ".eslintrc.js",
    "chars": 874,
    "preview": "\"use strict\";\n\nmodule.exports = {\n  env: {\n    es6: true,\n    node: true\n  },\n  extends: [\"eslint:recommended\", \"plugin:"
  },
  {
    "path": ".flowconfig",
    "chars": 51,
    "preview": "[ignore]\n.*/tests/.*\n.*/node_modules/.*\n.*/dist/.*\n"
  },
  {
    "path": ".gitignore",
    "chars": 171,
    "preview": "/node_modules\nnpm-debug.log\n/bin/prettier-with-tabs.js\n/bin/prettier-spaces.js\n/errors\n/test.js\n/test.ts\n/test.css\n/.vsc"
  },
  {
    "path": ".ignore",
    "chars": 111,
    "preview": "docs/index.js\ndocs/parser-babylon.js\ndocs/parser-flow.js\ndocs/parser-postcss.js\ndocs/parser-typescript.js\ndist\n"
  },
  {
    "path": ".npmignore",
    "chars": 29,
    "preview": "yarn.lock\ntests\ntests_config\n"
  },
  {
    "path": ".pre-commit-hooks.yaml",
    "chars": 107,
    "preview": "-   id: prettier\n    name: prettier\n    entry: prettier --write\n    language: node\n    types: [javascript]\n"
  },
  {
    "path": ".travis.yml",
    "chars": 599,
    "preview": "---\nlanguage: node_js\nnode_js:\n  - 4\n  - stable\ncache:\n  yarn: true\n  directories:\n  - node_modules\nenv:\n  - NODE_ENV=de"
  },
  {
    "path": ".yarnrc",
    "chars": 15,
    "preview": "save-prefix \"\"\n"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 27723,
    "preview": "# 1.5.3\n\n[link](https://github.com/jlongster/prettier/compare/1.5.2...1.5.3)\n\n* Force trailingComma option to \"none\" whe"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 1636,
    "preview": "# Contributing to Prettier\n\nTo get up and running, install the dependencies and run the tests:\n\n```\nyarn\nyarn lint\nyarn "
  },
  {
    "path": "LICENSE",
    "chars": 1049,
    "preview": "Copyright 2017 James Long\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software"
  },
  {
    "path": "README.md",
    "chars": 39183,
    "preview": "# Prettier Miscellaneous\n\n[![Gitter](https://badges.gitter.im/gitterHQ/gitter.svg)](https://gitter.im/jlongster/prettier"
  },
  {
    "path": "Rationale.md",
    "chars": 3674,
    "preview": "# Rationale\n\nPrettier is an opinionated JavaScript formatter. This document gives a rationale behind those opinions.\n\n\n#"
  },
  {
    "path": "bin/prettier.js",
    "chars": 17429,
    "preview": "#!/usr/bin/env node\n\n\"use strict\";\n\nconst chalk = require(\"chalk\");\nconst dashify = require(\"dashify\");\nconst fs = requi"
  },
  {
    "path": "commands.md",
    "chars": 4875,
    "preview": "The core of the algorithm is implemented in `doc-{printer,builders,utils,debug}.js`. The printer should\nuse the basic fo"
  },
  {
    "path": "docs/CNAME",
    "chars": 11,
    "preview": "prettier.io"
  },
  {
    "path": "docs/en/editors.md",
    "chars": 1536,
    "preview": "---\nid: editors\ntitle: Editor Integration\nlayout: docs\ncategory: Prettier\npermalink: docs/en/editors.html\nprevious: opti"
  },
  {
    "path": "docs/en/options.md",
    "chars": 5021,
    "preview": "---\nid: options\ntitle: Options\nlayout: docs\ncategory: Prettier\npermalink: docs/en/options.html\nprevious: usage\nnext: edi"
  },
  {
    "path": "docs/en/usage.md",
    "chars": 6203,
    "preview": "---\nid: usage\ntitle: Usage\nlayout: docs\ncategory: Prettier\npermalink: docs/en/usage.html\nprevious: why-prettier\nnext: op"
  },
  {
    "path": "docs/en/why-prettier.md",
    "chars": 5418,
    "preview": "---\nid: why-prettier\ntitle: Why Prettier?\nlayout: docs\ncategory: Prettier\npermalink: docs/en/why-prettier.html\nnext: usa"
  },
  {
    "path": "editors/atom.md",
    "chars": 46,
    "preview": "See https://github.com/prettier/prettier-atom\n"
  },
  {
    "path": "editors/emacs/README.md",
    "chars": 135,
    "preview": "This package has been moved to https://github.com/prettier/prettier-emacs.\n\nPlease, update your configuration to use the"
  },
  {
    "path": "editors/vim/README.md",
    "chars": 8025,
    "preview": "# Vim Prettier\n\n<details>\n<summary><strong>Table of Contents</strong></summary>\n\n- [Vim and Prettier integration](#vim-a"
  },
  {
    "path": "editors/webstorm/README.md",
    "chars": 2158,
    "preview": "## Configure External Tool\n\nhttps://blog.jetbrains.com/webstorm/2016/08/using-external-tools/\n\nGo to *File | Settings | "
  },
  {
    "path": "index.js",
    "chars": 10775,
    "preview": "\"use strict\";\n\nconst stripBom = require(\"strip-bom\");\nconst comments = require(\"./src/comments\");\nconst version = requir"
  },
  {
    "path": "jest.config.js",
    "chars": 963,
    "preview": "\"use strict\";\n\nconst ENABLE_COVERAGE = !!process.env.CI;\n\nmodule.exports = {\n  setupFiles: [\"<rootDir>/tests_config/run_"
  },
  {
    "path": "package.json",
    "chars": 2735,
    "preview": "{\n  \"name\": \"prettier-miscellaneous\",\n  \"version\": \"1.5.3\",\n  \"description\": \"Prettier Miscellaneous is a fork of Pretti"
  },
  {
    "path": "scripts/build/.eslintrc.js",
    "chars": 163,
    "preview": "\"use strict\";\n\nmodule.exports = {\n  overrides: [\n    {\n      files: \"rollup.*.config.js\",\n      parserOptions: {\n       "
  },
  {
    "path": "scripts/build/build.js",
    "chars": 3119,
    "preview": "#!/usr/bin/env node\n\n\"use strict\";\n\nconst path = require(\"path\");\nconst shell = require(\"shelljs\");\nconst pkg = require("
  },
  {
    "path": "scripts/build/rollup.base.config.js",
    "chars": 287,
    "preview": "export default {\n  onwarn: function(warning) {\n    if (\n      [\n        \"EVAL\",\n        \"MISSING_GLOBAL_NAME\",\n        \""
  },
  {
    "path": "scripts/build/rollup.bin.config.js",
    "chars": 604,
    "preview": "import baseConfig from \"./rollup.base.config.js\";\nimport resolve from \"rollup-plugin-node-resolve\";\nimport commonjs from"
  },
  {
    "path": "scripts/build/rollup.docs.config.js",
    "chars": 688,
    "preview": "import baseConfig from \"./rollup.base.config.js\";\nimport resolve from \"rollup-plugin-node-resolve\";\nimport commonjs from"
  },
  {
    "path": "scripts/build/rollup.index.config.js",
    "chars": 388,
    "preview": "import baseConfig from \"./rollup.base.config.js\";\nimport resolve from \"rollup-plugin-node-resolve\";\nimport commonjs from"
  },
  {
    "path": "scripts/build/rollup.parser.config.js",
    "chars": 1043,
    "preview": "import baseConfig from \"./rollup.base.config.js\";\nimport resolve from \"rollup-plugin-node-resolve\";\nimport commonjs from"
  },
  {
    "path": "scripts/run-external-typescript-tests.js",
    "chars": 3290,
    "preview": "\"use strict\";\n\n/**\n * There's an issue with this script's assumption that each run of prettier\n * will result in one out"
  },
  {
    "path": "scripts/sync-flow-tests.js",
    "chars": 3292,
    "preview": "\"use strict\";\n\nconst fs = require(\"fs\");\nconst flowParser = require(\"flow-parser\");\nconst globby = require(\"globby\");\nco"
  },
  {
    "path": "src/clean-ast.js",
    "chars": 4372,
    "preview": "\"use strict\";\n\nfunction cleanAST(ast) {\n  return JSON.stringify(massageAST(ast), null, 2);\n}\n\nfunction massageAST(ast) {"
  },
  {
    "path": "src/comments.js",
    "chars": 28395,
    "preview": "\"use strict\";\n\nconst assert = require(\"assert\");\nconst docBuilders = require(\"./doc-builders\");\nconst concat = docBuilde"
  },
  {
    "path": "src/deprecated.js",
    "chars": 300,
    "preview": "\"use strict\";\n\nconst deprecated = {\n  useFlowParser: config =>\n    `  The ${'\"useFlowParser\"'} option is deprecated. Use"
  },
  {
    "path": "src/doc-builders.js",
    "chars": 2907,
    "preview": "\"use strict\";\n\nfunction assertDoc(val) {\n  if (\n    !(typeof val === \"string\" || (val != null && typeof val.type === \"st"
  },
  {
    "path": "src/doc-debug.js",
    "chars": 2741,
    "preview": "\"use strict\";\n\nfunction flattenDoc(doc) {\n  if (doc.type === \"concat\") {\n    const res = [];\n\n    for (let i = 0; i < do"
  },
  {
    "path": "src/doc-printer.js",
    "chars": 12322,
    "preview": "\"use strict\";\n\nconst docBuilders = require(\"./doc-builders\");\nconst concat = docBuilders.concat;\nconst fill = docBuilder"
  },
  {
    "path": "src/doc-utils.js",
    "chars": 4430,
    "preview": "\"use strict\";\n\nfunction traverseDoc(doc, onEnter, onExit, shouldTraverseConditionalGroups) {\n  function traverseDocRec(d"
  },
  {
    "path": "src/fast-path.js",
    "chars": 18928,
    "preview": "\"use strict\";\n\nconst assert = require(\"assert\");\nconst util = require(\"./util\");\nconst startsWithNoLookaheadToken = util"
  },
  {
    "path": "src/multiparser.js",
    "chars": 9098,
    "preview": "\"use strict\";\n\nconst util = require(\"./util\");\nconst docUtils = require(\"./doc-utils\");\nconst docBuilders = require(\"./d"
  },
  {
    "path": "src/options.js",
    "chars": 3930,
    "preview": "\"use strict\";\n\nconst validate = require(\"jest-validate\").validate;\nconst deprecatedConfig = require(\"./deprecated\");\ncon"
  },
  {
    "path": "src/parser-babylon.js",
    "chars": 1303,
    "preview": "\"use strict\";\n\nconst createError = require(\"./parser-create-error\");\n\nfunction parse(text) {\n  // Inline the require to "
  },
  {
    "path": "src/parser-create-error.js",
    "chars": 288,
    "preview": "\"use strict\";\n\nfunction createError(message, loc) {\n  // Construct an error similar to the ones thrown by Babylon.\n  con"
  },
  {
    "path": "src/parser-flow.js",
    "chars": 835,
    "preview": "\"use strict\";\n\nconst createError = require(\"./parser-create-error\");\nconst includeShebang = require(\"./parser-include-sh"
  },
  {
    "path": "src/parser-graphql.js",
    "chars": 1417,
    "preview": "\"use strict\";\n\nconst createError = require(\"./parser-create-error\");\n\nfunction parseComments(ast) {\n  const comments = ["
  },
  {
    "path": "src/parser-include-shebang.js",
    "chars": 505,
    "preview": "\"use strict\";\n\nfunction includeShebang(text, ast) {\n  if (!text.startsWith(\"#!\")) {\n    return;\n  }\n\n  const index = tex"
  },
  {
    "path": "src/parser-json.js",
    "chars": 2014,
    "preview": "\"use strict\";\n\nconst createError = require(\"./parser-create-error\");\n\nfunction parse(text) {\n  const jsonToAst = require"
  },
  {
    "path": "src/parser-parse5.js",
    "chars": 1175,
    "preview": "\"use strict\";\n\n// const createError = require(\"./parser-create-error\");\n\nfunction parse(text) {\n  // Inline the require "
  },
  {
    "path": "src/parser-postcss.js",
    "chars": 5613,
    "preview": "\"use strict\";\n\nconst createError = require(\"./parser-create-error\");\n\nfunction parseSelector(selector) {\n  const selecto"
  },
  {
    "path": "src/parser-typescript.js",
    "chars": 1642,
    "preview": "\"use strict\";\n\nconst createError = require(\"./parser-create-error\");\nconst includeShebang = require(\"./parser-include-sh"
  },
  {
    "path": "src/parser.js",
    "chars": 1488,
    "preview": "\"use strict\";\n\nconst path = require(\"path\");\n\nconst parsers = {\n  get flow() {\n    return eval(\"require\")(\"./parser-flow"
  },
  {
    "path": "src/printer-graphql.js",
    "chars": 10802,
    "preview": "\"use strict\";\n\nconst docBuilders = require(\"./doc-builders\");\nconst concat = docBuilders.concat;\nconst join = docBuilder"
  },
  {
    "path": "src/printer-htmlparser2.js",
    "chars": 2583,
    "preview": "\"use strict\";\n\nconst util = require(\"./util\");\nconst docBuilders = require(\"./doc-builders\");\nconst concat = docBuilders"
  },
  {
    "path": "src/printer-postcss.js",
    "chars": 10607,
    "preview": "\"use strict\";\n\nconst util = require(\"./util\");\nconst docBuilders = require(\"./doc-builders\");\nconst concat = docBuilders"
  },
  {
    "path": "src/printer.js",
    "chars": 140740,
    "preview": "\"use strict\";\n\nconst assert = require(\"assert\");\nconst comments = require(\"./comments\");\nconst FastPath = require(\"./fas"
  },
  {
    "path": "src/resolve-config.js",
    "chars": 1987,
    "preview": "\"use strict\";\n\nconst cosmiconfig = require(\"cosmiconfig\");\nconst minimatch = require(\"minimatch\");\nconst path = require("
  },
  {
    "path": "src/util.js",
    "chars": 11530,
    "preview": "\"use strict\";\n\nfunction isExportDeclaration(node) {\n  if (node) {\n    switch (node.type) {\n      case \"ExportDefaultDecl"
  },
  {
    "path": "tests/.eslintrc.js",
    "chars": 137,
    "preview": "\"use strict\";\n\nmodule.exports = {\n  env: {\n    jest: true\n  },\n  rules: {\n    strict: \"off\"\n  },\n  globals: {\n    run_sp"
  },
  {
    "path": "tests/align-object-properties/__snapshots__/jsfmt.spec.js.snap",
    "chars": 471,
    "preview": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`o.js 1`] = `\no = {\n  [name]: 'value',\n  2:3,\n  \"k-2\":2,\n  keyasdf:3"
  },
  {
    "path": "tests/align-object-properties/jsfmt.spec.js",
    "chars": 73,
    "preview": "run_spec(__dirname, { parser: \"babylon\", alignObjectProperties: true });\n"
  },
  {
    "path": "tests/align-object-properties/o.js",
    "chars": 127,
    "preview": "o = {\n  [name]: 'value',\n  2:3,\n  \"k-2\":2,\n  keyasdf:3\n}\n\no = {\n  [namelonglonglong]: 'value',\n  2:3,\n  \"k-2\":2,\n  keyas"
  },
  {
    "path": "tests/array_spread/__snapshots__/jsfmt.spec.js.snap",
    "chars": 215,
    "preview": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`multiple.js 1`] = `\n[...a, ...b,];\n[...a, ...b];\n~~~~~~~~~~~~~~~~~~"
  },
  {
    "path": "tests/array_spread/jsfmt.spec.js",
    "chars": 43,
    "preview": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/array_spread/multiple.js",
    "chars": 29,
    "preview": "[...a, ...b,];\n[...a, ...b];\n"
  },
  {
    "path": "tests/arrays/__snapshots__/jsfmt.spec.js.snap",
    "chars": 1681,
    "preview": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`empty.js 1`] = `\nconst a = someVeryVeryVeryVeryVeryVeryVeryVeryVery"
  },
  {
    "path": "tests/arrays/empty.js",
    "chars": 166,
    "preview": "const a = someVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeLong.Expression || [];\nconst a = someVeryVeryVeryVeryVeryVer"
  },
  {
    "path": "tests/arrays/jsfmt.spec.js",
    "chars": 103,
    "preview": "run_spec(__dirname, null, [\"typescript\"]);\nrun_spec(__dirname, { arrayExpand: true }, [\"typescript\"]);\n"
  },
  {
    "path": "tests/arrays/last.js",
    "chars": 28,
    "preview": "[,];\n[,,];\n[,,1,];\n[,,1,1];\n"
  },
  {
    "path": "tests/arrays/preserve_empty_lines.js",
    "chars": 34,
    "preview": "a = [\n\n  1,\n  2,\n\n  3,\n\n\n  4,\n\n\n]\n"
  },
  {
    "path": "tests/arrow-call/__snapshots__/jsfmt.spec.js.snap",
    "chars": 5303,
    "preview": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`arrow_call.js 1`] = `\nconst testResults = results.testResults.map(t"
  },
  {
    "path": "tests/arrow-call/arrow_call.js",
    "chars": 1256,
    "preview": "const testResults = results.testResults.map(testResult =>\n  formatResult(testResult, formatter, reporter)\n);\n\nit('mocks "
  },
  {
    "path": "tests/arrow-call/jsfmt.spec.js",
    "chars": 106,
    "preview": "run_spec(__dirname, null, [\"typescript\"]);\nrun_spec(__dirname, { trailingComma: \"all\" }, [\"typescript\"]);\n"
  },
  {
    "path": "tests/arrows/__snapshots__/jsfmt.spec.js.snap",
    "chars": 17613,
    "preview": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`arrow_function_expression.js 1`] = `\n(a => {}).length\ntypeof (() =>"
  },
  {
    "path": "tests/arrows/arrow-parens.js",
    "chars": 98,
    "preview": "() => {};\r\n(a) => { return a; };\r\na => a;\r\n(a, b) => a * b;\r\n(a, b, c) => { return a * b + c; };\r\n"
  },
  {
    "path": "tests/arrows/arrow_function_expression.js",
    "chars": 610,
    "preview": "(a => {}).length\ntypeof (() => {});\nexport default (() => {})();\n(() => {})()``;\n(() => {})``;\nnew (() => {});\nif ((() ="
  },
  {
    "path": "tests/arrows/block_like.js",
    "chars": 23,
    "preview": "a = () => ({} = this);\n"
  },
  {
    "path": "tests/arrows/call.js",
    "chars": 1556,
    "preview": "Seq(typeDef.interface.groups).forEach(group =>\n  Seq(group.members).forEach((member, memberName) =>\n    markdownDoc(\n   "
  },
  {
    "path": "tests/arrows/comment.js",
    "chars": 848,
    "preview": "/**\n * Curried function that ends with a BEM CSS Selector\n *\n * @param {String} block - the BEM Block you'd like to sele"
  },
  {
    "path": "tests/arrows/currying.js",
    "chars": 173,
    "preview": "const fn = b => c => d => {\n  return 3;\n};\n\nconst mw = store => next => action => {\n  return next(action)\n}\n\nconst middl"
  },
  {
    "path": "tests/arrows/jsfmt.spec.js",
    "chars": 139,
    "preview": "run_spec(__dirname, { parser: \"babylon\" }, [\"typescript\"]);\nrun_spec(__dirname, { parser: \"babylon\", arrowParens: true }"
  },
  {
    "path": "tests/arrows/long-call-no-args.js",
    "chars": 88,
    "preview": "veryLongCall(VERY_VERY_VERY_VERY_VERY_VERY_VERY_VERY_VERY_VERY_LONG_CONSTANT, () => {})\n"
  },
  {
    "path": "tests/arrows/long-contents.js",
    "chars": 146,
    "preview": "const foo = () => {\n  expect(arg1, arg2, arg3).toEqual({message: 'test', messageType: 'SMS', status: 'Unknown', created:"
  },
  {
    "path": "tests/arrows/short_body.js",
    "chars": 170,
    "preview": "const initializeSnapshotState = (\n  testFile: Path,\n  update: boolean,\n  testPath: string,\n  expand: boolean,\n) => new S"
  },
  {
    "path": "tests/arrows/type_params.js",
    "chars": 14,
    "preview": "<T>(a) => { }\n"
  },
  {
    "path": "tests/arrows_bind/__snapshots__/jsfmt.spec.js.snap",
    "chars": 295,
    "preview": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`arrows-bind.js 1`] = `\na => ({}::b()\\`\\`[''].c++ && 0 ? 0 : 0);\n(a "
  },
  {
    "path": "tests/arrows_bind/arrows-bind.js",
    "chars": 65,
    "preview": "a => ({}::b()``[''].c++ && 0 ? 0 : 0);\n(a => b)::c;\na::(b => c);\n"
  },
  {
    "path": "tests/arrows_bind/jsfmt.spec.js",
    "chars": 44,
    "preview": "run_spec(__dirname, { parser: \"babylon\" });\n"
  },
  {
    "path": "tests/assignment/__snapshots__/jsfmt.spec.js.snap",
    "chars": 1078,
    "preview": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`binaryish.js 1`] = `\nconst computedDescriptionLines = (showConfirm "
  },
  {
    "path": "tests/assignment/binaryish.js",
    "chars": 260,
    "preview": "const computedDescriptionLines = (showConfirm &&\n  descriptionLinesConfirming) ||\n  (focused && !loading && descriptionL"
  },
  {
    "path": "tests/assignment/jsfmt.spec.js",
    "chars": 43,
    "preview": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/assignment/sequence.js",
    "chars": 145,
    "preview": "for ((i = 0), (len = arr.length); i < len; i++) {\n  console.log(arr[i])\n}\n\nfor (i = 0, len = arr.length; i < len; i++) {"
  },
  {
    "path": "tests/assignment_comments/__snapshots__/jsfmt.spec.js.snap",
    "chars": 1714,
    "preview": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`assignment_comments.js 1`] = `\nfnString =\n  // Comment\n  'some' + '"
  },
  {
    "path": "tests/assignment_comments/assignment_comments.js",
    "chars": 765,
    "preview": "fnString =\n  // Comment\n  'some' + 'long' + 'string';\n\nvar fnString =\n  // Comment\n  'some' + 'long' + 'string';\n\nvar fn"
  },
  {
    "path": "tests/assignment_comments/jsfmt.spec.js",
    "chars": 43,
    "preview": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/assignment_expression/__snapshots__/jsfmt.spec.js.snap",
    "chars": 265,
    "preview": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`assignment_expression.js 1`] = `\nthis.size = this._origin = this._c"
  },
  {
    "path": "tests/assignment_expression/assignment_expression.js",
    "chars": 47,
    "preview": "this.size = this._origin = this._capacity = 0;\n"
  },
  {
    "path": "tests/assignment_expression/jsfmt.spec.js",
    "chars": 43,
    "preview": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/async/__snapshots__/jsfmt.spec.js.snap",
    "chars": 2033,
    "preview": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`async-iteration.js 1`] = `\n\nasync function * a() {\n    yield* b();\n"
  },
  {
    "path": "tests/async/async-iteration.js",
    "chars": 99,
    "preview": "\nasync function * a() {\n    yield* b();\n}\n\nclass X {\n    async * b() {\n        yield* a();\n    }\n}\n"
  },
  {
    "path": "tests/async/await_parse.js",
    "chars": 256,
    "preview": "async function f() { (await f()).length }\nasync function g() {\n  invariant(\n    (await driver.navigator.getUrl()).substr"
  },
  {
    "path": "tests/async/conditional-expression.js",
    "chars": 326,
    "preview": "async function f() {\n  const result = typeof fn === 'function' ? await fn() : null;\n}\n\n(async function() {\n  console.log"
  },
  {
    "path": "tests/async/jsfmt.spec.js",
    "chars": 43,
    "preview": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/async/parens.js",
    "chars": 81,
    "preview": "async function *f(){ await (yield x); }\n\nasync function f(){ await (() => {}); }\n"
  },
  {
    "path": "tests/binary-expressions/__snapshots__/jsfmt.spec.js.snap",
    "chars": 8437,
    "preview": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`arrow.js 1`] = `\nfunction f() {\n  const appEntitys = getAppEntitys("
  },
  {
    "path": "tests/binary-expressions/arrow.js",
    "chars": 172,
    "preview": "function f() {\n  const appEntitys = getAppEntitys(loadObject).filter(\n    entity => entity && entity.isInstallAvailable("
  },
  {
    "path": "tests/binary-expressions/bitwise-flags.js",
    "chars": 108,
    "preview": "const FLAG_A = 1 << 0;\nconst FLAG_B = 1 << 1;\nconst FLAG_C = 1 << 2;\n\nconst all = FLAG_A | FLAG_B | FLAG_C;\n"
  },
  {
    "path": "tests/binary-expressions/comment.js",
    "chars": 126,
    "preview": "a = (\n  // Commment 1\n  (Math.random() * (yRange * (1 - minVerticalFraction)))\n  + (minVerticalFraction * yRange)\n) - of"
  },
  {
    "path": "tests/binary-expressions/equality.js",
    "chars": 113,
    "preview": "x == y == z;\nx != y == z;\nx == y != z;\nx != y != z;\n\nx === y === z;\nx !== y === z;\nx === y !== z;\nx !== y !== z;\n"
  },
  {
    "path": "tests/binary-expressions/exp.js",
    "chars": 95,
    "preview": "a ** b ** c;\n(a ** b) ** c;\na.b ** c;\n(-a) ** b;\na ** -b;\n-(a**b);\n(a * b) ** c;\na ** (b * c);\n"
  },
  {
    "path": "tests/binary-expressions/if.js",
    "chars": 328,
    "preview": "if (this.hasPlugin(\"dynamicImports\") && this.lookahead().type) {}\n\nif (this.hasPlugin(\"dynamicImports\") && this.lookahea"
  },
  {
    "path": "tests/binary-expressions/inline-object-array.js",
    "chars": 220,
    "preview": "prevState = prevState || {\n  catalogs: [],\n  loadState: LOADED,\n  opened: false,\n  searchQuery: '',\n  selectedCatalog: n"
  },
  {
    "path": "tests/binary-expressions/jsfmt.spec.js",
    "chars": 43,
    "preview": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/binary-expressions/jsx_parent.js",
    "chars": 238,
    "preview": "<div\n  src={\n    !isJellyfishEnabled &&\n    diffUpdateMessageInput != null &&\n    this.state.isUpdateMessageEmpty\n  }\n/>"
  },
  {
    "path": "tests/binary-expressions/math.js",
    "chars": 214,
    "preview": "x + y / z;\nx / y + z;\n\nx * y % z;\nx / y % z;\nx % y * z;\nx % y / z;\n\nx % y % z;\n\nx << y >> z;\nx >>> y << z;\nx >>> y >>> z"
  },
  {
    "path": "tests/binary-expressions/short-right.js",
    "chars": 438,
    "preview": "this._cumulativeHeights &&\n Math.abs(\n   this._cachedItemHeight(this._firstVisibleIndex + i) -\n     this._provider.fastH"
  },
  {
    "path": "tests/binary-expressions/test.js",
    "chars": 1246,
    "preview": "// It should always break the highest precedence operators first, and\n// break them all at the same time.\n\nconst x = lon"
  },
  {
    "path": "tests/binary-expressions/unary.js",
    "chars": 126,
    "preview": "const anyTestFailures = !(\n  aggregatedResults.numFailedTests === 0 &&\n  aggregatedResults.numRuntimeErrorTestSuites ==="
  },
  {
    "path": "tests/binary_math/__snapshots__/jsfmt.spec.js.snap",
    "chars": 1005,
    "preview": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`parens.js 1`] = `\nconst result = (a + b) >>> 1;\nvar sizeIndex = ((i"
  },
  {
    "path": "tests/binary_math/jsfmt.spec.js",
    "chars": 54,
    "preview": "run_spec(__dirname, null, [\"babylon\", \"typescript\"]);\n"
  },
  {
    "path": "tests/binary_math/parens.js",
    "chars": 426,
    "preview": "const result = (a + b) >>> 1;\nvar sizeIndex = ((index - 1) >>> level) & MASK;\nvar from = offset > left ? 0 : (left - off"
  },
  {
    "path": "tests/bind_expressions/__snapshots__/jsfmt.spec.js.snap",
    "chars": 2821,
    "preview": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`bind_parens.js 1`] = `\n(a || b)::c;\na || (b::c);\n::obj.prop;\n~~~~~~"
  },
  {
    "path": "tests/bind_expressions/bind_parens.js",
    "chars": 38,
    "preview": "(a || b)::c;\na || (b::c);\n::obj.prop;\n"
  },
  {
    "path": "tests/bind_expressions/jsfmt.spec.js",
    "chars": 101,
    "preview": "run_spec(__dirname, { parser: \"babylon\" });\nrun_spec(__dirname, { parser: \"babylon\", semi: false });\n"
  },
  {
    "path": "tests/bind_expressions/method_chain.js",
    "chars": 555,
    "preview": "import {interval} from 'rxjs/observable/interval';\nimport {filter} from 'rxjs/operator/filter';\nimport {take} from 'rxjs"
  },
  {
    "path": "tests/bracketSpacing/__snapshots__/jsfmt.spec.js.snap",
    "chars": 961,
    "preview": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`array.js 1`] = `\nconst arr1 = [1,2,3,4];\nconst arr2 = [1, 2, 3, 4];"
  },
  {
    "path": "tests/bracketSpacing/array.js",
    "chars": 51,
    "preview": "const arr1 = [1,2,3,4];\nconst arr2 = [1, 2, 3, 4];\n"
  },
  {
    "path": "tests/bracketSpacing/jsfmt.spec.js",
    "chars": 106,
    "preview": "run_spec(__dirname, null, [\"typescript\"]);\nrun_spec(__dirname, { bracesSpacing: false }, [\"typescript\"]);\n"
  },
  {
    "path": "tests/bracketSpacing/object.js",
    "chars": 61,
    "preview": "const obj1 = {a:1, b:2, c:3}\nconst obj2 = { a:1, b:2, c:3 };\n"
  },
  {
    "path": "tests/break-calls/__snapshots__/jsfmt.spec.js.snap",
    "chars": 2309,
    "preview": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`break.js 1`] = `\nh(f(g(() => {\n  a\n})))\n\ndeepCopyAndAsyncMapLeavesA"
  },
  {
    "path": "tests/break-calls/break.js",
    "chars": 813,
    "preview": "h(f(g(() => {\n  a\n})))\n\ndeepCopyAndAsyncMapLeavesA(\n  { source: sourceValue, destination: destination[sourceKey] },\n  { "
  },
  {
    "path": "tests/break-calls/jsfmt.spec.js",
    "chars": 43,
    "preview": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/break-calls/parent.js",
    "chars": 197,
    "preview": "runtimeAgent.getProperties(\n  objectId,\n  false, // ownProperties\n  false, // accessorPropertiesOnly\n  false, // generat"
  },
  {
    "path": "tests/class_comment/__snapshots__/jsfmt.spec.js.snap",
    "chars": 1532,
    "preview": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`comments.js 1`] = `\nclass A // comment 1\n  // comment 2\n  extends B"
  },
  {
    "path": "tests/class_comment/comments.js",
    "chars": 688,
    "preview": "class A // comment 1\n  // comment 2\n  extends B {}\n\nclass A extends B // comment1\n// comment2\n// comment3\n{}\n\nclass A /*"
  },
  {
    "path": "tests/class_comment/jsfmt.spec.js",
    "chars": 43,
    "preview": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/class_extends/__snapshots__/jsfmt.spec.js.snap",
    "chars": 2124,
    "preview": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`extends.js 1`] = `\n// \"ArrowFunctionExpression\"\nclass a extends (()"
  },
  {
    "path": "tests/class_extends/extends.js",
    "chars": 982,
    "preview": "// \"ArrowFunctionExpression\"\nclass a extends (() => {}) {}\n\n// \"AssignmentExpression\"\nclass a extends (b = c) {}\n\n// \"Aw"
  },
  {
    "path": "tests/class_extends/jsfmt.spec.js",
    "chars": 43,
    "preview": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/classes/__snapshots__/jsfmt.spec.js.snap",
    "chars": 3622,
    "preview": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`binary.js 1`] = `\n(class {}) + 1;\n(class a {}) + 1;\n(class extends "
  },
  {
    "path": "tests/classes/binary.js",
    "chars": 88,
    "preview": "(class {}) + 1;\n(class a {}) + 1;\n(class extends b {}) + 1;\n(class a extends b {}) + 1;\n"
  },
  {
    "path": "tests/classes/break.js",
    "chars": 1065,
    "preview": "class MyContractSelectionWidget extends React.Component<void,  MyContractSelectionWidgetPropsType, void> implements Some"
  },
  {
    "path": "tests/classes/call.js",
    "chars": 22,
    "preview": "(class {})(class {});\n"
  },
  {
    "path": "tests/classes/empty.js",
    "chars": 84,
    "preview": "class A {\n  // comment\n}\n\nclass A { // comment\n}\n\nclass A {\n}\n\nclass A {\n  m() {}\n}\n"
  },
  {
    "path": "tests/classes/jsfmt.spec.js",
    "chars": 54,
    "preview": "run_spec(__dirname, null, [\"babylon\", \"typescript\"]);\n"
  },
  {
    "path": "tests/classes/member.js",
    "chars": 29,
    "preview": "(class {})[1];\n(class {}).a;\n"
  },
  {
    "path": "tests/classes/method.js",
    "chars": 75,
    "preview": "\nclass C {\n  name/*comment*/() {\n  }\n};\n\n\n({\n  name/*comment*/() {\n  }\n});\n"
  },
  {
    "path": "tests/classes/ternary.js",
    "chars": 27,
    "preview": "if (1) (class {}) ? 1 : 2;\n"
  },
  {
    "path": "tests/comments/__snapshots__/jsfmt.spec.js.snap",
    "chars": 23248,
    "preview": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`assignment-pattern.js 1`] = `\nconst { a /* comment */ = 1 } = b;\n\nc"
  },
  {
    "path": "tests/comments/assignment-pattern.js",
    "chars": 98,
    "preview": "const { a /* comment */ = 1 } = b;\n\nconst { c = 1 /* comment */ } = d;\n\nlet {a //comment\n= b} = c\n"
  },
  {
    "path": "tests/comments/before-comma.js",
    "chars": 84,
    "preview": "const foo = {\n  a: 'a' /* comment for this line */,\n\n  /* Section B */\n  b: 'b',\n};\n"
  },
  {
    "path": "tests/comments/blank.js",
    "chars": 364,
    "preview": "// This file only\n// has comments. This comment\n// should still exist\n//\n// when printed.\n\n/**\n * @typedef {DataDrivenMa"
  },
  {
    "path": "tests/comments/call_comment.js",
    "chars": 211,
    "preview": "render( // Warm any cache\n  <ChildUpdates renderAnchor={true} anchorClassOn={true} />,\n  container\n);\n\nReact.render( // "
  },
  {
    "path": "tests/comments/dangling.js",
    "chars": 193,
    "preview": "var x = {/* dangling */};\nvar x = {\n  // dangling\n};\nvar x = [/* dangling */];\nfunction x() {\n  /* dangling */\n}\ndeclare"
  },
  {
    "path": "tests/comments/dangling_array.js",
    "chars": 117,
    "preview": "expect(() => {}).toTriggerReadyStateChanges([\n  // Nothing.\n]);\n\n[1 /* first comment */, 2 /* second comment */, 3];\n"
  },
  {
    "path": "tests/comments/dangling_for.js",
    "chars": 45,
    "preview": "for // comment\n(;;);\n\nfor /* comment */(;;);\n"
  },
  {
    "path": "tests/comments/export.js",
    "chars": 20,
    "preview": "export //comment\n{}\n"
  },
  {
    "path": "tests/comments/first-line.js",
    "chars": 15,
    "preview": "a // comment\nb\n"
  },
  {
    "path": "tests/comments/flow_union.js",
    "chars": 501,
    "preview": "type UploadState<E, EM, D>\n  // The upload hasnt begun yet\n  = {type: \"Not_begun\"}\n  // The upload timed out\n  | {type: "
  },
  {
    "path": "tests/comments/function-declaration.js",
    "chars": 211,
    "preview": "function a(/* comment */) {} // comment\nfunction b() {} // comment\nfunction c(/* comment */ argA, argB, argC) {} // comm"
  },
  {
    "path": "tests/comments/if.js",
    "chars": 234,
    "preview": "if (1)\n// comment\n{\n  false\n}\n// comment\nelse if (2)\n  true\n// multi\n// ple\n// lines\nelse if (3)\n  // existing comment\n "
  },
  {
    "path": "tests/comments/issues.js",
    "chars": 2714,
    "preview": "// Does not need to break as it fits in 80 columns\nthis.call(a, /* comment */ b);\n\nfunction f(\n  someReallyLongArgument:"
  },
  {
    "path": "tests/comments/jsfmt.spec.js",
    "chars": 40,
    "preview": "run_spec(__dirname, null, [\"babylon\"]);\n"
  },
  {
    "path": "tests/comments/jsx.js",
    "chars": 768,
    "preview": "<div>\n  {\n    /* comment */\n  }\n</div>;\n\n<div>\n  {/* comment */\n  }\n</div>;\n\n<div>\n  {/* comment\n*/\n  }\n</div>;\n\n<div>\n "
  },
  {
    "path": "tests/comments/last-arg.js",
    "chars": 1792,
    "preview": "type f = (\n  currentRequest: {a: number},\n  // TODO this is a very very very very long comment that makes it go > 80 col"
  },
  {
    "path": "tests/comments/preserve-new-line-last.js",
    "chars": 208,
    "preview": "function f() {\n  a\n  /* eslint-disable */\n}\n\nfunction f() {\n  a\n\n  /* eslint-disable */\n}\n\nfunction name() {\n  // commen"
  },
  {
    "path": "tests/comments/return-statement.js",
    "chars": 1477,
    "preview": "function jsx() {\n  return (\n    // Comment\n    <div />\n  );\n}\n\nfunction unary() {\n  return (\n    // Comment\n    !!x\n  );"
  },
  {
    "path": "tests/comments/switch.js",
    "chars": 476,
    "preview": "switch (node && node.type) {\n  case \"Property\":\n  case \"MethodDefinition\":\n    prop = node.key;\n    break;\n\n  case \"Memb"
  },
  {
    "path": "tests/comments/template-literal.js",
    "chars": 104,
    "preview": "`\n${a // comment\n}\n\n${b /* comment */}\n\n${/* comment */ c /* comment */}\n\n${// comment\nd //comment\n};\n`\n"
  },
  {
    "path": "tests/comments/trailing_space.js",
    "chars": 149,
    "preview": "#!/there/is-space-here->         \n\n// Do not trim trailing whitespace from this source file!\n\n// There is some space her"
  },
  {
    "path": "tests/comments/try.js",
    "chars": 130,
    "preview": "// comment 1\ntry {\n  // comment 2\n}\n// comment 3\ncatch(e) {\n  // comment 4\n}\n// comment 5\nfinally // comment 6\n{\n  // co"
  },
  {
    "path": "tests/comments/variable_declarator.js",
    "chars": 295,
    "preview": "let obj = // Comment\n{\n  key: 'val'\n}\n\nlet obj // Comment\n= {\n  key: 'val'\n}\n\nlet obj = { // Comment\n  key: 'val'\n}\n\nlet"
  },
  {
    "path": "tests/computed_props/__snapshots__/jsfmt.spec.js.snap",
    "chars": 207,
    "preview": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`classes.js 1`] = `\nclass c {\n  [\"i\"]() {}\n}\n~~~~~~~~~~~~~~~~~~~~~~~"
  },
  {
    "path": "tests/computed_props/classes.js",
    "chars": 25,
    "preview": "class c {\n  [\"i\"]() {}\n}\n"
  },
  {
    "path": "tests/computed_props/jsfmt.spec.js",
    "chars": 43,
    "preview": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/conditional/__snapshots__/jsfmt.spec.js.snap",
    "chars": 3318,
    "preview": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`comments.js 1`] = `\nvar inspect = 4 === util.inspect.length\n  ? // "
  },
  {
    "path": "tests/conditional/comments.js",
    "chars": 1275,
    "preview": "var inspect = 4 === util.inspect.length\n  ? // node <= 0.8.x\n    (function(v, colors) {\n      return util.inspect(v, voi"
  },
  {
    "path": "tests/conditional/jsfmt.spec.js",
    "chars": 43,
    "preview": "run_spec(__dirname, null, [\"typescript\"]);\n"
  },
  {
    "path": "tests/conditional/new-expression.js",
    "chars": 93,
    "preview": "const testConsole = new TestConsole(\n  config.useStderr ? process.stderr : process.stdout\n);\n"
  },
  {
    "path": "tests/conditional/no-confusing-arrow.js",
    "chars": 70,
    "preview": "// no-confusing-arrow\nvar x = a => 1 ? 2 : 3;\nvar x = a <= 1 ? 2 : 3;\n"
  },
  {
    "path": "tests/css_atrule/__snapshots__/jsfmt.spec.js.snap",
    "chars": 466,
    "preview": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`if-else.css 1`] = `\n@if $media == phonePortrait {\n    $k: .15625;\n}"
  },
  {
    "path": "tests/css_atrule/if-else.css",
    "chars": 157,
    "preview": "@if $media == phonePortrait {\n    $k: .15625;\n} @else if $media == phoneLandscape {\n    $k: .08803;\n} @else if $media =="
  },
  {
    "path": "tests/css_atrule/jsfmt.spec.js",
    "chars": 44,
    "preview": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/css_attribute/__snapshots__/jsfmt.spec.js.snap",
    "chars": 214,
    "preview": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`insensitive.css 1`] = `\ninput[type=\"radio\" i] {\n}\n~~~~~~~~~~~~~~~~~"
  },
  {
    "path": "tests/css_attribute/insensitive.css",
    "chars": 26,
    "preview": "input[type=\"radio\" i] {\n}\n"
  },
  {
    "path": "tests/css_attribute/jsfmt.spec.js",
    "chars": 44,
    "preview": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/css_atword/__snapshots__/jsfmt.spec.js.snap",
    "chars": 237,
    "preview": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`atword.css 1`] = `\n.test { @color: red; color: @color; }\n~~~~~~~~~~"
  },
  {
    "path": "tests/css_atword/atword.css",
    "chars": 38,
    "preview": ".test { @color: red; color: @color; }\n"
  },
  {
    "path": "tests/css_atword/jsfmt.spec.js",
    "chars": 44,
    "preview": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/css_bom/__snapshots__/jsfmt.spec.js.snap",
    "chars": 256,
    "preview": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`bom.css 1`] = `\n\n\n/* Block comment */\n\nhtml {\n  content: \"#{1}\";\n\n"
  },
  {
    "path": "tests/css_bom/bom.css",
    "chars": 53,
    "preview": "\n\n/* Block comment */\n\nhtml {\n  content: \"#{1}\";\n\n}\n"
  },
  {
    "path": "tests/css_bom/jsfmt.spec.js",
    "chars": 44,
    "preview": "run_spec(__dirname, { parser: \"postcss\" });\n"
  },
  {
    "path": "tests/css_colon/__snapshots__/jsfmt.spec.js.snap",
    "chars": 308,
    "preview": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`colon.css 1`] = `\ndiv {\n  filter: progid:DXImageTransform.Microsoft"
  },
  {
    "path": "tests/css_colon/colon.css",
    "chars": 76,
    "preview": "div {\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);\n}\n"
  }
]

// ... and 3187 more files (download for full content)

About this extraction

This page contains the full source code of the arijs/prettier-miscellaneous GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 3387 files (7.2 MB), approximately 2.1M tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!