prettier 0.12.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,127 @@
1
+ const parse = require("./parse");
2
+ const print = require("./print");
3
+
4
+ const pragmaPattern = /#\s*@(prettier|format)/;
5
+ const hasPragma = text => pragmaPattern.test(text);
6
+
7
+ /*
8
+ * metadata mostly pulled from linguist and rubocop:
9
+ * https://github.com/github/linguist/blob/master/lib/linguist/languages.yml
10
+ * https://github.com/rubocop-hq/rubocop/blob/master/spec/rubocop/target_finder_spec.rb
11
+ */
12
+
13
+ module.exports = {
14
+ languages: [
15
+ {
16
+ name: "Ruby",
17
+ parsers: ["ruby"],
18
+ extensions: [
19
+ ".arb",
20
+ ".axlsx",
21
+ ".builder",
22
+ ".eye",
23
+ ".fcgi",
24
+ ".gemfile",
25
+ ".gemspec",
26
+ ".god",
27
+ ".jb",
28
+ ".jbuilder",
29
+ ".mspec",
30
+ ".opal",
31
+ ".pluginspec",
32
+ ".podspec",
33
+ ".rabl",
34
+ ".rake",
35
+ ".rb",
36
+ ".rbuild",
37
+ ".rbw",
38
+ ".rbx",
39
+ ".ru",
40
+ ".ruby",
41
+ ".thor",
42
+ ".watchr"
43
+ ],
44
+ filenames: [
45
+ ".irbrc",
46
+ ".pryrc",
47
+ "Appraisals",
48
+ "Berksfile",
49
+ "Brewfile",
50
+ "Buildfile",
51
+ "Capfile",
52
+ "Cheffile",
53
+ "Dangerfile",
54
+ "Deliverfile",
55
+ "Fastfile",
56
+ "Gemfile",
57
+ "Guardfile",
58
+ "Jarfile",
59
+ "Mavenfile",
60
+ "Podfile",
61
+ "Puppetfile",
62
+ "Rakefile",
63
+ "Snapfile",
64
+ "Thorfile",
65
+ "Vagabondfile",
66
+ "Vagrantfile",
67
+ "buildfile"
68
+ ],
69
+ interpreters: ["jruby", "macruby", "rake", "rbx", "ruby"],
70
+ linguistLanguageId: 326,
71
+ vscodeLanguageIds: ["ruby"]
72
+ }
73
+ ],
74
+ parsers: {
75
+ ruby: {
76
+ parse,
77
+ astFormat: "ruby",
78
+ hasPragma
79
+ }
80
+ },
81
+ printers: {
82
+ ruby: {
83
+ print
84
+ }
85
+ },
86
+ options: {
87
+ addTrailingCommas: {
88
+ type: "boolean",
89
+ category: "Global",
90
+ default: false,
91
+ description:
92
+ "Adds a trailing comma to array literals, hash literals, and method calls."
93
+ },
94
+ inlineConditionals: {
95
+ type: "boolean",
96
+ category: "Global",
97
+ default: true,
98
+ description:
99
+ "When it fits on one line, allows if and unless statements to use the modifier form."
100
+ },
101
+ inlineLoops: {
102
+ type: "boolean",
103
+ category: "Global",
104
+ default: true,
105
+ description:
106
+ "When it fits on one line, allows while and until statements to use the modifier form."
107
+ },
108
+ preferHashLabels: {
109
+ type: "boolean",
110
+ category: "Global",
111
+ default: true,
112
+ description:
113
+ "When possible, uses the shortened hash key syntax, as opposed to hash rockets."
114
+ },
115
+ preferSingleQuotes: {
116
+ type: "boolean",
117
+ category: "Global",
118
+ default: true,
119
+ description:
120
+ "When double quotes are not necessary for interpolation, prefers the use of single quotes for string literals."
121
+ }
122
+ },
123
+ defaultOptions: {
124
+ printWidth: 80,
125
+ tabWidth: 2
126
+ }
127
+ };
@@ -0,0 +1,82 @@
1
+ const isCall = node => ["::", "."].includes(node) || node.type === "@period";
2
+
3
+ // If you have a simple block that only calls a method on the single required
4
+ // parameter that is passed to it, then you can replace that block with the
5
+ // simpler `Symbol#to_proc`. Meaning, it would go from:
6
+ //
7
+ // [1, 2, 3].map { |i| i.to_s }
8
+ //
9
+ // to:
10
+ //
11
+ // [1, 2, 3].map(&:to_s)
12
+ //
13
+ // This works with `do` blocks as well.
14
+ const toProc = node => {
15
+ if (!node) {
16
+ return null;
17
+ }
18
+
19
+ const [variables, blockContents] = node.body;
20
+
21
+ // Ensure that there are variables being passed to this block.
22
+ const params = variables && variables.body[0];
23
+ if (!params || params.type !== "params") {
24
+ return null;
25
+ }
26
+
27
+ // Ensure there is one and only one parameter, and that it is required.
28
+ const reqParams = params.body[0];
29
+ const otherParams = params.body.slice(1);
30
+ if (
31
+ !Array.isArray(reqParams) ||
32
+ reqParams.length !== 1 ||
33
+ otherParams.some(Boolean)
34
+ ) {
35
+ return null;
36
+ }
37
+
38
+ let statements;
39
+ if (blockContents.type === "bodystmt") {
40
+ // We’re in a `do` block
41
+ const blockStatements = blockContents.body[0];
42
+ const rescueElseEnsure = blockStatements.body.slice(1);
43
+
44
+ // You can’t use the to_proc shortcut if you’re rescuing
45
+ if (rescueElseEnsure.some(Boolean)) {
46
+ return null;
47
+ }
48
+
49
+ statements = blockStatements;
50
+ } else {
51
+ // We’re in a brace block
52
+ statements = blockContents;
53
+ }
54
+
55
+ // Ensure the block contains only one statement
56
+ if (statements.body.length !== 1) {
57
+ return null;
58
+ }
59
+
60
+ // Ensure that statement is a call
61
+ const [statement] = statements.body;
62
+ if (statement.type !== "call") {
63
+ return null;
64
+ }
65
+
66
+ // Ensure the call is a method of the block argument
67
+ const [varRef, call, method, args] = statement.body;
68
+
69
+ if (
70
+ varRef.type !== "var_ref" ||
71
+ varRef.body[0].body !== reqParams[0].body ||
72
+ !isCall(call) ||
73
+ method.type !== "@ident" ||
74
+ args
75
+ ) {
76
+ return null;
77
+ }
78
+
79
+ return `&:${method.body}`;
80
+ };
81
+
82
+ module.exports = toProc;
@@ -0,0 +1,150 @@
1
+ const {
2
+ breakParent,
3
+ concat,
4
+ hardline,
5
+ lineSuffix,
6
+ literalline
7
+ } = require("./builders");
8
+
9
+ const concatBody = (path, opts, print) => concat(path.map(print, "body"));
10
+
11
+ const docLength = doc => {
12
+ if (doc.length) {
13
+ return doc.length;
14
+ }
15
+
16
+ if (doc.parts) {
17
+ return doc.parts.reduce((sum, child) => sum + docLength(child), 0);
18
+ }
19
+
20
+ if (doc.contents) {
21
+ return docLength(doc.contents);
22
+ }
23
+
24
+ return 0;
25
+ };
26
+
27
+ const empty = () => "";
28
+
29
+ const first = (path, opts, print) => path.call(print, "body", 0);
30
+
31
+ const hasAncestor = (path, types) => {
32
+ let parent = 0;
33
+ let parentNode = path.getParentNode();
34
+
35
+ while (parentNode) {
36
+ if (types.includes(parentNode.type)) {
37
+ return true;
38
+ }
39
+
40
+ parent += 1;
41
+ parentNode = path.getParentNode(parent);
42
+ }
43
+
44
+ return false;
45
+ };
46
+
47
+ const literal = value => () => value;
48
+
49
+ const makeArgs = (path, opts, print, argsIndex) => {
50
+ let argNodes = path.getValue().body[argsIndex];
51
+ const argPattern = [print, "body", argsIndex, "body"];
52
+
53
+ if (argNodes.type === "args_add_block") {
54
+ [argNodes] = argNodes.body;
55
+ argPattern.push(0, "body");
56
+ }
57
+
58
+ const args = path.call(print, "body", argsIndex);
59
+ const heredocs = [];
60
+
61
+ argNodes.body.forEach((argNode, index) => {
62
+ let pattern;
63
+ let heredoc;
64
+
65
+ if (argNode.type === "heredoc") {
66
+ pattern = [index, "body"];
67
+ heredoc = argNode;
68
+ } else if (
69
+ argNode.type === "string_literal" &&
70
+ argNode.body[0].type === "heredoc"
71
+ ) {
72
+ pattern = [index, "body", 0, "body"];
73
+ [heredoc] = argNode.body;
74
+ } else {
75
+ return;
76
+ }
77
+
78
+ const content = path.map.apply(path, argPattern.slice().concat(pattern));
79
+ heredocs.push(
80
+ concat([literalline].concat(content).concat([heredoc.ending]))
81
+ );
82
+ args[index] = heredoc.beging;
83
+ });
84
+
85
+ return { args, heredocs };
86
+ };
87
+
88
+ const makeCall = (path, opts, print) => {
89
+ const operation = path.getValue().body[1];
90
+
91
+ if ([".", "&."].includes(operation)) {
92
+ return operation;
93
+ }
94
+
95
+ return operation === "::" ? "." : path.call(print, "body", 1);
96
+ };
97
+
98
+ const makeList = (path, opts, print) => path.map(print, "body");
99
+
100
+ const prefix = value => (path, opts, print) =>
101
+ concat([value, path.call(print, "body", 0)]);
102
+
103
+ const printComments = (printed, start, comments) => {
104
+ let node = printed;
105
+
106
+ comments.forEach(comment => {
107
+ if (comment.start < start) {
108
+ node = concat([
109
+ comment.break ? breakParent : "",
110
+ comment.body,
111
+ hardline,
112
+ node
113
+ ]);
114
+ } else {
115
+ node = concat([
116
+ node,
117
+ comment.break ? breakParent : "",
118
+ lineSuffix(` ${comment.body}`)
119
+ ]);
120
+ }
121
+ });
122
+
123
+ return node;
124
+ };
125
+
126
+ const skipAssignIndent = node =>
127
+ ["array", "hash", "heredoc", "lambda", "regexp_literal"].includes(
128
+ node.type
129
+ ) ||
130
+ (node.type === "call" && skipAssignIndent(node.body[0])) ||
131
+ (node.type === "string_literal" && node.body[0].type === "heredoc");
132
+
133
+ const surround = (left, right) => (path, opts, print) =>
134
+ concat([left, path.call(print, "body", 0), right]);
135
+
136
+ module.exports = {
137
+ concatBody,
138
+ docLength,
139
+ empty,
140
+ first,
141
+ hasAncestor,
142
+ literal,
143
+ makeArgs,
144
+ makeCall,
145
+ makeList,
146
+ prefix,
147
+ printComments,
148
+ skipAssignIndent,
149
+ surround
150
+ };
metadata ADDED
@@ -0,0 +1,109 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: prettier
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.12.2
5
+ platform: ruby
6
+ authors:
7
+ - Kevin Deisz
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2019-04-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '12.3'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '12.3'
41
+ description:
42
+ email:
43
+ executables:
44
+ - rbprettier
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - CHANGELOG.md
49
+ - CODE_OF_CONDUCT.md
50
+ - CONTRIBUTING.md
51
+ - LICENSE
52
+ - README.md
53
+ - bin/console
54
+ - exe/rbprettier
55
+ - lib/prettier.rb
56
+ - lib/prettier/rake/task.rb
57
+ - node_modules/prettier/bin-prettier.js
58
+ - node_modules/prettier/index.js
59
+ - node_modules/prettier/third-party.js
60
+ - package.json
61
+ - src/builders.js
62
+ - src/escapePattern.js
63
+ - src/nodes.js
64
+ - src/nodes/alias.js
65
+ - src/nodes/arrays.js
66
+ - src/nodes/blocks.js
67
+ - src/nodes/calls.js
68
+ - src/nodes/case.js
69
+ - src/nodes/commands.js
70
+ - src/nodes/conditionals.js
71
+ - src/nodes/hashes.js
72
+ - src/nodes/hooks.js
73
+ - src/nodes/lambdas.js
74
+ - src/nodes/loops.js
75
+ - src/nodes/methods.js
76
+ - src/nodes/params.js
77
+ - src/nodes/regexp.js
78
+ - src/nodes/rescue.js
79
+ - src/nodes/strings.js
80
+ - src/parse.js
81
+ - src/print.js
82
+ - src/ripper.rb
83
+ - src/ruby.js
84
+ - src/toProc.js
85
+ - src/utils.js
86
+ homepage: https://github.com/prettier/plugin-ruby#readme
87
+ licenses:
88
+ - MIT
89
+ metadata: {}
90
+ post_install_message:
91
+ rdoc_options: []
92
+ require_paths:
93
+ - lib
94
+ required_ruby_version: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ required_rubygems_version: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ requirements: []
105
+ rubygems_version: 3.0.3
106
+ signing_key:
107
+ specification_version: 4
108
+ summary: prettier plugin for the Ruby programming language
109
+ test_files: []