yaml-sort 1.0.1 → 2.0.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 +10 -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 +10 -10
- 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 +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a923ba44e82aa9eba2dbaa2ba2c4c30a6c775a5a6d0e2f447ec6e0682dc119df
|
4
|
+
data.tar.gz: 637f1efc9b2104818816ce37a62385a149c657d079ad50a6cb8337a9c56a7eee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 04c75095cfe4fe25a42fdf0d0a4184a0324b1c64244ff3930d082e23f0efd393dbea5f4ea3f00f2364d48307ff37677b17348afa5f57ea367c525248ea3c4ecd
|
7
|
+
data.tar.gz: b6f2583c7170070daa6bd3dbc1067e280fc26c4bc88895158039a6e2ce5dc67177ef2210978bfbb332496a207070a61c4d2c56a5a4a2913ff6d9bf83f5d89293
|
data/CHANGELOG.md
CHANGED
@@ -3,9 +3,17 @@ 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.0](https://github.com/smortex/yaml-sort/tree/2.0.0) (2022-04-25)
|
7
7
|
|
8
|
-
[Full Changelog](https://github.com/smortex/yaml-sort/compare/v1.0.
|
8
|
+
[Full Changelog](https://github.com/smortex/yaml-sort/compare/v1.0.1...2.0.0)
|
9
|
+
|
10
|
+
**Merged pull requests:**
|
11
|
+
|
12
|
+
- Rework list sorting [\#7](https://github.com/smortex/yaml-sort/pull/7) ([smortex](https://github.com/smortex))
|
13
|
+
|
14
|
+
## [v1.0.1](https://github.com/smortex/yaml-sort/tree/v1.0.1) (2022-04-24)
|
15
|
+
|
16
|
+
[Full Changelog](https://github.com/smortex/yaml-sort/compare/v1.0.0...v1.0.1)
|
9
17
|
|
10
18
|
**Fixed bugs:**
|
11
19
|
|
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
@@ -78,10 +78,10 @@ def scan(text)
|
|
78
78
|
when s.scan(/\n[[:blank:]]*#.*/) then emit(:COMMENT, s.matched)
|
79
79
|
when s.scan(/\n([[:blank:]]*-) */) then emit(:ITEM, s.matched, indent: s.captures[0])
|
80
80
|
when s.scan(/\n[[:blank:]]*\.\.\./) then emit(:END_OF_DOCUMENT, s.matched)
|
81
|
-
when s.scan(/\n?([[:blank:]]*)([^[[:space:]]\n]
|
81
|
+
when s.scan(/\n?([[:blank:]]*)([^[[:space:]]\n]+:)(?=[ \n])/)
|
82
82
|
indent = s.captures[0]
|
83
83
|
indent = last_indent_value + indent + " " unless s.matched.start_with?("\n")
|
84
|
-
emit(:KEY, s.matched, indent: indent)
|
84
|
+
emit(:KEY, s.matched, indent: indent, value: s.captures[1])
|
85
85
|
|
86
86
|
when s.scan(/\n\z/)
|
87
87
|
# Done
|
@@ -110,16 +110,16 @@ def scan(text)
|
|
110
110
|
@tokens
|
111
111
|
end
|
112
112
|
|
113
|
-
def emit(token,
|
113
|
+
def emit(token, match, length: nil, indent: nil, value: nil)
|
114
114
|
indent.gsub!("-", " ") if indent
|
115
115
|
if token && length.nil?
|
116
|
-
raise "length must be explicitly passed when
|
117
|
-
length =
|
116
|
+
raise "length must be explicitly passed when match is not a String (#{match.class.name})" unless match.is_a?(String)
|
117
|
+
length = match.length
|
118
118
|
end
|
119
119
|
|
120
|
-
if
|
120
|
+
if match.start_with?("\n")
|
121
121
|
@lineno += 1
|
122
|
-
|
122
|
+
match = match[1..-1]
|
123
123
|
length -= 1
|
124
124
|
@position = 0
|
125
125
|
end
|
@@ -130,7 +130,7 @@ def emit(token, value, length: nil, indent: nil)
|
|
130
130
|
end
|
131
131
|
|
132
132
|
exvalue = {
|
133
|
-
value: value,
|
133
|
+
value: value || match,
|
134
134
|
lineno: @lineno,
|
135
135
|
position: @position,
|
136
136
|
length: length,
|
@@ -138,7 +138,7 @@ def emit(token, value, length: nil, indent: nil)
|
|
138
138
|
}
|
139
139
|
@tokens << [token, exvalue]
|
140
140
|
|
141
|
-
@lineno +=
|
141
|
+
@lineno += match.count("\n")
|
142
142
|
|
143
143
|
@position += length
|
144
144
|
end
|
@@ -351,7 +351,7 @@ module_eval(<<'.,.,', 'parser.ra', 22)
|
|
351
351
|
|
352
352
|
module_eval(<<'.,.,', 'parser.ra', 24)
|
353
353
|
def _reduce_11(val, _values, result)
|
354
|
-
result = [
|
354
|
+
result = [Item.new(val[0]), val[1]]
|
355
355
|
result
|
356
356
|
end
|
357
357
|
.,.,
|
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.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Romain Tartière
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-04-
|
11
|
+
date: 2022-04-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cri
|
@@ -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
|