yaml-sort 1.0.1 → 2.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|