expressir 2.4.0 → 2.4.1
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/TODO.bugs/01-stale-transformer-autoload.md +39 -0
- data/TODO.bugs/02-parser-class-instance-vars.md +36 -0
- data/TODO.bugs/03-builder-mutable-state.md +43 -0
- data/TODO.bugs/04-formatter-public-send-dispatch.md +53 -0
- data/TODO.bugs/05-anonymous-formatter-subclass.md +45 -0
- data/TODO.bugs/06-collection-registry-single-source.md +53 -0
- data/TODO.bugs/07-require-relative-cleanup.md +42 -0
- data/TODO.bugs/08-require-expressir-in-commands.md +34 -0
- data/TODO.bugs/09-parser-split.md +53 -0
- data/TODO.bugs/10-to-s-override.md +42 -0
- data/TODO.bugs/11-parser-class-variables.md +39 -0
- data/TODO.bugs/12-marker-modules-vs-registry.md +64 -0
- data/TODO.bugs/13-string-literal-scanner-limitation.md +52 -0
- data/TODO.bugs/14-model-formatting-leak.md +30 -0
- data/TODO.bugs/15-expression-children-macro.md +27 -0
- data/TODO.bugs/16-pretty-formatter-duplication.md +28 -0
- data/TODO.bugs/17-snake-case-cache-mutable-constant.md +28 -0
- data/TODO.bugs/18-const-get-private-constants.md +30 -0
- data/TODO.bugs/19-format-methods-public.md +22 -0
- data/TODO.bugs/20-coverage-nested-entities-dedup.md +20 -0
- data/TODO.bugs/21-operator-tokens-secondary-dispatch.md +21 -0
- data/TODO.bugs/22-builder-fast-path-wrappers.md +32 -0
- data/TODO.bugs/23-coverage-inverse-maps.md +21 -0
- data/TODO.bugs/24-streaming-builder-complexity.md +19 -0
- data/TODO.bugs/25-debug-puts-in-production.md +21 -0
- data/TODO.bugs/26-generic-entity-children-misplaced.md +21 -0
- data/TODO.bugs/27-package-build-god-method.md +19 -0
- data/TODO.bugs/28-package-god-class.md +30 -0
- data/TODO.bugs/29-validate-ascii-god-class.md +24 -0
- data/TODO.bugs/30-unicode-map-extraction.md +19 -0
- data/TODO.bugs/README.md +43 -0
- data/docs/_tutorials/formatting-schemas.adoc +89 -0
- data/docs/_tutorials/index.adoc +10 -0
- data/docs/lychee.toml +3 -0
- data/expressir.gemspec +4 -2
- data/lib/expressir/commands/changes_import_eengine.rb +0 -6
- data/lib/expressir/commands/changes_validate.rb +0 -2
- data/lib/expressir/commands/clean.rb +1 -1
- data/lib/expressir/commands/file_violations.rb +70 -0
- data/lib/expressir/commands/format.rb +1 -1
- data/lib/expressir/commands/non_ascii_character.rb +49 -0
- data/lib/expressir/commands/non_ascii_violation_collection.rb +301 -0
- data/lib/expressir/commands/package.rb +138 -185
- data/lib/expressir/commands/validate_ascii.rb +0 -510
- data/lib/expressir/commands/version.rb +1 -1
- data/lib/expressir/commands.rb +3 -0
- data/lib/expressir/coverage.rb +49 -117
- data/lib/expressir/express/builder.rb +74 -86
- data/lib/expressir/express/builder_context.rb +22 -0
- data/lib/expressir/express/builders/expression_builder.rb +16 -16
- data/lib/expressir/express/cache.rb +35 -8
- data/lib/expressir/express/error.rb +7 -0
- data/lib/expressir/express/formatter.rb +33 -18
- data/lib/expressir/express/formatters/declarations_formatter.rb +24 -2
- data/lib/expressir/express/formatters/remark_formatter.rb +75 -2
- data/lib/expressir/express/formatters/statements_formatter.rb +20 -3
- data/lib/expressir/express/grammar/parser.rb +705 -0
- data/lib/expressir/express/grammar.rb +11 -0
- data/lib/expressir/express/node_position_index.rb +215 -0
- data/lib/expressir/express/parser.rb +114 -884
- data/lib/expressir/express/pretty_formatter.rb +23 -5
- data/lib/expressir/express/remark_attacher.rb +475 -577
- data/lib/expressir/express/remark_scanner.rb +84 -19
- data/lib/expressir/express/schema_block_scanner.rb +136 -0
- data/lib/expressir/express/schema_source_formatter.rb +15 -0
- data/lib/expressir/express/scope_resolver.rb +194 -0
- data/lib/expressir/express/source_formatter.rb +15 -0
- data/lib/expressir/express/streaming_builder.rb +147 -176
- data/lib/expressir/express.rb +8 -6
- data/lib/expressir/model/concerns.rb +3 -0
- data/lib/expressir/model/data_types/generic_entity.rb +6 -6
- data/lib/expressir/model/declarations/entity.rb +5 -0
- data/lib/expressir/model/declarations/function.rb +5 -0
- data/lib/expressir/model/declarations/procedure.rb +5 -0
- data/lib/expressir/model/declarations/rule.rb +6 -0
- data/lib/expressir/model/declarations/schema.rb +21 -8
- data/lib/expressir/model/declarations/type.rb +3 -0
- data/lib/expressir/model/exp_file.rb +2 -0
- data/lib/expressir/model/expressions/aggregate_initializer.rb +1 -0
- data/lib/expressir/model/expressions/aggregate_initializer_item.rb +1 -0
- data/lib/expressir/model/expressions/binary_expression.rb +1 -0
- data/lib/expressir/model/expressions/entity_constructor.rb +1 -0
- data/lib/expressir/model/expressions/function_call.rb +1 -0
- data/lib/expressir/model/expressions/interval.rb +1 -0
- data/lib/expressir/model/expressions/query_expression.rb +2 -0
- data/lib/expressir/model/expressions/unary_expression.rb +1 -0
- data/lib/expressir/model/model_element.rb +128 -14
- data/lib/expressir/model/remark_format.rb +17 -0
- data/lib/expressir/model/remark_info.rb +31 -3
- data/lib/expressir/model/remark_placement.rb +29 -0
- data/lib/expressir/model/statements/alias.rb +2 -0
- data/lib/expressir/model/statements/assignment.rb +4 -0
- data/lib/expressir/model/statements/case.rb +21 -0
- data/lib/expressir/model/statements/case_action.rb +1 -0
- data/lib/expressir/model/statements/compound.rb +4 -0
- data/lib/expressir/model/statements/escape.rb +3 -0
- data/lib/expressir/model/statements/if.rb +5 -0
- data/lib/expressir/model/statements/null.rb +3 -0
- data/lib/expressir/model/statements/procedure_call.rb +3 -0
- data/lib/expressir/model/statements/repeat.rb +3 -0
- data/lib/expressir/model/statements/return.rb +3 -0
- data/lib/expressir/model/statements/skip.rb +3 -0
- data/lib/expressir/model.rb +12 -3
- data/lib/expressir/package/builder.rb +2 -2
- data/lib/expressir/version.rb +6 -1
- data/lib/expressir.rb +38 -3
- metadata +63 -5
- data/lib/expressir/express/transformer/remark_handling.rb +0 -194
|
@@ -24,7 +24,7 @@ module Expressir
|
|
|
24
24
|
@provenance_name = resolve_param(options, :provenance_name,
|
|
25
25
|
"EXPRESSIR_PROVENANCE_NAME", "Expressir")
|
|
26
26
|
@provenance_version = resolve_param(options, :provenance_version,
|
|
27
|
-
"EXPRESSIR_PROVENANCE_VERSION", Expressir::VERSION)
|
|
27
|
+
"EXPRESSIR_PROVENANCE_VERSION", Expressir::Version::VERSION)
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
private
|
|
@@ -67,7 +67,7 @@ module Expressir
|
|
|
67
67
|
# @option options [Boolean] :insert_space Insert spaces for readability (default: true)
|
|
68
68
|
# @option options [Boolean] :provenance Include provenance information (default: true)
|
|
69
69
|
# @option options [String] :provenance_name Tool name for provenance (default: "Expressir")
|
|
70
|
-
# @option options [String] :provenance_version Tool version for provenance (default: Expressir::VERSION)
|
|
70
|
+
# @option options [String] :provenance_version Tool version for provenance (default: Expressir::Version::VERSION)
|
|
71
71
|
# @option options [Boolean] :no_remarks Suppress remarks in output (default: false)
|
|
72
72
|
def initialize(options = {})
|
|
73
73
|
@config = Configuration.new(options)
|
|
@@ -332,9 +332,12 @@ module Expressir
|
|
|
332
332
|
def format_exp_file(node)
|
|
333
333
|
result = []
|
|
334
334
|
|
|
335
|
-
# Add file-level preamble if present
|
|
336
|
-
|
|
337
|
-
|
|
335
|
+
# Add file-level preamble if present (skip provenance remarks from previous parses)
|
|
336
|
+
unless @no_remarks
|
|
337
|
+
source_remarks = (node.untagged_remarks || []).reject do |remark|
|
|
338
|
+
remark.is_a?(Model::RemarkInfo) && provenance_remark?(remark)
|
|
339
|
+
end
|
|
340
|
+
result.concat(format_preamble(source_remarks)) if source_remarks.any?
|
|
338
341
|
end
|
|
339
342
|
|
|
340
343
|
# Add provenance (only for first file or single file)
|
|
@@ -505,6 +508,7 @@ module Expressir
|
|
|
505
508
|
indent(node.where_rules.map { |x| format(x) }.join("\n")),
|
|
506
509
|
]
|
|
507
510
|
end,
|
|
511
|
+
*format_trailing_region_remarks(node, :where_rules).map { |x| indent(x) },
|
|
508
512
|
format_scope_footer("END_RULE", node),
|
|
509
513
|
].join("\n")
|
|
510
514
|
end
|
|
@@ -553,6 +557,11 @@ module Expressir
|
|
|
553
557
|
*if node.statements&.length&.positive?
|
|
554
558
|
indent(node.statements.map { |x| format(x) }.join("\n"))
|
|
555
559
|
end,
|
|
560
|
+
# Comments closing the executable body. This formatter overrides
|
|
561
|
+
# the declaration formatters, so the emitter is repeated here or
|
|
562
|
+
# trailing remarks would render only in standard output. For a
|
|
563
|
+
# RULE the body ends at WHERE, which follows this block.
|
|
564
|
+
*format_trailing_region_remarks(node, :statements).map { |x| indent(x) },
|
|
556
565
|
]
|
|
557
566
|
end
|
|
558
567
|
|
|
@@ -563,6 +572,15 @@ module Expressir
|
|
|
563
572
|
format_end_scope_remark(node),
|
|
564
573
|
].join
|
|
565
574
|
end
|
|
575
|
+
|
|
576
|
+
# Check if a remark was generated by this formatter's provenance output.
|
|
577
|
+
# Prevents provenance comments from accumulating on round-trip re-parses.
|
|
578
|
+
def provenance_remark?(remark)
|
|
579
|
+
return false unless remark.is_a?(Model::RemarkInfo)
|
|
580
|
+
|
|
581
|
+
text = remark.text.to_s
|
|
582
|
+
text.match?(/\A\s*(Generated by:|Format parameters:)/)
|
|
583
|
+
end
|
|
566
584
|
end
|
|
567
585
|
end
|
|
568
586
|
end
|