prettier 2.0.0.pre.rc1 → 2.0.0.pre.rc2
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 +13 -1
- data/dist/parser/parseSync.js +14 -0
- data/dist/ruby/nodes/calls.js +55 -15
- data/dist/ruby/nodes/commands.js +3 -3
- data/package.json +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 63604b2dbf27994c44f507ef2e0b22d257c5371f45e66a78fa805c82313c5166
|
4
|
+
data.tar.gz: 546196f52a8a0ac8034e8cf4d170f61a916f9948f109d9bba18ff0d60160b100
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 034daa67861d8ac125b501dc00729b3830889a9182befa40c147f4459118b62565cc1ff458ed691a6e16d290f3ba2690aa241a620f38cfe17970fd5660a332aa
|
7
|
+
data.tar.gz: 7d5d1bd5e45859d32df6d7bc151fc229bcec702d5eb556b16b5b21a58986f5d319d891aa082aff1eac68a962b120593415fa0160b37e8ee99e835453a6fec4ee
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,17 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
|
|
6
6
|
|
7
7
|
## [Unreleased]
|
8
8
|
|
9
|
+
## [2.0.0-rc2]
|
10
|
+
|
11
|
+
### Added
|
12
|
+
|
13
|
+
- [#979](https://github.com/prettier/plugin-ruby/issues/979) - ronocod, kddnewton - Alignment of `to_not` is explicitly allowed to not indent to better support rspec.
|
14
|
+
- [#894](https://github.com/prettier/plugin-ruby/issues/894) - mister-what, kddnewton - Add a warning that this plugin will not function with the plug'n'play filesystem provided by yarn berry.
|
15
|
+
|
16
|
+
### Changed
|
17
|
+
|
18
|
+
- [#943](https://github.com/prettier/plugin-ruby/issues/943) - valscion, kddnewton - Trailing call operators that are followed by comments should stay on the first line.
|
19
|
+
|
9
20
|
## [2.0.0-rc1]
|
10
21
|
|
11
22
|
### Added
|
@@ -1151,7 +1162,8 @@ would previously result in `array[]`, but now prints properly.
|
|
1151
1162
|
|
1152
1163
|
- Initial release 🎉
|
1153
1164
|
|
1154
|
-
[unreleased]: https://github.com/prettier/plugin-ruby/compare/v2.0.0-
|
1165
|
+
[unreleased]: https://github.com/prettier/plugin-ruby/compare/v2.0.0-rc2...HEAD
|
1166
|
+
[2.0.0-rc2]: https://github.com/prettier/plugin-ruby/compare/v2.0.0-rc1...v2.0.0-rc2
|
1155
1167
|
[2.0.0-rc1]: https://github.com/prettier/plugin-ruby/compare/v1.6.1...v2.0.0-rc1
|
1156
1168
|
[1.6.1]: https://github.com/prettier/plugin-ruby/compare/v1.6.0...v1.6.1
|
1157
1169
|
[1.6.0]: https://github.com/prettier/plugin-ruby/compare/v1.5.5...v1.6.0
|
data/dist/parser/parseSync.js
CHANGED
@@ -95,12 +95,26 @@ function spawnServer() {
|
|
95
95
|
const [cmd, ...args] = info.stdout.toString().split(" ");
|
96
96
|
return { cmd, args };
|
97
97
|
}
|
98
|
+
// If we're in a yarn Plug'n'Play environment, then the relative paths being
|
99
|
+
// used by the parser server and the various scripts used to communicate
|
100
|
+
// therein are not going to work with its virtual file system. Presumably
|
101
|
+
// there's a way to fix this but I haven't figured out how yet.
|
102
|
+
function checkPnP() {
|
103
|
+
if (process_1.default.versions.pnp) {
|
104
|
+
throw new Error(`
|
105
|
+
@prettier/plugin-ruby does not current work within the yarn Plug'n'Play
|
106
|
+
virtual file system. If you would like to help support the effort to fix
|
107
|
+
this, please see https://github.com/prettier/plugin-ruby/issues/894.
|
108
|
+
`);
|
109
|
+
}
|
110
|
+
}
|
98
111
|
// Formats and sends a request to the parser server. We use netcat (or something
|
99
112
|
// like it) here since Prettier requires the results of `parse` to be
|
100
113
|
// synchronous and Node.js does not offer a mechanism for synchronous socket
|
101
114
|
// requests.
|
102
115
|
function parseSync(parser, source) {
|
103
116
|
if (!parserArgs) {
|
117
|
+
checkPnP();
|
104
118
|
parserArgs = spawnServer();
|
105
119
|
}
|
106
120
|
const response = (0, child_process_1.spawnSync)(parserArgs.cmd, parserArgs.args, {
|
data/dist/ruby/nodes/calls.js
CHANGED
@@ -9,6 +9,10 @@ const utils_1 = require("../../utils");
|
|
9
9
|
const toProc_1 = __importDefault(require("../toProc"));
|
10
10
|
const { group, hardline, ifBreak, indent, join, softline } = prettier_1.default;
|
11
11
|
const chained = ["call", "method_add_arg", "method_add_block"];
|
12
|
+
function hasLeadingComments(node) {
|
13
|
+
var _a;
|
14
|
+
return (_a = node.comments) === null || _a === void 0 ? void 0 : _a.some(({ leading }) => leading);
|
15
|
+
}
|
12
16
|
const printCall = (path, opts, print) => {
|
13
17
|
const node = path.getValue();
|
14
18
|
const [receiverNode, , messageNode] = node.body;
|
@@ -18,26 +22,40 @@ const printCall = (path, opts, print) => {
|
|
18
22
|
// In this case, "call" is returned for the 3rd child node. We don't alter
|
19
23
|
// call syntax so if `call` is implicit, we don't print it out.
|
20
24
|
const messageDoc = messageNode === "call" ? "" : path.call(print, "body", 2);
|
25
|
+
// Create some arrays that are going to represent each side of our call.
|
26
|
+
let leftSideDoc = [receiverDoc];
|
27
|
+
let rightSideDoc = [operatorDoc, messageDoc];
|
28
|
+
// If there are leading comments on the right side of the call, then it means
|
29
|
+
// we have a structure where there's a receiver and an operator together, then
|
30
|
+
// a comment, then the message, as in:
|
31
|
+
//
|
32
|
+
// foo.
|
33
|
+
// # comment
|
34
|
+
// baz
|
35
|
+
//
|
36
|
+
// In the case we need to group the receiver and the operator together or
|
37
|
+
// we'll end up with a syntax error.
|
38
|
+
const operatorIsTrailing = messageNode !== "call" && hasLeadingComments(messageNode);
|
39
|
+
if (operatorIsTrailing) {
|
40
|
+
leftSideDoc = [receiverDoc, operatorDoc];
|
41
|
+
rightSideDoc = [messageDoc];
|
42
|
+
}
|
21
43
|
// For certain left sides of the call nodes, we want to attach directly to
|
22
44
|
// the } or end.
|
23
45
|
if (utils_1.noIndent.includes(receiverNode.type)) {
|
24
|
-
return [
|
46
|
+
return [leftSideDoc, rightSideDoc];
|
25
47
|
}
|
26
|
-
// The right side of the call node, as in everything including the operator
|
27
|
-
// and beyond.
|
28
|
-
let rightSideDoc = [
|
29
|
-
receiverNode.comments ? hardline : softline,
|
30
|
-
operatorDoc,
|
31
|
-
messageDoc
|
32
|
-
];
|
33
|
-
// This is very specialized behavior wherein we group .where.not calls
|
34
|
-
// together because it looks better. For more information, see
|
35
|
-
// https://github.com/prettier/plugin-ruby/issues/862.
|
36
48
|
if (receiverNode.type === "call" &&
|
37
49
|
receiverNode.body[2] !== "call" &&
|
38
50
|
receiverNode.body[2].body === "where" &&
|
39
51
|
messageDoc === "not") {
|
40
|
-
|
52
|
+
// This is very specialized behavior wherein we group .where.not calls
|
53
|
+
// together because it looks better. For more information, see
|
54
|
+
// https://github.com/prettier/plugin-ruby/issues/862.
|
55
|
+
}
|
56
|
+
else {
|
57
|
+
// Otherwise, we're going to put a line node into the right side doc.
|
58
|
+
rightSideDoc.unshift(receiverNode.comments ? hardline : softline);
|
41
59
|
}
|
42
60
|
// Get a reference to the parent node so we can check if we're inside a chain
|
43
61
|
const parentNode = path.getParentNode();
|
@@ -46,8 +64,30 @@ const printCall = (path, opts, print) => {
|
|
46
64
|
if (chained.includes(parentNode.type) && !node.comments) {
|
47
65
|
parentNode.chain = (node.chain || 0) + 1;
|
48
66
|
parentNode.callChain = (node.callChain || 0) + 1;
|
49
|
-
parentNode.breakDoc = (node.breakDoc || [receiverDoc]).concat(rightSideDoc);
|
50
67
|
parentNode.firstReceiverType = node.firstReceiverType || receiverNode.type;
|
68
|
+
// Here we're going to determine what doc nodes to send up to the parent
|
69
|
+
// node to represent when we're in the multi-line form.
|
70
|
+
let breakDocLHS;
|
71
|
+
if (node.breakDoc && operatorIsTrailing) {
|
72
|
+
// Here we already have a child node that has passed up its
|
73
|
+
// representation. In this case node.breakDoc represents the receiver
|
74
|
+
// without any lines inserted. With regard to this node, it means it's
|
75
|
+
// everything up until the operator. So we're just going to append the
|
76
|
+
// operator.
|
77
|
+
breakDocLHS = node.breakDoc.concat(operatorDoc);
|
78
|
+
}
|
79
|
+
else if (node.breakDoc) {
|
80
|
+
// Here we don't need a trailing operator, so we're just going to use the
|
81
|
+
// existing node.breakDoc. The operator will be a part of the rightSideDoc
|
82
|
+
// variable.
|
83
|
+
breakDocLHS = node.breakDoc;
|
84
|
+
}
|
85
|
+
else {
|
86
|
+
// Here we're at the bottom of the chain, so there's no representation yet
|
87
|
+
// for the receiver. So we're just going to pass up the left side.
|
88
|
+
breakDocLHS = leftSideDoc;
|
89
|
+
}
|
90
|
+
parentNode.breakDoc = breakDocLHS.concat(rightSideDoc);
|
51
91
|
}
|
52
92
|
// If we're at the top of a chain, then we're going to print out a nice
|
53
93
|
// multi-line layout if this doesn't break into multiple lines.
|
@@ -55,11 +95,11 @@ const printCall = (path, opts, print) => {
|
|
55
95
|
(node.chain || 0) >= 3 &&
|
56
96
|
node.breakDoc) {
|
57
97
|
return ifBreak(group(indent(node.breakDoc.concat(rightSideDoc))), [
|
58
|
-
|
98
|
+
leftSideDoc,
|
59
99
|
group(rightSideDoc)
|
60
100
|
]);
|
61
101
|
}
|
62
|
-
return group([
|
102
|
+
return group([leftSideDoc, group(indent(rightSideDoc))]);
|
63
103
|
};
|
64
104
|
exports.printCall = printCall;
|
65
105
|
const printMethodAddArg = (path, opts, print) => {
|
data/dist/ruby/nodes/commands.js
CHANGED
@@ -62,8 +62,8 @@ function hasDef(node) {
|
|
62
62
|
//
|
63
63
|
// In this case the arguments are aligned to the left side as opposed to being
|
64
64
|
// aligned with the `receive` call.
|
65
|
-
function skipArgsAlign(
|
66
|
-
return ["to", "not_to"].includes(
|
65
|
+
function skipArgsAlign(node) {
|
66
|
+
return ["to", "not_to", "to_not"].includes(node.body[2].body);
|
67
67
|
}
|
68
68
|
// If there is a ternary argument to a command and it's going to get broken
|
69
69
|
// into multiple lines, then we're going to have to use parentheses around the
|
@@ -110,7 +110,7 @@ const printCommandCall = (path, opts, print) => {
|
|
110
110
|
breakDoc = parts.concat("(", indent([softline, argDocs]), softline, ")");
|
111
111
|
parts.push(" ");
|
112
112
|
}
|
113
|
-
else if (skipArgsAlign(
|
113
|
+
else if (skipArgsAlign(node)) {
|
114
114
|
parts.push(" ");
|
115
115
|
breakDoc = parts.concat(argDocs);
|
116
116
|
}
|
data/package.json
CHANGED