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