prettier 2.1.0 → 3.0.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 +24 -6
- data/README.md +16 -16
- data/exe/rbprettier +2 -2
- data/lib/prettier/rake/task.rb +5 -5
- data/lib/prettier.rb +11 -11
- data/package.json +9 -23
- data/rubocop.yml +6 -6
- data/{dist/parser → src}/getInfo.js +0 -1
- data/{dist/parser → src}/netcat.js +0 -1
- data/src/parseSync.js +212 -0
- data/src/plugin.js +161 -0
- data/{dist/parser → src}/server.rb +45 -31
- metadata +94 -78
- data/bin/console +0 -7
- data/dist/haml/embed.js +0 -53
- data/dist/haml/parser.js +0 -31
- data/dist/haml/parser.rb +0 -149
- data/dist/haml/printer.js +0 -336
- data/dist/parser/parseSync.js +0 -179
- data/dist/plugin.js +0 -143
- data/dist/prettier.js +0 -15
- data/dist/rbs/parser.js +0 -34
- data/dist/rbs/parser.rb +0 -155
- data/dist/rbs/printer.js +0 -525
- data/dist/ruby/embed.js +0 -115
- data/dist/ruby/location.js +0 -19
- data/dist/ruby/nodes/alias.js +0 -60
- data/dist/ruby/nodes/aref.js +0 -51
- data/dist/ruby/nodes/args.js +0 -138
- data/dist/ruby/nodes/arrays.js +0 -122
- data/dist/ruby/nodes/assign.js +0 -37
- data/dist/ruby/nodes/blocks.js +0 -90
- data/dist/ruby/nodes/calls.js +0 -263
- data/dist/ruby/nodes/case.js +0 -50
- data/dist/ruby/nodes/class.js +0 -54
- data/dist/ruby/nodes/commands.js +0 -138
- data/dist/ruby/nodes/conditionals.js +0 -246
- data/dist/ruby/nodes/constants.js +0 -35
- data/dist/ruby/nodes/flow.js +0 -59
- data/dist/ruby/nodes/hashes.js +0 -126
- data/dist/ruby/nodes/heredocs.js +0 -30
- data/dist/ruby/nodes/hooks.js +0 -35
- data/dist/ruby/nodes/ints.js +0 -27
- data/dist/ruby/nodes/lambdas.js +0 -70
- data/dist/ruby/nodes/loops.js +0 -75
- data/dist/ruby/nodes/massign.js +0 -60
- data/dist/ruby/nodes/methods.js +0 -50
- data/dist/ruby/nodes/operators.js +0 -68
- data/dist/ruby/nodes/params.js +0 -95
- data/dist/ruby/nodes/patterns.js +0 -119
- data/dist/ruby/nodes/regexp.js +0 -45
- data/dist/ruby/nodes/rescue.js +0 -86
- data/dist/ruby/nodes/return.js +0 -100
- data/dist/ruby/nodes/statements.js +0 -110
- data/dist/ruby/nodes/strings.js +0 -220
- data/dist/ruby/nodes/super.js +0 -26
- data/dist/ruby/nodes/undef.js +0 -31
- data/dist/ruby/nodes.js +0 -177
- data/dist/ruby/parser.js +0 -35
- data/dist/ruby/parser.rb +0 -9134
- data/dist/ruby/printer.js +0 -67
- data/dist/ruby/toProc.js +0 -91
- data/dist/types/haml.js +0 -4
- data/dist/types/plugin.js +0 -3
- data/dist/types/rbs.js +0 -4
- data/dist/types/ruby.js +0 -4
- data/dist/types/utils.js +0 -2
- data/dist/types.js +0 -34
- data/dist/utils/containsAssignment.js +0 -18
- data/dist/utils/getChildNodes.js +0 -305
- data/dist/utils/getTrailingComma.js +0 -6
- data/dist/utils/hasAncestor.js +0 -15
- data/dist/utils/inlineEnsureParens.js +0 -49
- data/dist/utils/isEmptyBodyStmt.js +0 -10
- data/dist/utils/isEmptyParams.js +0 -12
- data/dist/utils/isEmptyStmts.js +0 -10
- data/dist/utils/literal.js +0 -8
- data/dist/utils/literallineWithoutBreakParent.js +0 -8
- data/dist/utils/makeCall.js +0 -14
- data/dist/utils/noIndent.js +0 -11
- data/dist/utils/printEmptyCollection.js +0 -46
- data/dist/utils/skipAssignIndent.js +0 -19
- data/dist/utils.js +0 -32
data/dist/ruby/nodes/loops.js
DELETED
@@ -1,75 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
-
};
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
-
exports.printUntil = exports.printWhile = exports.printFor = void 0;
|
7
|
-
const prettier_1 = __importDefault(require("../../prettier"));
|
8
|
-
const utils_1 = require("../../utils");
|
9
|
-
const { align, breakParent, group, hardline, ifBreak, indent, join, softline } = prettier_1.default;
|
10
|
-
function isModifier(node) {
|
11
|
-
return node.type === "while_mod" || node.type === "until_mod";
|
12
|
-
}
|
13
|
-
function printLoop(keyword) {
|
14
|
-
return function printLoopWithOptions(path, { rubyModifier }, print) {
|
15
|
-
const node = path.getValue();
|
16
|
-
const predicateDoc = path.call(print, "pred");
|
17
|
-
// If the only statement inside this while loop is a void statement, then we
|
18
|
-
// can shorten to just displaying the predicate and then a semicolon.
|
19
|
-
if (!isModifier(node) && (0, utils_1.isEmptyStmts)(node.stmts)) {
|
20
|
-
return group([group([keyword, " ", predicateDoc]), hardline, "end"]);
|
21
|
-
}
|
22
|
-
const statementDoc = path.call(print, isModifier(node) ? "stmt" : "stmts");
|
23
|
-
const inlineLoop = (0, utils_1.inlineEnsureParens)(path, [
|
24
|
-
statementDoc,
|
25
|
-
` ${keyword} `,
|
26
|
-
predicateDoc
|
27
|
-
]);
|
28
|
-
// If we're in the modifier form and we're modifying a `begin`, then this is
|
29
|
-
// a special case where we need to explicitly use the modifier form because
|
30
|
-
// otherwise the semantic meaning changes. This looks like:
|
31
|
-
//
|
32
|
-
// begin
|
33
|
-
// foo
|
34
|
-
// end while bar
|
35
|
-
//
|
36
|
-
// The above is effectively a `do...while` loop (which we don't have in
|
37
|
-
// ruby).
|
38
|
-
if (isModifier(node) && node.stmt.type === "begin") {
|
39
|
-
return inlineLoop;
|
40
|
-
}
|
41
|
-
const blockLoop = [
|
42
|
-
[`${keyword} `, align(keyword.length + 1, predicateDoc)],
|
43
|
-
indent([softline, statementDoc]),
|
44
|
-
softline,
|
45
|
-
"end"
|
46
|
-
];
|
47
|
-
// If we're disallowing inline loops or if the predicate of the loop
|
48
|
-
// contains an assignment (in which case we can't know for certain that that
|
49
|
-
// assignment doesn't impact the statements inside the loop) then we can't
|
50
|
-
// use the modifier form and we must use the block form.
|
51
|
-
if (!rubyModifier || (0, utils_1.containsAssignment)(node.pred)) {
|
52
|
-
return [breakParent, blockLoop];
|
53
|
-
}
|
54
|
-
return group(ifBreak(blockLoop, inlineLoop));
|
55
|
-
};
|
56
|
-
}
|
57
|
-
const printFor = (path, opts, print) => {
|
58
|
-
const node = path.getValue();
|
59
|
-
let indexDoc = path.call(print, "index");
|
60
|
-
if (node.index.type === "mlhs") {
|
61
|
-
indexDoc = join(", ", indexDoc);
|
62
|
-
}
|
63
|
-
return group([
|
64
|
-
"for ",
|
65
|
-
indexDoc,
|
66
|
-
" in ",
|
67
|
-
path.call(print, "collection"),
|
68
|
-
indent([hardline, path.call(print, "stmts")]),
|
69
|
-
hardline,
|
70
|
-
"end"
|
71
|
-
]);
|
72
|
-
};
|
73
|
-
exports.printFor = printFor;
|
74
|
-
exports.printWhile = printLoop("while");
|
75
|
-
exports.printUntil = printLoop("until");
|
data/dist/ruby/nodes/massign.js
DELETED
@@ -1,60 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
-
};
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
-
exports.printMRHSNewFromArgs = exports.printMRHSAddStar = exports.printMRHS = exports.printMLHSParen = exports.printMLHS = exports.printMAssign = void 0;
|
7
|
-
const prettier_1 = __importDefault(require("../../prettier"));
|
8
|
-
const { group, indent, join, line, softline } = prettier_1.default;
|
9
|
-
const printMAssign = (path, opts, print) => {
|
10
|
-
const node = path.getValue();
|
11
|
-
let valueDoc = path.call(print, "value");
|
12
|
-
if (["mrhs", "mrhs_add_star", "mrhs_new_from_args"].includes(node.value.type)) {
|
13
|
-
valueDoc = group(join([",", line], valueDoc));
|
14
|
-
}
|
15
|
-
const targetDoc = [
|
16
|
-
join([",", line], path.call(print, "target"))
|
17
|
-
];
|
18
|
-
if (node.target.type === "mlhs" && node.target.comma) {
|
19
|
-
targetDoc.push(",");
|
20
|
-
}
|
21
|
-
return group([group(targetDoc), " =", indent([line, valueDoc])]);
|
22
|
-
};
|
23
|
-
exports.printMAssign = printMAssign;
|
24
|
-
const printMLHS = (path, opts, print) => {
|
25
|
-
return path.map(print, "parts");
|
26
|
-
};
|
27
|
-
exports.printMLHS = printMLHS;
|
28
|
-
const printMLHSParen = (path, opts, print) => {
|
29
|
-
if (["massign", "mlhs_paren"].includes(path.getParentNode().type)) {
|
30
|
-
// If we're nested in brackets as part of the left hand side of an
|
31
|
-
// assignment, i.e., (a, b, c) = 1, 2, 3
|
32
|
-
// ignore the current node and just go straight to the content
|
33
|
-
return path.call(print, "cnts");
|
34
|
-
}
|
35
|
-
const node = path.getValue();
|
36
|
-
const parts = [
|
37
|
-
softline,
|
38
|
-
join([",", line], path.call(print, "cnts"))
|
39
|
-
];
|
40
|
-
if (node.cnts.comma) {
|
41
|
-
parts.push(",");
|
42
|
-
}
|
43
|
-
return group(["(", indent(parts), [softline, ")"]]);
|
44
|
-
};
|
45
|
-
exports.printMLHSParen = printMLHSParen;
|
46
|
-
const printMRHS = (path, opts, print) => {
|
47
|
-
return path.map(print, "parts");
|
48
|
-
};
|
49
|
-
exports.printMRHS = printMRHS;
|
50
|
-
const printMRHSAddStar = (path, opts, print) => {
|
51
|
-
return [
|
52
|
-
...path.call(print, "mrhs"),
|
53
|
-
["*", path.call(print, "star")]
|
54
|
-
];
|
55
|
-
};
|
56
|
-
exports.printMRHSAddStar = printMRHSAddStar;
|
57
|
-
const printMRHSNewFromArgs = (path, opts, print) => {
|
58
|
-
return path.call(print, "args");
|
59
|
-
};
|
60
|
-
exports.printMRHSNewFromArgs = printMRHSNewFromArgs;
|
data/dist/ruby/nodes/methods.js
DELETED
@@ -1,50 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
-
};
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
-
exports.printAccessControl = exports.printDefEndless = exports.printDef = void 0;
|
7
|
-
const prettier_1 = __importDefault(require("../../prettier"));
|
8
|
-
const utils_1 = require("../../utils");
|
9
|
-
const { group, hardline, indent, line } = prettier_1.default;
|
10
|
-
const printDef = (path, opts, print) => {
|
11
|
-
const node = path.getValue();
|
12
|
-
const declaration = ["def "];
|
13
|
-
// In this case, we're printing a method that's defined as a singleton, so
|
14
|
-
// we need to include the target and the operator before the name.
|
15
|
-
if (node.type === "defs") {
|
16
|
-
declaration.push(path.call(print, "target"), path.call(print, "op"));
|
17
|
-
}
|
18
|
-
// In case there are no parens but there are parameters
|
19
|
-
const useParens = node.params.type === "params" && !(0, utils_1.isEmptyParams)(node.params);
|
20
|
-
declaration.push(path.call(print, "name"), useParens ? "(" : "", path.call(print, "params"), useParens ? ")" : "");
|
21
|
-
if ((0, utils_1.isEmptyBodyStmt)(node.bodystmt)) {
|
22
|
-
return group([...declaration, "; end"]);
|
23
|
-
}
|
24
|
-
return group([
|
25
|
-
group(declaration),
|
26
|
-
indent([hardline, path.call(print, "bodystmt")]),
|
27
|
-
hardline,
|
28
|
-
"end"
|
29
|
-
]);
|
30
|
-
};
|
31
|
-
exports.printDef = printDef;
|
32
|
-
const printDefEndless = (path, opts, print) => {
|
33
|
-
const node = path.getValue();
|
34
|
-
let paramsDoc = "";
|
35
|
-
// If we have any kind of parameters, we're going to print the whole
|
36
|
-
// parentheses. If we don't, then we're just going to skip them entirely.
|
37
|
-
if (node.paren && !(0, utils_1.isEmptyParams)(node.paren.cnts)) {
|
38
|
-
paramsDoc = path.call(print, "paren");
|
39
|
-
}
|
40
|
-
return group([
|
41
|
-
"def ",
|
42
|
-
path.call(print, "name"),
|
43
|
-
paramsDoc,
|
44
|
-
" =",
|
45
|
-
indent(group([line, path.call(print, "stmt")]))
|
46
|
-
]);
|
47
|
-
};
|
48
|
-
exports.printDefEndless = printDefEndless;
|
49
|
-
const printAccessControl = (path, opts, print) => path.call(print, "value");
|
50
|
-
exports.printAccessControl = printAccessControl;
|
@@ -1,68 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
-
};
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
-
exports.printNot = exports.printUnary = exports.printDot3 = exports.printDot2 = exports.printBinary = void 0;
|
7
|
-
const prettier_1 = __importDefault(require("../../prettier"));
|
8
|
-
const utils_1 = require("../../utils");
|
9
|
-
const { group, indent, line, softline } = prettier_1.default;
|
10
|
-
const printBinary = (path, opts, print) => {
|
11
|
-
const node = path.getValue();
|
12
|
-
const space = node.op === "**" ? "" : " ";
|
13
|
-
if (utils_1.noIndent.includes(node.right.type)) {
|
14
|
-
return group([
|
15
|
-
group(path.call(print, "left")),
|
16
|
-
space,
|
17
|
-
node.op,
|
18
|
-
space,
|
19
|
-
group(path.call(print, "right"))
|
20
|
-
]);
|
21
|
-
}
|
22
|
-
return group([
|
23
|
-
group(path.call(print, "left")),
|
24
|
-
space,
|
25
|
-
group(indent([
|
26
|
-
node.op,
|
27
|
-
space === "" ? softline : line,
|
28
|
-
path.call(print, "right")
|
29
|
-
]))
|
30
|
-
]);
|
31
|
-
};
|
32
|
-
exports.printBinary = printBinary;
|
33
|
-
// dot2 nodes are used with ranges (or flip-flops). They can optionally drop
|
34
|
-
// their left side for beginless ranges or their right side for endless ranges.
|
35
|
-
const printDot2 = (path, opts, print) => {
|
36
|
-
const node = path.getValue();
|
37
|
-
return [
|
38
|
-
node.left ? path.call(print, "left") : "",
|
39
|
-
"..",
|
40
|
-
node.right ? path.call(print, "right") : ""
|
41
|
-
];
|
42
|
-
};
|
43
|
-
exports.printDot2 = printDot2;
|
44
|
-
// dot3 nodes are used with ranges (or flip-flops). They can optionally drop
|
45
|
-
// their left side for beginless ranges or their right side for endless ranges.
|
46
|
-
const printDot3 = (path, opts, print) => {
|
47
|
-
const node = path.getValue();
|
48
|
-
return [
|
49
|
-
node.left ? path.call(print, "left") : "",
|
50
|
-
"...",
|
51
|
-
node.right ? path.call(print, "right") : ""
|
52
|
-
];
|
53
|
-
};
|
54
|
-
exports.printDot3 = printDot3;
|
55
|
-
const printUnary = (path, opts, print) => {
|
56
|
-
const node = path.getValue();
|
57
|
-
return [node.op, path.call(print, "value")];
|
58
|
-
};
|
59
|
-
exports.printUnary = printUnary;
|
60
|
-
const printNot = (path, opts, print) => {
|
61
|
-
const node = path.getValue();
|
62
|
-
const valueDoc = path.call(print, "value");
|
63
|
-
if (node.paren) {
|
64
|
-
return ["not", "(", valueDoc, ")"];
|
65
|
-
}
|
66
|
-
return ["not", " ", valueDoc];
|
67
|
-
};
|
68
|
-
exports.printNot = printNot;
|
data/dist/ruby/nodes/params.js
DELETED
@@ -1,95 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
-
};
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
-
exports.printExcessedComma = exports.printRestParam = exports.printKeywordRestParam = exports.printArgsForward = exports.printParams = void 0;
|
7
|
-
const prettier_1 = __importDefault(require("../../prettier"));
|
8
|
-
const { group, hardline, join, indent, line, lineSuffix, softline } = prettier_1.default;
|
9
|
-
function printRestParamSymbol(symbol) {
|
10
|
-
return function printRestParamWithSymbol(path, opts, print) {
|
11
|
-
const node = path.getValue();
|
12
|
-
return node.name ? [symbol, path.call(print, "name")] : symbol;
|
13
|
-
};
|
14
|
-
}
|
15
|
-
const printParams = (path, opts, print) => {
|
16
|
-
const node = path.getValue();
|
17
|
-
let parts = [];
|
18
|
-
if (node.reqs) {
|
19
|
-
path.each((reqPath) => {
|
20
|
-
// For some very strange reason, if you have a comment attached to a
|
21
|
-
// rest_param, it shows up here in the list of required params.
|
22
|
-
if (reqPath.getValue().type !== "rest_param") {
|
23
|
-
parts.push(print(reqPath));
|
24
|
-
}
|
25
|
-
}, "reqs");
|
26
|
-
}
|
27
|
-
if (node.opts) {
|
28
|
-
parts = parts.concat(path.map((optlPath) => join(" = ", optlPath.map(print)), "opts"));
|
29
|
-
}
|
30
|
-
if (node.rest && node.rest.type !== "excessed_comma") {
|
31
|
-
parts.push(path.call(print, "rest"));
|
32
|
-
}
|
33
|
-
if (node.posts) {
|
34
|
-
parts = parts.concat(path.map(print, "posts"));
|
35
|
-
}
|
36
|
-
if (node.keywords) {
|
37
|
-
parts = parts.concat(path.map((kwargPath) => {
|
38
|
-
const kwarg = kwargPath.getValue();
|
39
|
-
const keyDoc = kwargPath.call(print, 0);
|
40
|
-
if (kwarg[1]) {
|
41
|
-
return group([keyDoc, " ", kwargPath.call(print, 1)]);
|
42
|
-
}
|
43
|
-
return keyDoc;
|
44
|
-
}, "keywords"));
|
45
|
-
}
|
46
|
-
if (node.kwrest) {
|
47
|
-
parts.push(node.kwrest === "nil" ? "**nil" : path.call(print, "kwrest"));
|
48
|
-
}
|
49
|
-
if (node.block) {
|
50
|
-
parts.push(path.call(print, "block"));
|
51
|
-
}
|
52
|
-
const contents = [join([",", line], parts)];
|
53
|
-
// You can put an extra comma at the end of block args between pipes to
|
54
|
-
// change what it does. Below is the difference:
|
55
|
-
//
|
56
|
-
// [[1, 2], [3, 4]].each { |x| p x } # prints [1, 2] then [3, 4]
|
57
|
-
// [[1, 2], [3, 4]].each { |x,| p x } # prints 1 then 3
|
58
|
-
//
|
59
|
-
// In ruby 2.5, the excessed comma is indicated by having a 0 in the rest
|
60
|
-
// param position. In ruby 2.6+ it's indicated by having an "excessed_comma"
|
61
|
-
// node in the rest position. Seems odd, but it's true.
|
62
|
-
if (node.rest === 0 ||
|
63
|
-
(node.rest && node.rest.type === "excessed_comma")) {
|
64
|
-
contents.push(",");
|
65
|
-
}
|
66
|
-
// If the parent node is a paren then we skipped printing the parentheses so
|
67
|
-
// that we could handle them here and get nicer formatting.
|
68
|
-
const parentNode = path.getParentNode();
|
69
|
-
if (["lambda", "paren"].includes(parentNode.type)) {
|
70
|
-
const parts = ["("];
|
71
|
-
// If the parent node is a paren and the paren has comments that are
|
72
|
-
// attached to the left paren, then we need to print those out explicitly
|
73
|
-
// here.
|
74
|
-
if (parentNode.type === "paren" && parentNode.lparen.comments) {
|
75
|
-
const comments = [];
|
76
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
77
|
-
parentNode.lparen.comments.forEach((comment, index) => {
|
78
|
-
comment.printed = true;
|
79
|
-
comments.push(lineSuffix(`${index === 0 ? " " : ""}#${comment.value}`));
|
80
|
-
});
|
81
|
-
parts.push(join(hardline, comments));
|
82
|
-
}
|
83
|
-
return group([...parts, indent([softline, ...contents]), softline, ")"]);
|
84
|
-
}
|
85
|
-
return group(contents);
|
86
|
-
};
|
87
|
-
exports.printParams = printParams;
|
88
|
-
const printArgsForward = (path) => path.getValue().value;
|
89
|
-
exports.printArgsForward = printArgsForward;
|
90
|
-
exports.printKeywordRestParam = printRestParamSymbol("**");
|
91
|
-
exports.printRestParam = printRestParamSymbol("*");
|
92
|
-
const printExcessedComma = (path, opts, print) => {
|
93
|
-
return path.call(print, "value");
|
94
|
-
};
|
95
|
-
exports.printExcessedComma = printExcessedComma;
|
data/dist/ruby/nodes/patterns.js
DELETED
@@ -1,119 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
-
};
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
-
exports.printRAssign = exports.printIn = exports.printHshPtn = exports.printFndPtn = exports.printAryPtn = void 0;
|
7
|
-
const prettier_1 = __importDefault(require("../../prettier"));
|
8
|
-
const { align, group, hardline, indent, join, line } = prettier_1.default;
|
9
|
-
const patterns = ["aryptn", "binary", "fndptn", "hshptn", "rassign"];
|
10
|
-
const printPatternArg = (path, opts, print) => {
|
11
|
-
// Pinning is a really special syntax in pattern matching that's not really
|
12
|
-
// all that well supported in ripper. Here we're just going to the original
|
13
|
-
// source to see if the variable is pinned.
|
14
|
-
if (opts.originalText &&
|
15
|
-
opts.originalText[opts.locStart(path.getValue()) - 1] === "^") {
|
16
|
-
return ["^", path.call(print)];
|
17
|
-
}
|
18
|
-
return path.call(print);
|
19
|
-
};
|
20
|
-
const printAryPtn = (path, opts, print) => {
|
21
|
-
const node = path.getValue();
|
22
|
-
let argDocs = [];
|
23
|
-
if (node.reqs.length > 0) {
|
24
|
-
argDocs = argDocs.concat(path.map((argPath) => printPatternArg(argPath, opts, print), "reqs"));
|
25
|
-
}
|
26
|
-
if (node.rest) {
|
27
|
-
argDocs.push(["*", path.call(print, "rest")]);
|
28
|
-
}
|
29
|
-
if (node.posts.length > 0) {
|
30
|
-
argDocs = argDocs.concat(path.map(print, "posts"));
|
31
|
-
}
|
32
|
-
let argDoc = group(join([",", line], argDocs));
|
33
|
-
// There are a couple of cases where we _must_ use brackets. They include:
|
34
|
-
//
|
35
|
-
// * When the number of arguments inside the array pattern is one 1, then we
|
36
|
-
// have to include them, otherwise it matches the whole array. Consider the
|
37
|
-
// difference between `in [elem]` and `in elem`.
|
38
|
-
// * If we have a wrapping constant, then we definitely need the brackets.
|
39
|
-
// Consider the difference between `in Const[elem]` and `in Const elem`
|
40
|
-
// * If we're nested inside a parent pattern, then we have to have brackets.
|
41
|
-
// Consider the difference between `in key: first, second` and
|
42
|
-
// `in key: [first, second]`.
|
43
|
-
if (argDocs.length === 1 ||
|
44
|
-
node.constant ||
|
45
|
-
patterns.includes(path.getParentNode().type)) {
|
46
|
-
argDoc = ["[", argDoc, "]"];
|
47
|
-
}
|
48
|
-
if (node.constant) {
|
49
|
-
return [path.call(print, "constant"), argDoc];
|
50
|
-
}
|
51
|
-
return argDoc;
|
52
|
-
};
|
53
|
-
exports.printAryPtn = printAryPtn;
|
54
|
-
const printFndPtn = (path, opts, print) => {
|
55
|
-
const node = path.getValue();
|
56
|
-
const docs = [
|
57
|
-
"[",
|
58
|
-
group(join([",", line], [
|
59
|
-
["*", path.call(print, "left")],
|
60
|
-
...path.map(print, "values"),
|
61
|
-
["*", path.call(print, "right")]
|
62
|
-
])),
|
63
|
-
"]"
|
64
|
-
];
|
65
|
-
if (node.constant) {
|
66
|
-
return [path.call(print, "constant"), docs];
|
67
|
-
}
|
68
|
-
return docs;
|
69
|
-
};
|
70
|
-
exports.printFndPtn = printFndPtn;
|
71
|
-
const printHshPtn = (path, opts, print) => {
|
72
|
-
const node = path.getValue();
|
73
|
-
let args = [];
|
74
|
-
if (node.keywords.length > 0) {
|
75
|
-
const printPair = (pairPath) => {
|
76
|
-
const parts = [pairPath.call(print, 0)];
|
77
|
-
if (pairPath.getValue()[1]) {
|
78
|
-
parts.push(" ", pairPath.call((pairValuePath) => printPatternArg(pairValuePath, opts, print), 1));
|
79
|
-
}
|
80
|
-
return parts;
|
81
|
-
};
|
82
|
-
args = args.concat(path.map(printPair, "keywords"));
|
83
|
-
}
|
84
|
-
if (node.kwrest) {
|
85
|
-
args.push(["**", path.call(print, "kwrest")]);
|
86
|
-
}
|
87
|
-
args = group(join([",", line], args));
|
88
|
-
if (node.constant) {
|
89
|
-
args = ["[", args, "]"];
|
90
|
-
}
|
91
|
-
else if (patterns.includes(path.getParentNode().type)) {
|
92
|
-
args = ["{ ", args, " }"];
|
93
|
-
}
|
94
|
-
if (node.constant) {
|
95
|
-
return [path.call(print, "constant"), args];
|
96
|
-
}
|
97
|
-
return args;
|
98
|
-
};
|
99
|
-
exports.printHshPtn = printHshPtn;
|
100
|
-
const printIn = (path, opts, print) => {
|
101
|
-
const keyword = "in ";
|
102
|
-
const parts = [
|
103
|
-
keyword,
|
104
|
-
align(keyword.length, path.call((valuePath) => printPatternArg(valuePath, opts, print), "pattern")),
|
105
|
-
indent([hardline, path.call(print, "stmts")])
|
106
|
-
];
|
107
|
-
if (path.getValue().cons) {
|
108
|
-
parts.push(hardline, path.call(print, "cons"));
|
109
|
-
}
|
110
|
-
return group(parts);
|
111
|
-
};
|
112
|
-
exports.printIn = printIn;
|
113
|
-
const printRAssign = (path, opts, print) => group([
|
114
|
-
path.call(print, "value"),
|
115
|
-
" ",
|
116
|
-
path.call(print, "op"),
|
117
|
-
group(indent([line, path.call(print, "pattern")]))
|
118
|
-
]);
|
119
|
-
exports.printRAssign = printRAssign;
|
data/dist/ruby/nodes/regexp.js
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.printRegexpLiteral = void 0;
|
4
|
-
const utils_1 = require("../../utils");
|
5
|
-
function hasContent(node, pattern) {
|
6
|
-
return node.parts.some((part) => part.type === "tstring_content" && pattern.test(part.value));
|
7
|
-
}
|
8
|
-
// If the first part of this regex is plain string content, we have a space
|
9
|
-
// or an =, and we're contained within a command or command_call node, then we
|
10
|
-
// want to use braces because otherwise we could end up with an ambiguous
|
11
|
-
// operator, e.g. foo / bar/ or foo /=bar/
|
12
|
-
function forwardSlashIsAmbiguous(path) {
|
13
|
-
const node = path.getValue();
|
14
|
-
const firstPart = node.parts[0];
|
15
|
-
return (firstPart &&
|
16
|
-
firstPart.type === "tstring_content" &&
|
17
|
-
[" ", "="].includes(firstPart.value[0]) &&
|
18
|
-
(0, utils_1.hasAncestor)(path, ["command", "command_call"]));
|
19
|
-
}
|
20
|
-
// This function is responsible for printing out regexp_literal nodes. They can
|
21
|
-
// either use the special %r literal syntax or they can use forward slashes. At
|
22
|
-
// the end of either of those they can have modifiers like m or x that have
|
23
|
-
// special meaning for the regex engine.
|
24
|
-
//
|
25
|
-
// We favor the use of forward slashes unless the regex contains a forward slash
|
26
|
-
// itself. In that case we switch over to using %r with braces.
|
27
|
-
const printRegexpLiteral = (path, opts, print) => {
|
28
|
-
const node = path.getValue();
|
29
|
-
const docs = path.map(print, "parts");
|
30
|
-
// We should use braces if using a forward slash would be ambiguous in the
|
31
|
-
// current context or if there's a forward slash in the content of the regexp.
|
32
|
-
const useBraces = forwardSlashIsAmbiguous(path) || hasContent(node, /\//);
|
33
|
-
// If we should be using braces but we have braces in the body of the regexp,
|
34
|
-
// then we're just going to resort to using whatever the original content was.
|
35
|
-
if (useBraces && hasContent(node, /[{}]/)) {
|
36
|
-
return [node.beging, ...docs, node.ending];
|
37
|
-
}
|
38
|
-
return [
|
39
|
-
useBraces ? "%r{" : "/",
|
40
|
-
...docs,
|
41
|
-
useBraces ? "}" : "/",
|
42
|
-
node.ending.slice(1)
|
43
|
-
];
|
44
|
-
};
|
45
|
-
exports.printRegexpLiteral = printRegexpLiteral;
|
data/dist/ruby/nodes/rescue.js
DELETED
@@ -1,86 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
-
};
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
-
exports.printRetry = exports.printRedo = exports.printRescueMod = exports.printRescueEx = exports.printRescue = exports.printEnsure = exports.printBegin = void 0;
|
7
|
-
const prettier_1 = __importDefault(require("../../prettier"));
|
8
|
-
const { align, group, hardline, indent, join, line } = prettier_1.default;
|
9
|
-
const printBegin = (path, opts, print) => {
|
10
|
-
return [
|
11
|
-
"begin",
|
12
|
-
indent([hardline, path.call(print, "bodystmt")]),
|
13
|
-
hardline,
|
14
|
-
"end"
|
15
|
-
];
|
16
|
-
};
|
17
|
-
exports.printBegin = printBegin;
|
18
|
-
const printEnsure = (path, opts, print) => {
|
19
|
-
return [
|
20
|
-
path.call(print, "keyword"),
|
21
|
-
indent([hardline, path.call(print, "stmts")])
|
22
|
-
];
|
23
|
-
};
|
24
|
-
exports.printEnsure = printEnsure;
|
25
|
-
const printRescue = (path, opts, print) => {
|
26
|
-
const node = path.getValue();
|
27
|
-
const parts = ["rescue"];
|
28
|
-
if (node.extn) {
|
29
|
-
parts.push(align("rescue ".length, path.call(print, "extn")));
|
30
|
-
}
|
31
|
-
else {
|
32
|
-
// If you don't specify an error to rescue in a `begin/rescue` block, then
|
33
|
-
// implicitly you're rescuing from `StandardError`. In this case, we're
|
34
|
-
// just going to explicitly add it.
|
35
|
-
parts.push(" StandardError");
|
36
|
-
}
|
37
|
-
const stmtsDoc = path.call(print, "stmts");
|
38
|
-
if (stmtsDoc.length > 0) {
|
39
|
-
parts.push(indent([hardline, stmtsDoc]));
|
40
|
-
}
|
41
|
-
// This is the next clause on the `begin` statement, either another
|
42
|
-
// `rescue`, and `ensure`, or an `else` clause.
|
43
|
-
if (node.cons) {
|
44
|
-
parts.push([hardline, path.call(print, "cons")]);
|
45
|
-
}
|
46
|
-
return group(parts);
|
47
|
-
};
|
48
|
-
exports.printRescue = printRescue;
|
49
|
-
// This is a container node that we're adding into the AST that isn't present in
|
50
|
-
// Ripper solely so that we have a nice place to attach inline comments.
|
51
|
-
const printRescueEx = (path, opts, print) => {
|
52
|
-
const node = path.getValue();
|
53
|
-
const parts = [];
|
54
|
-
if (node.extns) {
|
55
|
-
// If there's just one exception being rescued, then it's just going to be a
|
56
|
-
// single doc node.
|
57
|
-
let exceptionDoc = path.call(print, "extns");
|
58
|
-
// If there are multiple exceptions being rescued, then we're going to have
|
59
|
-
// multiple doc nodes returned as an array that we need to join together.
|
60
|
-
if (["mrhs", "mrhs_add_star", "mrhs_new_from_args"].includes(node.extns.type)) {
|
61
|
-
exceptionDoc = group(join([",", line], exceptionDoc));
|
62
|
-
}
|
63
|
-
parts.push(" ", exceptionDoc);
|
64
|
-
}
|
65
|
-
if (node.var) {
|
66
|
-
parts.push(" => ", path.call(print, "var"));
|
67
|
-
}
|
68
|
-
return group(parts);
|
69
|
-
};
|
70
|
-
exports.printRescueEx = printRescueEx;
|
71
|
-
const printRescueMod = (path, opts, print) => {
|
72
|
-
return [
|
73
|
-
"begin",
|
74
|
-
indent([hardline, path.call(print, "stmt")]),
|
75
|
-
hardline,
|
76
|
-
"rescue StandardError",
|
77
|
-
indent([hardline, path.call(print, "value")]),
|
78
|
-
hardline,
|
79
|
-
"end"
|
80
|
-
];
|
81
|
-
};
|
82
|
-
exports.printRescueMod = printRescueMod;
|
83
|
-
const printRedo = (path) => path.getValue().value;
|
84
|
-
exports.printRedo = printRedo;
|
85
|
-
const printRetry = (path) => path.getValue().value;
|
86
|
-
exports.printRetry = printRetry;
|