yaml-sort 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b17a9fdbfc9612b6b2bb1a75583e9a31c269fbba87c088afc0fc6ffe16e44aa1
4
- data.tar.gz: edde89f395f92d321c95e4899c6744bba2b005b93aa4399c00d090c4511a27ac
3
+ metadata.gz: 232d936095f9aac0e3f4098fa2cc4f1d608ddc79be9cb4e757fb476fa75999e3
4
+ data.tar.gz: be5949810ea40472c5d80e7f23d96886e964847b26d9526f67b337a77acfe490
5
5
  SHA512:
6
- metadata.gz: a3a763b77216fad635aec8707d388d1bc1c8afb1ccd2217922b17c6179bc59d6c1998459c3e131375d1fed6e743d94d2d39dc2f080bd4adf45b42a73aff56b94
7
- data.tar.gz: 11573f243771dcd0ec7c52748a9927c358472860e0a52e287f8764c960e539aa76b6df6ee6f2fff724eb9f5e780c2b62d7921b65b1d0f9aaf696d388e618b6f4
6
+ metadata.gz: e90a5d3ff86076d86b0629ec1a387aa179588f678d17c5f60fcae2d01ffda38eb28f308d5d3d7df1a29d6b1a194701caab02409d26d364f8c2c8fb7403ca2a0a
7
+ data.tar.gz: e2fb3054b83242a9fad8c596c6f79ecfce1f66169234c7e1bc8a179214bd41288e08eb608981b08d2312dff721e3bfa18aadaa429dded7bae1eeb702dc06bdd3
data/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
- ## [Unreleased]
1
+ # Changelog
2
+ All notable changes to this project will be documented in this file.
3
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
4
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
2
5
 
3
- ## [0.1.0] - 2022-04-09
6
+ ## [1.0.1](https://github.com/smortex/yaml-sort/tree/1.0.1) (2022-04-24)
4
7
 
5
- - Initial release
8
+ [Full Changelog](https://github.com/smortex/yaml-sort/compare/v1.0.0...1.0.1)
9
+
10
+ **Fixed bugs:**
11
+
12
+ - Fix processing of some YAML files without a `START_OF_DOCUMENT` [\#6](https://github.com/smortex/yaml-sort/pull/6) ([smortex](https://github.com/smortex))
13
+ - Fix error reporting [\#5](https://github.com/smortex/yaml-sort/pull/5) ([smortex](https://github.com/smortex))
14
+ - Fix display of filename on parse errors [\#1](https://github.com/smortex/yaml-sort/pull/1) ([smortex](https://github.com/smortex))
15
+
16
+
17
+
18
+ \* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*
data/Rakefile CHANGED
@@ -21,3 +21,19 @@ end
21
21
 
22
22
  task spec: ["lib/yaml/sort/parser.rb"]
23
23
  task cucumber: ["lib/yaml/sort/parser.rb"]
24
+
25
+ require "github_changelog_generator/task"
26
+ GitHubChangelogGenerator::RakeTask.new :changelog do |config|
27
+ config.future_release = Yaml::Sort::VERSION
28
+ config.header = <<~HEADER.chomp
29
+ # Changelog
30
+ All notable changes to this project will be documented in this file.
31
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
32
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
33
+ HEADER
34
+ config.exclude_labels = %w[duplicate question invalid wontfix wont-fix skip-changelog ignore]
35
+ config.user = "smortex"
36
+ config.project = "yaml-sort"
37
+ config.since_tag = "v1.0.0"
38
+ config.issues = false
39
+ end
data/lib/yaml/sort/cli.rb CHANGED
@@ -52,8 +52,11 @@ module Yaml
52
52
 
53
53
  def process_document(filename, options)
54
54
  yaml = read_document(filename)
55
- sorted_yaml = sort_yaml(yaml)
55
+ sorted_yaml = sort_yaml(yaml, filename)
56
56
  write_output(yaml, sorted_yaml, filename, options)
57
+ rescue Racc::ParseError => e
58
+ warn(e.message)
59
+ @exit_code = 1
57
60
  end
58
61
 
59
62
  def read_document(filename)
@@ -64,8 +67,8 @@ module Yaml
64
67
  end
65
68
  end
66
69
 
67
- def sort_yaml(yaml)
68
- document = @parser.parse(yaml)
70
+ def sort_yaml(yaml, filename)
71
+ document = @parser.parse(yaml, filename: filename)
69
72
  document = document.sort
70
73
  "---\n#{document}\n"
71
74
  end
@@ -13,9 +13,11 @@ module Yaml
13
13
  module Sort
14
14
  class Parser < Racc::Parser
15
15
 
16
- module_eval(<<'...end parser.ra/module_eval...', 'parser.ra', 34)
16
+ module_eval(<<'...end parser.ra/module_eval...', 'parser.ra', 33)
17
17
 
18
18
  def scan(text)
19
+ text = "---\n#{text}" unless text.start_with?("---\n")
20
+
19
21
  scan_value = false
20
22
 
21
23
  @lines = text.lines
@@ -29,7 +31,7 @@ def scan(text)
29
31
  until s.eos?
30
32
  if scan_value
31
33
  unless s.match?(/[[:space:]]*\n/)
32
- @position += s.matched_size if s.scan(/\s*/)
34
+ @position += s.matched_size if s.scan(/[[:blank:]]*/)
33
35
  case
34
36
  when s.scan(/[|>][-+]?(?=\n)/)
35
37
  match = s.matched
@@ -68,20 +70,23 @@ def scan(text)
68
70
  scan_value = false
69
71
  else
70
72
  case
71
- when s.scan(/---/) then emit(:START_OF_DOCUMENT, s.matched)
72
- when s.scan(/(\n\s*)+(?=\n)/) then # Ignore empty lines
73
- when s.scan(/\n?\s*#.*/) then emit(:COMMENT, s.matched)
74
- when s.scan(/\n?(\s*-) */) then emit("-", s.matched, indent: s.captures[0])
75
- when s.scan(/\n?\s*\.\.\./) then emit(:END_OF_DOCUMENT, s.matched)
76
- when s.scan(/\n?(\s*)([^[[:space:]]\n]+):(?=[ \n])/)
73
+ when s.scan(/---/) then emit(:START_OF_DOCUMENT, s.matched)
74
+ when s.scan(/\n[[:blank:]]*(?=\n)/)
75
+ # Ignore empty lines
76
+ @lineno += 1
77
+ @position = 0
78
+ when s.scan(/\n[[:blank:]]*#.*/) then emit(:COMMENT, s.matched)
79
+ when s.scan(/\n([[:blank:]]*-) */) then emit(:ITEM, s.matched, indent: s.captures[0])
80
+ when s.scan(/\n[[:blank:]]*\.\.\./) then emit(:END_OF_DOCUMENT, s.matched)
81
+ when s.scan(/\n?([[:blank:]]*)([^[[:space:]]\n]+):(?=[ \n])/)
77
82
  indent = s.captures[0]
78
83
  indent = last_indent_value + indent + " " unless s.matched.start_with?("\n")
79
84
  emit(:KEY, s.matched, indent: indent)
80
85
 
81
86
  when s.scan(/\n\z/)
82
87
  # Done
83
- when s.match?(/./)
84
- scan_value = true
88
+ when s.match?(/./)
89
+ scan_value = true
85
90
  else
86
91
  raise "LoST: #{s.rest.inspect} #{s.eos?}"
87
92
  end
@@ -128,7 +133,6 @@ def emit(token, value, length: nil, indent: nil)
128
133
  value: value,
129
134
  lineno: @lineno,
130
135
  position: @position,
131
- filename: @filename,
132
136
  length: length,
133
137
  indent: indent,
134
138
  }
@@ -146,7 +150,7 @@ end
146
150
  def unindent(new_indent = nil)
147
151
  while @indent_stack.count > 0 && (new_indent.nil? || @indent_stack.last.length > new_indent.length)
148
152
  value = @indent_stack.pop
149
- @tokens << [:UNINDENT, { value: value, lineno: @lineno, position: 0, filename: @filename, length: value.length, indent: nil }]
153
+ @tokens << [:UNINDENT, { value: value, lineno: @lineno, position: 0, length: value.length, indent: nil }]
150
154
  end
151
155
  end
152
156
 
@@ -154,73 +158,73 @@ def next_token
154
158
  @current_token = @tokens.shift
155
159
  end
156
160
 
157
- def parse(text)
161
+ def parse(text, filename: nil)
162
+ @filename = filename || "<stdin>"
158
163
  scan(text)
159
164
  do_parse
160
165
  end
161
166
 
162
167
  def on_error(error_token_id, error_value, value_stack)
163
- puts "unexpected #{@current_token[0]} on #{@current_token[1][:filename] || "<stdin>"}:#{@current_token[1][:lineno]}"
164
- puts @lines[@current_token[1][:lineno]]
165
- puts " " * @current_token[1][:position] + "^" + "~" * (@current_token[1][:length] - 1)
168
+ message = if @current_token
169
+ <<~MESSAGE
170
+ #{@filename}:#{@current_token[1][:lineno]} unexpected #{@current_token[0]}
171
+ #{@lines[@current_token[1][:lineno] - 1].chomp}
172
+ #{" " * @current_token[1][:position]}^#{"~" * ([@current_token[1][:length] - 1, 0].max)}
173
+ MESSAGE
174
+ else
175
+ "#{@filename}:#{@lineno} unexpected end-of-file"
176
+ end
166
177
 
167
- raise "Error"
178
+ raise(Racc::ParseError, message)
168
179
  end
169
180
  ...end parser.ra/module_eval...
170
181
  ##### State transition tables begin ###
171
182
 
172
183
  racc_action_table = [
173
- 2, 11, 4, 8, 19, 10, 4, 8, 20, 10,
174
- 4, 8, nil, 10, 4, 8, nil, 10, 8, 13,
175
- 15, 10 ]
184
+ 5, 9, 2, 11, 5, 9, 3, 11, 5, 9,
185
+ 12, 11, 9, 14, 16, 11, 13 ]
176
186
 
177
187
  racc_action_check = [
178
- 0, 1, 0, 0, 11, 0, 2, 2, 12, 2,
179
- 8, 8, nil, 8, 10, 10, nil, 10, 5, 5,
180
- 6, 6 ]
188
+ 2, 2, 0, 2, 9, 9, 1, 9, 11, 11,
189
+ 3, 11, 6, 6, 7, 7, 4 ]
181
190
 
182
191
  racc_action_pointer = [
183
- -2, 1, 2, nil, nil, 13, 14, nil, 6, nil,
184
- 10, 4, 5, nil, nil, nil, nil, nil, nil, nil,
185
- nil ]
192
+ 0, 6, -4, 10, 13, nil, 7, 8, nil, 0,
193
+ nil, 4, nil, nil, nil, nil, nil, nil, nil, nil ]
186
194
 
187
195
  racc_action_default = [
188
- -13, -13, -13, -3, -4, -13, -13, -8, -13, -11,
189
- -13, -13, -2, -5, -7, -6, -10, -9, -12, 21,
190
- -1 ]
196
+ -12, -12, -12, -12, -2, -3, -12, -12, -7, -12,
197
+ -10, -12, 20, -1, -4, -6, -5, -9, -8, -11 ]
191
198
 
192
199
  racc_goto_table = [
193
- 3, 1, 12, 14, 16, nil, nil, nil, 17, nil,
194
- 18 ]
200
+ 4, 1, 15, 17, nil, nil, nil, 18, nil, 19 ]
195
201
 
196
202
  racc_goto_check = [
197
- 2, 1, 2, 5, 6, nil, nil, nil, 2, nil,
198
- 2 ]
203
+ 2, 1, 5, 6, nil, nil, nil, 2, nil, 2 ]
199
204
 
200
205
  racc_goto_pointer = [
201
- nil, 1, 0, nil, nil, -2, -2 ]
206
+ nil, 1, -2, nil, nil, -4, -4 ]
202
207
 
203
208
  racc_goto_default = [
204
- nil, nil, nil, 5, 6, 7, 9 ]
209
+ nil, nil, nil, 6, 7, 8, 10 ]
205
210
 
206
211
  racc_reduce_table = [
207
212
  0, 0, :racc_error,
208
213
  3, 9, :_reduce_1,
209
214
  2, 9, :_reduce_2,
210
- 1, 9, :_reduce_none,
211
- 1, 10, :_reduce_4,
215
+ 1, 10, :_reduce_3,
216
+ 2, 10, :_reduce_4,
212
217
  2, 10, :_reduce_5,
213
- 2, 10, :_reduce_6,
214
- 2, 11, :_reduce_7,
215
- 1, 11, :_reduce_8,
216
- 2, 13, :_reduce_9,
217
- 2, 12, :_reduce_10,
218
- 1, 12, :_reduce_11,
219
- 2, 14, :_reduce_12 ]
218
+ 2, 11, :_reduce_6,
219
+ 1, 11, :_reduce_7,
220
+ 2, 13, :_reduce_8,
221
+ 2, 12, :_reduce_9,
222
+ 1, 12, :_reduce_10,
223
+ 2, 14, :_reduce_11 ]
220
224
 
221
- racc_reduce_n = 13
225
+ racc_reduce_n = 12
222
226
 
223
- racc_shift_n = 21
227
+ racc_shift_n = 20
224
228
 
225
229
  racc_token_table = {
226
230
  false => 0,
@@ -230,7 +234,7 @@ racc_token_table = {
230
234
  :VALUE => 4,
231
235
  :KEY => 5,
232
236
  :UNINDENT => 6,
233
- "-" => 7 }
237
+ :ITEM => 7 }
234
238
 
235
239
  racc_nt_base = 8
236
240
 
@@ -260,7 +264,7 @@ Racc_token_to_s_table = [
260
264
  "VALUE",
261
265
  "KEY",
262
266
  "UNINDENT",
263
- "\"-\"",
267
+ "ITEM",
264
268
  "$start",
265
269
  "document",
266
270
  "value",
@@ -289,11 +293,16 @@ module_eval(<<'.,.,', 'parser.ra', 10)
289
293
  end
290
294
  .,.,
291
295
 
292
- # reduce 3 omitted
296
+ module_eval(<<'.,.,', 'parser.ra', 12)
297
+ def _reduce_3(val, _values, result)
298
+ result = Scalar.new(val[0])
299
+ result
300
+ end
301
+ .,.,
293
302
 
294
303
  module_eval(<<'.,.,', 'parser.ra', 13)
295
304
  def _reduce_4(val, _values, result)
296
- result = Scalar.new(val[0])
305
+ result = val[0]
297
306
  result
298
307
  end
299
308
  .,.,
@@ -305,50 +314,43 @@ module_eval(<<'.,.,', 'parser.ra', 14)
305
314
  end
306
315
  .,.,
307
316
 
308
- module_eval(<<'.,.,', 'parser.ra', 15)
317
+ module_eval(<<'.,.,', 'parser.ra', 16)
309
318
  def _reduce_6(val, _values, result)
310
- result = val[0]
319
+ val[0].add_item(*val[1]); result = val[0]
311
320
  result
312
321
  end
313
322
  .,.,
314
323
 
315
324
  module_eval(<<'.,.,', 'parser.ra', 17)
316
325
  def _reduce_7(val, _values, result)
317
- val[0].add_item(*val[1]); result = val[0]
326
+ result = Dictionary.create(*val[0])
318
327
  result
319
328
  end
320
329
  .,.,
321
330
 
322
- module_eval(<<'.,.,', 'parser.ra', 18)
331
+ module_eval(<<'.,.,', 'parser.ra', 19)
323
332
  def _reduce_8(val, _values, result)
324
- result = Dictionary.create(*val[0])
333
+ result = [Scalar.new(val[0]), val[1]]
325
334
  result
326
335
  end
327
336
  .,.,
328
337
 
329
- module_eval(<<'.,.,', 'parser.ra', 20)
338
+ module_eval(<<'.,.,', 'parser.ra', 21)
330
339
  def _reduce_9(val, _values, result)
331
- result = [Scalar.new(val[0]), val[1]]
340
+ val[0].add_item(*val[1]); result = val[0]
332
341
  result
333
342
  end
334
343
  .,.,
335
344
 
336
345
  module_eval(<<'.,.,', 'parser.ra', 22)
337
346
  def _reduce_10(val, _values, result)
338
- val[0].add_item(*val[1]); result = val[0]
339
- result
340
- end
341
- .,.,
342
-
343
- module_eval(<<'.,.,', 'parser.ra', 23)
344
- def _reduce_11(val, _values, result)
345
347
  result = List.create(*val[0])
346
348
  result
347
349
  end
348
350
  .,.,
349
351
 
350
- module_eval(<<'.,.,', 'parser.ra', 25)
351
- def _reduce_12(val, _values, result)
352
+ module_eval(<<'.,.,', 'parser.ra', 24)
353
+ def _reduce_11(val, _values, result)
352
354
  result = [Scalar.new(val[0]), val[1]]
353
355
  result
354
356
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Yaml
4
4
  module Sort
5
- VERSION = "1.0.0"
5
+ VERSION = "1.0.1"
6
6
  end
7
7
  end
data/yaml-sort.gemspec CHANGED
@@ -32,5 +32,6 @@ Gem::Specification.new do |spec|
32
32
  spec.add_dependency "cri"
33
33
 
34
34
  spec.add_development_dependency "aruba"
35
+ spec.add_development_dependency "github_changelog_generator"
35
36
  spec.add_development_dependency "racc"
36
37
  end
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: 1.0.0
4
+ version: 1.0.1
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-04-20 00:00:00.000000000 Z
11
+ date: 2022-04-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cri
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: github_changelog_generator
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: racc
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -52,7 +66,7 @@ dependencies:
52
66
  - - ">="
53
67
  - !ruby/object:Gem::Version
54
68
  version: '0'
55
- description:
69
+ description:
56
70
  email:
57
71
  - romain@blogreen.org
58
72
  executables:
@@ -89,7 +103,7 @@ metadata:
89
103
  source_code_uri: https://github.com/smortex/yaml-sort
90
104
  changelog_uri: https://github.com/smortex/yaml-sort/blob/master/CHANGELOG.md
91
105
  rubygems_mfa_required: 'true'
92
- post_install_message:
106
+ post_install_message:
93
107
  rdoc_options: []
94
108
  require_paths:
95
109
  - lib
@@ -104,8 +118,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
104
118
  - !ruby/object:Gem::Version
105
119
  version: '0'
106
120
  requirements: []
107
- rubygems_version: 3.2.5
108
- signing_key:
121
+ rubygems_version: 3.3.10
122
+ signing_key:
109
123
  specification_version: 4
110
124
  summary: Sort lines in YAML files in a predictable order
111
125
  test_files: []