yaml-sort 1.0.1 → 2.0.2
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 +26 -2
- data/lib/yaml/sort/dictionary.rb +5 -3
- data/lib/yaml/sort/item.rb +13 -0
- data/lib/yaml/sort/list.rb +3 -5
- data/lib/yaml/sort/parser.rb +57 -45
- data/lib/yaml/sort/scalar.rb +8 -3
- data/lib/yaml/sort/value.rb +5 -1
- data/lib/yaml/sort/version.rb +1 -1
- data/lib/yaml/sort.rb +1 -0
- metadata +8 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 125cdbf70a136c2968ab9c18f99cbfaa62e3f4117a577187a37f43298910a7c9
|
4
|
+
data.tar.gz: 58ed8f15a8cd027871e17dbc8ccd8293fd1be1e3242e2b12012ea1efc9f50c87
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3e2580f860075dd74a69c5e5a31097d906cbba4c9293a8f3181ee6fbf72cc931ca371cbf3b5258ed5ac93d356d2ed82f2805477f039799ea4cd293a39458a236
|
7
|
+
data.tar.gz: 00d35a112f355e53e0fca7d3bc63349dc6c1da2b87fc8195af480754b1e81f31049da97282679eef282d412c42d2ec7788689879c915a6697860408d01f9f5cd
|
data/CHANGELOG.md
CHANGED
@@ -3,9 +3,33 @@ All notable changes to this project will be documented in this file.
|
|
3
3
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
|
4
4
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
5
5
|
|
6
|
-
## [
|
6
|
+
## [2.0.2](https://github.com/smortex/yaml-sort/tree/2.0.2) (2022-06-10)
|
7
7
|
|
8
|
-
[Full Changelog](https://github.com/smortex/yaml-sort/compare/
|
8
|
+
[Full Changelog](https://github.com/smortex/yaml-sort/compare/v2.0.1...2.0.2)
|
9
|
+
|
10
|
+
**Fixed bugs:**
|
11
|
+
|
12
|
+
- Fix infinite loops when processing files with trailing whitespace [\#9](https://github.com/smortex/yaml-sort/pull/9) ([smortex](https://github.com/smortex))
|
13
|
+
|
14
|
+
## [v2.0.1](https://github.com/smortex/yaml-sort/tree/v2.0.1) (2022-06-01)
|
15
|
+
|
16
|
+
[Full Changelog](https://github.com/smortex/yaml-sort/compare/v2.0.0...v2.0.1)
|
17
|
+
|
18
|
+
**Fixed bugs:**
|
19
|
+
|
20
|
+
- Fix parsing of keys with spaces [\#8](https://github.com/smortex/yaml-sort/pull/8) ([smortex](https://github.com/smortex))
|
21
|
+
|
22
|
+
## [v2.0.0](https://github.com/smortex/yaml-sort/tree/v2.0.0) (2022-04-25)
|
23
|
+
|
24
|
+
[Full Changelog](https://github.com/smortex/yaml-sort/compare/v1.0.1...v2.0.0)
|
25
|
+
|
26
|
+
**Merged pull requests:**
|
27
|
+
|
28
|
+
- Rework list sorting [\#7](https://github.com/smortex/yaml-sort/pull/7) ([smortex](https://github.com/smortex))
|
29
|
+
|
30
|
+
## [v1.0.1](https://github.com/smortex/yaml-sort/tree/v1.0.1) (2022-04-24)
|
31
|
+
|
32
|
+
[Full Changelog](https://github.com/smortex/yaml-sort/compare/v1.0.0...v1.0.1)
|
9
33
|
|
10
34
|
**Fixed bugs:**
|
11
35
|
|
data/lib/yaml/sort/dictionary.rb
CHANGED
@@ -20,13 +20,15 @@ module Yaml
|
|
20
20
|
dict
|
21
21
|
end
|
22
22
|
|
23
|
-
def to_s
|
23
|
+
def to_s(skip_first_indent: false)
|
24
|
+
n = -1
|
24
25
|
super + items.map do |k, v|
|
26
|
+
n += 1
|
25
27
|
case v
|
26
28
|
when List, Dictionary
|
27
|
-
"#{k}\n#{v}"
|
29
|
+
"#{k.to_s(skip_first_indent: skip_first_indent && n.zero?)}\n#{v}"
|
28
30
|
when Scalar
|
29
|
-
"#{k} #{v}"
|
31
|
+
"#{k.to_s(skip_first_indent: skip_first_indent && n.zero?)} #{v}"
|
30
32
|
end
|
31
33
|
end.join("\n")
|
32
34
|
end
|
data/lib/yaml/sort/list.rb
CHANGED
@@ -22,15 +22,13 @@ module Yaml
|
|
22
22
|
|
23
23
|
def to_s
|
24
24
|
super + items.map do |item|
|
25
|
-
"#{item[0]}#{item[1]}"
|
25
|
+
"#{item[0]}#{item[1].to_s(skip_first_indent: true)}"
|
26
26
|
end.join("\n")
|
27
27
|
end
|
28
28
|
|
29
29
|
def sort
|
30
|
-
|
31
|
-
|
32
|
-
# Non-comparable items
|
33
|
-
self
|
30
|
+
# TODO: Add an option to sort scalar values
|
31
|
+
List.new(items.map { |i| [i[0], i[1].sort] })
|
34
32
|
end
|
35
33
|
end
|
36
34
|
end
|
data/lib/yaml/sort/parser.rb
CHANGED
@@ -30,43 +30,42 @@ def scan(text)
|
|
30
30
|
|
31
31
|
until s.eos?
|
32
32
|
if scan_value
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
break
|
51
|
-
end
|
52
|
-
end
|
53
|
-
emit(:VALUE, match)
|
54
|
-
when s.scan(/'/)
|
55
|
-
match = s.matched
|
56
|
-
loop do
|
57
|
-
match += s.scan_until(/'/)
|
58
|
-
break unless s.match?(/'/)
|
59
|
-
match += s.scan(/'/)
|
60
|
-
end
|
61
|
-
emit(:VALUE, match)
|
62
|
-
when s.scan(/\S+/)
|
63
|
-
match = s.matched
|
64
|
-
until s.match?(/[\n]/) || s.eos?
|
65
|
-
match += s.scan(/[^\n]+/)
|
33
|
+
@position += s.matched_size if s.scan(/[[:blank:]]*/)
|
34
|
+
case
|
35
|
+
when s.scan(/[|>][-+]?(?=\n)/)
|
36
|
+
match = s.matched
|
37
|
+
|
38
|
+
while s.match?("\n" + last_indent_value + " ")
|
39
|
+
match += s.scan(/\n[^\n]+(?=\n)/)
|
40
|
+
end
|
41
|
+
emit(:VALUE, match)
|
42
|
+
when s.scan(/"/)
|
43
|
+
match = s.matched
|
44
|
+
loop do
|
45
|
+
match += s.scan_until(/"|\\/)
|
46
|
+
if match[-1] == "\\"
|
47
|
+
match += s.scan(/.|\n/)
|
48
|
+
else
|
49
|
+
break
|
66
50
|
end
|
67
|
-
emit(:VALUE, match)
|
68
51
|
end
|
52
|
+
emit(:VALUE, match)
|
53
|
+
when s.scan(/'/)
|
54
|
+
match = s.matched
|
55
|
+
loop do
|
56
|
+
match += s.scan_until(/'/)
|
57
|
+
break unless s.match?(/'/)
|
58
|
+
match += s.scan(/'/)
|
59
|
+
end
|
60
|
+
emit(:VALUE, match)
|
61
|
+
when s.scan(/\S+/)
|
62
|
+
match = s.matched
|
63
|
+
until s.match?(/[\n]/) || s.eos?
|
64
|
+
match += s.scan(/[^\n]+/)
|
65
|
+
end
|
66
|
+
emit(:VALUE, match)
|
69
67
|
end
|
68
|
+
s.scan(/[[:blank:]]*/)
|
70
69
|
scan_value = false
|
71
70
|
else
|
72
71
|
case
|
@@ -78,17 +77,30 @@ def scan(text)
|
|
78
77
|
when s.scan(/\n[[:blank:]]*#.*/) then emit(:COMMENT, s.matched)
|
79
78
|
when s.scan(/\n([[:blank:]]*-) */) then emit(:ITEM, s.matched, indent: s.captures[0])
|
80
79
|
when s.scan(/\n[[:blank:]]*\.\.\./) then emit(:END_OF_DOCUMENT, s.matched)
|
81
|
-
when s.scan(/\n?([[:blank:]]*)(
|
80
|
+
when s.scan(/\n?([[:blank:]]*)(.+:)(?=[ \n])/)
|
82
81
|
indent = s.captures[0]
|
83
82
|
indent = last_indent_value + indent + " " unless s.matched.start_with?("\n")
|
84
|
-
emit(:KEY, s.matched, indent: indent)
|
83
|
+
emit(:KEY, s.matched, indent: indent, value: s.captures[1])
|
85
84
|
|
86
85
|
when s.scan(/\n\z/)
|
87
86
|
# Done
|
88
87
|
when s.match?(/./)
|
89
88
|
scan_value = true
|
90
89
|
else
|
91
|
-
|
90
|
+
message = if @lines[@lineno - 1][@position] == "\n"
|
91
|
+
<<~MESSAGE
|
92
|
+
#{@filename}:#{@lineno + 1}: unexpected content
|
93
|
+
#{@lines[@lineno].chomp}
|
94
|
+
^#{"~" * (@lines[@lineno].chomp.length - 1)}
|
95
|
+
MESSAGE
|
96
|
+
else
|
97
|
+
<<~MESSAGE
|
98
|
+
#{@filename}:#{@lineno}: unexpected content
|
99
|
+
#{@lines[@lineno - 1].chomp}
|
100
|
+
#{" " * @position}^
|
101
|
+
MESSAGE
|
102
|
+
end
|
103
|
+
raise(Racc::ParseError, message)
|
92
104
|
end
|
93
105
|
end
|
94
106
|
end
|
@@ -110,16 +122,16 @@ def scan(text)
|
|
110
122
|
@tokens
|
111
123
|
end
|
112
124
|
|
113
|
-
def emit(token,
|
125
|
+
def emit(token, match, length: nil, indent: nil, value: nil)
|
114
126
|
indent.gsub!("-", " ") if indent
|
115
127
|
if token && length.nil?
|
116
|
-
raise "length must be explicitly passed when
|
117
|
-
length =
|
128
|
+
raise "length must be explicitly passed when match is not a String (#{match.class.name})" unless match.is_a?(String)
|
129
|
+
length = match.length
|
118
130
|
end
|
119
131
|
|
120
|
-
if
|
132
|
+
if match.start_with?("\n")
|
121
133
|
@lineno += 1
|
122
|
-
|
134
|
+
match = match[1..-1]
|
123
135
|
length -= 1
|
124
136
|
@position = 0
|
125
137
|
end
|
@@ -130,7 +142,7 @@ def emit(token, value, length: nil, indent: nil)
|
|
130
142
|
end
|
131
143
|
|
132
144
|
exvalue = {
|
133
|
-
value: value,
|
145
|
+
value: value || match,
|
134
146
|
lineno: @lineno,
|
135
147
|
position: @position,
|
136
148
|
length: length,
|
@@ -138,7 +150,7 @@ def emit(token, value, length: nil, indent: nil)
|
|
138
150
|
}
|
139
151
|
@tokens << [token, exvalue]
|
140
152
|
|
141
|
-
@lineno +=
|
153
|
+
@lineno += match.count("\n")
|
142
154
|
|
143
155
|
@position += length
|
144
156
|
end
|
@@ -351,7 +363,7 @@ module_eval(<<'.,.,', 'parser.ra', 22)
|
|
351
363
|
|
352
364
|
module_eval(<<'.,.,', 'parser.ra', 24)
|
353
365
|
def _reduce_11(val, _values, result)
|
354
|
-
result = [
|
366
|
+
result = [Item.new(val[0]), val[1]]
|
355
367
|
result
|
356
368
|
end
|
357
369
|
.,.,
|
data/lib/yaml/sort/scalar.rb
CHANGED
@@ -3,12 +3,13 @@
|
|
3
3
|
module Yaml
|
4
4
|
module Sort
|
5
5
|
class Scalar < Value
|
6
|
-
attr_reader :value
|
6
|
+
attr_reader :value, :indent
|
7
7
|
|
8
8
|
def initialize(value)
|
9
9
|
super()
|
10
10
|
@comment = value[:comment] || []
|
11
11
|
@value = value[:value]
|
12
|
+
@indent = value[:indent] || ""
|
12
13
|
end
|
13
14
|
|
14
15
|
def <=>(other)
|
@@ -19,8 +20,12 @@ module Yaml
|
|
19
20
|
end
|
20
21
|
end
|
21
22
|
|
22
|
-
def to_s
|
23
|
-
|
23
|
+
def to_s(skip_first_indent: false)
|
24
|
+
if skip_first_indent
|
25
|
+
super + value
|
26
|
+
else
|
27
|
+
super + indent + value
|
28
|
+
end
|
24
29
|
end
|
25
30
|
end
|
26
31
|
end
|
data/lib/yaml/sort/value.rb
CHANGED
data/lib/yaml/sort/version.rb
CHANGED
data/lib/yaml/sort.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yaml-sort
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Romain Tartière
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-06-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cri
|
@@ -66,7 +66,7 @@ dependencies:
|
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
-
description:
|
69
|
+
description:
|
70
70
|
email:
|
71
71
|
- romain@blogreen.org
|
72
72
|
executables:
|
@@ -86,6 +86,7 @@ files:
|
|
86
86
|
- lib/yaml/sort.rb
|
87
87
|
- lib/yaml/sort/cli.rb
|
88
88
|
- lib/yaml/sort/dictionary.rb
|
89
|
+
- lib/yaml/sort/item.rb
|
89
90
|
- lib/yaml/sort/list.rb
|
90
91
|
- lib/yaml/sort/parser.rb
|
91
92
|
- lib/yaml/sort/scalar.rb
|
@@ -103,7 +104,7 @@ metadata:
|
|
103
104
|
source_code_uri: https://github.com/smortex/yaml-sort
|
104
105
|
changelog_uri: https://github.com/smortex/yaml-sort/blob/master/CHANGELOG.md
|
105
106
|
rubygems_mfa_required: 'true'
|
106
|
-
post_install_message:
|
107
|
+
post_install_message:
|
107
108
|
rdoc_options: []
|
108
109
|
require_paths:
|
109
110
|
- lib
|
@@ -118,8 +119,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
118
119
|
- !ruby/object:Gem::Version
|
119
120
|
version: '0'
|
120
121
|
requirements: []
|
121
|
-
rubygems_version: 3.
|
122
|
-
signing_key:
|
122
|
+
rubygems_version: 3.2.5
|
123
|
+
signing_key:
|
123
124
|
specification_version: 4
|
124
125
|
summary: Sort lines in YAML files in a predictable order
|
125
126
|
test_files: []
|