psych-comments 0.1.0 → 0.1.1
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 +5 -0
- data/lib/psych/comments/emitter.rb +36 -19
- data/lib/psych/comments/parsing.rb +18 -1
- data/lib/psych/comments/version.rb +1 -1
- 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: 818bc094529602b346feec2de45c209a97846747142399a673984b27cf311153
|
4
|
+
data.tar.gz: c20108df72182dbe158485de105ab764c5e6f6e5f6bc9f0fe714d3fb8bdd717a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c21f780021ef4b2f86ef7c090624c8d06f252922ce6539998edb5768b310536aa412c61a6d8e33370f58401560bbca92d8006dfc7ee3ca80d3efb398598e1370
|
7
|
+
data.tar.gz: 77fd723a8d83a8a8071ea87e60548efa88be32f5c88cb242c52548df56950e8c3ba0a29fccfd0e5c7b7ff29c4be8ca8d39b492f0d0cbed3f24e506fc8adfeb98
|
data/CHANGELOG.md
CHANGED
@@ -16,7 +16,7 @@ module Psych
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
-
module_function def stringify_adjust_scalar(node,
|
19
|
+
module_function def stringify_adjust_scalar(node, indent_str = 0)
|
20
20
|
node2 = Psych::Nodes::Scalar.new(node.value, nil, nil, node.plain, node.quoted, node.style)
|
21
21
|
if node.tag
|
22
22
|
if node.style == Psych::Nodes::Scalar::PLAIN
|
@@ -30,7 +30,7 @@ module Psych
|
|
30
30
|
if node.style == Psych::Nodes::Scalar::DOUBLE_QUOTED || node.style == Psych::Nodes::Scalar::SINGLE_QUOTED || node.style == Psych::Nodes::Scalar::PLAIN
|
31
31
|
s = s.gsub(/\s*\n\s*/, " ")
|
32
32
|
else
|
33
|
-
s = s.gsub(/\n/, "\n#{
|
33
|
+
s = s.gsub(/\n/, "\n#{indent_str}")
|
34
34
|
end
|
35
35
|
s.gsub(/\n\s+$/, "\n")
|
36
36
|
end
|
@@ -108,8 +108,7 @@ module Psych
|
|
108
108
|
@comment_lookahead.shift
|
109
109
|
else
|
110
110
|
node.leading_comments.each do |comment|
|
111
|
-
|
112
|
-
newline!
|
111
|
+
emit_comment(comment)
|
113
112
|
end
|
114
113
|
end
|
115
114
|
if has_anchor(node)
|
@@ -130,7 +129,7 @@ module Psych
|
|
130
129
|
if node.is_a?(Psych::Nodes::Alias)
|
131
130
|
print "*#{node.anchor}"
|
132
131
|
else
|
133
|
-
print stringify_adjust_scalar(node, @indent)
|
132
|
+
print stringify_adjust_scalar(node, INDENT * @indent)
|
134
133
|
end
|
135
134
|
when Psych::Nodes::Mapping
|
136
135
|
set_flow(flow?(node)) do
|
@@ -155,14 +154,12 @@ module Psych
|
|
155
154
|
emit(key)
|
156
155
|
print ":"
|
157
156
|
space!
|
158
|
-
if single_line(value)
|
159
|
-
emit(value)
|
160
|
-
elsif has_bullet(value)
|
157
|
+
if single_line?(value) || has_bullet(value)
|
161
158
|
emit(value)
|
162
159
|
else
|
163
|
-
|
164
|
-
|
165
|
-
|
160
|
+
indented do
|
161
|
+
emit(value)
|
162
|
+
end
|
166
163
|
end
|
167
164
|
newline!
|
168
165
|
end
|
@@ -188,8 +185,12 @@ module Psych
|
|
188
185
|
emit_lookahead_comments(subnode) unless @flow
|
189
186
|
print "- "
|
190
187
|
@state = :pseudo_indent
|
191
|
-
|
188
|
+
if single_line?(subnode)
|
192
189
|
emit(subnode)
|
190
|
+
else
|
191
|
+
indented do
|
192
|
+
emit(subnode)
|
193
|
+
end
|
193
194
|
end
|
194
195
|
newline!
|
195
196
|
end
|
@@ -204,7 +205,7 @@ module Psych
|
|
204
205
|
unless node.implicit
|
205
206
|
newline!
|
206
207
|
print "---"
|
207
|
-
|
208
|
+
space!
|
208
209
|
end
|
209
210
|
set_tagmap(node) do
|
210
211
|
emit(node.root)
|
@@ -212,8 +213,8 @@ module Psych
|
|
212
213
|
unless node.implicit_end
|
213
214
|
newline!
|
214
215
|
print "..."
|
215
|
-
newline!
|
216
216
|
end
|
217
|
+
newline!
|
217
218
|
when Psych::Nodes::Stream
|
218
219
|
node.children.each do |subnode|
|
219
220
|
emit(subnode)
|
@@ -221,18 +222,26 @@ module Psych
|
|
221
222
|
else
|
222
223
|
raise TypeError, node
|
223
224
|
end
|
225
|
+
node.trailing_comments.each do |comment|
|
226
|
+
emit_comment(comment)
|
227
|
+
end
|
224
228
|
end
|
225
229
|
|
226
230
|
def emit_lookahead_comments(node)
|
231
|
+
return if node.equal?(@comment_lookahead[0])
|
232
|
+
|
227
233
|
node.leading_comments.each do |comment|
|
228
|
-
|
229
|
-
newline!
|
234
|
+
emit_comment(comment)
|
230
235
|
end
|
231
236
|
@comment_lookahead.push(node)
|
232
|
-
|
233
|
-
|
234
|
-
|
237
|
+
end
|
238
|
+
|
239
|
+
def emit_comment(comment)
|
240
|
+
unless /\A#[^\r\n]*\z/.match?(comment)
|
241
|
+
raise ArgumentError, "Invalid comment: #{comment.inspect}"
|
235
242
|
end
|
243
|
+
print comment
|
244
|
+
newline!
|
236
245
|
end
|
237
246
|
|
238
247
|
def indented(&block)
|
@@ -253,12 +262,20 @@ module Psych
|
|
253
262
|
end
|
254
263
|
end
|
255
264
|
|
265
|
+
def single_line?(node)
|
266
|
+
flow?(node) && node.leading_comments.empty? && node.trailing_comments.empty?
|
267
|
+
end
|
268
|
+
|
256
269
|
def flow?(node)
|
257
270
|
case node
|
271
|
+
when Psych::Nodes::Scalar, Psych::Nodes::Alias
|
272
|
+
true
|
258
273
|
when Psych::Nodes::Mapping
|
259
274
|
@flow || node.style == Psych::Nodes::Mapping::FLOW || node.children.empty?
|
260
275
|
when Psych::Nodes::Sequence
|
261
276
|
@flow || node.style == Psych::Nodes::Sequence::FLOW || node.children.empty?
|
277
|
+
else
|
278
|
+
false
|
262
279
|
end
|
263
280
|
end
|
264
281
|
|
@@ -4,6 +4,7 @@ module Psych
|
|
4
4
|
def initialize(text)
|
5
5
|
@lines = text.lines.to_a
|
6
6
|
@last = [0, 0]
|
7
|
+
@bullet_owner = nil
|
7
8
|
end
|
8
9
|
|
9
10
|
def sublines(sl, sc, el, ec)
|
@@ -25,7 +26,20 @@ module Psych
|
|
25
26
|
def read_comments(line, column)
|
26
27
|
s = sublines(*@last, line, column)
|
27
28
|
@last = [line, column]
|
28
|
-
|
29
|
+
comments = []
|
30
|
+
s.scan(/-|#.*?$/) do |token|
|
31
|
+
case token
|
32
|
+
when "-"
|
33
|
+
if @bullet_owner
|
34
|
+
@bullet_owner.leading_comments.push(*comments)
|
35
|
+
comments = []
|
36
|
+
end
|
37
|
+
else
|
38
|
+
comments << token
|
39
|
+
end
|
40
|
+
end
|
41
|
+
@bullet_owner = nil
|
42
|
+
comments
|
29
43
|
end
|
30
44
|
|
31
45
|
def visit(node)
|
@@ -35,8 +49,11 @@ module Psych
|
|
35
49
|
@last = [node.end_line, node.end_column]
|
36
50
|
when Psych::Nodes::Sequence, Psych::Nodes::Mapping
|
37
51
|
has_delim = /[\[{]/.match?(char_at(node.start_line, node.start_column))
|
52
|
+
has_bullet = node.is_a?(Psych::Nodes::Sequence) && !has_delim
|
53
|
+
# Special-case on `- #foo\n bar: baz`
|
38
54
|
node.leading_comments.push(*read_comments(node.start_line, node.start_column)) if has_delim
|
39
55
|
node.children.each do |subnode|
|
56
|
+
@bullet_owner = subnode if has_bullet
|
40
57
|
visit(subnode)
|
41
58
|
end
|
42
59
|
if has_delim
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: psych-comments
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Masaki Hara
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-08-
|
11
|
+
date: 2022-08-25 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Brings comment-aware YAML parsing to Psych
|
14
14
|
email:
|