Simon Lydell
3e924474cd
Print sub-nodes of `@import` in Less ( #2646 )
...
Fixes part of #2584 .
2017-08-21 12:28:22 -07:00
jackyho112
b77b1c82a7
Strip away unnecessary quotes in keys in type objects and interfaces ( #2643 )
...
* Use printPropertyKey function to print keys in object type property in TS and Flow
* Remove flow test modification
* Add tests for new object key cases
* Add new test file
* Fix some styles
2017-08-21 20:08:38 +10:00
Simon Lydell
9e16dbbde7
Adjust some more quotes in CSS
2017-08-17 08:59:56 +02:00
Simon Lydell
c198c33700
Merge pull request #2624 from lydell/css-strings
...
Normalize quotes in CSS like in JS
2017-08-15 16:07:06 +02:00
Simon Lydell
4979f58c15
Normalize quotes in CSS like in JS
2017-08-14 09:14:57 +02:00
Lucas Azzola
0b9fbf940f
Support styled.div.attr({})`...` ( #2619 )
2017-08-13 13:52:24 +10:00
Lucas Azzola
ec85cf0f0a
Do not accept declare on previous line ( #2618 )
2017-08-13 13:47:48 +10:00
Dmitry Korlas
f738a214d3
fix cut off line-break in scss between comment and followed @else ( #2600 )
...
* fix cut off line-break in scss between comment and followed @else
* fix cut off line-break in scss between comment and followed @else (CR fixes)
2017-08-08 12:07:47 +10:00
Lucas Azzola
e378f5e9ba
Implement proposal-optional-chaining ( #2572 )
...
* Implement proposal-optional-chaining
Closes #2568
* Refactor optional token printing
2017-08-03 17:38:02 +10:00
Brian Ng
1701f4a0d5
Print declare for TSInterfaceDeclaration ( #2574 )
2017-08-02 00:00:01 +10:00
Brian Ng
4c335cae0a
Add support for printing optional catch binding ( #2570 )
2017-07-31 14:40:14 -06:00
Lucas Azzola
58edd0d3f3
Keep parens around FunctionTypeAnnotation inside ArrayTypeAnnotation ( #2561 )
...
Without this, this:
const actionArray: (() => void)[] = [];
is formatted as:
const actionArray: () => void[] = [];
Fixes #2559
2017-07-30 00:50:38 +10:00
Lucas Azzola
af6b020f7e
Support styled-components with existing component ( #2552 )
...
Supports the syntax:
```js
styled(ExistingComponent)`
css: property;
`;
```
Fixes #2545
2017-07-28 19:04:17 +10:00
Brian Ng
24e1aec306
Add support for flow opaque types ( #2543 )
2017-07-25 19:47:54 -07:00
Brian Ng
cf6258ab4f
Re-enable flow-jsx-func-attr test ( #2541 )
2017-07-26 09:07:37 +10:00
Brian Ng
60f5836b37
Add support for flow export type star ( #2542 )
2017-07-26 09:00:20 +10:00
Yang Su
26842e4d69
Handle closure compiler type cast syntax correctly ( #2484 )
...
* Handle closure compiler type cast syntax correctly
Fixes https://github.com/prettier/prettier/issues/1445
* Move closure type cast detection to needParens in fast-path.js
* every => some and added additional check for leading comment
2017-07-25 11:21:25 +10:00
Lucas Azzola
a666a29aa3
Print semi after DeclareFunction, fixes #2534 ( #2536 )
2017-07-24 21:55:16 +10:00
Joseph Frazier
a78d1389f6
Use babylon.parseExpression for JSON ( #2476 )
...
* Add comments showing parser arguments
Since this is how they are invoked, the comments make it easier to maintain.
* Use babylon.parseExpression for JSON
See https://github.com/prettier/prettier/issues/2378#issuecomment-314600778
Note that this doesn't yet print comments:
echo '{/*comment*/"K":"V"}' | ./bin/prettier.js --parser json
* Remove parser-json.js
This reduces duplicate code in the built package.
See https://github.com/prettier/prettier/pull/2476#pullrequestreview-50181398
* Add test with block comment in JSON
* Fix test with block comment in JSON
* Add test with line comment in JSON
* Don't build now-redundant parser-json.js
2017-07-24 11:43:49 +10:00
Lucas Azzola
4a0e9475df
Print parens around type assertion as LHS in assignment, fixes #2521 ( #2525 )
2017-07-20 23:16:15 +10:00
Lucas Azzola
02639da9a9
Improve coverage and remove some dead code ( #2504 )
...
* Improve test coverage
* Clean up some un-used code
* Lower patch requirements on codecov
2017-07-17 23:31:42 +10:00
Lucas Azzola
d62d1c5c56
Preserve parens with keyof, enforce parens with arrows with type params ( #2503 )
...
* Force parens around argument of simple arrow function if type annotation is present
* Preserve parens inside keyof operator
2017-07-17 13:32:33 +02:00
Lucas Azzola
71b2004391
Cleanup unused nodes, and turn on importMeta babylon plugin ( #2498 )
...
* Cleanup unused AST nodes
* Add tests for JSXNamespacedName
* Turn on importMeta babylon plugin
* Add tests for DeclareTypeAlias
* Add back TS*Keyword nodes, fix TS optional destructuring
2017-07-16 23:59:49 +10:00
Lucas Azzola
188c466cd5
Don't call shouldHugType for function arguments, fixes #2458 ( #2496 )
2017-07-16 11:53:01 +02:00
Lucas Azzola
028d9e0ea7
Improve bind expression formatting ( #2493 )
...
* Improve bind expression formatting, fixes #1400
* Fix parenthesis with bind expressions, fixes #1446
2017-07-16 11:47:06 +02:00
Lucas Azzola
00d9aa208e
Trim trailing whitespace from comments, closes #2422 ( #2494 )
2017-07-16 17:45:27 +10:00
Lucas Azzola
bac9658687
Flatten x & y & z, and x ^ y ^ z, fixes #2445 ( #2490 )
2017-07-15 12:54:33 +02:00
Lucas Azzola
b9b3da6ee9
Implement prettier-ignore inside JSX ( #2487 )
...
* Implement prettier-ignore inside JSX, closes #2467
* Re-enable babylon and typescript verification
2017-07-15 20:21:43 +10:00
Stephen Scott
3ed2bae1b4
Improve JSX ternary formatting
...
* Now JSX-mode ternaries only break if they need to.
* Only the outermost ternary in a chain of JSX-mode ternaries will become a group.
* We don't wrap null in parens when breaking JSX-mode ternaries.
This commit also improves the test coverage and explanation in tests/jsx/conditional-expression.js.
2017-07-13 10:21:58 -06:00
Stephen Scott
757037948a
Improve JSX Formatting
...
* Arrow Function Expressions returning JSX will now add parens when the JSX breaks
* Conditional expressions within (or containing) JSX are formatted in a more natural way (for JSX), especiall when chained
* JSX in logical expressions (|| or &&) is always wrapped in parens
Fixes #2208
2017-07-13 10:20:42 -06:00
John Backus
1691b85322
Fix <this.Component /> ( #2472 )
...
This is a workaround while waiting on
https://github.com/eslint/typescript-eslint-parser/issues/337 .
Fixes #2471
2017-07-13 17:21:46 +10:00
Alex Rattray
ef91e28434
Merge pull request #2442 from karl/jsx-inline-single-expression
...
Allow single expressions in JSX to be inline
2017-07-12 21:32:48 -07:00
James Henry
ee822f99b9
Update tsep and add test for destructuring assignment ( #2443 )
...
Fixes #2229
2017-07-11 09:11:18 +10:00
Karl O'Keeffe
5e76ea7bdd
Allow single expressions in JSX to be inline
2017-07-10 20:02:30 +01:00
Lucas Azzola
b25935d7a3
TypeScript: allow type assertions to hug ( #2439 )
...
* TypeScript: allow type assertions to hug, fixes #2437
* Update snapshots
2017-07-10 22:37:43 +10:00
Lucas Azzola
4a320a9332
Add supervisory parens for bitwise operations ( #2429 )
...
* Add supervisory parens for bitwise operations, fixes #2424
* Flatten x | y | z
2017-07-08 17:31:28 +10:00
Lucas Azzola
7e96e01fba
Add more supervisory parens, closes #187 ( #2423 )
2017-07-07 15:57:17 +02:00
Lucas Azzola
8bbbc3a6f3
Remove parens for type assertions in binary expressions, fixes #2416 ( #2419 )
2017-07-07 13:02:43 +02:00
Lucas Azzola
82b80b3c79
Trim whitespace in descendant combinator, fixes #2410 ( #2411 )
...
* Trim whitespace in descendant combinator, fixes #2410
* Permit whitespace changes in clean-ast.js
2017-07-06 13:55:34 +02:00
Dan Wang
86c88ff278
Print TypeParameter even when unary function type ( #2406 )
2017-07-06 19:13:30 +10:00
Kevin Gibbons
28b3a4b925
Break sequence expressions ( #2388 )
...
* Add SequenceExpression tests
* Clean up printing of SequenceExpressions
* Remove test and lint
2017-07-04 22:50:57 +02:00
Karl O'Keeffe
06ae32ddce
Ensure there is a line break after leading JSX white space ( #2348 )
2017-07-03 12:43:10 +02:00
Lucas Azzola
6f9824778d
Strip BOM before parsing, fixes #2362 ( #2373 )
2017-07-01 18:11:13 +02:00
Jarda Snajdr
3f6a232cea
Fix indentation of a do-while condition ( #2359 )
...
Fixes #2353 . Use the same printing code for both `WhileStatement` and `DoWhileStatement`.
Fix calculation of `isInsideParenthesis` when printing a `LogicalExpression`. There is
no such thing as `DoStatement` -- it should be `DoWhileStatement`.
2017-06-29 15:46:25 -07:00
Simone Picciani
85e0bffa7d
Removed injectGlobal and keyframes ( #2342 )
2017-06-28 16:03:33 -07:00
Simone Picciani
067a0137bd
Add support for css, keyframes and injectGlobal keywords ( #2337 )
...
* styled components now support css keyword
* added support also for keyframes
* added comment to reflect the new keywords
* modified comment
* ignore css and keyframes when testing ast manipulations
* added also injectGlobal
2017-06-28 14:31:27 -07:00
Joseph Frazier
175cde1dc5
Force trailingComma option to "none" when parser is JSON ( #2335 )
...
* Run JSON tests with `trailingComma: "all"`
* Add test of `parser: 'json', trailingComma: 'all'` with non-.json extension
See https://github.com/prettier/prettier/issues/2308#issuecomment-311707801
* Force trailingComma option to "none" when parser is JSON
This fixes https://github.com/prettier/prettier/issues/2308
2017-06-28 09:29:47 -07:00
Joseph Frazier
8e37fd76e9
Add support for range-formatting GraphQL ( #2319 )
...
* Add test for range-formatting GraphQL
See https://github.com/prettier/prettier/issues/2296#issue-238985580
* Pass test for range-formatting GraphQL
See https://facebook.github.io/graphql/#sec-Appendix-Grammar-Summary.Query-Document
This fixes https://github.com/prettier/prettier/issues/2296
* Consider *Definition GraphQL nodes to be formattable
See https://github.com/prettier/prettier/pull/2319#discussion_r124569400
2017-06-28 09:21:11 -07:00
Lucas Azzola
678964b8de
fix(typescript): don't add namespace keyword to global declaration, fixes #2327 ( #2329 )
2017-06-28 07:53:10 -07:00
Christopher Chedeau
b231948a36
GraphQL: Print directives for field declarations ( #2317 )
2017-06-27 20:22:03 -07:00
Christopher Chedeau
45c8e40d8a
GraphQL: Implement schema ( #2316 )
2017-06-27 20:15:55 -07:00
Christopher Chedeau
019beb54e5
GraphQL: Fix directives separator ( #2315 )
...
I couldn't figure out what the separator was, I tried `,`, `on` but none of them worked. Turns out it is `|`!
2017-06-27 19:58:38 -07:00
Christopher Chedeau
14caabd635
GraphQL: Print arguments for FieldDefinition ( #2314 )
2017-06-27 19:49:59 -07:00
Christopher Chedeau
bbf8f76823
GraphQL: Implement scalar ( #2313 )
2017-06-27 19:34:25 -07:00
Christopher Chedeau
0a2a099efe
GraphQL: Implement interface ( #2312 )
2017-06-27 19:30:58 -07:00
Christopher Chedeau
8e31088761
GraphQL: Implement input ( #2311 )
2017-06-27 19:27:02 -07:00
Christopher Chedeau
b63e1c2dd7
GraphQL: Implement Enum ( #2310 )
2017-06-27 19:20:53 -07:00
Christopher Chedeau
51c7503dae
GraphQL: Implement DirectiveDefinition ( #2309 )
2017-06-27 19:10:07 -07:00
Christopher Chedeau
fbf4c3a952
GraphQL: Support object definition implements ( #2307 )
2017-06-27 18:51:56 -07:00
Christopher Chedeau
ee07ff5870
Fix master
2017-06-27 18:33:23 -07:00
Christopher Chedeau
af309e3acd
Add support for GraphQL TypeExtensionDefinition ( #2306 )
2017-06-27 18:26:43 -07:00
Christopher Chedeau
f96fe1ea5e
Initial support for GraphQL ObjectTypeDefinition ( #2305 )
...
It appears in some files inside of fb codebase
2017-06-27 18:22:04 -07:00
Christopher Chedeau
189027c7d3
GraphQL: Use spaces instead of commas ( #2303 )
...
"Daniel Schafer: Yeah, that's definitely what I'd describe as the canonical style; anytime you have two "things" on a line, use commas, but if you have a newline it's not needed."
2017-06-27 18:13:07 -07:00
Christopher Chedeau
4d46a3975b
GraphQL: Remove circular dependency in ast ( #2304 )
...
The tokens are attached to the location via the prototype (so they are not visible when you JSON.stringify) but the various places where we traverse the ast see them. It causes stack overflows and comments that are not printed because they are attached to tokens instead of real nodes.
Fixes #2302
2017-06-27 18:12:30 -07:00
Christopher Chedeau
850d51a033
Tweak name
2017-06-27 17:30:13 -07:00
Joseph Frazier
b47c0b4e04
Allow formatting ranges of JSON ( #2298 )
...
* Add test for https://github.com/prettier/prettier/issues/2297
* Add JSON types to isSourceElement()
See https://github.com/prettier/prettier/issues/2297
* Avoid expanding format range when possible
This fixes https://github.com/prettier/prettier/issues/2297
* Move JSON range test into tests/range_json
This is so that the AST_COMPARE=1 tests don't try to parse JSON with Flow.
* Check parser in isSourceElement()
Otherwise JSON formatting would format weird things inside of JS.
See https://github.com/prettier/prettier/pull/2298#discussion_r124407056
* Use arrow functions instead of .bind()
See https://github.com/prettier/prettier/pull/2298#discussion_r124409783
* Add test of range-formatting JSON identifier
See https://github.com/prettier/prettier/pull/2298/files#r124410750
* Allow range-formatting JSON identifier
See https://github.com/prettier/prettier/pull/2298/files#r124410750
* Fix lint
2017-06-27 16:04:42 -07:00
Joseph Frazier
5f063ab168
Fix locEnd() for postcss parser ( #2295 )
...
* Fix locEnd() for postcss parser
`node.source` doesn't have an `end`, but `node.nodes[-1].source` does.
Fixes https://github.com/prettier/prettier/issues/2267
* Add regression test for https://github.com/prettier/prettier/issues/2267
See https://github.com/prettier/prettier/pull/2295#issuecomment-311484343
* Make locEnd() postcss fix more focused
This passes the tests again.
* Use getLast() instead of .slice()
See https://github.com/prettier/prettier/pull/2295#discussion_r124398553
* Move CSS range test into tests/range_css
This is so that the AST_COMPARE=1 tests don't try to parse CSS with Flow.
2017-06-27 15:12:22 -07:00
Christopher Chedeau
6f4eade422
Go back to babylon beta 13 ( #2289 )
...
Fixes #2286
2017-06-27 11:51:23 -07:00
Christopher Chedeau
073a2071a8
Inline import('x') to avoid having trailing , ( #2288 )
...
Fixes #2287
2017-06-27 11:40:20 -07:00
Christopher Chedeau
803b7ff6b9
Add \n at the end of .graphql files ( #2285 )
...
We need to use the same hack as CSS unfortunately.
Fixes #2275
2017-06-27 09:49:15 -07:00
Christopher Chedeau
e707bdd52f
Print comments attached to {' '} ( #2283 )
...
We had two occurrences on fb codebase where people attached comments on `{' '}` which would be swallowed. Instead of dropping the comments, let's make the algorithm a bit less naive.
2017-06-27 09:35:03 -07:00
Karl O'Keeffe
be600337eb
Improve JSX output when there is a single expression ( #2274 )
2017-06-26 19:05:34 -07:00
Karl O'Keeffe
95a5f11be9
Tweak to support FB translation pipeline ( #2272 )
...
This also improves formatting when there are consecutive tag/expression elements with no white space between them.
2017-06-26 09:30:52 -07:00
Karl O'Keeffe
fe7fb260a4
Fix a case where significant whitespace was dropped ( #2270 )
2017-06-26 03:03:13 -07:00
Cyril Junod
400f34624f
Add module, class and typed nodes to sourceElements ( #2266 )
...
babylon flow typescript parsers
+ tests to cover module and class
2017-06-25 09:07:52 -07:00
Christopher Chedeau
9a55f5b2d6
Fix unstable arrow comments ( #2262 )
...
It outputted which is completely wrong
```js
<FlatList
renderItem={info => <span>{info.item.widget.missingProp // $FlowExpectedError - bad widgetCount type 6, should be Object
}</span>}
/>;
```
2017-06-25 12:30:09 +10:00
Christopher Chedeau
f71fcd0b65
Fix variance location ( #2261 )
...
Turns out when we refactored for TS, we moved it before "static" and it no longer parses. Oops.
2017-06-25 11:46:29 +10:00
Christopher Chedeau
38d4661ba9
Forward originalText in multiparser ( #2260 )
...
If we don't, all the places where we read from the original text (mostly comments) are reading into random places.
Fixes #2258
2017-06-24 17:54:09 -07:00
Christopher Chedeau
8def8e13b0
Add caching for printing ( #2259 )
...
* Add caching for printing
For printing the last argument expansion, we need to print the same node a bit differently with a flag. It's not easy to re-print just the node that is different so we end up printing all the sub-tree twice. Since it is often nested, it means that we run into an exponential complexity.
I finally found a simple solution: we can use a Map to store the nodes and their printed values. It is really cheap to do so (I can't notice a time difference with or without on normal code) and allows us to stop going through the two sub-trees in the bad case.
Fixes #1250
* Update printer.js
2017-06-24 14:01:02 -07:00
Christopher Chedeau
6663bab8a3
Support trailing commas for function calls ( #2257 )
2017-06-24 12:23:34 -07:00
Christopher Chedeau
cc85769231
Add support for --trailing-comma for GraphQL ( #2254 )
...
Fixes #2251
2017-06-24 11:20:45 -07:00
Christopher Chedeau
59b3a9bc56
Add support for --no-bracket-spacing for GraphQL ( #2255 )
...
Fixes #2252
2017-06-24 11:06:56 -07:00
Christopher Chedeau
2f96357884
Attach comments in multiparser ( #2253 )
...
Otherwise it doesn't print comments :(
2017-06-24 11:06:50 -07:00
Joseph Frazier
4b955a14c4
Return original input when specified range is unformattable ( #2250 )
...
* Add failing test for range-formatting whitespace
See https://github.com/prettier/prettier/issues/2247#issue-238322065
* Return original input when specified range is unformattable
Fixes https://github.com/prettier/prettier/issues/2247
2017-06-24 09:41:10 -07:00
Cyril Junod
b0413fc1fe
Range Formatter: Remove Program/File from valid Ancestor ( #2248 )
...
* Remove Program/File from valid Ancestor
Fix edge range formatting entire file.
* Fix lint with `yarn lint -- --fix`
See https://travis-ci.org/prettier/prettier/jobs/246569943#L242-L260
2017-06-24 12:30:27 -04:00
Lucas Azzola
3474056b36
fix(typescript): handle ObjectPattern instead of ObjectExpression inside BinaryExpression, fixes #2237 ( #2238 )
2017-06-23 07:53:42 -07:00
Karl O'Keeffe
0cc0ebc3bc
Allow JSX lines to be recombined ( #1831 )
...
* Allow JSX lines to be recombined
* Add test case for `<br />` breaking expression
* Fix issue where JSX whitespace could be dropped
* Newlines were incorrectly being preserved when JSX contained text
2017-06-22 09:19:44 -07:00
Christopher Chedeau
39954f7951
Handle conditions inside of a ternary ( #2228 )
...
Fixes #2122
2017-06-21 18:17:30 -07:00
Christopher Chedeau
ec1b672bbf
Don't indent + in object value ( #2227 )
...
This is a "regression" from when we started using the same heuristic for `=` and `:`
Fixes #2129
2017-06-21 15:58:12 -07:00
Christopher Chedeau
c36dd48339
First try scss when there's an @import with comma ( #2225 )
...
It's annoying that the less parser is so lenient that it drops things instead of throwing :(
Fixes #2125
2017-06-21 15:45:55 -07:00
Christopher Chedeau
aac0d1dda0
Support inline template for new calls ( #2222 )
...
I merged the implementation of new and call expressions in this PR.
Fixes #2215
2017-06-21 15:45:44 -07:00
Joseph Frazier
63c47c85e0
JSON: Print trailing newline ( #2226 )
...
* JSON: Append trailing newline
This partially addresses https://github.com/prettier/prettier/issues/2223
* Dedupe printing of JSON trailiing newline
* JSON: Add tests for newlines after boolean/null/number/string
* JSON: Fix tests for newlines after boolean/null/number/string, simplify code
This fixes https://github.com/prettier/prettier/issues/2223
2017-06-21 15:40:19 -07:00
Christopher Chedeau
08060e7c94
Use fill for CSS values ( #2224 )
...
This looks less weird to have them flow as they fit than breaking on every single line.
Fixes #2213
2017-06-21 15:13:51 -07:00
Karl O'Keeffe
04c41f6758
Fix up empty JSX element detection ( #2220 )
2017-06-21 13:48:02 -07:00
Christopher Chedeau
313519d8ae
Allow long media rules to break ( #2219 )
...
Fixes #2198
2017-06-21 13:02:16 -07:00
Brian Ng
7cef77433a
Bump babylon version ( #2205 )
2017-06-20 08:36:14 -07:00
Lucas Azzola
43521565e7
CSS: lowercase hex colors, closes #2139 ( #2203 )
2017-06-20 23:07:31 +10:00
suǝʞǝǝpʇ
16db5971f0
Fix css-modules composes breaking with long line width ( #2190 )
...
* fix(css): css-modules composes breaking
* refactor(css): to use removeLines in case of composes
2017-06-18 23:41:10 -10:00
Jon Wong
1511609c01
Support for printing GraphQL comments ( #2187 )
...
* save point
* prettier
* Reverting change to check SOF and EOF
* Removing console.log
* Fixing grouping
* Adding comment output
* Basic comments
* Printing comments
* Getting comments to work
* Adding in basic handling of graphql comments
* Removing parser normalization (i assume it'll be added with language support)
* Lint error
* Reverting special cases
* Dealing with off-by-one error
2017-06-18 07:37:52 -10:00
Joseph Frazier
69808cebfb
Format JSON literals like object literals ( #2181 )
...
* Format JSON literals like object literals
Following up on commit a42db30
(https://github.com/prettier/prettier/issues/2173 ),
this change makes it so that literals in JSON files are formatted as
they would be in an object literal. This normalizes trailing zeroes,
exponential notation, unnecessarily escaped characters, etc.
It works by using babylon to parse literals as expressions, and putting
the result in the AST instead of a `json-literal` node. Since JSON
string literals have to be double-quoted, there's a new
`__prettier__isJson` flag on each node, which is used by the printer to
force double-quotes.
* json: Check options.parser when formatting StringLiteral
This is instead of having a custom AST property. See
https://github.com/prettier/prettier/pull/2181#discussion_r122578251
* multiparser: Use babylon.parseExpression
See https://github.com/prettier/prettier/pull/2181#discussion_r122578354
* json: Don't split result AST node into two
See https://github.com/prettier/prettier/pull/2181#discussion_r122578499
* json: Don't use babylon parser to build expression nodes
See https://github.com/prettier/prettier/pull/2181#discussion_r122579052
* Revert "multiparser: Use babylon.parseExpression"
This reverts commit 3d7a4362880d39fac0cea88b5d0186a29538cf6f.
* Remove unused parameter from babylon parser
* json: Remove unused constructorTypes
2017-06-17 20:49:22 -04:00
Joseph Frazier
a42db30946
Add JSON support ( #2173 )
...
* Add JSON support
This fixes https://github.com/prettier/prettier/issues/1973 by using
[json-to-ast] to parse JSON, then converting the AST into a
mostly-Babylon AST, so as to piggyback on the existing printer logic.
Identifiers and literals are currently printed verbatim from the input,
but this could be improved upon later (at least for literals, not sure
about identifiers).
[json-to-ast]: https://github.com/vtrushin/json-to-ast
* Rename `json-to-ast` parser to `json`
See https://github.com/prettier/prettier/pull/2173#discussion_r122574644
* json: Use createError to have a pretty error
See https://github.com/prettier/prettier/pull/2173#discussion_r122574748
* json: Transform AST without mutations
See https://github.com/prettier/prettier/pull/2173#discussion_r122574690
2017-06-17 10:36:42 -10:00
Lucas Azzola
bff28023b3
Comments: attach method name comments with estree parsers, fixes #2141 ( #2170 )
2017-06-17 22:22:39 +10:00
Lucas Azzola
c669a1db72
TypeScript: group function params in call/construct signatures, fixes #2163 ( #2169 )
2017-06-17 12:09:18 +10:00
Stephen Wan
a005211c96
Fix extra semicolon in ambient typescript declaration emit ( #2165 ) ( #2167 )
...
* fix(typescript): add failing ambient declaration test
* fix(typescript): fix failing test case for ambient function exports
2017-06-16 08:20:59 -10:00
Lucas Azzola
7e60d70f97
fix(typescript): always break interfaces onto multiple lines, fixes #2159 ( #2161 )
2017-06-15 14:34:54 -10:00
Lucas Azzola
9e7b02d50e
Print {} in import if it's in the source, fixes #2145 ( #2150 )
2017-06-15 20:19:01 +10:00
Lucas Azzola
a2328edced
TypeScript: keep parens around with yield/await non-null assertion, fixes #2137 ( #2149 )
2017-06-15 09:34:12 +10:00
Joseph Frazier
48bbd9cb6b
Don't insert a cursor placeholder for a value-less path ( #2136 )
...
* Test that no cursor placeholder is inserted for a value-less path
This was taken from https://github.com/prettier/prettier/issues/2131
* Don't insert a cursor placeholder for a value-less path
This fixes https://github.com/prettier/prettier/issues/2131
2017-06-14 09:05:06 -07:00
Lucas Azzola
b7e1c366e0
Vue: pretty-print binding syntax ( #2108 )
...
* feat(vue): pretty-print :class attributes
* feat(vue): switch to brand new custom parser API! 🎉
* refactor(vue): move AST manipulation to post-parse
2017-06-14 22:33:15 +10:00
James Henry
9b772cb4fd
Add test for comment in TypeScript type parameters ( #2132 )
2017-06-14 20:10:03 +10:00
Christopher Chedeau
abfdbe1896
Upgrade typescript to 2.4 ( #2120 )
...
Fixes #2117
2017-06-13 09:47:40 -07:00
Rodrigo Pombo
8dd0cb2a05
Format CSS in template literals with expressions ( #2102 )
...
* Add support for styled-jsx with expressions
* Lint
* Fix require for Node 4
* Re-create template-literal document when replacing placeholders
* Add support for styled-components with expressions
* Fix merge
* Move css library detection to functions
2017-06-13 09:45:16 -07:00
adanoff
44b5da8ade
Add `graphql.experimental` parsing for react-relay ( #2116 )
2017-06-12 17:16:17 -07:00
Christopher Chedeau
62b9e29af5
Fix comments in non strict mode ( #2114 )
...
It turns out that by returning there, we didn't go through the line `delete ast.tokens` and the comments attachment logic would attach it to a random token. It's great that this fail-safe caught this bug!
Fixes #2111
2017-06-12 09:50:51 -07:00
Lucas Azzola
486a89bfdc
fix(typescript): workaround - don't wrap directives in parens, fixes #2074 ( #2107 )
2017-06-11 19:10:56 -07:00
Lucas Azzola
e8f12cf621
TypeScript: Remove parens from type annotations where possible ( #2098 )
...
* fix(typescript): remove parens from union types where possible, fixes #1885
* fix(typescript): ensure parenthesis removal is stable
* fix(typescript): don't strip parens around function type
2017-06-11 18:06:47 -07:00
Lucas Azzola
9c608d2ec1
fix(typescript): use printFunctionParams for call/construct signature, fixes #2105 ( #2106 )
2017-06-11 16:06:38 -07:00
Lucas Azzola
ec7d99439d
fix(typescript): print arrow function type params on same line as params, fixes #2099 ( #2101 )
2017-06-11 07:30:51 -07:00
Lucas Azzola
4395e09b78
fix(import): allow break with both default named import, fixes #2050 ( #2096 )
2017-06-10 21:55:21 -07:00
Lucas Azzola
a79a444bac
fix(variable-declarator): indent first variable in one-var scenario, fixes #2072 ( #2095 )
2017-06-10 21:19:50 -07:00
Lucas Azzola
fdb7467de7
feat(html): add support for HTML fragments ( #2093 )
2017-06-10 20:10:34 -07:00
Lucas Azzola
b4f0ff346e
feat(mutliparser): add react-relay and graphql-tag parsing ( #2092 )
2017-06-10 08:59:27 -07:00
Lucas Azzola
d1b94c540c
Implement parser switching (HTML, Vue, styled-components) ( #2086 )
...
* feat(multiparser): implement switching from html -> css,js,ts
* feat(multiparser): use quasi value instead of originalText
2017-06-10 08:03:39 -07:00
Lucas Azzola
77f0c05d2a
fix(method-chain): break on non-literal computed member expression, fixes #2075 ( #2087 )
2017-06-10 07:47:22 -07:00
Lucas Azzola
1e08f03554
fix(typescript): break on multiple interface extends, fixes #2043 ( #2085 )
2017-06-10 07:46:59 -07:00
Lucas Azzola
f7819d5695
CSS: implement prettier-ignore ( #2089 )
...
* fix(css): implement prettier-ignore, fixes #2007
* refactor(css): move prettier-ignore to printNodeSequence
2017-06-10 07:45:59 -07:00
Lucas Azzola
a9409f11e7
fix(css): print @else on same line as }, fixes #2053 ( #2088 )
2017-06-10 07:40:05 -07:00
Lucas Azzola
d00956d51d
feat(html): add parse5/htmlparser2 printer ( #2083 )
2017-06-09 19:22:59 -07:00
Christopher Chedeau
f399e90bc2
Preserve lines after directives ( #2070 )
...
Looks like we were only doing it at the top level, we should do it everywhere.
Fixes #2067
2017-06-08 17:10:01 -07:00
Christopher Chedeau
939734b75e
Use ifBreak instead of shouldBreak ( #2063 )
...
shouldBreak is only a heuristic to enforce a break, if it breaks "naturally", then it won't be applied.
Fixes #2055
2017-06-08 11:47:49 -07:00
Tim Griesser
df26cc05cc
Support graphql ListType ( #2061 )
2017-06-08 09:34:35 -07:00
Christopher Chedeau
883e637fa9
Support the Keyword type ( #2056 )
...
This is an issue in https://github.com/eslint/typescript-eslint-parser/issues/315
Fixes #2049
2017-06-08 09:25:28 -07:00
Tim Griesser
e9045e4bcf
Support graphql NonNullType ( #2060 )
2017-06-08 09:20:41 -07:00
Pier Paolo Ramon
126727380d
CSS: Every selector is now printed in its own line ( #2047 )
...
Changes the behaviour for line breaking inside selector lists (those
separated by ',') so that every selector is in its own line.
Fixes #1962
2017-06-08 07:46:24 -07:00
Christopher Chedeau
924363193b
Check if the next group has comments ( #2040 )
...
Fixes #1958
Fixes #1959
2017-06-07 15:20:11 -07:00
Christopher Chedeau
1edb1f261b
Include typeAnnotation inside of node location ( #2039 )
...
We should remove this hack once https://github.com/eslint/typescript-eslint-parser/issues/314 lands
Fixes #1946
2017-06-07 15:05:46 -07:00
Christopher Chedeau
42b0368e3d
Fix decorator comments for export class ( #2038 )
...
We need to do the same location trick for export class unfortunately.
Fixes #1956
2017-06-07 14:55:55 -07:00
Christopher Chedeau
b730f4eccf
Add group around TSMethodSignature ( #2037 )
...
This ensures that the comment size is not taken into account during measurement
Fixes #1976
2017-06-07 14:20:55 -07:00
Christopher Chedeau
09f147decd
Do not throw for unprinted comments inside of JSX ( #2036 )
...
Fixes #1990
2017-06-07 12:57:03 -07:00
Christopher Chedeau
ccda4c7115
Break decorator before content ( #2032 )
...
Fixes #1996
2017-06-07 12:40:47 -07:00
Christopher Chedeau
e16478ef80
Fix less &:extends when parsed with scss ( #2034 )
...
This is the only breakage that people ever reported with CSS so I'm happy adding one edge case like this.
Fixes #1967
2017-06-07 12:40:36 -07:00
Christopher Chedeau
cabae6d877
Fix parenthesis for call expression inside of member expression inside of new ( #2035 )
...
Fixes #2033
2017-06-07 12:40:27 -07:00
Christopher Chedeau
c7cacf0529
Break if string | null ( #2028 )
...
We were a bit too aggressive around the `| null` heuristic.
Fixes #2002
2017-06-07 11:51:32 -07:00
Christopher Chedeau
c9c8512170
Only prevent lone `set` if there's no type annotations ( #2026 )
...
If there are, it's not ambiguous.
Fixes #2023
2017-06-07 11:51:25 -07:00
Christopher Chedeau
5ba0b0ec87
Add semi for functions without body ( #2025 )
...
We don't need to be overly restrictive and should add the semi if there's no body
Fixes #2003
2017-06-07 11:51:17 -07:00
Alexandre BODIN
8ec1b40961
GraphQL: Add support for union types ( #2014 )
2017-06-07 10:33:46 -07:00
Sashko Stubailo
0583fd4ce6
Add alias and null value ( #2017 )
...
Add kitchen sink test case
2017-06-06 18:06:15 -07:00
Sashko Stubailo
88f962beee
Add support for GraphQL directies ( #2015 )
2017-06-06 17:42:47 -07:00
Joseph Frazier
0cfd772fd2
Protect SwitchCase statements from ASI ( #2008 )
...
* Add no-semi test with SequenceExpression
Adapted from https://github.com/prettier/prettier/issues/2006
* Protect SequenceExpressions from ASI
Fixes https://github.com/prettier/prettier/issues/2006
* Add test for ASI protection of SequenceExpression outside SwitchCase
See https://github.com/prettier/prettier/pull/2008#issuecomment-306614217
* Revert "Protect SequenceExpressions from ASI"
This reverts commit ca644fad8072c90a977ad8a2f29674bc72f679e8.
* Protect SwitchCase statements from ASI
See https://github.com/prettier/prettier/pull/2008#issuecomment-306614217
Fixes https://github.com/prettier/prettier/issues/2006
2017-06-06 14:28:51 -07:00
Sashko Stubailo
7c051804a8
Add support for GraphQL object values ( #2010 )
2017-06-06 14:28:15 -07:00
Sashko Stubailo
c441f87fc0
Add GraphQL fragment support ( #2005 )
2017-06-06 12:35:40 -07:00
Rodrigo Pombo
d4774edd03
Parse CSS in template literals (styled-jsx) ( #1984 )
...
* Add basic styled-jsx parsing
* Use eval("require")
* Remove template literal raw and cooked values when it contains CSS
* Set postcss parser to options and group subtree parts
* Gracefully give up TemplateLiteral formatting when it fails
2017-06-06 08:28:13 -07:00
Sashko Stubailo
6d00644c78
Add GraphQL variable definition support ( #1995 )
2017-06-06 08:26:04 -07:00
Daniel Tschinder
df7311a7f3
Add parens around all string literals at top level ( #1999 )
2017-06-06 08:24:13 -07:00
Sashko Stubailo
c80e82c7d7
Add support for list values ( #1994 )
...
Run the linter
2017-06-05 23:45:15 -07:00
Christopher Chedeau
c46a20c8c1
re-run tests
2017-06-05 22:26:35 -07:00
Sashko Stubailo
df08dc4a56
Add support for arguments with soft line break ( #1993 )
2017-06-05 22:25:12 -07:00
Sashko Stubailo
8cb259eac7
GraphQL: Add support for printing operation names ( #1992 )
...
* Add support for printing GraphQL operation names
* Remove extra empty line at the end
2017-06-05 22:24:01 -07:00
Sashko Stubailo
76c5733b55
GraphQL: Add support for formatting fields in selection sets ( #1991 )
...
* GraphQL: Add support for formatting fields in selection sets
(Doesn't yet handle arguments or directives)
* Remove extra space
2017-06-05 22:23:03 -07:00
Joseph Frazier
c863cbeac8
Translate cursor relative to nearest node, not SourceElement ( #1989 )
...
* Add test demonstrating SourceElement-relative cursor translation
See https://github.com/prettier/prettier/issues/1981#issuecomment-306326739
* Translate cursor relative to nearest node, not SourceElement
This partially address https://github.com/prettier/prettier/issues/1981
See https://github.com/prettier/prettier/issues/1981#issuecomment-306326739
* Add test demonstrating incorrect cursor translation
Since the `cursorOffset` option (introduced in #1637 ) works by tracking
the cursor position relative to an AST node (rather than a CST token),
it can produce incorrect results.
See https://github.com/prettier/prettier/issues/1981
2017-06-05 18:51:53 -07:00
Karl O'Keeffe
73432c2ce7
Position JSX whitespace (`{" "}`) at the end of lines ( #1964 )
...
* Position JSX whitespace at the end of lines
Currently we place JSX whitespace at the beginning of lines.
* Use `isLiteral` when determining JSX whitespace
2017-06-05 21:52:54 +01:00
Jon Wong
e33d6773d6
Adding support for `graphql` ( #1982 )
...
* Initial GraphQL implementation
This is the bare minimum amount of code to make graphql work. Turns out it's pretty easy to add support for other languages :)
* Fixing support for `graphql` parsing
There was a few structural changes with the addition of CSS and Typescript that we had to take into account.
* Fixing file glob, adding `graphql` to yarn.lock
* Removing extraneous file
* Adding `graphql` parser, style changes
* Splitting out graphql printer
* Removing merge conflict
* Fixing yarn.lock
* Addressing code review, using `createError`
* Adding release config
* Using exact version
* Removing destructuring
2017-06-05 12:34:08 -07:00
Lucas Azzola
642ac7e230
fix(typescript): print semi in class index signatures, fixes #1960 ( #1961 )
2017-06-04 07:21:33 -07:00
Lucas Azzola
6697122e28
fix(decorators): do not inline methods with decorators with babylon, fixes #1933 ( #1934 )
2017-06-03 05:24:24 -07:00
Lucas Azzola
649cec7fdd
TypeScript: fix trailing comma in enum ( #1938 )
...
* fix(typescript): fix trailing comma in enum, fixes #1932
* fix(typescript): use --trailing-comma es5 for enums
2017-06-03 05:20:36 -07:00
Lucas Azzola
c57f2ab507
fix(typescript): no semi after export default abstract class, fixes #1926 ( #1937 )
2017-06-03 05:19:39 -07:00
Lucas Azzola
2ef169eb67
fix(typescript): print semi with inline interfaces/types, fixes #1930 ( #1936 )
2017-06-03 05:18:59 -07:00
Christopher Chedeau
2b6c1cd27e
Update typescript-eslint ( #1924 )
...
This applies https://github.com/eslint/typescript-eslint-parser/pull/308 and https://github.com/eslint/typescript-eslint-parser/pull/303 to fix issues on prettier.
Fixes #1870
2017-06-02 16:19:15 -07:00
Christopher Chedeau
dae7203be6
Fix As parenthesis for real ( #1923 )
...
Instead of doing it inside of object, we need to have them use the existing mechanism that checks if the left-most character is a paren.
2017-06-02 16:08:45 -07:00
Christopher Chedeau
3264da9cab
Fix leading comment ( #1920 )
...
It turns out that leading comment is attached to the CallExpression which is the last one and not the first one if they fit in a single line, so we want to not check that one.
Fixes #1892
2017-06-02 15:50:43 -07:00
Christopher Chedeau
db0be7fd5b
fix conflict
2017-06-02 15:44:50 -07:00
Christopher Chedeau
323d64fb84
Port intersection inlining logic to TypeScript ( #1919 )
...
Fixes #1880
2017-06-02 15:40:33 -07:00
Christopher Chedeau
0d239477cb
Use semi-colon for object separator ( #1918 )
...
Looks like the convention for typescript separator is `;` whereas for flow it's `,`. Let's migrate to that.
Fixes #1896
Fixes #1879
Fixes #1874
2017-06-02 15:32:51 -07:00
Christopher Chedeau
74f0d3979b
Add parenthesis for yield and await inside of `as` ( #1915 )
...
Fixes #1913
2017-06-02 15:10:02 -07:00
Christopher Chedeau
2f9ea794db
Always expand enums ( #1914 )
...
We do the same for classes, and it's usually written that way even if it fits in one line, even in the TS docs: https://www.typescriptlang.org/docs/handbook/enums.html
Fixes #1873
2017-06-02 15:09:55 -07:00
Christopher Chedeau
a255977009
Do not make variable multilines inside of for loop ( #1912 )
...
Fixes #1876
2017-06-02 15:00:16 -07:00
Christopher Chedeau
e58dd2bf0b
Add semi for ts function declarations without body ( #1911 )
...
Fixes #1891
2017-06-02 14:49:37 -07:00
Christopher Chedeau
6933d16125
Inline decorators with no arguments ( #1910 )
...
Fixes #1898
2017-06-02 14:40:39 -07:00
Christopher Chedeau
0e35d3758a
Fix <this.x /> ( #1886 )
...
Would be nice to get it properly handled in https://github.com/eslint/typescript-eslint-parser/issues/307
Fixes #1877
2017-06-02 14:27:27 -07:00
Christopher Chedeau
74f7f96fe4
Move accessibility before static ( #1908 )
...
I looked through all the places where we display accessibility and all of them now have a consistent way of printing all those modifiers.
Fixes #1877
2017-06-02 14:27:19 -07:00
Kevin Gibbons
4915e0228e
Require semicolons before class props named 'in' or 'instanceof' ( #1878 )
2017-06-02 10:52:11 -07:00
Lucas Azzola
83c5253429
fix(typescript): look at source to determine export = statement ( #1868 )
2017-06-02 08:32:40 -07:00
Christopher Chedeau
faf2ac5f9e
Hack to get export default work ( #1866 )
...
Fixes #1854
2017-06-02 08:12:03 -07:00
Lucas Azzola
38eec13a03
TypeScript: temp fix for missing readonly keyword ( #1865 )
...
* fix(typescript): temp fix for missing readonly keyword, fixes #1845
* fix(typescript): use non-master commit from tsep
2017-06-02 08:09:24 -07:00
Lucas Azzola
8511e798dc
feat(decorators): inline more types of decorators ( #1864 )
2017-06-02 07:38:44 -07:00
Lucas Azzola
9ed94c77ab
fix(typescript): do not print trailing comma in TS tuple type, fixes #1858 ( #1863 )
2017-06-02 07:16:41 -07:00
Lucas Azzola
ede078c0d3
fix(typescript): print static before accessibility, fixes #1855 ( #1862 )
2017-06-02 07:16:11 -07:00
Christopher Chedeau
bc4075ac65
Add parenthesis around object inside of as ( #1852 )
...
Fixes #1851
2017-06-01 21:10:05 -07:00
Christopher Chedeau
3f8c4d6974
Fix yet another form of class with the same ast ( #1849 )
...
Fixes #1847
2017-06-01 19:02:15 -07:00
Joseph Frazier
4bfeb9064d
Add `cursorOffset` option for cursor translation ( #1637 )
...
* Add `formatWithCursor` API with `cursorOffset` option
This addresses https://github.com/prettier/prettier/issues/93 by
adding a new option, `cursorOffset`, that tells prettier to determine
the location of the cursor after the code has been formatted. This is
accessible through the API via a new function, `formatWithCursor`, which
returns a `{formatted: string, cursorOffset: ?number}`.
Here's a usage example:
```js
require("prettier").formatWithCursor(" 1", { cursorOffset: 2 });
// -> { formatted: '1;\n', cursorOffset: 1 }
```
* Add `--cursor-offset` CLI option
It will print out the offset instead of the formatted output. This
makes it easier to test. For example:
echo ' 1' | prettier --stdin --cursor-offset 2
# prints 1
* Add basic test of cursor translation
* Document `cursorOffset` option and `formatWithCursor()`
* Print translated cursor offset to stderr when --cursor-offset is given
This lets us continue to print the formatted code, while also
communicating the updated cursor position.
See https://github.com/prettier/prettier/pull/1637#discussion_r119735496
* doc-print cursor placeholder in comments.printComments()
See https://github.com/prettier/prettier/pull/1637#discussion_r119735149
* Compare array index to -1 instead of >= 0 to determine element presence
See https://github.com/prettier/prettier/pull/1637#discussion_r119736623
* Return {formatted, cursor} from printDocToString() instead of mutating options
See https://github.com/prettier/prettier/pull/1637#discussion_r119737354
2017-06-01 15:52:29 -07:00
Karl O'Keeffe
f4ef1c2c97
JSX whitespace on the same line as text ( #1829 )
...
This tweaks our JSX formatting to only put a JSX whitespace `{" "}` on a line by itself when it comes before or after a multiline element.
When preceding a text or single line element it appear on the same line as that element.
2017-05-31 10:16:50 -07:00
Karl O'Keeffe
a680cd8534
Fix unstable JSX output by ensuring we follow `fill` rules. ( #1827 )
...
* Fix unstable JSX output by ensuring we follow `fill` rules.
This changes makes us more strict about ensuring our JSX children follow the alternating content/whitespace format expected by the `fill` primitive.
Previously there were some cases where could get out of sync which would throw out the formatting.
* Simplify whitespace wrangling
# Conflicts:
# src/printer.js
2017-05-31 09:42:36 -07:00
Christopher Chedeau
fa708d102a
Remove trailing commas for generics in TypeScript ( #1832 )
...
Fixes #1820
2017-05-31 09:22:00 -07:00
Christopher Chedeau
3097f9b2fe
Do not indent nested ternaries ( #1822 )
...
This avoids making it seems like it is indented by 4 characters instead of two. The downside is that if the condition is multi-line it's not going to be properly aligned, but I feel it's a better trade-offs. If you are doing nested ternaries, you usually have small conditions.
2017-05-30 10:08:06 -07:00
Christopher Chedeau
73ff0ef9ea
Add group around implements ( #1821 )
...
This shouldn't break if it fits in one line.
Fixes #1818
2017-05-30 09:45:07 -07:00
Joseph Frazier
ea27846d1f
Don't force line break in empty loop bodies ( #1815 )
...
This makes them consistent with empty function bodies.
Fixes https://github.com/prettier/prettier/issues/1356
2017-05-30 09:39:10 -07:00
Christopher Chedeau
eeb8616e3c
Add parenthesis for single arg types with generics ( #1814 )
...
Fixes #1813
2017-05-29 16:59:45 -07:00
Christopher Chedeau
2ab3d6d6ac
Workaround bug with comment ending in */ ( #1810 )
...
Reported in the original repo: https://github.com/postcss/postcss-scss/issues/64
2017-05-29 13:05:20 -07:00
Christopher Chedeau
59e4e83355
Break before combinators and indent ( #1809 )
2017-05-29 12:55:14 -07:00
Christopher Chedeau
f34492d7e5
Strip leading space for first combinators ( #1807 )
2017-05-29 12:49:25 -07:00