canon 0.1.3 → 0.1.5

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.
Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +9 -1
  3. data/.rubocop_todo.yml +276 -7
  4. data/README.adoc +203 -138
  5. data/_config.yml +116 -0
  6. data/docs/ADVANCED_TOPICS.adoc +20 -0
  7. data/docs/BASIC_USAGE.adoc +16 -0
  8. data/docs/CHARACTER_VISUALIZATION.adoc +567 -0
  9. data/docs/CLI.adoc +493 -0
  10. data/docs/CUSTOMIZING_BEHAVIOR.adoc +19 -0
  11. data/docs/DIFF_ARCHITECTURE.adoc +435 -0
  12. data/docs/DIFF_FORMATTING.adoc +540 -0
  13. data/docs/FORMATS.adoc +447 -0
  14. data/docs/INDEX.adoc +222 -0
  15. data/docs/INPUT_VALIDATION.adoc +477 -0
  16. data/docs/MATCH_ARCHITECTURE.adoc +463 -0
  17. data/docs/MATCH_OPTIONS.adoc +719 -0
  18. data/docs/MODES.adoc +432 -0
  19. data/docs/NORMATIVE_INFORMATIVE_DIFFS.adoc +219 -0
  20. data/docs/OPTIONS.adoc +1387 -0
  21. data/docs/PREPROCESSING.adoc +491 -0
  22. data/docs/RSPEC.adoc +605 -0
  23. data/docs/RUBY_API.adoc +478 -0
  24. data/docs/SEMANTIC_DIFF_REPORT.adoc +528 -0
  25. data/docs/UNDERSTANDING_CANON.adoc +17 -0
  26. data/docs/VERBOSE.adoc +482 -0
  27. data/exe/canon +7 -0
  28. data/lib/canon/cli.rb +179 -0
  29. data/lib/canon/commands/diff_command.rb +195 -0
  30. data/lib/canon/commands/format_command.rb +113 -0
  31. data/lib/canon/comparison/base_comparator.rb +39 -0
  32. data/lib/canon/comparison/comparison_result.rb +79 -0
  33. data/lib/canon/comparison/html_comparator.rb +410 -0
  34. data/lib/canon/comparison/json_comparator.rb +212 -0
  35. data/lib/canon/comparison/match_options.rb +616 -0
  36. data/lib/canon/comparison/xml_comparator.rb +566 -0
  37. data/lib/canon/comparison/yaml_comparator.rb +93 -0
  38. data/lib/canon/comparison.rb +239 -0
  39. data/lib/canon/config.rb +172 -0
  40. data/lib/canon/diff/diff_block.rb +71 -0
  41. data/lib/canon/diff/diff_block_builder.rb +105 -0
  42. data/lib/canon/diff/diff_classifier.rb +46 -0
  43. data/lib/canon/diff/diff_context.rb +85 -0
  44. data/lib/canon/diff/diff_context_builder.rb +107 -0
  45. data/lib/canon/diff/diff_line.rb +77 -0
  46. data/lib/canon/diff/diff_node.rb +56 -0
  47. data/lib/canon/diff/diff_node_mapper.rb +148 -0
  48. data/lib/canon/diff/diff_report.rb +133 -0
  49. data/lib/canon/diff/diff_report_builder.rb +62 -0
  50. data/lib/canon/diff_formatter/by_line/base_formatter.rb +407 -0
  51. data/lib/canon/diff_formatter/by_line/html_formatter.rb +672 -0
  52. data/lib/canon/diff_formatter/by_line/json_formatter.rb +284 -0
  53. data/lib/canon/diff_formatter/by_line/simple_formatter.rb +190 -0
  54. data/lib/canon/diff_formatter/by_line/xml_formatter.rb +860 -0
  55. data/lib/canon/diff_formatter/by_line/yaml_formatter.rb +292 -0
  56. data/lib/canon/diff_formatter/by_object/base_formatter.rb +199 -0
  57. data/lib/canon/diff_formatter/by_object/json_formatter.rb +305 -0
  58. data/lib/canon/diff_formatter/by_object/xml_formatter.rb +248 -0
  59. data/lib/canon/diff_formatter/by_object/yaml_formatter.rb +17 -0
  60. data/lib/canon/diff_formatter/character_map.yml +197 -0
  61. data/lib/canon/diff_formatter/debug_output.rb +431 -0
  62. data/lib/canon/diff_formatter/diff_detail_formatter.rb +551 -0
  63. data/lib/canon/diff_formatter/legend.rb +141 -0
  64. data/lib/canon/diff_formatter.rb +520 -0
  65. data/lib/canon/errors.rb +56 -0
  66. data/lib/canon/formatters/html4_formatter.rb +17 -0
  67. data/lib/canon/formatters/html5_formatter.rb +17 -0
  68. data/lib/canon/formatters/html_formatter.rb +37 -0
  69. data/lib/canon/formatters/html_formatter_base.rb +163 -0
  70. data/lib/canon/formatters/json_formatter.rb +3 -0
  71. data/lib/canon/formatters/xml_formatter.rb +20 -55
  72. data/lib/canon/formatters/yaml_formatter.rb +4 -1
  73. data/lib/canon/pretty_printer/html.rb +57 -0
  74. data/lib/canon/pretty_printer/json.rb +25 -0
  75. data/lib/canon/pretty_printer/xml.rb +29 -0
  76. data/lib/canon/rspec_matchers.rb +222 -80
  77. data/lib/canon/validators/base_validator.rb +49 -0
  78. data/lib/canon/validators/html_validator.rb +138 -0
  79. data/lib/canon/validators/json_validator.rb +89 -0
  80. data/lib/canon/validators/xml_validator.rb +53 -0
  81. data/lib/canon/validators/yaml_validator.rb +73 -0
  82. data/lib/canon/version.rb +1 -1
  83. data/lib/canon/xml/attribute_handler.rb +80 -0
  84. data/lib/canon/xml/c14n.rb +36 -0
  85. data/lib/canon/xml/character_encoder.rb +38 -0
  86. data/lib/canon/xml/data_model.rb +225 -0
  87. data/lib/canon/xml/element_matcher.rb +196 -0
  88. data/lib/canon/xml/line_range_mapper.rb +158 -0
  89. data/lib/canon/xml/namespace_handler.rb +86 -0
  90. data/lib/canon/xml/node.rb +32 -0
  91. data/lib/canon/xml/nodes/attribute_node.rb +54 -0
  92. data/lib/canon/xml/nodes/comment_node.rb +23 -0
  93. data/lib/canon/xml/nodes/element_node.rb +56 -0
  94. data/lib/canon/xml/nodes/namespace_node.rb +38 -0
  95. data/lib/canon/xml/nodes/processing_instruction_node.rb +24 -0
  96. data/lib/canon/xml/nodes/root_node.rb +16 -0
  97. data/lib/canon/xml/nodes/text_node.rb +23 -0
  98. data/lib/canon/xml/processor.rb +151 -0
  99. data/lib/canon/xml/whitespace_normalizer.rb +72 -0
  100. data/lib/canon/xml/xml_base_handler.rb +188 -0
  101. data/lib/canon.rb +14 -3
  102. metadata +116 -21
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fcf999be5f47b3ee417e783de5b54be7efe27c8123d0b2becaa8263587d224e6
4
- data.tar.gz: 86c5c3679003d3b6ff1c96674ba10b7dc5ca6e92b39200b3729170185b030c2f
3
+ metadata.gz: 05ef38f14f368ca16897f4975fcba636b2245bcaa293837b68bc1983c1541275
4
+ data.tar.gz: d2ec278c78f311f76b1d924033421cb70ce6863cea609efc5a1c445f4f871df3
5
5
  SHA512:
6
- metadata.gz: 592cb969e6c55b8b19081f19a412746409b01113bdb1ec638931638606a301d0de360fd25a227681068f3ffbece325b180a85ccc9b5087bebd0b22ee24d67677
7
- data.tar.gz: 0e96447cef7283e641218d3be17511d5fb49fa1995013136af1b3c8281d90feada43bcd95316621af01e69b7a065f4dc1635701b0991668a15f72bbdfe81819e
6
+ metadata.gz: d90f20d6139c8b26a6ccdc743e3bc8cb0fe3148e5eac88c02b6e0c1c030b2e459b13df3e024b9087a621fc8976bf04ac948ef629da1055b3e6423612f5628b10
7
+ data.tar.gz: c3d36b09194f1d485c09bf570730a544d8ebc6cfcc20780db0a5afa07988caed8b0ba773cdfcf6eaaed68c9ba72ed5a21920dd924eac42f599037f9b52198184
data/.rubocop.yml CHANGED
@@ -1,11 +1,19 @@
1
1
  # Auto-generated by Cimas: Do not edit it manually!
2
2
  # See https://github.com/metanorma/cimas
3
3
  inherit_from:
4
- - .rubocop_todo.yml
5
4
  - https://raw.githubusercontent.com/riboseinc/oss-guides/main/ci/rubocop.yml
5
+ - .rubocop_todo.yml
6
+
7
+ inherit_mode:
8
+ merge:
9
+ - Exclude
6
10
 
7
11
  # local repo-specific modifications
8
12
  # ...
13
+ plugins:
14
+ - rubocop-rspec
15
+ - rubocop-performance
16
+ - rubocop-rake
9
17
 
10
18
  AllCops:
11
19
  TargetRubyVersion: 3.0
data/.rubocop_todo.yml CHANGED
@@ -1,29 +1,298 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2025-08-24 10:22:06 UTC using RuboCop version 1.79.0.
3
+ # on 2025-10-22 14:03:51 UTC using RuboCop version 1.81.6.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
7
7
  # versions of RuboCop, may require this file to be generated again.
8
8
 
9
9
  # Offense count: 1
10
- # Configuration parameters: Severity, Include.
11
- # Include: **/*.gemspec
10
+ # Configuration parameters: Severity.
12
11
  Gemspec/RequiredRubyVersion:
13
12
  Exclude:
14
13
  - 'canon.gemspec'
15
14
 
16
15
  # Offense count: 1
17
16
  # This cop supports safe autocorrection (--autocorrect).
18
- Layout/EmptyLineAfterGuardClause:
17
+ # Configuration parameters: EnforcedStyleAlignWith.
18
+ # SupportedStylesAlignWith: either, start_of_block, start_of_line
19
+ Layout/BlockAlignment:
19
20
  Exclude:
20
- - 'lib/canon/rspec_matchers.rb'
21
+ - 'lib/canon/diff_formatter/by_line/html_formatter.rb'
21
22
 
22
- # Offense count: 2
23
+ # Offense count: 314
23
24
  # This cop supports safe autocorrection (--autocorrect).
24
25
  # Configuration parameters: Max, AllowHeredoc, AllowURI, AllowQualifiedName, URISchemes, IgnoreCopDirectives, AllowedPatterns, SplitStrings.
25
26
  # URISchemes: http, https
26
27
  Layout/LineLength:
28
+ Enabled: false
29
+
30
+ # Offense count: 29
31
+ # Configuration parameters: IgnoreLiteralBranches, IgnoreConstantBranches, IgnoreDuplicateElseBranch.
32
+ Lint/DuplicateBranch:
27
33
  Exclude:
28
- - 'canon.gemspec'
34
+ - 'lib/canon/commands/diff_command.rb'
35
+ - 'lib/canon/comparison.rb'
36
+ - 'lib/canon/comparison/html_comparator.rb'
37
+ - 'lib/canon/comparison/xml_comparator.rb'
38
+ - 'lib/canon/diff_formatter/by_line/base_formatter.rb'
39
+ - 'lib/canon/diff_formatter/by_line/json_formatter.rb'
40
+ - 'lib/canon/diff_formatter/by_line/xml_formatter.rb'
41
+ - 'lib/canon/diff_formatter/by_line/yaml_formatter.rb'
42
+ - 'lib/canon/diff_formatter/by_object/json_formatter.rb'
43
+ - 'lib/canon/diff_formatter/debug_output.rb'
44
+ - 'lib/canon/diff_formatter/legend.rb'
45
+ - 'spec/canon/diff/diff_report_builder_spec.rb'
46
+
47
+ # Offense count: 2
48
+ Lint/DuplicateMethods:
49
+ Exclude:
50
+ - 'lib/canon/diff_formatter/by_line/html_formatter.rb'
51
+
52
+ # Offense count: 2
53
+ # This cop supports safe autocorrection (--autocorrect).
54
+ # Configuration parameters: AllowComments.
55
+ Lint/EmptyConditionalBody:
56
+ Exclude:
57
+ - 'spec/canon/comparison/html_comparator_spec.rb'
58
+ - 'spec/canon/comparison_spec.rb'
59
+
60
+ # Offense count: 6
61
+ # Configuration parameters: MaximumRangeSize.
62
+ Lint/MissingCopEnableDirective:
63
+ Exclude:
64
+ - 'lib/canon/commands/format_command.rb'
65
+ - 'lib/canon/xml/attribute_handler.rb'
66
+ - 'lib/canon/xml/data_model.rb'
67
+ - 'lib/canon/xml/namespace_handler.rb'
68
+ - 'lib/canon/xml/processor.rb'
69
+ - 'lib/canon/xml/xml_base_handler.rb'
70
+
71
+ # Offense count: 1
72
+ Lint/UnreachableCode:
73
+ Exclude:
74
+ - 'lib/canon/diff_formatter/debug_output.rb'
75
+
76
+ # Offense count: 4
77
+ # This cop supports safe autocorrection (--autocorrect).
78
+ # Configuration parameters: AllowUnusedKeywordArguments, IgnoreEmptyMethods, IgnoreNotImplementedMethods, NotImplementedExceptions.
79
+ # NotImplementedExceptions: NotImplementedError
80
+ Lint/UnusedMethodArgument:
81
+ Exclude:
82
+ - 'lib/canon/comparison/match_options.rb'
83
+ - 'lib/canon/diff_formatter/by_line/xml_formatter.rb'
84
+ - 'lib/canon/diff_formatter/by_object/base_formatter.rb'
85
+
86
+ # Offense count: 114
87
+ # Configuration parameters: AllowedMethods, AllowedPatterns, CountRepeatedAttributes, Max.
88
+ Metrics/AbcSize:
89
+ Enabled: false
90
+
91
+ # Offense count: 14
92
+ # Configuration parameters: CountComments, CountAsOne, AllowedMethods, AllowedPatterns, inherit_mode.
93
+ # AllowedMethods: refine
94
+ Metrics/BlockLength:
95
+ Max: 38
96
+
97
+ # Offense count: 96
98
+ # Configuration parameters: AllowedMethods, AllowedPatterns, Max.
99
+ Metrics/CyclomaticComplexity:
100
+ Enabled: false
101
+
102
+ # Offense count: 184
103
+ # Configuration parameters: CountComments, CountAsOne, AllowedMethods, AllowedPatterns.
104
+ Metrics/MethodLength:
105
+ Max: 81
106
+
107
+ # Offense count: 17
108
+ # Configuration parameters: CountKeywordArgs, MaxOptionalParameters.
109
+ Metrics/ParameterLists:
110
+ Max: 9
111
+
112
+ # Offense count: 77
113
+ # Configuration parameters: AllowedMethods, AllowedPatterns, Max.
114
+ Metrics/PerceivedComplexity:
115
+ Enabled: false
116
+
117
+ # Offense count: 24
118
+ # Configuration parameters: MinNameLength, AllowNamesEndingInNumbers, AllowedNames, ForbiddenNames.
119
+ # AllowedNames: as, at, by, cc, db, id, if, in, io, ip, of, on, os, pp, to
120
+ Naming/MethodParameterName:
121
+ Exclude:
122
+ - 'lib/canon/comparison/xml_comparator.rb'
123
+ - 'lib/canon/xml/namespace_handler.rb'
124
+
125
+ # Offense count: 1
126
+ # Configuration parameters: NamePrefix, ForbiddenPrefixes, AllowedMethods, MethodDefinitionMacros, UseSorbetSigs.
127
+ # NamePrefix: is_, has_, have_, does_
128
+ # ForbiddenPrefixes: is_, has_, have_, does_
129
+ # AllowedMethods: is_a?
130
+ # MethodDefinitionMacros: define_method, define_singleton_method
131
+ Naming/PredicatePrefix:
132
+ Exclude:
133
+ - 'lib/canon/comparison/html_comparator.rb'
134
+
135
+ # Offense count: 2
136
+ # Configuration parameters: EnforcedStyle, CheckMethodNames, CheckSymbols, AllowedIdentifiers, AllowedPatterns.
137
+ # SupportedStyles: snake_case, normalcase, non_integer
138
+ # AllowedIdentifiers: TLS1_1, TLS1_2, capture3, iso8601, rfc1123_date, rfc822, rfc2822, rfc3339, x86_64
139
+ Naming/VariableNumber:
140
+ Exclude:
141
+ - 'lib/canon/comparison/json_comparator.rb'
142
+
143
+ # Offense count: 2
144
+ # Configuration parameters: MinSize.
145
+ Performance/CollectionLiteralInLoop:
146
+ Exclude:
147
+ - 'lib/canon/diff_formatter/diff_detail_formatter.rb'
148
+ - 'lib/canon/xml/xml_base_handler.rb'
149
+
150
+ # Offense count: 29
151
+ # Configuration parameters: Prefixes, AllowedPatterns.
152
+ # Prefixes: when, with, without
153
+ RSpec/ContextWording:
154
+ Exclude:
155
+ - 'spec/canon/comparison/match_options_spec.rb'
156
+ - 'spec/canon/comparison/yaml_comparator_spec.rb'
157
+ - 'spec/canon/comparison_spec.rb'
158
+ - 'spec/canon/diff/diff_context_builder_spec.rb'
159
+ - 'spec/canon/diff/diff_report_builder_spec.rb'
160
+ - 'spec/canon/fixtures_integrity_spec.rb'
161
+ - 'spec/canon/informative_diffs_debug_spec.rb'
162
+ - 'spec/canon/match_profiles_integration_spec.rb'
163
+ - 'spec/canon/rspec_matchers_spec.rb'
164
+ - 'spec/canon/xml/c14n_spec.rb'
165
+ - 'spec/canon/xml/c14n_w3c_examples_spec.rb'
166
+
167
+ # Offense count: 12
168
+ # Configuration parameters: IgnoredMetadata.
169
+ RSpec/DescribeClass:
170
+ Exclude:
171
+ - 'spec/canon/compressed_multiline_bug_spec.rb'
172
+ - 'spec/canon/context_grouping_spec.rb'
173
+ - 'spec/canon/fixtures_integrity_spec.rb'
174
+ - 'spec/canon/html/matcher_spec.rb'
175
+ - 'spec/canon/html/rendered_whitespace_spec.rb'
176
+ - 'spec/canon/informative_diffs_debug_spec.rb'
177
+ - 'spec/canon/isodoc_attribute_order_spec.rb'
178
+ - 'spec/canon/isodoc_blockquotes_spec.rb'
179
+ - 'spec/canon/match_profiles_integration_spec.rb'
180
+ - 'spec/canon/match_scenarios_spec.rb'
181
+ - 'spec/canon/string_matcher_spec.rb'
182
+ - 'spec/canon/xml_isodoc_spec.rb'
183
+
184
+ # Offense count: 1
185
+ RSpec/DescribeMethod:
186
+ Exclude:
187
+ - 'spec/canon/diff_formatter/character_map_customization_spec.rb'
188
+
189
+ # Offense count: 306
190
+ # Configuration parameters: CountAsOne.
191
+ RSpec/ExampleLength:
192
+ Max: 67
193
+
194
+ # Offense count: 8
195
+ # This cop supports safe autocorrection (--autocorrect).
196
+ RSpec/ExpectActual:
197
+ Exclude:
198
+ - 'spec/canon/comparison/html_comparator_spec.rb'
199
+ - 'spec/canon/comparison_spec.rb'
200
+ - 'spec/canon/rspec_matchers_spec.rb'
201
+ - 'spec/canon/string_matcher_spec.rb'
202
+
203
+ # Offense count: 97
204
+ # Configuration parameters: Max, AllowedIdentifiers, AllowedPatterns.
205
+ RSpec/IndexedLet:
206
+ Exclude:
207
+ - 'spec/canon/diff/diff_context_spec.rb'
208
+ - 'spec/canon/diff/diff_report_spec.rb'
209
+ - 'spec/canon/diff_formatter/character_map_customization_spec.rb'
210
+ - 'spec/canon/rspec_matchers_spec.rb'
211
+
212
+ # Offense count: 4
213
+ # Configuration parameters: AssignmentOnly.
214
+ RSpec/InstanceVariable:
215
+ Exclude:
216
+ - 'spec/canon/rspec_matchers_spec.rb'
217
+
218
+ # Offense count: 15
219
+ # Configuration parameters: .
220
+ # SupportedStyles: have_received, receive
221
+ RSpec/MessageSpies:
222
+ EnforcedStyle: receive
223
+
224
+ # Offense count: 1
225
+ RSpec/MultipleDescribes:
226
+ Exclude:
227
+ - 'spec/canon/comparison/match_options_spec.rb'
228
+
229
+ # Offense count: 251
230
+ RSpec/MultipleExpectations:
231
+ Max: 15
232
+
233
+ # Offense count: 61
234
+ # Configuration parameters: AllowSubject.
235
+ RSpec/MultipleMemoizedHelpers:
236
+ Max: 13
237
+
238
+ # Offense count: 17
239
+ # Configuration parameters: EnforcedStyle, IgnoreSharedExamples.
240
+ # SupportedStyles: always, named_only
241
+ RSpec/NamedSubject:
242
+ Exclude:
243
+ - 'spec/canon/pretty_printer/html_spec.rb'
244
+ - 'spec/canon/pretty_printer/json_spec.rb'
245
+ - 'spec/canon/pretty_printer/xml_spec.rb'
246
+
247
+ # Offense count: 24
248
+ # Configuration parameters: AllowedGroups.
249
+ RSpec/NestedGroups:
250
+ Max: 4
251
+
252
+ # Offense count: 10
253
+ # Configuration parameters: AllowedPatterns.
254
+ # AllowedPatterns: ^expect_, ^assert_
255
+ RSpec/NoExpectationExample:
256
+ Exclude:
257
+ - 'spec/canon/context_grouping_spec.rb'
258
+ - 'spec/canon/informative_diffs_debug_spec.rb'
259
+ - 'spec/canon/isodoc_blockquotes_spec.rb'
260
+ - 'spec/canon/match_scenarios_spec.rb'
261
+
262
+ # Offense count: 6
263
+ # Configuration parameters: CustomTransform, IgnoreMethods, IgnoreMetadata.
264
+ RSpec/SpecFilePathFormat:
265
+ Exclude:
266
+ - 'spec/canon/html/formatter_spec.rb'
267
+ - 'spec/canon/json/formatter_spec.rb'
268
+ - 'spec/canon/rspec_matchers_spec.rb'
29
269
  - 'spec/canon/xml/formatter_spec.rb'
270
+ - 'spec/canon/yaml/formatter_spec.rb'
271
+ - 'spec/xml_c14n_spec.rb'
272
+
273
+ # Offense count: 3
274
+ # Configuration parameters: MinBranchesCount.
275
+ Style/HashLikeCase:
276
+ Exclude:
277
+ - 'lib/canon/diff/diff_block_builder.rb'
278
+ - 'lib/canon/xml/character_encoder.rb'
279
+
280
+ # Offense count: 2
281
+ # This cop supports unsafe autocorrection (--autocorrect-all).
282
+ Style/IdenticalConditionalBranches:
283
+ Exclude:
284
+ - 'lib/canon/diff_formatter/legend.rb'
285
+
286
+ # Offense count: 1
287
+ # Configuration parameters: AllowedMethods.
288
+ # AllowedMethods: respond_to_missing?
289
+ Style/OptionalBooleanParameter:
290
+ Exclude:
291
+ - 'lib/canon/diff_formatter/debug_output.rb'
292
+
293
+ # Offense count: 1
294
+ # This cop supports unsafe autocorrection (--autocorrect-all).
295
+ # Configuration parameters: Mode.
296
+ Style/StringConcatenation:
297
+ Exclude:
298
+ - 'lib/canon/diff_formatter/diff_detail_formatter.rb'