prettier 1.5.5 → 1.6.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 +17 -1
- data/CONTRIBUTING.md +2 -2
- data/README.md +31 -12
- data/node_modules/prettier/bin-prettier.js +13702 -11629
- data/node_modules/prettier/index.js +19198 -16572
- data/node_modules/prettier/parser-angular.js +61 -40
- data/node_modules/prettier/parser-babel.js +22 -1
- data/node_modules/prettier/parser-espree.js +22 -1
- data/node_modules/prettier/parser-flow.js +22 -1
- data/node_modules/prettier/parser-glimmer.js +1 -1
- data/node_modules/prettier/parser-graphql.js +1 -1
- data/node_modules/prettier/parser-html.js +82 -63
- data/node_modules/prettier/parser-markdown.js +24 -9
- data/node_modules/prettier/parser-meriyah.js +22 -1
- data/node_modules/prettier/parser-postcss.js +22 -1
- data/node_modules/prettier/parser-typescript.js +22 -1
- data/node_modules/prettier/parser-yaml.js +2 -2
- data/node_modules/prettier/third-party.js +1042 -833
- data/package.json +3 -3
- data/rubocop.yml +9 -0
- data/src/haml/parser.js +5 -4
- data/src/haml/printer.js +428 -18
- data/src/parser/parseSync.js +8 -6
- data/src/plugin.js +1 -1
- data/src/rbs/parser.js +1 -3
- data/src/rbs/printer.js +35 -7
- data/src/ruby/nodes/args.js +66 -22
- data/src/ruby/nodes/calls.js +8 -1
- data/src/ruby/nodes/conditionals.js +47 -45
- data/src/ruby/nodes/hashes.js +5 -14
- data/src/ruby/nodes/params.js +2 -9
- data/src/ruby/nodes/strings.js +95 -2
- data/src/ruby/parser.js +1 -3
- data/src/ruby/parser.rb +52 -29
- data/src/ruby/printer.js +10 -1
- data/src/utils/inlineEnsureParens.js +1 -0
- data/src/utils/skipAssignIndent.js +8 -1
- metadata +3 -12
- data/src/haml/nodes/comment.js +0 -27
- data/src/haml/nodes/doctype.js +0 -34
- data/src/haml/nodes/filter.js +0 -16
- data/src/haml/nodes/hamlComment.js +0 -21
- data/src/haml/nodes/plain.js +0 -6
- data/src/haml/nodes/root.js +0 -8
- data/src/haml/nodes/script.js +0 -33
- data/src/haml/nodes/silentScript.js +0 -59
- data/src/haml/nodes/tag.js +0 -232
data/src/ruby/parser.js
CHANGED
@@ -8,12 +8,10 @@ function parse(text, _parsers, opts) {
|
|
8
8
|
return parseSync("ruby", text, opts);
|
9
9
|
}
|
10
10
|
|
11
|
-
const pragmaPattern = /#\s*@(prettier|format)/;
|
12
|
-
|
13
11
|
// This function handles checking whether or not the source string has the
|
14
12
|
// pragma for prettier. This is an optional workflow for incremental adoption.
|
15
13
|
function hasPragma(text) {
|
16
|
-
return
|
14
|
+
return /^\s*#[^\S\n]*@(format|prettier)\s*(\n|$)/.test(text);
|
17
15
|
}
|
18
16
|
|
19
17
|
// This function is critical for comments and cursor support, and is responsible
|
data/src/ruby/parser.rb
CHANGED
@@ -13,8 +13,7 @@ if (RUBY_MAJOR < 2) || ((RUBY_MAJOR == 2) && (RUBY_MINOR < 5))
|
|
13
13
|
exit 1
|
14
14
|
end
|
15
15
|
|
16
|
-
require '
|
17
|
-
require 'json'
|
16
|
+
require 'json' unless defined?(JSON)
|
18
17
|
require 'ripper'
|
19
18
|
|
20
19
|
module Prettier
|
@@ -54,6 +53,35 @@ class Prettier::Parser < Ripper
|
|
54
53
|
end
|
55
54
|
end
|
56
55
|
|
56
|
+
# This is a small wrapper around the value of a node for those specific events
|
57
|
+
# that need extra handling. (For example: statement, body statement, and
|
58
|
+
# rescue nodes which all need extra information to determine their character
|
59
|
+
# boundaries.)
|
60
|
+
class Node
|
61
|
+
attr_reader :parser, :value
|
62
|
+
|
63
|
+
def initialize(parser, value)
|
64
|
+
@parser = parser
|
65
|
+
@value = value
|
66
|
+
end
|
67
|
+
|
68
|
+
def [](key)
|
69
|
+
value[key]
|
70
|
+
end
|
71
|
+
|
72
|
+
def dig(*keys)
|
73
|
+
value.dig(*keys)
|
74
|
+
end
|
75
|
+
|
76
|
+
def to_json(*opts)
|
77
|
+
value.to_json(*opts)
|
78
|
+
end
|
79
|
+
|
80
|
+
def pretty_print(q)
|
81
|
+
q.pp_hash(self)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
57
85
|
attr_reader :source, :lines, :scanner_events
|
58
86
|
|
59
87
|
# This is an attr_accessor so Stmts objects can grab comments out of this
|
@@ -617,19 +645,19 @@ class Prettier::Parser < Ripper
|
|
617
645
|
# bodystmt can't actually determine its bounds appropriately because it
|
618
646
|
# doesn't necessarily know where it started. So the parent node needs to
|
619
647
|
# report back down into this one where it goes.
|
620
|
-
class BodyStmt <
|
648
|
+
class BodyStmt < Node
|
621
649
|
def bind(sc, ec)
|
622
|
-
merge!(sc: sc, ec: ec)
|
623
|
-
parts =
|
650
|
+
value.merge!(sc: sc, ec: ec)
|
651
|
+
parts = value[:body]
|
624
652
|
|
625
653
|
# Here we're going to determine the bounds for the stmts
|
626
654
|
consequent = parts[1..-1].compact.first
|
627
|
-
|
655
|
+
value[:body][0].bind(sc, consequent ? consequent[:sc] : ec)
|
628
656
|
|
629
657
|
# Next we're going to determine the rescue clause if there is one
|
630
658
|
if parts[1]
|
631
659
|
consequent = parts[2..-1].compact.first
|
632
|
-
|
660
|
+
value[:body][1].bind_end(consequent ? consequent[:sc] : ec)
|
633
661
|
end
|
634
662
|
end
|
635
663
|
end
|
@@ -638,6 +666,7 @@ class Prettier::Parser < Ripper
|
|
638
666
|
# of clauses within the body of a method or block.
|
639
667
|
def on_bodystmt(stmts, rescued, ensured, elsed)
|
640
668
|
BodyStmt.new(
|
669
|
+
self,
|
641
670
|
type: :bodystmt,
|
642
671
|
body: [stmts, rescued, ensured, elsed],
|
643
672
|
sl: lineno,
|
@@ -1063,7 +1092,7 @@ class Prettier::Parser < Ripper
|
|
1063
1092
|
|
1064
1093
|
beging.merge(
|
1065
1094
|
type: :dyna_symbol,
|
1066
|
-
quote: beging[:body]
|
1095
|
+
quote: beging[:body],
|
1067
1096
|
body: string[:body],
|
1068
1097
|
el: ending[:el],
|
1069
1098
|
ec: ending[:ec]
|
@@ -1845,12 +1874,12 @@ class Prettier::Parser < Ripper
|
|
1845
1874
|
# doesn't really have all of the information that it needs in order to
|
1846
1875
|
# determine its ending. Therefore it relies on its parent bodystmt node to
|
1847
1876
|
# report its ending to it.
|
1848
|
-
class Rescue <
|
1877
|
+
class Rescue < Node
|
1849
1878
|
def bind_end(ec)
|
1850
|
-
merge!(ec: ec)
|
1879
|
+
value.merge!(ec: ec)
|
1851
1880
|
|
1852
|
-
stmts =
|
1853
|
-
consequent =
|
1881
|
+
stmts = value[:body][1]
|
1882
|
+
consequent = value[:body][2]
|
1854
1883
|
|
1855
1884
|
if consequent
|
1856
1885
|
consequent.bind_end(ec)
|
@@ -1886,6 +1915,7 @@ class Prettier::Parser < Ripper
|
|
1886
1915
|
end
|
1887
1916
|
|
1888
1917
|
Rescue.new(
|
1918
|
+
self,
|
1889
1919
|
beging.merge!(
|
1890
1920
|
type: :rescue,
|
1891
1921
|
body: [rescue_ex, stmts, consequent],
|
@@ -1986,36 +2016,29 @@ class Prettier::Parser < Ripper
|
|
1986
2016
|
# stmts nodes will report back down the location information. We then
|
1987
2017
|
# propagate that onto void_stmt nodes inside the stmts in order to make sure
|
1988
2018
|
# all comments get printed appropriately.
|
1989
|
-
class Stmts <
|
1990
|
-
attr_reader :parser
|
1991
|
-
|
1992
|
-
def initialize(parser, values)
|
1993
|
-
@parser = parser
|
1994
|
-
__setobj__(values)
|
1995
|
-
end
|
1996
|
-
|
2019
|
+
class Stmts < Node
|
1997
2020
|
def bind(sc, ec)
|
1998
|
-
merge!(sc: sc, ec: ec)
|
2021
|
+
value.merge!(sc: sc, ec: ec)
|
1999
2022
|
|
2000
|
-
if
|
2001
|
-
|
2023
|
+
if value[:body][0][:type] == :void_stmt
|
2024
|
+
value[:body][0].merge!(sc: sc, ec: sc)
|
2002
2025
|
end
|
2003
2026
|
|
2004
2027
|
attach_comments(sc, ec)
|
2005
2028
|
end
|
2006
2029
|
|
2007
2030
|
def bind_end(ec)
|
2008
|
-
merge!(ec: ec)
|
2031
|
+
value.merge!(ec: ec)
|
2009
2032
|
end
|
2010
2033
|
|
2011
2034
|
def <<(statement)
|
2012
|
-
if
|
2013
|
-
merge!(statement.slice(:el, :ec))
|
2035
|
+
if value[:body].any?
|
2036
|
+
value.merge!(statement.slice(:el, :ec))
|
2014
2037
|
else
|
2015
|
-
merge!(statement.slice(:sl, :el, :sc, :ec))
|
2038
|
+
value.merge!(statement.slice(:sl, :el, :sc, :ec))
|
2016
2039
|
end
|
2017
2040
|
|
2018
|
-
|
2041
|
+
value[:body] << statement
|
2019
2042
|
self
|
2020
2043
|
end
|
2021
2044
|
|
@@ -2032,7 +2055,7 @@ class Prettier::Parser < Ripper
|
|
2032
2055
|
return if attachable.empty?
|
2033
2056
|
|
2034
2057
|
parser.comments -= attachable
|
2035
|
-
|
2058
|
+
value[:body] = (value[:body] + attachable).sort_by! { |node| node[:sc] }
|
2036
2059
|
end
|
2037
2060
|
end
|
2038
2061
|
|
data/src/ruby/printer.js
CHANGED
@@ -127,6 +127,14 @@ function isBlockComment(comment) {
|
|
127
127
|
return comment.type === "@embdoc";
|
128
128
|
}
|
129
129
|
|
130
|
+
// This function handles adding the format pragma to a source string. This is an
|
131
|
+
// optional workflow for incremental adoption.
|
132
|
+
function insertPragma(text) {
|
133
|
+
const boundary = text.startsWith("#") ? "\n" : "\n\n";
|
134
|
+
|
135
|
+
return `# @format${boundary}${text}`;
|
136
|
+
}
|
137
|
+
|
130
138
|
module.exports = {
|
131
139
|
embed,
|
132
140
|
print: printNode,
|
@@ -134,5 +142,6 @@ module.exports = {
|
|
134
142
|
canAttachComment,
|
135
143
|
getCommentChildNodes,
|
136
144
|
printComment,
|
137
|
-
isBlockComment
|
145
|
+
isBlockComment,
|
146
|
+
insertPragma
|
138
147
|
};
|
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.
|
4
|
+
version: 1.6.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: 2021-
|
11
|
+
date: 2021-06-23 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email:
|
@@ -44,15 +44,6 @@ files:
|
|
44
44
|
- package.json
|
45
45
|
- rubocop.yml
|
46
46
|
- src/haml/embed.js
|
47
|
-
- src/haml/nodes/comment.js
|
48
|
-
- src/haml/nodes/doctype.js
|
49
|
-
- src/haml/nodes/filter.js
|
50
|
-
- src/haml/nodes/hamlComment.js
|
51
|
-
- src/haml/nodes/plain.js
|
52
|
-
- src/haml/nodes/root.js
|
53
|
-
- src/haml/nodes/script.js
|
54
|
-
- src/haml/nodes/silentScript.js
|
55
|
-
- src/haml/nodes/tag.js
|
56
47
|
- src/haml/parser.js
|
57
48
|
- src/haml/parser.rb
|
58
49
|
- src/haml/printer.js
|
@@ -133,7 +124,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
133
124
|
- !ruby/object:Gem::Version
|
134
125
|
version: '0'
|
135
126
|
requirements: []
|
136
|
-
rubygems_version: 3.
|
127
|
+
rubygems_version: 3.2.3
|
137
128
|
signing_key:
|
138
129
|
specification_version: 4
|
139
130
|
summary: prettier plugin for the Ruby programming language
|
data/src/haml/nodes/comment.js
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
const { concat, group, hardline, indent, join } = require("../../prettier");
|
2
|
-
|
3
|
-
// https://haml.info/docs/yardoc/file.REFERENCE.html#html-comments-
|
4
|
-
function comment(path, _opts, print) {
|
5
|
-
const { children, value } = path.getValue();
|
6
|
-
const parts = ["/"];
|
7
|
-
|
8
|
-
if (value.revealed) {
|
9
|
-
parts.push("!");
|
10
|
-
}
|
11
|
-
|
12
|
-
if (value.conditional) {
|
13
|
-
parts.push(value.conditional);
|
14
|
-
} else if (value.text) {
|
15
|
-
parts.push(" ", value.text);
|
16
|
-
}
|
17
|
-
|
18
|
-
if (children.length > 0) {
|
19
|
-
parts.push(
|
20
|
-
indent(concat([hardline, join(hardline, path.map(print, "children"))]))
|
21
|
-
);
|
22
|
-
}
|
23
|
-
|
24
|
-
return group(concat(parts));
|
25
|
-
}
|
26
|
-
|
27
|
-
module.exports = comment;
|
data/src/haml/nodes/doctype.js
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
const { join } = require("../../prettier");
|
2
|
-
|
3
|
-
const types = {
|
4
|
-
basic: "Basic",
|
5
|
-
frameset: "Frameset",
|
6
|
-
mobile: "Mobile",
|
7
|
-
rdfa: "RDFa",
|
8
|
-
strict: "Strict",
|
9
|
-
xml: "XML"
|
10
|
-
};
|
11
|
-
|
12
|
-
const versions = ["1.1", "5"];
|
13
|
-
|
14
|
-
// https://haml.info/docs/yardoc/file.REFERENCE.html#doctype-
|
15
|
-
function doctype(path, _opts, _print) {
|
16
|
-
const { value } = path.getValue();
|
17
|
-
const parts = ["!!!"];
|
18
|
-
|
19
|
-
if (value.type in types) {
|
20
|
-
parts.push(types[value.type]);
|
21
|
-
} else if (versions.includes(value.version)) {
|
22
|
-
parts.push(value.version);
|
23
|
-
} else {
|
24
|
-
parts.push(value.type);
|
25
|
-
}
|
26
|
-
|
27
|
-
if (value.encoding) {
|
28
|
-
parts.push(value.encoding);
|
29
|
-
}
|
30
|
-
|
31
|
-
return join(" ", parts);
|
32
|
-
}
|
33
|
-
|
34
|
-
module.exports = doctype;
|
data/src/haml/nodes/filter.js
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
const { concat, group, hardline, indent, join } = require("../../prettier");
|
2
|
-
|
3
|
-
// https://haml.info/docs/yardoc/file.REFERENCE.html#filters
|
4
|
-
function filter(path, _opts, _print) {
|
5
|
-
const { value } = path.getValue();
|
6
|
-
|
7
|
-
return group(
|
8
|
-
concat([
|
9
|
-
":",
|
10
|
-
value.name,
|
11
|
-
indent(concat([hardline, join(hardline, value.text.trim().split("\n"))]))
|
12
|
-
])
|
13
|
-
);
|
14
|
-
}
|
15
|
-
|
16
|
-
module.exports = filter;
|
@@ -1,21 +0,0 @@
|
|
1
|
-
const { concat, hardline, indent, join } = require("../../prettier");
|
2
|
-
|
3
|
-
// https://haml.info/docs/yardoc/file.REFERENCE.html#haml-comments--
|
4
|
-
function hamlComment(path, opts, _print) {
|
5
|
-
const node = path.getValue();
|
6
|
-
const parts = ["-#"];
|
7
|
-
|
8
|
-
if (node.value.text) {
|
9
|
-
if (opts.originalText.split("\n")[node.line - 1].trim() === "-#") {
|
10
|
-
const lines = node.value.text.trim().split("\n");
|
11
|
-
|
12
|
-
parts.push(indent(concat([hardline, join(hardline, lines)])));
|
13
|
-
} else {
|
14
|
-
parts.push(" ", node.value.text.trim());
|
15
|
-
}
|
16
|
-
}
|
17
|
-
|
18
|
-
return concat(parts);
|
19
|
-
}
|
20
|
-
|
21
|
-
module.exports = hamlComment;
|
data/src/haml/nodes/plain.js
DELETED
data/src/haml/nodes/root.js
DELETED
data/src/haml/nodes/script.js
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
const { concat, group, hardline, indent, join } = require("../../prettier");
|
2
|
-
|
3
|
-
// https://haml.info/docs/yardoc/file.REFERENCE.html#inserting_ruby
|
4
|
-
function script(path, opts, print) {
|
5
|
-
const { children, value } = path.getValue();
|
6
|
-
const parts = [];
|
7
|
-
|
8
|
-
if (value.escape_html) {
|
9
|
-
parts.unshift("&");
|
10
|
-
}
|
11
|
-
|
12
|
-
if (value.preserve) {
|
13
|
-
parts.push("~");
|
14
|
-
} else if (!value.interpolate) {
|
15
|
-
parts.push("=");
|
16
|
-
}
|
17
|
-
|
18
|
-
if (value.escape_html && !value.preserve && value.interpolate) {
|
19
|
-
parts.push(" ", value.text.trim().slice(1, -1));
|
20
|
-
} else {
|
21
|
-
parts.push(" ", value.text.trim());
|
22
|
-
}
|
23
|
-
|
24
|
-
if (children.length > 0) {
|
25
|
-
parts.push(
|
26
|
-
indent(concat([hardline, join(hardline, path.map(print, "children"))]))
|
27
|
-
);
|
28
|
-
}
|
29
|
-
|
30
|
-
return group(concat(parts));
|
31
|
-
}
|
32
|
-
|
33
|
-
module.exports = script;
|
@@ -1,59 +0,0 @@
|
|
1
|
-
const { concat, group, hardline, indent, join } = require("../../prettier");
|
2
|
-
|
3
|
-
function findKeywordIndices(children, keywords) {
|
4
|
-
const indices = [];
|
5
|
-
|
6
|
-
children.forEach((child, index) => {
|
7
|
-
if (child.type !== "silent_script") {
|
8
|
-
return;
|
9
|
-
}
|
10
|
-
|
11
|
-
if (keywords.includes(child.value.keyword)) {
|
12
|
-
indices.push(index);
|
13
|
-
}
|
14
|
-
});
|
15
|
-
|
16
|
-
return indices;
|
17
|
-
}
|
18
|
-
|
19
|
-
// https://haml.info/docs/yardoc/file.REFERENCE.html#running-ruby--
|
20
|
-
function silentScript(path, _opts, print) {
|
21
|
-
const { children, value } = path.getValue();
|
22
|
-
const parts = [`- ${value.text.trim()}`];
|
23
|
-
|
24
|
-
if (children.length > 0) {
|
25
|
-
const scripts = path.map(print, "children");
|
26
|
-
|
27
|
-
if (value.keyword === "case") {
|
28
|
-
const keywordIndices = findKeywordIndices(children, ["when", "else"]);
|
29
|
-
|
30
|
-
parts.push(
|
31
|
-
concat(
|
32
|
-
scripts.map((script, index) => {
|
33
|
-
const concated = concat([hardline, script]);
|
34
|
-
|
35
|
-
return keywordIndices.includes(index) ? concated : indent(concated);
|
36
|
-
})
|
37
|
-
)
|
38
|
-
);
|
39
|
-
} else if (["if", "unless"].includes(value.keyword)) {
|
40
|
-
const keywordIndices = findKeywordIndices(children, ["elsif", "else"]);
|
41
|
-
|
42
|
-
parts.push(
|
43
|
-
concat(
|
44
|
-
scripts.map((script, index) => {
|
45
|
-
const concated = concat([hardline, script]);
|
46
|
-
|
47
|
-
return keywordIndices.includes(index) ? concated : indent(concated);
|
48
|
-
})
|
49
|
-
)
|
50
|
-
);
|
51
|
-
} else {
|
52
|
-
parts.push(indent(concat([hardline, join(hardline, scripts)])));
|
53
|
-
}
|
54
|
-
}
|
55
|
-
|
56
|
-
return group(concat(parts));
|
57
|
-
}
|
58
|
-
|
59
|
-
module.exports = silentScript;
|