prettier 1.1.0 → 1.2.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 +7 -0
- data/package.json +1 -1
- data/src/nodes/assign.js +9 -1
- data/src/nodes/methods.js +11 -2
- data/src/nodes/patterns.js +17 -0
- data/src/parser.rb +45 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c97988d5dd7fe35aa5fd73777f31f8217809ea0eee189cab7ac70c266569857b
|
4
|
+
data.tar.gz: 478c15e6cbd8d8efb16fc37e028afb8c88f3671aa77f36d3df0cd115b239c83a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 38ae06510c4872ba7f4ede36dc6b5f4aae3c7183c9c48b4e515733074e9ce27d2ddb4b189c25600d1daf123b8f5eccbb8b12c953e5192a62e08a63cb9716298e
|
7
|
+
data.tar.gz: 9456c53fe9ad823defb3d69fd4dd4504ee1e9d4af5d522fd8352141d61a5d975aa6043b62d78dd077f000258e400ee98fce8131ada5dac066021bb27e9f40de5
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,13 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
|
|
6
6
|
|
7
7
|
## [Unreleased]
|
8
8
|
|
9
|
+
## [1.2.0] - 2020-12-26
|
10
|
+
|
11
|
+
### Added
|
12
|
+
|
13
|
+
- [@kddeisz] - Support for the `fndptn` node for Ruby 3.0 pattern matching.
|
14
|
+
- [@kddeisz] - Support for Ruby 3.0+ single-line method definitions.
|
15
|
+
|
9
16
|
## [1.1.0] - 2020-12-20
|
10
17
|
|
11
18
|
### Added
|
data/package.json
CHANGED
data/src/nodes/assign.js
CHANGED
@@ -31,9 +31,17 @@ function printOpAssign(path, opts, print) {
|
|
31
31
|
);
|
32
32
|
}
|
33
33
|
|
34
|
+
function printVarField(path, opts, print) {
|
35
|
+
if (path.getValue().body) {
|
36
|
+
return path.call(print, "body", 0);
|
37
|
+
}
|
38
|
+
|
39
|
+
return "*";
|
40
|
+
}
|
41
|
+
|
34
42
|
module.exports = {
|
35
43
|
assign: printAssign,
|
36
44
|
opassign: printOpAssign,
|
37
|
-
var_field:
|
45
|
+
var_field: printVarField,
|
38
46
|
var_ref: first
|
39
47
|
};
|
data/src/nodes/methods.js
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
const { concat, group, hardline, indent } = require("../prettier");
|
1
|
+
const { concat, group, hardline, indent, line } = require("../prettier");
|
2
2
|
const { first } = require("../utils");
|
3
3
|
|
4
4
|
function printMethod(offset) {
|
@@ -48,8 +48,17 @@ function printMethod(offset) {
|
|
48
48
|
};
|
49
49
|
}
|
50
50
|
|
51
|
+
function printSingleLineMethod(path, opts, print) {
|
52
|
+
const [nameDoc, stmtDoc] = path.map(print, "body");
|
53
|
+
|
54
|
+
return group(
|
55
|
+
concat(["def ", nameDoc, " =", indent(group(concat([line, stmtDoc])))])
|
56
|
+
);
|
57
|
+
}
|
58
|
+
|
51
59
|
module.exports = {
|
52
60
|
access_ctrl: first,
|
53
61
|
def: printMethod(0),
|
54
|
-
defs: printMethod(2)
|
62
|
+
defs: printMethod(2),
|
63
|
+
defsl: printSingleLineMethod
|
55
64
|
};
|
data/src/nodes/patterns.js
CHANGED
@@ -48,6 +48,22 @@ function printAryPtn(path, opts, print) {
|
|
48
48
|
return args;
|
49
49
|
}
|
50
50
|
|
51
|
+
function printFndPtn(path, opts, print) {
|
52
|
+
const [constant] = path.getValue().body;
|
53
|
+
|
54
|
+
let args = [path.call(print, "body", 1)]
|
55
|
+
.concat(path.map(print, "body", 2))
|
56
|
+
.concat(path.call(print, "body", 3));
|
57
|
+
|
58
|
+
args = concat(["[", group(join(concat([",", line]), args)), "]"]);
|
59
|
+
|
60
|
+
if (constant) {
|
61
|
+
return concat([path.call(print, "body", 0), args]);
|
62
|
+
}
|
63
|
+
|
64
|
+
return args;
|
65
|
+
}
|
66
|
+
|
51
67
|
function printHshPtn(path, opts, print) {
|
52
68
|
const [constant, keyValuePairs, keyValueRest] = path.getValue().body;
|
53
69
|
let args = [];
|
@@ -113,6 +129,7 @@ function printIn(path, opts, print) {
|
|
113
129
|
|
114
130
|
module.exports = {
|
115
131
|
aryptn: printAryPtn,
|
132
|
+
fndptn: printFndPtn,
|
116
133
|
hshptn: printHshPtn,
|
117
134
|
in: printIn
|
118
135
|
};
|
data/src/parser.rb
CHANGED
@@ -814,18 +814,43 @@ class Prettier::Parser < Ripper
|
|
814
814
|
# │ └> params
|
815
815
|
# └> ident
|
816
816
|
#
|
817
|
+
# You can also have single-line methods since Ruby 3.0+, which have slightly
|
818
|
+
# different syntax but still flow through this method. Those look like:
|
819
|
+
#
|
820
|
+
# def foo = bar
|
821
|
+
# | |
|
822
|
+
# | └> stmt
|
823
|
+
# └> ident
|
824
|
+
#
|
817
825
|
def on_def(ident, params, bodystmt)
|
818
826
|
# Make sure to delete this scanner event in case you're defining something
|
819
827
|
# like def class which would lead to this being a kw and causing all kinds
|
820
828
|
# of trouble
|
821
829
|
scanner_events.delete(ident)
|
822
830
|
|
831
|
+
# Find the beginning of the method definition, which works for single-line
|
832
|
+
# and normal method definitions.
|
833
|
+
beging = find_scanner_event(:@kw, 'def')
|
834
|
+
|
835
|
+
# If there is not a params node, then we have a single-line method
|
836
|
+
unless params
|
837
|
+
return(
|
838
|
+
{
|
839
|
+
type: :defsl,
|
840
|
+
body: [ident, bodystmt],
|
841
|
+
start: beging[:start],
|
842
|
+
char_start: beging[:char_start],
|
843
|
+
end: bodystmt[:end],
|
844
|
+
char_end: bodystmt[:char_end]
|
845
|
+
}
|
846
|
+
)
|
847
|
+
end
|
848
|
+
|
823
849
|
if params[:type] == :params && !params[:body].any?
|
824
850
|
location = ident[:char_end]
|
825
851
|
params.merge!(char_start: location, char_end: location)
|
826
852
|
end
|
827
853
|
|
828
|
-
beging = find_scanner_event(:@kw, 'def')
|
829
854
|
ending = find_scanner_event(:@kw, 'end')
|
830
855
|
|
831
856
|
bodystmt.bind(
|
@@ -1157,6 +1182,24 @@ class Prettier::Parser < Ripper
|
|
1157
1182
|
}
|
1158
1183
|
end
|
1159
1184
|
|
1185
|
+
# fndptn is a parser event that represents matching against a pattern where
|
1186
|
+
# you find a pattern in an array using the Ruby 3.0+ pattern matching syntax.
|
1187
|
+
def on_fndptn(const, presplat, args, postsplat)
|
1188
|
+
beging = const || find_scanner_event(:@lbracket)
|
1189
|
+
ending = find_scanner_event(:@rbracket)
|
1190
|
+
|
1191
|
+
pieces = [const, presplat, *args, postsplat].compact
|
1192
|
+
|
1193
|
+
{
|
1194
|
+
type: :fndptn,
|
1195
|
+
body: [const, presplat, args, postsplat],
|
1196
|
+
start: beging[:start],
|
1197
|
+
char_start: beging[:char_start],
|
1198
|
+
end: ending[:end],
|
1199
|
+
char_end: ending[:char_end]
|
1200
|
+
}
|
1201
|
+
end
|
1202
|
+
|
1160
1203
|
# for is a parser event that represents using the somewhat esoteric for
|
1161
1204
|
# loop. It accepts as arguments an ident which is the iterating variable,
|
1162
1205
|
# an enumerable for that which is being enumerated, and a stmts event that
|
@@ -2306,7 +2349,7 @@ class Prettier::Parser < Ripper
|
|
2306
2349
|
else
|
2307
2350
|
# You can hit this pattern if you're assigning to a splat using pattern
|
2308
2351
|
# matching syntax in Ruby 2.7+
|
2309
|
-
{ type: :var_field, body:
|
2352
|
+
{ type: :var_field, body: nil }
|
2310
2353
|
end
|
2311
2354
|
end
|
2312
2355
|
|
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.2.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: 2020-12-
|
11
|
+
date: 2020-12-26 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email:
|