prettier 0.14.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +84 -1
- data/README.md +11 -1
- data/package.json +1 -1
- data/src/nodes/args.js +14 -1
- data/src/nodes/calls.js +2 -0
- data/src/nodes/flow.js +22 -7
- data/src/nodes/loops.js +42 -21
- data/src/nodes/strings.js +17 -5
- data/src/ripper.rb +13 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4601f1c4bcd732027d5e7077aeece6ce80485b33f6d6122149903a3b768bae01
|
4
|
+
data.tar.gz: 7b8934c54be0b0125b25325d45a82d801314c9a4f6074033f9e719db8e873ffc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5b9adb4c97a45dd1323cd36af7e8fbd6b542a5bb15f9c5c5824155ee09ea2c6cd2d4b0e27eedcfb4c3d79b1045fa7454cfba3ead575262a1740352a74f47798d
|
7
|
+
data.tar.gz: 3e6bd216100a983f702ca001c1f2578609361fe11e7e7a3ffa70da6b8a0db988d23afd3d7ba5328dfea8f0b1fe5d124bd9767f498708c931aef27e6f05994c40
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,88 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
|
|
6
6
|
|
7
7
|
## [Unreleased]
|
8
8
|
|
9
|
+
## [0.15.0] - 2019-08-06
|
10
|
+
|
11
|
+
### Changed
|
12
|
+
|
13
|
+
- If xstring literals (command line calls surrounded by backticks) break, then we indent and place the command on a new line. Previously, this was resulting in new lines getting added each time the code was formatted. Now this happens correctly. (Thanks to @dudeofawesome for the report.)
|
14
|
+
- When a `while` or `until` loop modifies a `begin...end` statement, it must remain in the modifier form or else it changes sematic meaning. For example,
|
15
|
+
|
16
|
+
<!-- prettier-ignore -->
|
17
|
+
```ruby
|
18
|
+
begin
|
19
|
+
foo
|
20
|
+
end while bar
|
21
|
+
```
|
22
|
+
|
23
|
+
cannot be transformed into:
|
24
|
+
|
25
|
+
<!-- prettier-ignore -->
|
26
|
+
```ruby
|
27
|
+
while bar
|
28
|
+
foo
|
29
|
+
end
|
30
|
+
```
|
31
|
+
|
32
|
+
because that would never execute `foo` if `bar` is falsy, whereas in the initial example it would have. (Thanks to @krachtstefan for the report.)
|
33
|
+
|
34
|
+
- When transforming a block into the `Symbol#to_proc` syntax from within a list of arguments inside of an `aref` node (i.e., `foo[:bar].each`), we can't put the block syntax inside the brackets. (Thanks to @jviney for the report.)
|
35
|
+
- Values for the `return` keyword that broke the line were previously just printed as they were, which breaks if you have a block expression like an `if` or `while`. For example,
|
36
|
+
|
37
|
+
<!-- prettier-ignore -->
|
38
|
+
```ruby
|
39
|
+
return foo ? bar : baz
|
40
|
+
```
|
41
|
+
|
42
|
+
if the line was set to very short would be printed as:
|
43
|
+
|
44
|
+
<!-- prettier-ignore -->
|
45
|
+
```ruby
|
46
|
+
return if foo
|
47
|
+
bar
|
48
|
+
else
|
49
|
+
baz
|
50
|
+
end
|
51
|
+
```
|
52
|
+
|
53
|
+
which wouldn't work. Instead, they now get printed with parentheses around the value, as in:
|
54
|
+
|
55
|
+
<!-- prettier-ignore -->
|
56
|
+
```ruby
|
57
|
+
return(
|
58
|
+
if foo
|
59
|
+
bar
|
60
|
+
else
|
61
|
+
baz
|
62
|
+
end
|
63
|
+
)
|
64
|
+
```
|
65
|
+
|
66
|
+
(Thanks to @jakeprime for the report.)
|
67
|
+
|
68
|
+
- When switching from a double-quoted string to a single-quoted string that contained escaped double quotes, the backslashes would stay in the string. As in:
|
69
|
+
|
70
|
+
<!-- prettier-ignore -->
|
71
|
+
```ruby
|
72
|
+
"Foo \"Bar\" Baz"
|
73
|
+
```
|
74
|
+
|
75
|
+
would get formatted as:
|
76
|
+
|
77
|
+
<!-- prettier-ignore -->
|
78
|
+
```ruby
|
79
|
+
'Foo \"Bar\" Baz'
|
80
|
+
```
|
81
|
+
|
82
|
+
but now gets formatted as:
|
83
|
+
|
84
|
+
<!-- prettier-ignore -->
|
85
|
+
```ruby
|
86
|
+
'Foo "Bar" Baz'
|
87
|
+
```
|
88
|
+
|
89
|
+
(Thanks to @jakeprime for the report.)
|
90
|
+
|
9
91
|
## [0.14.0] - 2019-07-17
|
10
92
|
|
11
93
|
### Added
|
@@ -463,7 +545,8 @@ would previously result in `array[]`, but now prints properly. (Thanks to @xipgr
|
|
463
545
|
|
464
546
|
- Initial release 🎉
|
465
547
|
|
466
|
-
[unreleased]: https://github.com/prettier/plugin-ruby/compare/v0.
|
548
|
+
[unreleased]: https://github.com/prettier/plugin-ruby/compare/v0.15.0...HEAD
|
549
|
+
[0.15.0]: https://github.com/prettier/plugin-ruby/compare/v0.14.0...v0.15.0
|
467
550
|
[0.14.0]: https://github.com/prettier/plugin-ruby/compare/v0.13.0...v0.14.0
|
468
551
|
[0.13.0]: https://github.com/prettier/plugin-ruby/compare/v0.12.3...v0.13.0
|
469
552
|
[0.12.3]: https://github.com/prettier/plugin-ruby/compare/v0.12.2...v0.12.3
|
data/README.md
CHANGED
@@ -159,7 +159,8 @@ The package is available as open source under the terms of the [MIT License](htt
|
|
159
159
|
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
|
160
160
|
|
161
161
|
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
|
162
|
-
<!-- prettier-ignore -->
|
162
|
+
<!-- prettier-ignore-start -->
|
163
|
+
<!-- markdownlint-disable -->
|
163
164
|
<table>
|
164
165
|
<tr>
|
165
166
|
<td align="center"><a href="https://kevindeisz.com"><img src="https://avatars2.githubusercontent.com/u/5093358?v=4" width="100px;" alt="Kevin Deisz"/><br /><sub><b>Kevin Deisz</b></sub></a><br /><a href="https://github.com/prettier/plugin-ruby/commits?author=kddeisz" title="Code">💻</a> <a href="https://github.com/prettier/plugin-ruby/commits?author=kddeisz" title="Documentation">📖</a> <a href="https://github.com/prettier/plugin-ruby/commits?author=kddeisz" title="Tests">⚠️</a> <a href="https://github.com/prettier/plugin-ruby/issues?q=author%3Akddeisz" title="Bug reports">🐛</a></td>
|
@@ -184,9 +185,18 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
|
|
184
185
|
<td align="center"><a href="https://www.andywaite.com"><img src="https://avatars1.githubusercontent.com/u/13400?v=4" width="100px;" alt="Andy Waite"/><br /><sub><b>Andy Waite</b></sub></a><br /><a href="https://github.com/prettier/plugin-ruby/commits?author=andyw8" title="Documentation">📖</a></td>
|
185
186
|
<td align="center"><a href="https://github.com/jviney"><img src="https://avatars3.githubusercontent.com/u/7051?v=4" width="100px;" alt="Jonathan Viney"/><br /><sub><b>Jonathan Viney</b></sub></a><br /><a href="https://github.com/prettier/plugin-ruby/issues?q=author%3Ajviney" title="Bug reports">🐛</a></td>
|
186
187
|
<td align="center"><a href="https://github.com/acrewdson"><img src="https://avatars0.githubusercontent.com/u/10353074?v=4" width="100px;" alt="acrewdson"/><br /><sub><b>acrewdson</b></sub></a><br /><a href="https://github.com/prettier/plugin-ruby/issues?q=author%3Aacrewdson" title="Bug reports">🐛</a></td>
|
188
|
+
<td align="center"><a href="https://orleans.io"><img src="https://avatars0.githubusercontent.com/u/1683595?v=4" width="100px;" alt="Louis Orleans"/><br /><sub><b>Louis Orleans</b></sub></a><br /><a href="https://github.com/prettier/plugin-ruby/issues?q=author%3Adudeofawesome" title="Bug reports">🐛</a></td>
|
189
|
+
<td align="center"><a href="https://github.com/cvoege"><img src="https://avatars2.githubusercontent.com/u/6777709?v=4" width="100px;" alt="Colton Voege"/><br /><sub><b>Colton Voege</b></sub></a><br /><a href="https://github.com/prettier/plugin-ruby/issues?q=author%3Acvoege" title="Bug reports">🐛</a></td>
|
190
|
+
<td align="center"><a href="https://stefankracht.de"><img src="https://avatars1.githubusercontent.com/u/529711?v=4" width="100px;" alt="Stefan Kracht"/><br /><sub><b>Stefan Kracht</b></sub></a><br /><a href="https://github.com/prettier/plugin-ruby/issues?q=author%3Akrachtstefan" title="Bug reports">🐛</a></td>
|
191
|
+
</tr>
|
192
|
+
<tr>
|
193
|
+
<td align="center"><a href="https://github.com/jakeprime"><img src="https://avatars1.githubusercontent.com/u/1019036?v=4" width="100px;" alt="jakeprime"/><br /><sub><b>jakeprime</b></sub></a><br /><a href="https://github.com/prettier/plugin-ruby/issues?q=author%3Ajakeprime" title="Bug reports">🐛</a></td>
|
187
194
|
</tr>
|
188
195
|
</table>
|
189
196
|
|
197
|
+
<!-- markdownlint-enable -->
|
198
|
+
<!-- prettier-ignore-end -->
|
199
|
+
|
190
200
|
<!-- ALL-CONTRIBUTORS-LIST:END -->
|
191
201
|
|
192
202
|
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
|
data/package.json
CHANGED
data/src/nodes/args.js
CHANGED
@@ -51,17 +51,30 @@ module.exports = {
|
|
51
51
|
const args = path.map(print, "body");
|
52
52
|
let blockNode = null;
|
53
53
|
|
54
|
+
// Look up the chain to see if these arguments are contained within a
|
55
|
+
// method_add_block node, and if they are that that node has a block
|
56
|
+
// associated with it. If it does, we're going to attempt to transform it
|
57
|
+
// into the to_proc shorthand and add it to the list of arguments.
|
54
58
|
[1, 2, 3].find(parent => {
|
55
59
|
const parentNode = path.getParentNode(parent);
|
56
60
|
blockNode =
|
57
61
|
parentNode &&
|
58
62
|
parentNode.type === "method_add_block" &&
|
59
63
|
parentNode.body[1];
|
64
|
+
|
60
65
|
return blockNode;
|
61
66
|
});
|
62
67
|
|
63
68
|
const proc = blockNode && toProc(blockNode);
|
64
|
-
|
69
|
+
|
70
|
+
// If we have a successful to_proc transformation, but we're part of an aref
|
71
|
+
// node, that means it's something to the effect of
|
72
|
+
//
|
73
|
+
// foo[:bar].each(&:to_s)
|
74
|
+
//
|
75
|
+
// In this case we need to just return regular arguments, otherwise we would
|
76
|
+
// end up putting &:to_s inside the brackets accidentally.
|
77
|
+
if (proc && path.getParentNode(1).type !== "aref") {
|
65
78
|
args.push(proc);
|
66
79
|
}
|
67
80
|
|
data/src/nodes/calls.js
CHANGED
data/src/nodes/flow.js
CHANGED
@@ -1,4 +1,11 @@
|
|
1
|
-
const {
|
1
|
+
const {
|
2
|
+
concat,
|
3
|
+
group,
|
4
|
+
ifBreak,
|
5
|
+
indent,
|
6
|
+
join,
|
7
|
+
softline
|
8
|
+
} = require("../prettier");
|
2
9
|
const { literal } = require("../utils");
|
3
10
|
|
4
11
|
module.exports = {
|
@@ -42,15 +49,23 @@ module.exports = {
|
|
42
49
|
return "return";
|
43
50
|
}
|
44
51
|
|
52
|
+
let value = join(", ", path.call(print, "body", 0));
|
53
|
+
|
54
|
+
// If the body of the return contains parens, then just skip directly to the
|
55
|
+
// content of the parens so that we can skip printing parens if we don't
|
56
|
+
// want them.
|
45
57
|
if (args.body[0] && args.body[0].type === "paren") {
|
46
|
-
|
47
|
-
return concat([
|
48
|
-
"return ",
|
49
|
-
path.call(print, "body", 0, "body", 0, "body", 0, "body", 0)
|
50
|
-
]);
|
58
|
+
value = path.call(print, "body", 0, "body", 0, "body", 0, "body", 0);
|
51
59
|
}
|
52
60
|
|
53
|
-
return
|
61
|
+
return group(
|
62
|
+
concat([
|
63
|
+
"return",
|
64
|
+
ifBreak("(", " "),
|
65
|
+
indent(concat([softline, value])),
|
66
|
+
concat([softline, ifBreak(")", "")])
|
67
|
+
])
|
68
|
+
);
|
54
69
|
},
|
55
70
|
return0: literal("return"),
|
56
71
|
yield: (path, opts, print) => {
|
data/src/nodes/loops.js
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
const {
|
2
|
-
breakParent,
|
3
2
|
concat,
|
4
3
|
group,
|
5
4
|
hardline,
|
@@ -8,23 +7,45 @@ const {
|
|
8
7
|
softline
|
9
8
|
} = require("../prettier");
|
10
9
|
|
11
|
-
const printLoop = keyword => (path, { inlineLoops }, print) =>
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
)
|
10
|
+
const printLoop = (keyword, modifier) => (path, { inlineLoops }, print) => {
|
11
|
+
const inlineLoop = concat([
|
12
|
+
path.call(print, "body", 1),
|
13
|
+
` ${keyword} `,
|
14
|
+
path.call(print, "body", 0)
|
15
|
+
]);
|
16
|
+
|
17
|
+
// If we're in the modifier form and we're modifying a `begin`, then this is a
|
18
|
+
// special case where we need to explicitly use the modifier form because
|
19
|
+
// otherwise the semantic meaning changes. This looks like:
|
20
|
+
//
|
21
|
+
// begin
|
22
|
+
// foo
|
23
|
+
// end while bar
|
24
|
+
//
|
25
|
+
// The above is effectively a `do...while` loop (which we don't have in ruby).
|
26
|
+
if (modifier && path.getValue().body[1].type === "begin") {
|
27
|
+
return inlineLoop;
|
28
|
+
}
|
29
|
+
|
30
|
+
const blockLoop = concat([
|
31
|
+
concat([`${keyword} `, path.call(print, "body", 0)]),
|
32
|
+
indent(concat([softline, path.call(print, "body", 1)])),
|
33
|
+
concat([softline, "end"])
|
34
|
+
]);
|
35
|
+
|
36
|
+
if (!inlineLoops) {
|
37
|
+
return blockLoop;
|
38
|
+
}
|
39
|
+
|
40
|
+
return group(ifBreak(blockLoop, inlineLoop));
|
41
|
+
};
|
27
42
|
|
43
|
+
// Technically this is incorrect. A `for` loop actually introduces and modifies
|
44
|
+
// a local variable that then remains in the outer scope. Additionally, if the
|
45
|
+
// `each` method was somehow missing from the enumerable (it's possible...),
|
46
|
+
// then this transformation would fail. However - I've never actually seen a
|
47
|
+
// `for` loop used in production. If someone actually calls me on it, I'll fix
|
48
|
+
// this, but for now I'm leaving it.
|
28
49
|
const printFor = (path, opts, print) =>
|
29
50
|
group(
|
30
51
|
concat([
|
@@ -38,9 +59,9 @@ const printFor = (path, opts, print) =>
|
|
38
59
|
);
|
39
60
|
|
40
61
|
module.exports = {
|
41
|
-
while: printLoop("while"),
|
42
|
-
while_mod: printLoop("while"),
|
43
|
-
until: printLoop("until"),
|
44
|
-
until_mod: printLoop("until"),
|
62
|
+
while: printLoop("while", false),
|
63
|
+
while_mod: printLoop("while", true),
|
64
|
+
until: printLoop("until", false),
|
65
|
+
until_mod: printLoop("until", true),
|
45
66
|
for: printFor
|
46
67
|
};
|
data/src/nodes/strings.js
CHANGED
@@ -40,7 +40,7 @@ const getStringQuote = (string, preferSingleQuotes) => {
|
|
40
40
|
const quotePattern = new RegExp("\\\\([\\s\\S])|(['\"])", "g");
|
41
41
|
|
42
42
|
const makeString = (content, enclosingQuote) => {
|
43
|
-
const otherQuote = enclosingQuote === '"' ? "'" :
|
43
|
+
const otherQuote = enclosingQuote === '"' ? "'" : '"';
|
44
44
|
|
45
45
|
// Escape and unescape single and double quotes as needed to be able to
|
46
46
|
// enclose `content` with `enclosingQuote`.
|
@@ -139,12 +139,24 @@ module.exports = {
|
|
139
139
|
word_add: concatBody,
|
140
140
|
word_new: empty,
|
141
141
|
xstring: makeList,
|
142
|
-
xstring_literal: (path, opts, print) =>
|
143
|
-
|
142
|
+
xstring_literal: (path, opts, print) => {
|
143
|
+
const parts = path.call(print, "body", 0);
|
144
|
+
|
145
|
+
if (typeof parts[0] === "string") {
|
146
|
+
parts[0] = parts[0].replace(/^\s+/, "");
|
147
|
+
}
|
148
|
+
|
149
|
+
const lastIndex = parts.length - 1;
|
150
|
+
if (typeof parts[lastIndex] === "string") {
|
151
|
+
parts[lastIndex] = parts[lastIndex].replace(/\s+$/, "");
|
152
|
+
}
|
153
|
+
|
154
|
+
return group(
|
144
155
|
concat([
|
145
156
|
"`",
|
146
|
-
indent(concat([softline, join(softline,
|
157
|
+
indent(concat([softline, join(softline, parts)])),
|
147
158
|
concat([softline, "`"])
|
148
159
|
])
|
149
|
-
)
|
160
|
+
);
|
161
|
+
}
|
150
162
|
};
|
data/src/ripper.rb
CHANGED
@@ -2,8 +2,12 @@
|
|
2
2
|
|
3
3
|
REQUIRED_VERSION = Gem::Version.new('2.5')
|
4
4
|
if Gem::Version.new(RUBY_VERSION) < REQUIRED_VERSION
|
5
|
-
|
6
|
-
|
5
|
+
warn(
|
6
|
+
"Ruby version #{RUBY_VERSION} not supported. " \
|
7
|
+
"Please upgrade to #{REQUIRED_VERSION} or above."
|
8
|
+
)
|
9
|
+
|
10
|
+
exit 1
|
7
11
|
end
|
8
12
|
|
9
13
|
require 'json' unless defined?(JSON)
|
@@ -757,8 +761,13 @@ if $0 == __FILE__
|
|
757
761
|
builder = RipperJS.new($stdin.read)
|
758
762
|
response = builder.parse
|
759
763
|
|
760
|
-
if !response
|
761
|
-
|
764
|
+
if !response || builder.error?
|
765
|
+
warn(
|
766
|
+
'@prettier/plugin-ruby encountered an error when attempting to parse ' \
|
767
|
+
'the ruby source. This usually means there was a syntax error in the ' \
|
768
|
+
'file in question. You can verify by running `ruby -i [path/to/file]`.'
|
769
|
+
)
|
770
|
+
|
762
771
|
exit 1
|
763
772
|
end
|
764
773
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: prettier
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.15.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kevin Deisz
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-08-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|