prettier 1.2.2 → 1.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +14 -1
  3. data/CONTRIBUTING.md +2 -2
  4. data/README.md +1 -1
  5. data/package.json +2 -2
  6. data/src/{ruby.js → plugin.js} +2 -2
  7. data/src/{embed.js → ruby/embed.js} +2 -2
  8. data/src/{nodes.js → ruby/nodes.js} +0 -0
  9. data/src/{nodes → ruby/nodes}/alias.js +1 -1
  10. data/src/{nodes → ruby/nodes}/aref.js +8 -1
  11. data/src/{nodes → ruby/nodes}/args.js +2 -2
  12. data/src/{nodes → ruby/nodes}/arrays.js +2 -3
  13. data/src/{nodes → ruby/nodes}/assign.js +7 -3
  14. data/src/{nodes → ruby/nodes}/blocks.js +3 -3
  15. data/src/{nodes → ruby/nodes}/calls.js +8 -4
  16. data/src/{nodes → ruby/nodes}/case.js +1 -1
  17. data/src/{nodes → ruby/nodes}/class.js +1 -1
  18. data/src/ruby/nodes/commands.js +126 -0
  19. data/src/{nodes → ruby/nodes}/conditionals.js +3 -3
  20. data/src/{nodes → ruby/nodes}/constants.js +2 -2
  21. data/src/{nodes → ruby/nodes}/flow.js +2 -2
  22. data/src/{nodes → ruby/nodes}/hashes.js +32 -10
  23. data/src/{nodes → ruby/nodes}/heredocs.js +2 -2
  24. data/src/{nodes → ruby/nodes}/hooks.js +2 -2
  25. data/src/{nodes → ruby/nodes}/ints.js +0 -0
  26. data/src/{nodes → ruby/nodes}/lambdas.js +2 -2
  27. data/src/{nodes → ruby/nodes}/loops.js +10 -7
  28. data/src/{nodes → ruby/nodes}/massign.js +8 -1
  29. data/src/{nodes → ruby/nodes}/methods.js +6 -3
  30. data/src/{nodes → ruby/nodes}/operators.js +2 -2
  31. data/src/{nodes → ruby/nodes}/params.js +9 -2
  32. data/src/{nodes → ruby/nodes}/patterns.js +8 -1
  33. data/src/{nodes → ruby/nodes}/regexp.js +2 -2
  34. data/src/{nodes → ruby/nodes}/rescue.js +2 -2
  35. data/src/{nodes → ruby/nodes}/return.js +21 -6
  36. data/src/{nodes → ruby/nodes}/statements.js +1 -1
  37. data/src/{nodes → ruby/nodes}/strings.js +1 -1
  38. data/src/{nodes → ruby/nodes}/super.js +2 -2
  39. data/src/{nodes → ruby/nodes}/undef.js +1 -1
  40. data/src/{parser.js → ruby/parser.js} +2 -2
  41. data/src/{parser.rb → ruby/parser.rb} +258 -312
  42. data/src/{printer.js → ruby/printer.js} +1 -1
  43. data/src/{toProc.js → ruby/toProc.js} +0 -0
  44. data/src/utils.js +10 -93
  45. data/src/utils/containsAssignment.js +11 -0
  46. data/src/utils/getTrailingComma.js +5 -0
  47. data/src/utils/hasAncestor.js +17 -0
  48. data/src/utils/literal.js +7 -0
  49. data/src/utils/makeCall.js +11 -0
  50. data/src/utils/noIndent.js +10 -0
  51. data/src/utils/skipAssignIndent.js +10 -0
  52. metadata +47 -40
  53. data/src/nodes/commands.js +0 -91
@@ -1,4 +1,4 @@
1
- const { concat, trim } = require("./prettier");
1
+ const { concat, trim } = require("../prettier");
2
2
 
3
3
  const embed = require("./embed");
4
4
  const nodes = require("./nodes");
File without changes
@@ -1,95 +1,12 @@
1
- const { concat } = require("./prettier");
2
- const isEmptyStmts = require("./utils/isEmptyStmts");
3
- const literalLineNoBreak = require("./utils/literalLineNoBreak");
4
- const printEmptyCollection = require("./utils/printEmptyCollection");
5
-
6
- // If the node is a type of assignment or if the node is a paren and nested
7
- // inside that paren is a node that is a type of assignment.
8
- const containsAssignment = (node) =>
9
- node &&
10
- (["assign", "massign", "opassign"].includes(node.type) ||
11
- (Array.isArray(node.body) && node.body.some(containsAssignment)));
12
-
13
- const docLength = (doc) => {
14
- if (doc.length) {
15
- return doc.length;
16
- }
17
-
18
- if (doc.parts) {
19
- return doc.parts.reduce((sum, child) => sum + docLength(child), 0);
20
- }
21
-
22
- if (doc.contents) {
23
- return docLength(doc.contents);
24
- }
25
-
26
- return 0;
27
- };
28
-
29
- const empty = () => "";
30
-
31
- const first = (path, opts, print) => path.call(print, "body", 0);
32
-
33
- const getTrailingComma = (opts) => ["all", "es5"].includes(opts.trailingComma);
34
-
35
- const hasAncestor = (path, types) => {
36
- let parent = 0;
37
- let parentNode = path.getParentNode();
38
-
39
- while (parentNode) {
40
- if (types.includes(parentNode.type)) {
41
- return true;
42
- }
43
-
44
- parent += 1;
45
- parentNode = path.getParentNode(parent);
46
- }
47
-
48
- return false;
49
- };
50
-
51
- const literal = (value) => () => value;
52
-
53
- const makeCall = (path, opts, print) => {
54
- const operation = path.getValue().body[1];
55
-
56
- if ([".", "&."].includes(operation)) {
57
- return operation;
58
- }
59
-
60
- return operation === "::" ? "." : path.call(print, "body", 1);
61
- };
62
-
63
- const noIndent = [
64
- "array",
65
- "hash",
66
- "heredoc",
67
- "if",
68
- "method_add_block",
69
- "xstring_literal"
70
- ];
71
-
72
- const prefix = (value) => (path, opts, print) =>
73
- concat([value, path.call(print, "body", 0)]);
74
-
75
- const skippable = ["array", "hash", "heredoc", "lambda", "regexp_literal"];
76
- const skipAssignIndent = (node) =>
77
- skippable.includes(node.type) ||
78
- (node.type === "call" && skipAssignIndent(node.body[0]));
79
-
80
1
  module.exports = {
81
- containsAssignment,
82
- docLength,
83
- empty,
84
- first,
85
- getTrailingComma,
86
- hasAncestor,
87
- isEmptyStmts,
88
- literal,
89
- literalLineNoBreak,
90
- makeCall,
91
- noIndent,
92
- prefix,
93
- printEmptyCollection,
94
- skipAssignIndent
2
+ containsAssignment: require("./utils/containsAssignment"),
3
+ getTrailingComma: require("./utils/getTrailingComma"),
4
+ isEmptyStmts: require("./utils/isEmptyStmts"),
5
+ hasAncestor: require("./utils/hasAncestor"),
6
+ literal: require("./utils/literal"),
7
+ literalLineNoBreak: require("./utils/literalLineNoBreak"),
8
+ makeCall: require("./utils/makeCall"),
9
+ noIndent: require("./utils/noIndent"),
10
+ printEmptyCollection: require("./utils/printEmptyCollection"),
11
+ skipAssignIndent: require("./utils/skipAssignIndent")
95
12
  };
@@ -0,0 +1,11 @@
1
+ // If the node is a type of assignment or if the node is a paren and nested
2
+ // inside that paren is a node that is a type of assignment.
3
+ function containsAssignment(node) {
4
+ return (
5
+ node &&
6
+ (["assign", "massign", "opassign"].includes(node.type) ||
7
+ (Array.isArray(node.body) && node.body.some(containsAssignment)))
8
+ );
9
+ }
10
+
11
+ module.exports = containsAssignment;
@@ -0,0 +1,5 @@
1
+ function getTrailingComma(opts) {
2
+ return ["all", "es5"].includes(opts.trailingComma);
3
+ }
4
+
5
+ module.exports = getTrailingComma;
@@ -0,0 +1,17 @@
1
+ function hasAncestor(path, types) {
2
+ let parent = 0;
3
+ let parentNode = path.getParentNode();
4
+
5
+ while (parentNode) {
6
+ if (types.includes(parentNode.type)) {
7
+ return true;
8
+ }
9
+
10
+ parent += 1;
11
+ parentNode = path.getParentNode(parent);
12
+ }
13
+
14
+ return false;
15
+ }
16
+
17
+ module.exports = hasAncestor;
@@ -0,0 +1,7 @@
1
+ function literal(value) {
2
+ return function printLiteral() {
3
+ return value;
4
+ };
5
+ }
6
+
7
+ module.exports = literal;
@@ -0,0 +1,11 @@
1
+ function makeCall(path, opts, print) {
2
+ const operation = path.getValue().body[1];
3
+
4
+ if ([".", "&."].includes(operation)) {
5
+ return operation;
6
+ }
7
+
8
+ return operation === "::" ? "." : path.call(print, "body", 1);
9
+ }
10
+
11
+ module.exports = makeCall;
@@ -0,0 +1,10 @@
1
+ const noIndent = [
2
+ "array",
3
+ "hash",
4
+ "heredoc",
5
+ "if",
6
+ "method_add_block",
7
+ "xstring_literal"
8
+ ];
9
+
10
+ module.exports = noIndent;
@@ -0,0 +1,10 @@
1
+ const skippable = ["array", "hash", "heredoc", "lambda", "regexp_literal"];
2
+
3
+ function skipAssignIndent(node) {
4
+ return (
5
+ skippable.includes(node.type) ||
6
+ (node.type === "call" && skipAssignIndent(node.body[0]))
7
+ );
8
+ }
9
+
10
+ module.exports = skipAssignIndent;
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: 1.2.2
4
+ version: 1.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Deisz
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-01-01 00:00:00.000000000 Z
11
+ date: 2021-01-03 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email:
@@ -30,50 +30,57 @@ files:
30
30
  - node_modules/prettier/index.js
31
31
  - node_modules/prettier/third-party.js
32
32
  - package.json
33
- - src/embed.js
34
- - src/nodes.js
35
- - src/nodes/alias.js
36
- - src/nodes/aref.js
37
- - src/nodes/args.js
38
- - src/nodes/arrays.js
39
- - src/nodes/assign.js
40
- - src/nodes/blocks.js
41
- - src/nodes/calls.js
42
- - src/nodes/case.js
43
- - src/nodes/class.js
44
- - src/nodes/commands.js
45
- - src/nodes/conditionals.js
46
- - src/nodes/constants.js
47
- - src/nodes/flow.js
48
- - src/nodes/hashes.js
49
- - src/nodes/heredocs.js
50
- - src/nodes/hooks.js
51
- - src/nodes/ints.js
52
- - src/nodes/lambdas.js
53
- - src/nodes/loops.js
54
- - src/nodes/massign.js
55
- - src/nodes/methods.js
56
- - src/nodes/operators.js
57
- - src/nodes/params.js
58
- - src/nodes/patterns.js
59
- - src/nodes/regexp.js
60
- - src/nodes/rescue.js
61
- - src/nodes/return.js
62
- - src/nodes/statements.js
63
- - src/nodes/strings.js
64
- - src/nodes/super.js
65
- - src/nodes/undef.js
66
- - src/parser.js
67
- - src/parser.rb
33
+ - src/plugin.js
68
34
  - src/prettier.js
69
- - src/printer.js
70
- - src/ruby.js
71
- - src/toProc.js
35
+ - src/ruby/embed.js
36
+ - src/ruby/nodes.js
37
+ - src/ruby/nodes/alias.js
38
+ - src/ruby/nodes/aref.js
39
+ - src/ruby/nodes/args.js
40
+ - src/ruby/nodes/arrays.js
41
+ - src/ruby/nodes/assign.js
42
+ - src/ruby/nodes/blocks.js
43
+ - src/ruby/nodes/calls.js
44
+ - src/ruby/nodes/case.js
45
+ - src/ruby/nodes/class.js
46
+ - src/ruby/nodes/commands.js
47
+ - src/ruby/nodes/conditionals.js
48
+ - src/ruby/nodes/constants.js
49
+ - src/ruby/nodes/flow.js
50
+ - src/ruby/nodes/hashes.js
51
+ - src/ruby/nodes/heredocs.js
52
+ - src/ruby/nodes/hooks.js
53
+ - src/ruby/nodes/ints.js
54
+ - src/ruby/nodes/lambdas.js
55
+ - src/ruby/nodes/loops.js
56
+ - src/ruby/nodes/massign.js
57
+ - src/ruby/nodes/methods.js
58
+ - src/ruby/nodes/operators.js
59
+ - src/ruby/nodes/params.js
60
+ - src/ruby/nodes/patterns.js
61
+ - src/ruby/nodes/regexp.js
62
+ - src/ruby/nodes/rescue.js
63
+ - src/ruby/nodes/return.js
64
+ - src/ruby/nodes/statements.js
65
+ - src/ruby/nodes/strings.js
66
+ - src/ruby/nodes/super.js
67
+ - src/ruby/nodes/undef.js
68
+ - src/ruby/parser.js
69
+ - src/ruby/parser.rb
70
+ - src/ruby/printer.js
71
+ - src/ruby/toProc.js
72
72
  - src/utils.js
73
+ - src/utils/containsAssignment.js
74
+ - src/utils/getTrailingComma.js
75
+ - src/utils/hasAncestor.js
73
76
  - src/utils/inlineEnsureParens.js
74
77
  - src/utils/isEmptyStmts.js
78
+ - src/utils/literal.js
75
79
  - src/utils/literalLineNoBreak.js
80
+ - src/utils/makeCall.js
81
+ - src/utils/noIndent.js
76
82
  - src/utils/printEmptyCollection.js
83
+ - src/utils/skipAssignIndent.js
77
84
  homepage: https://github.com/prettier/plugin-ruby#readme
78
85
  licenses:
79
86
  - MIT
@@ -1,91 +0,0 @@
1
- const {
2
- align,
3
- concat,
4
- group,
5
- ifBreak,
6
- indent,
7
- join,
8
- line,
9
- softline
10
- } = require("../prettier");
11
- const { docLength, makeCall } = require("../utils");
12
-
13
- const hasDef = (node) =>
14
- node.body[1].type === "args_add_block" &&
15
- node.body[1].body[0].type === "args" &&
16
- node.body[1].body[0].body[0] &&
17
- ["def", "defs"].includes(node.body[1].body[0].body[0].type);
18
-
19
- // Very special handling case for rspec matchers. In general with rspec matchers
20
- // you expect to see something like:
21
- //
22
- // expect(foo).to receive(:bar).with(
23
- // 'one',
24
- // 'two',
25
- // 'three',
26
- // 'four',
27
- // 'five'
28
- // )
29
- //
30
- // In this case the arguments are aligned to the left side as opposed to being
31
- // aligned with the `receive` call.
32
- const skipArgsAlign = (path) =>
33
- ["to", "not_to"].includes(path.getValue().body[2].body);
34
-
35
- // If there is a ternary argument to a command and it's going to get broken
36
- // into multiple lines, then we're going to have to use parentheses around the
37
- // command in order to make sure operator precedence doesn't get messed up.
38
- const hasTernaryArg = (path) =>
39
- path.getValue().body[1].body[0].body.some((node) => node.type === "ifop");
40
-
41
- module.exports = {
42
- command: (path, opts, print) => {
43
- const command = path.call(print, "body", 0);
44
- const joinedArgs = join(concat([",", line]), path.call(print, "body", 1));
45
-
46
- const hasTernary = hasTernaryArg(path);
47
- let breakArgs;
48
-
49
- if (hasTernary) {
50
- breakArgs = indent(concat([softline, joinedArgs]));
51
- } else if (hasDef(path.getValue())) {
52
- breakArgs = joinedArgs;
53
- } else {
54
- breakArgs = align(command.length + 1, joinedArgs);
55
- }
56
-
57
- return group(
58
- ifBreak(
59
- concat([
60
- command,
61
- hasTernary ? "(" : " ",
62
- breakArgs,
63
- hasTernary ? concat([softline, ")"]) : ""
64
- ]),
65
- concat([command, " ", joinedArgs])
66
- )
67
- );
68
- },
69
- command_call: (path, opts, print) => {
70
- const parts = [
71
- path.call(print, "body", 0),
72
- makeCall(path, opts, print),
73
- path.call(print, "body", 2)
74
- ];
75
-
76
- if (!path.getValue().body[3]) {
77
- return concat(parts);
78
- }
79
-
80
- parts.push(" ");
81
-
82
- const joinedArgs = join(concat([",", line]), path.call(print, "body", 3));
83
- const breakArgs = skipArgsAlign(path)
84
- ? joinedArgs
85
- : align(docLength(concat(parts)), joinedArgs);
86
-
87
- return group(
88
- ifBreak(concat(parts.concat(breakArgs)), concat(parts.concat(joinedArgs)))
89
- );
90
- }
91
- };