expressir 1.2.10-aarch64-linux → 2.4.29-aarch64-linux
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/.cargo/config.toml +3 -0
- data/.github/scripts/test_installed_gem.rb +34 -0
- data/.github/workflows/codeql.yml +35 -0
- data/.github/workflows/docs.yml +99 -0
- data/.github/workflows/links.yml +100 -0
- data/.github/workflows/native-gems.yml +201 -0
- data/.github/workflows/rake.yml +10 -296
- data/.github/workflows/release.yml +26 -114
- data/.github/workflows/rust-ext.yml +41 -0
- data/.github/workflows/stress.yml +36 -0
- data/.github/workflows/validate_schemas.yml +48 -0
- data/.github/workflows/verify_remarks.yml +33 -0
- data/.gitignore +33 -1
- data/.rubocop.yml +11 -11
- data/.rubocop_todo.yml +297 -0
- data/CHANGELOG.md +159 -0
- data/Gemfile +15 -1
- data/README.adoc +2675 -47
- data/Rakefile +34 -10
- 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/TODO.max-perf/01-restore-ci-green.md +36 -0
- data/TODO.max-perf/02-streaming-parse-path.md +31 -0
- data/TODO.max-perf/03-cli-parallel-opt-in.md +27 -0
- data/TODO.max-perf/04-benchmark-harness.md +28 -0
- data/TODO.max-perf/05-parallel-fidelity-specs.md +22 -0
- data/TODO.max-perf/06-builder-cpu-audit.md +41 -0
- data/TODO.max-perf/07-upstream-parsanol-roadmap.md +27 -0
- data/TODO.max-perf/08-builder-build-perf.md +45 -0
- data/TODO.max-perf/09-grammar-cold-start.md +25 -0
- data/TODO.max-perf/10-parser-facade-hygiene.md +23 -0
- data/TODO.max-perf/11-ci-green-closeout.md +25 -0
- data/TODO.max-perf/12-require-boot-profile.md +25 -0
- data/TODO.max-perf/13-key-conversion-specs.md +26 -0
- data/TODO.max-perf/14-builder-call-handler-audit.md +28 -0
- data/TODO.parity-ee/00-overview.md +76 -0
- data/TODO.parity-ee/01-annex-g-rule-extraction.md +41 -0
- data/TODO.parity-ee/02-eeng-algorithm-inventory.md +8 -0
- data/TODO.parity-ee/03-eeng-oracle-harness.md +33 -0
- data/TODO.parity-ee/04-shtolo-concatenate.md +44 -0
- data/TODO.parity-ee/05-shtolo-longform-flatten.md +53 -0
- data/TODO.parity-ee/06-interface-scheduling-parity.md +47 -0
- data/TODO.parity-ee/07-semantic-checks-port.md +35 -0
- data/TODO.parity-ee/08-pretty-roundtrip-gate.md +27 -0
- data/TODO.parity-ee/09-smrl-index-and-listing.md +22 -0
- data/TODO.parity-ee/10-interface-dot-graph.md +21 -0
- data/TODO.parity-ee/11-import-eeng-tests.md +79 -0
- data/TODO.parity-ee/12-full-check-catalog.md +67 -0
- data/TODO.parity-ee/13-population-p21.md +54 -0
- data/TODO.parity-ee/14-shtolo-completion.md +44 -0
- data/TODO.parity-ee/15-part28-xml.md +51 -0
- data/TODO.parity-ee/16-compare-patch.md +48 -0
- data/TODO.parity-ee/17-official-tests.md +42 -0
- data/TODO.parity-ee/18-mim-mapping.md +47 -0
- data/TODO.parity-ee/19-architecture.md +97 -0
- data/TODO.parity-ee/parity-matrix.md +108 -0
- data/TODO.refpath-v2/00-overview.md +64 -0
- data/TODO.suma-improvements/00-overview.md +23 -0
- data/TODO.suma-improvements/01-prebuilt-platform-gems.md +33 -0
- data/TODO.suma-improvements/02-suma-e2e.md +39 -0
- data/TODO.suma-improvements/03-item-graph.md +22 -0
- data/TODO.suma-improvements/04-compiled-set-default.md +16 -0
- data/TODO.suma-improvements/05-validation-in-docs.md +17 -0
- data/TODO.suma-improvements/06-memory-remeasure.md +36 -0
- data/TODO.suma-improvements/07-part28-xml.md +15 -0
- data/TODO.suma-improvements/08-windows-gnu-toolchain.md +15 -0
- data/TODO.suma-improvements/09-checker-tranche3.md +13 -0
- data/TODO.suma-improvements/10-expressdoc.md +8 -0
- data/benchmark/srl_benchmark.rb +458 -0
- data/benchmark/srl_native_benchmark.rb +146 -0
- data/benchmark/srl_ruby_benchmark.rb +132 -0
- data/bin/rspec +2 -1
- data/docs/Gemfile +12 -0
- data/docs/_config.yml +141 -0
- data/docs/_guides/changes/changes-format.adoc +778 -0
- data/docs/_guides/changes/importing-eengine.adoc +898 -0
- data/docs/_guides/changes/index.adoc +396 -0
- data/docs/_guides/changes/programmatic-usage.adoc +1038 -0
- data/docs/_guides/changes/validating-changes.adoc +681 -0
- data/docs/_guides/cli/benchmark-performance.adoc +834 -0
- data/docs/_guides/cli/coverage-analysis.adoc +921 -0
- data/docs/_guides/cli/format-schemas.adoc +547 -0
- data/docs/_guides/cli/index.adoc +8 -0
- data/docs/_guides/cli/managing-changes.adoc +927 -0
- data/docs/_guides/cli/validate-ascii.adoc +645 -0
- data/docs/_guides/cli/validate-schemas.adoc +534 -0
- data/docs/_guides/formatter/formatter-architecture.adoc +401 -0
- data/docs/_guides/index.adoc +165 -0
- data/docs/_guides/ler/creating-packages.adoc +664 -0
- data/docs/_guides/ler/index.adoc +305 -0
- data/docs/_guides/ler/loading-packages.adoc +707 -0
- data/docs/_guides/ler/package-formats.adoc +748 -0
- data/docs/_guides/ler/querying-packages.adoc +826 -0
- data/docs/_guides/ler/step-packages.adoc +385 -0
- data/docs/_guides/ler/validating-packages.adoc +750 -0
- data/docs/_guides/liquid/basic-templates.adoc +813 -0
- data/docs/_guides/liquid/documentation-generation.adoc +1042 -0
- data/docs/_guides/liquid/drops-reference.adoc +829 -0
- data/docs/_guides/liquid/filters-and-tags.adoc +912 -0
- data/docs/_guides/liquid/index.adoc +468 -0
- data/docs/_guides/manifests/creating-manifests.adoc +483 -0
- data/docs/_guides/manifests/index.adoc +307 -0
- data/docs/_guides/manifests/resolving-manifests.adoc +557 -0
- data/docs/_guides/manifests/validating-manifests.adoc +713 -0
- data/docs/_guides/ruby-api/formatting-schemas.adoc +605 -0
- data/docs/_guides/ruby-api/index.adoc +257 -0
- data/docs/_guides/ruby-api/parsing-files.adoc +421 -0
- data/docs/_guides/ruby-api/search-engine.adoc +609 -0
- data/docs/_guides/ruby-api/working-with-repository.adoc +577 -0
- data/docs/_pages/data-model.adoc +665 -0
- data/docs/_pages/express-language.adoc +506 -0
- data/docs/_pages/getting-started.adoc +414 -0
- data/docs/_pages/index.adoc +116 -0
- data/docs/_pages/introduction.adoc +256 -0
- data/docs/_pages/ler-packages.adoc +837 -0
- data/docs/_pages/parsers.adoc +709 -0
- data/docs/_pages/schema-manifests.adoc +431 -0
- data/docs/_references/index.adoc +228 -0
- data/docs/_tutorials/creating-ler-package.adoc +735 -0
- data/docs/_tutorials/documentation-coverage.adoc +795 -0
- data/docs/_tutorials/formatting-schemas.adoc +89 -0
- data/docs/_tutorials/index.adoc +231 -0
- data/docs/_tutorials/liquid-templates.adoc +806 -0
- data/docs/_tutorials/parsing-your-first-schema.adoc +522 -0
- data/docs/_tutorials/querying-schemas.adoc +751 -0
- data/docs/_tutorials/working-with-multiple-schemas.adoc +676 -0
- data/docs/index.adoc +242 -0
- data/docs/lychee.toml +90 -0
- data/examples/demo_ler_usage.sh +86 -0
- data/examples/ler/README.md +111 -0
- data/examples/ler/simple_example.ler +0 -0
- data/examples/ler/simple_schema.exp +33 -0
- data/examples/ler_build.rb +75 -0
- data/examples/ler_cli.rb +79 -0
- data/examples/ler_demo_complete.rb +276 -0
- data/examples/ler_query.rb +91 -0
- data/examples/ler_query_examples.rb +305 -0
- data/examples/ler_stats.rb +81 -0
- data/examples/phase3_demo.rb +159 -0
- data/examples/query_demo_simple.rb +131 -0
- data/exe/expressir +6 -17
- data/exe/expressir-format +14 -0
- data/exe/{format-test → expressir-format-test} +8 -7
- data/expressir.gemspec +50 -37
- data/lib/expressir/3.2/expressir_core.so +0 -0
- data/lib/expressir/3.3/expressir_core.so +0 -0
- data/lib/expressir/3.4/expressir_core.so +0 -0
- data/lib/expressir/4.0/expressir_core.so +0 -0
- data/lib/expressir/benchmark.rb +310 -0
- data/lib/expressir/changes/item_change.rb +20 -0
- data/lib/expressir/changes/mapping_change.rb +16 -0
- data/lib/expressir/changes/schema_change.rb +85 -0
- data/lib/expressir/changes/version_change.rb +26 -0
- data/lib/expressir/changes.rb +9 -0
- data/lib/expressir/cli.rb +138 -11
- data/lib/expressir/commands/base.rb +25 -0
- data/lib/expressir/commands/benchmark.rb +59 -0
- data/lib/expressir/commands/benchmark_cache.rb +80 -0
- data/lib/expressir/commands/changes.rb +34 -0
- data/lib/expressir/commands/changes_import_eengine.rb +146 -0
- data/lib/expressir/commands/changes_validate.rb +63 -0
- data/lib/expressir/commands/check.rb +56 -0
- data/lib/expressir/commands/clean.rb +20 -0
- data/lib/expressir/commands/coverage.rb +458 -0
- data/lib/expressir/commands/expand.rb +26 -0
- data/lib/expressir/commands/file_violations.rb +70 -0
- data/lib/expressir/commands/fix.rb +33 -0
- data/lib/expressir/commands/flatten.rb +29 -0
- data/lib/expressir/commands/format.rb +43 -0
- data/lib/expressir/commands/manifest.rb +420 -0
- data/lib/expressir/commands/mapping_validate.rb +68 -0
- 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 +1222 -0
- data/lib/expressir/commands/parity_inputs.rb +160 -0
- data/lib/expressir/commands/validate.rb +106 -0
- data/lib/expressir/commands/validate_ascii.rb +94 -0
- data/lib/expressir/commands/validate_load.rb +91 -0
- data/lib/expressir/commands/version.rb +9 -0
- data/lib/expressir/commands/xsd.rb +23 -0
- data/lib/expressir/commands.rb +30 -0
- data/lib/expressir/config.rb +40 -3
- data/lib/expressir/coverage.rb +510 -0
- data/lib/expressir/eengine/arm_compare_report.rb +23 -0
- data/lib/expressir/eengine/changes_section.rb +16 -0
- data/lib/expressir/eengine/compare_report.rb +69 -0
- data/lib/expressir/eengine/mim_compare_report.rb +23 -0
- data/lib/expressir/eengine/modified_object.rb +21 -0
- data/lib/expressir/eengine.rb +9 -0
- data/lib/expressir/errors.rb +113 -0
- data/lib/expressir/express/adoc_hyperlink_formatter.rb +30 -0
- data/lib/expressir/express/adoc_source_formatter.rb +12 -0
- data/lib/expressir/express/ast_key_converter.rb +114 -0
- data/lib/expressir/express/builder.rb +277 -0
- data/lib/expressir/express/builder_context.rb +22 -0
- data/lib/expressir/express/builder_registry.rb +397 -0
- data/lib/expressir/express/builders/attribute_decl_builder.rb +32 -0
- data/lib/expressir/express/builders/built_in_builder.rb +75 -0
- data/lib/expressir/express/builders/constant_builder.rb +108 -0
- data/lib/expressir/express/builders/declaration_builder.rb +20 -0
- data/lib/expressir/express/builders/derive_clause_builder.rb +14 -0
- data/lib/expressir/express/builders/derived_attr_builder.rb +28 -0
- data/lib/expressir/express/builders/domain_rule_builder.rb +21 -0
- data/lib/expressir/express/builders/entity_decl_builder.rb +116 -0
- data/lib/expressir/express/builders/explicit_attr_builder.rb +49 -0
- data/lib/expressir/express/builders/expression_builder.rb +416 -0
- data/lib/expressir/express/builders/function_decl_builder.rb +86 -0
- data/lib/expressir/express/builders/helpers.rb +148 -0
- data/lib/expressir/express/builders/interface_builder.rb +151 -0
- data/lib/expressir/express/builders/inverse_attr_builder.rb +43 -0
- data/lib/expressir/express/builders/inverse_attr_type_builder.rb +30 -0
- data/lib/expressir/express/builders/inverse_clause_builder.rb +14 -0
- data/lib/expressir/express/builders/literal_builder.rb +93 -0
- data/lib/expressir/express/builders/procedure_decl_builder.rb +82 -0
- data/lib/expressir/express/builders/qualifier_builder.rb +102 -0
- data/lib/expressir/express/builders/reference_builder.rb +18 -0
- data/lib/expressir/express/builders/rule_decl_builder.rb +97 -0
- data/lib/expressir/express/builders/schema_body_decl_builder.rb +18 -0
- data/lib/expressir/express/builders/schema_decl_builder.rb +56 -0
- data/lib/expressir/express/builders/schema_version_builder.rb +34 -0
- data/lib/expressir/express/builders/simple_id_builder.rb +17 -0
- data/lib/expressir/express/builders/statement_builder.rb +243 -0
- data/lib/expressir/express/builders/subtype_constraint_builder.rb +166 -0
- data/lib/expressir/express/builders/syntax_builder.rb +30 -0
- data/lib/expressir/express/builders/type_builder.rb +238 -0
- data/lib/expressir/express/builders/type_decl_builder.rb +26 -0
- data/lib/expressir/express/builders/unique_clause_builder.rb +20 -0
- data/lib/expressir/express/builders/unique_rule_builder.rb +41 -0
- data/lib/expressir/express/builders/where_clause_builder.rb +20 -0
- data/lib/expressir/express/builders.rb +55 -0
- data/lib/expressir/express/cache.rb +43 -18
- data/lib/expressir/express/checker.rb +812 -0
- data/lib/expressir/express/concatenator.rb +79 -0
- data/lib/expressir/express/core.rb +95 -0
- data/lib/expressir/express/error.rb +124 -0
- data/lib/expressir/express/formatter.rb +89 -1548
- data/lib/expressir/express/formatters/data_types_formatter.rb +362 -0
- data/lib/expressir/express/formatters/declarations_formatter.rb +753 -0
- data/lib/expressir/express/formatters/expressions_formatter.rb +180 -0
- data/lib/expressir/express/formatters/literals_formatter.rb +55 -0
- data/lib/expressir/express/formatters/references_formatter.rb +53 -0
- data/lib/expressir/express/formatters/remark_formatter.rb +270 -0
- data/lib/expressir/express/formatters/remark_item_formatter.rb +28 -0
- data/lib/expressir/express/formatters/statements_formatter.rb +272 -0
- data/lib/expressir/express/formatters/supertype_expressions_formatter.rb +54 -0
- data/lib/expressir/express/formatters.rb +22 -0
- data/lib/expressir/express/grammar/parser.rb +712 -0
- data/lib/expressir/express/grammar.rb +11 -0
- data/lib/expressir/express/hyperlink_formatter.rb +4 -5
- data/lib/expressir/express/interface_dot.rb +105 -0
- data/lib/expressir/express/lazy_repository.rb +211 -0
- data/lib/expressir/express/line_map.rb +48 -0
- data/lib/expressir/express/listing.rb +174 -0
- data/lib/expressir/express/model_traversal.rb +42 -0
- data/lib/expressir/express/model_visitor.rb +11 -10
- data/lib/expressir/express/node_position_index.rb +342 -0
- data/lib/expressir/express/parallel_files.rb +229 -0
- data/lib/expressir/express/parser.rb +501 -62
- data/lib/expressir/express/pretty_formatter.rb +586 -0
- data/lib/expressir/express/pretty_gate.rb +61 -0
- data/lib/expressir/express/refs_overlay.rb +47 -0
- data/lib/expressir/express/remark_attacher.rb +1098 -0
- data/lib/expressir/express/remark_overlay.rb +86 -0
- data/lib/expressir/express/remark_scanner.rb +245 -0
- data/lib/expressir/express/resolve_references_model_visitor.rb +7 -9
- data/lib/expressir/express/schema_block_scanner.rb +137 -0
- data/lib/expressir/express/schema_head_formatter.rb +4 -5
- data/lib/expressir/express/schema_plain_source_formatter.rb +11 -0
- data/lib/expressir/express/schema_source_formatter.rb +15 -0
- data/lib/expressir/express/scope_resolver.rb +223 -0
- data/lib/expressir/express/self_schema_reference.rb +126 -0
- data/lib/expressir/express/shtolo.rb +679 -0
- data/lib/expressir/express/smrl_xml.rb +125 -0
- data/lib/expressir/express/source_formatter.rb +15 -0
- data/lib/expressir/express/streaming_builder.rb +435 -0
- data/lib/expressir/express/xsd.rb +259 -0
- data/lib/expressir/express.rb +53 -0
- data/lib/expressir/liquid.rb +1 -0
- data/lib/expressir/manifest/resolver.rb +210 -0
- data/lib/expressir/manifest/validator.rb +192 -0
- data/lib/expressir/manifest.rb +6 -0
- data/lib/expressir/mapping/refpath.rb +857 -0
- data/lib/expressir/mapping.rb +253 -0
- data/lib/expressir/model/cache.rb +10 -9
- data/lib/expressir/model/concerns.rb +42 -0
- data/lib/expressir/model/data_types/aggregate.rb +8 -13
- data/lib/expressir/model/data_types/array.rb +15 -21
- data/lib/expressir/model/data_types/bag.rb +11 -15
- data/lib/expressir/model/data_types/binary.rb +9 -12
- data/lib/expressir/model/data_types/boolean.rb +7 -2
- data/lib/expressir/model/data_types/enumeration.rb +11 -15
- data/lib/expressir/model/data_types/enumeration_item.rb +5 -7
- data/lib/expressir/model/data_types/generic.rb +6 -8
- data/lib/expressir/model/data_types/generic_entity.rb +11 -13
- data/lib/expressir/model/data_types/integer.rb +7 -2
- data/lib/expressir/model/data_types/list.rb +13 -18
- data/lib/expressir/model/data_types/logical.rb +7 -2
- data/lib/expressir/model/data_types/number.rb +7 -2
- data/lib/expressir/model/data_types/real.rb +7 -9
- data/lib/expressir/model/data_types/select.rb +13 -18
- data/lib/expressir/model/data_types/set.rb +11 -15
- data/lib/expressir/model/data_types/string.rb +9 -12
- data/lib/expressir/model/data_types.rb +25 -0
- data/lib/expressir/model/declarations/attribute.rb +19 -28
- data/lib/expressir/model/declarations/constant.rb +10 -16
- data/lib/expressir/model/declarations/derived_attribute.rb +25 -0
- data/lib/expressir/model/declarations/entity.rb +39 -30
- data/lib/expressir/model/declarations/function.rb +32 -40
- data/lib/expressir/model/declarations/informal_proposition_rule.rb +25 -0
- data/lib/expressir/model/declarations/interface.rb +25 -16
- data/lib/expressir/model/declarations/interface_item.rb +9 -11
- data/lib/expressir/model/declarations/interfaced_item.rb +15 -19
- data/lib/expressir/model/declarations/inverse_attribute.rb +25 -0
- data/lib/expressir/model/declarations/parameter.rb +10 -16
- data/lib/expressir/model/declarations/procedure.rb +30 -37
- data/lib/expressir/model/declarations/remark_item.rb +11 -11
- data/lib/expressir/model/declarations/rule.rb +38 -43
- data/lib/expressir/model/declarations/schema.rb +162 -64
- data/lib/expressir/model/declarations/schema_version.rb +8 -11
- data/lib/expressir/model/declarations/schema_version_item.rb +8 -11
- data/lib/expressir/model/declarations/subtype_constraint.rb +14 -22
- data/lib/expressir/model/declarations/type.rb +18 -18
- data/lib/expressir/model/declarations/unique_rule.rb +8 -13
- data/lib/expressir/model/declarations/variable.rb +10 -16
- data/lib/expressir/model/declarations/where_rule.rb +8 -13
- data/lib/expressir/model/declarations.rb +31 -0
- data/lib/expressir/model/dependency_resolver.rb +268 -0
- data/lib/expressir/model/exp_file.rb +42 -0
- data/lib/expressir/model/expressions/aggregate_initializer.rb +8 -9
- data/lib/expressir/model/expressions/aggregate_initializer_item.rb +10 -12
- data/lib/expressir/model/expressions/binary_expression.rb +42 -36
- data/lib/expressir/model/expressions/entity_constructor.rb +10 -12
- data/lib/expressir/model/expressions/function_call.rb +10 -12
- data/lib/expressir/model/expressions/interval.rb +18 -23
- data/lib/expressir/model/expressions/query_expression.rb +11 -15
- data/lib/expressir/model/expressions/unary_expression.rb +13 -15
- data/lib/expressir/model/expressions.rb +18 -0
- data/lib/expressir/model/identifier.rb +18 -26
- data/lib/expressir/model/indexes/entity_index.rb +103 -0
- data/lib/expressir/model/indexes/item_graph.rb +185 -0
- data/lib/expressir/model/indexes/reference_index.rb +148 -0
- data/lib/expressir/model/indexes/type_index.rb +149 -0
- data/lib/expressir/model/indexes.rb +12 -0
- data/lib/expressir/model/interface_validator.rb +384 -0
- data/lib/expressir/model/literals/binary.rb +7 -9
- data/lib/expressir/model/literals/integer.rb +7 -9
- data/lib/expressir/model/literals/logical.rb +10 -12
- data/lib/expressir/model/literals/real.rb +7 -9
- data/lib/expressir/model/literals/string.rb +10 -12
- data/lib/expressir/model/literals.rb +13 -0
- data/lib/expressir/model/model_element.rb +286 -117
- data/lib/expressir/model/references/attribute_reference.rb +9 -12
- data/lib/expressir/model/references/group_reference.rb +9 -12
- data/lib/expressir/model/references/index_reference.rb +11 -15
- data/lib/expressir/model/references/simple_reference.rb +11 -14
- data/lib/expressir/model/references.rb +12 -0
- data/lib/expressir/model/remark_format.rb +17 -0
- data/lib/expressir/model/remark_info.rb +92 -0
- data/lib/expressir/model/remark_placement.rb +42 -0
- data/lib/expressir/model/repository.rb +472 -12
- data/lib/expressir/model/repository_validator.rb +293 -0
- data/lib/expressir/model/search_engine.rb +551 -0
- data/lib/expressir/model/statements/alias.rb +12 -16
- data/lib/expressir/model/statements/assignment.rb +12 -11
- data/lib/expressir/model/statements/case.rb +31 -14
- data/lib/expressir/model/statements/case_action.rb +9 -11
- data/lib/expressir/model/statements/compound.rb +10 -8
- data/lib/expressir/model/statements/escape.rb +10 -2
- data/lib/expressir/model/statements/if.rb +15 -14
- data/lib/expressir/model/statements/null.rb +10 -2
- data/lib/expressir/model/statements/procedure_call.rb +11 -11
- data/lib/expressir/model/statements/repeat.rb +21 -28
- data/lib/expressir/model/statements/return.rb +9 -8
- data/lib/expressir/model/statements/skip.rb +10 -2
- data/lib/expressir/model/statements.rb +20 -0
- data/lib/expressir/model/supertype_expressions/binary_supertype_expression.rb +13 -17
- data/lib/expressir/model/supertype_expressions/oneof_supertype_expression.rb +7 -9
- data/lib/expressir/model/supertype_expressions.rb +12 -0
- data/lib/expressir/model.rb +38 -78
- data/lib/expressir/package/builder.rb +231 -0
- data/lib/expressir/package/metadata.rb +79 -0
- data/lib/expressir/package/reader.rb +149 -0
- data/lib/expressir/package.rb +8 -0
- data/lib/expressir/schema_manifest.rb +159 -0
- data/lib/expressir/schema_manifest_entry.rb +15 -0
- data/lib/expressir/version.rb +6 -1
- data/lib/expressir.rb +79 -9
- data/lib/tasks/verify_remarks.rake +16 -0
- data/rakelib/native.rake +24 -0
- data/rakelib/oracle.rake +52 -0
- data/rakelib/verify_remarks.rake +16 -0
- metadata +431 -129
- data/.cross_rubies +0 -20
- data/.gitmodules +0 -6
- data/.yardopts +0 -11
- data/docs/development.md +0 -90
- data/exe/format +0 -18
- data/exe/generate-parser +0 -51
- data/lib/expressir/cli/ui.rb +0 -36
- data/lib/expressir/express/2.7/express_parser.so +0 -0
- data/lib/expressir/express/3.0/express_parser.so +0 -0
- data/lib/expressir/express/3.1/express_parser.so +0 -0
- data/lib/expressir/express/3.2/express_parser.so +0 -0
- data/lib/expressir/express/visitor.rb +0 -2588
- data/lib/expressir/model/data_type.rb +0 -9
- data/lib/expressir/model/declaration.rb +0 -9
- data/lib/expressir/model/expression.rb +0 -9
- data/lib/expressir/model/literal.rb +0 -9
- data/lib/expressir/model/reference.rb +0 -9
- data/lib/expressir/model/statement.rb +0 -9
- data/lib/expressir/model/supertype_expression.rb +0 -9
- data/rakelib/antlr4-native.rake +0 -161
- data/rakelib/cross-ruby.rake +0 -368
- data/spec/acceptance/version_spec.rb +0 -27
- data/spec/expressir/express/cache_spec.rb +0 -89
- data/spec/expressir/express/formatter_spec.rb +0 -173
- data/spec/expressir/express/parser_spec.rb +0 -141
- data/spec/expressir/model/model_element_spec.rb +0 -318
- data/spec/spec_helper.rb +0 -24
- data/spec/support/console_helper.rb +0 -29
- data/spec/syntax/multiple.exp +0 -23
- data/spec/syntax/multiple.yaml +0 -198
- data/spec/syntax/multiple_formatted.exp +0 -71
- data/spec/syntax/multiple_hyperlink_formatted.exp +0 -71
- data/spec/syntax/multiple_schema_head_hyperlink_formatted.exp +0 -13
- data/spec/syntax/remark.exp +0 -193
- data/spec/syntax/remark.yaml +0 -471
- data/spec/syntax/remark_formatted.exp +0 -228
- data/spec/syntax/single.exp +0 -4
- data/spec/syntax/single.yaml +0 -18
- data/spec/syntax/single_formatted.exp +0 -10
- data/spec/syntax/single_formatted.yaml +0 -36
- data/spec/syntax/syntax.exp +0 -333
- data/spec/syntax/syntax.yaml +0 -3509
- data/spec/syntax/syntax_formatted.exp +0 -902
- data/spec/syntax/syntax_hyperlink_formatted.exp +0 -902
- data/spec/syntax/syntax_schema_head_formatted.exp +0 -18
|
@@ -0,0 +1,534 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Validate Schemas
|
|
3
|
+
parent: CLI Guides
|
|
4
|
+
grand_parent: Guides
|
|
5
|
+
nav_order: 3
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
== Validate Schemas
|
|
9
|
+
|
|
10
|
+
=== Purpose
|
|
11
|
+
|
|
12
|
+
The `validate load` command checks EXPRESS schemas for syntax errors and version
|
|
13
|
+
string compliance. This ensures schemas are well-formed and properly versioned
|
|
14
|
+
before deployment or further processing.
|
|
15
|
+
|
|
16
|
+
=== References
|
|
17
|
+
|
|
18
|
+
* link:validate-ascii.html[Validate ASCII Content]
|
|
19
|
+
* link:../../tutorials/parsing-your-first-schema.html[Tutorial: Parsing Your First Schema]
|
|
20
|
+
* link:../../pages/express-language.html[EXPRESS Language Documentation]
|
|
21
|
+
* link:format-schemas.html[Format Schemas]
|
|
22
|
+
|
|
23
|
+
=== Concepts
|
|
24
|
+
|
|
25
|
+
Schema validation:: Checking that EXPRESS schema files can be successfully parsed and meet structural requirements
|
|
26
|
+
Version string:: Required metadata in schema declarations identifying the schema version
|
|
27
|
+
Batch validation:: Validating multiple schemas in a single operation
|
|
28
|
+
Schema manifest:: YAML file containing schema definitions that can be validated
|
|
29
|
+
Exit codes:: Command returns 0 for success, 1 for validation failures
|
|
30
|
+
|
|
31
|
+
=== Basic Usage
|
|
32
|
+
|
|
33
|
+
==== Validate Single File
|
|
34
|
+
|
|
35
|
+
[source,bash]
|
|
36
|
+
----
|
|
37
|
+
expressir validate load schema.exp
|
|
38
|
+
----
|
|
39
|
+
|
|
40
|
+
Output on success:
|
|
41
|
+
[source]
|
|
42
|
+
----
|
|
43
|
+
Validating schema.exp
|
|
44
|
+
Validation passed for all EXPRESS schemas.
|
|
45
|
+
----
|
|
46
|
+
|
|
47
|
+
Output on failure:
|
|
48
|
+
[source]
|
|
49
|
+
----
|
|
50
|
+
Validating schema.exp
|
|
51
|
+
******************** RESULTS: FAILED TO PARSE ********************
|
|
52
|
+
Failed to parse: schema.exp
|
|
53
|
+
|
|
54
|
+
******************** RESULTS: MISSING VERSION STRING ********************
|
|
55
|
+
Missing version string: schema `example_schema` | schema.exp
|
|
56
|
+
----
|
|
57
|
+
|
|
58
|
+
==== Validate Multiple Files
|
|
59
|
+
|
|
60
|
+
[source,bash]
|
|
61
|
+
----
|
|
62
|
+
# Explicit files
|
|
63
|
+
expressir validate load schema1.exp schema2.exp schema3.exp
|
|
64
|
+
|
|
65
|
+
# Using wildcards
|
|
66
|
+
expressir validate load schemas/*.exp
|
|
67
|
+
|
|
68
|
+
# Recursive search
|
|
69
|
+
expressir validate load schemas/**/*.exp
|
|
70
|
+
----
|
|
71
|
+
|
|
72
|
+
==== Validate from Schema Manifest
|
|
73
|
+
|
|
74
|
+
[source,bash]
|
|
75
|
+
----
|
|
76
|
+
# Validate all schemas defined in a manifest
|
|
77
|
+
expressir validate load manifest.yaml
|
|
78
|
+
|
|
79
|
+
# With verbose output
|
|
80
|
+
expressir validate load manifest.yaml --verbose
|
|
81
|
+
----
|
|
82
|
+
|
|
83
|
+
==== CI/CD Usage
|
|
84
|
+
|
|
85
|
+
[source,bash]
|
|
86
|
+
----
|
|
87
|
+
# Exit code 0 on success, 1 on failure
|
|
88
|
+
expressir validate load schemas/*.exp
|
|
89
|
+
if [ $? -eq 0 ]; then
|
|
90
|
+
echo "✓ All schemas valid"
|
|
91
|
+
else
|
|
92
|
+
echo "✗ Validation failed"
|
|
93
|
+
exit 1
|
|
94
|
+
fi
|
|
95
|
+
----
|
|
96
|
+
|
|
97
|
+
=== Command Options
|
|
98
|
+
|
|
99
|
+
==== Available Options
|
|
100
|
+
|
|
101
|
+
[options="header"]
|
|
102
|
+
|===
|
|
103
|
+
| Option | Description | Default
|
|
104
|
+
|
|
105
|
+
| `--verbose`
|
|
106
|
+
| Show detailed processing information
|
|
107
|
+
| false
|
|
108
|
+
|
|
109
|
+
| `--help`, `-h`
|
|
110
|
+
| Display help message
|
|
111
|
+
| -
|
|
112
|
+
|===
|
|
113
|
+
|
|
114
|
+
==== Verbose Option
|
|
115
|
+
|
|
116
|
+
[source,bash]
|
|
117
|
+
----
|
|
118
|
+
expressir validate load schema.exp --verbose
|
|
119
|
+
----
|
|
120
|
+
|
|
121
|
+
Provides additional output about the validation process, including schema names and structure information.
|
|
122
|
+
|
|
123
|
+
=== Validation Checks
|
|
124
|
+
|
|
125
|
+
==== Syntax Validation
|
|
126
|
+
|
|
127
|
+
The validator checks that schemas can be successfully parsed according to EXPRESS grammar rules:
|
|
128
|
+
|
|
129
|
+
* **Keywords**: Proper use of EXPRESS keywords
|
|
130
|
+
* **Structure**: Correct entity, type, function declarations
|
|
131
|
+
* **Syntax**: Valid statements, expressions, and references
|
|
132
|
+
* **Encoding**: UTF-8 character encoding
|
|
133
|
+
|
|
134
|
+
Example of syntax errors detected:
|
|
135
|
+
|
|
136
|
+
[source,express]
|
|
137
|
+
----
|
|
138
|
+
SCHEMA invalid_schema;
|
|
139
|
+
ENTITY person
|
|
140
|
+
name : STRING; (* Missing semicolon after ENTITY *)
|
|
141
|
+
END_ENTITY;
|
|
142
|
+
END_SCHEMA;
|
|
143
|
+
----
|
|
144
|
+
|
|
145
|
+
Validation output:
|
|
146
|
+
[source]
|
|
147
|
+
----
|
|
148
|
+
Failed to parse: invalid_schema.exp
|
|
149
|
+
----
|
|
150
|
+
|
|
151
|
+
==== Version String Validation
|
|
152
|
+
|
|
153
|
+
All schemas must include a version declaration:
|
|
154
|
+
|
|
155
|
+
[source,express]
|
|
156
|
+
----
|
|
157
|
+
SCHEMA example_schema;
|
|
158
|
+
-- Valid: includes version
|
|
159
|
+
END_SCHEMA; -- example_schema
|
|
160
|
+
----
|
|
161
|
+
|
|
162
|
+
Missing version:
|
|
163
|
+
[source,express]
|
|
164
|
+
----
|
|
165
|
+
SCHEMA example_schema;
|
|
166
|
+
(* No version declared *)
|
|
167
|
+
END_SCHEMA;
|
|
168
|
+
----
|
|
169
|
+
|
|
170
|
+
Validation output:
|
|
171
|
+
[source]
|
|
172
|
+
----
|
|
173
|
+
Missing version string: schema `example_schema` | example_schema.exp
|
|
174
|
+
----
|
|
175
|
+
|
|
176
|
+
Valid version declaration:
|
|
177
|
+
[source,express]
|
|
178
|
+
----
|
|
179
|
+
SCHEMA example_schema;
|
|
180
|
+
SCHEMA_VERSION('1.0.0');
|
|
181
|
+
END_SCHEMA;
|
|
182
|
+
----
|
|
183
|
+
|
|
184
|
+
=== Use Cases
|
|
185
|
+
|
|
186
|
+
==== Pre-commit Validation
|
|
187
|
+
|
|
188
|
+
Validate schemas before committing to version control:
|
|
189
|
+
|
|
190
|
+
[source,bash]
|
|
191
|
+
----
|
|
192
|
+
#!/bin/bash
|
|
193
|
+
# .git/hooks/pre-commit
|
|
194
|
+
|
|
195
|
+
# Get staged .exp files
|
|
196
|
+
STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep '\.exp$')
|
|
197
|
+
|
|
198
|
+
if [ -z "$STAGED_FILES" ]; then
|
|
199
|
+
exit 0
|
|
200
|
+
fi
|
|
201
|
+
|
|
202
|
+
echo "Validating staged EXPRESS schemas..."
|
|
203
|
+
|
|
204
|
+
# Validate each staged file
|
|
205
|
+
for file in $STAGED_FILES; do
|
|
206
|
+
if ! expressir validate load "$file"; then
|
|
207
|
+
echo "❌ Validation failed for: $file"
|
|
208
|
+
echo "Please fix validation errors before committing."
|
|
209
|
+
exit 1
|
|
210
|
+
fi
|
|
211
|
+
done
|
|
212
|
+
|
|
213
|
+
echo "✓ All staged schemas are valid"
|
|
214
|
+
----
|
|
215
|
+
|
|
216
|
+
Make it executable:
|
|
217
|
+
[source,bash]
|
|
218
|
+
----
|
|
219
|
+
chmod +x .git/hooks/pre-commit
|
|
220
|
+
----
|
|
221
|
+
|
|
222
|
+
==== CI/CD Pipeline Integration
|
|
223
|
+
|
|
224
|
+
GitHub Actions workflow:
|
|
225
|
+
|
|
226
|
+
[source,yaml]
|
|
227
|
+
----
|
|
228
|
+
name: Validate Schemas
|
|
229
|
+
|
|
230
|
+
on: [push, pull_request]
|
|
231
|
+
|
|
232
|
+
jobs:
|
|
233
|
+
validate:
|
|
234
|
+
runs-on: ubuntu-latest
|
|
235
|
+
steps:
|
|
236
|
+
- uses: actions/checkout@v2
|
|
237
|
+
|
|
238
|
+
- name: Set up Ruby
|
|
239
|
+
uses: ruby/setup-ruby@v1
|
|
240
|
+
with:
|
|
241
|
+
ruby-version: '3.0'
|
|
242
|
+
|
|
243
|
+
- name: Install Expressir
|
|
244
|
+
run: gem install expressir
|
|
245
|
+
|
|
246
|
+
- name: Validate all schemas
|
|
247
|
+
run: |
|
|
248
|
+
echo "Validating EXPRESS schemas..."
|
|
249
|
+
if expressir validate load schemas/*.exp; then
|
|
250
|
+
echo "✓ All schemas valid"
|
|
251
|
+
else
|
|
252
|
+
echo "✗ Schema validation failed"
|
|
253
|
+
exit 1
|
|
254
|
+
fi
|
|
255
|
+
----
|
|
256
|
+
|
|
257
|
+
==== Quality Assurance Script
|
|
258
|
+
|
|
259
|
+
Comprehensive validation script:
|
|
260
|
+
|
|
261
|
+
[source,bash]
|
|
262
|
+
----
|
|
263
|
+
#!/bin/bash
|
|
264
|
+
# validate-all.sh - Complete schema validation
|
|
265
|
+
|
|
266
|
+
set -e
|
|
267
|
+
|
|
268
|
+
SCHEMA_DIR="schemas"
|
|
269
|
+
REPORT_FILE="validation_report.txt"
|
|
270
|
+
|
|
271
|
+
echo "EXPRESS Schema Validation Report" > "$REPORT_FILE"
|
|
272
|
+
echo "================================" >> "$REPORT_FILE"
|
|
273
|
+
echo "Date: $(date)" >> "$REPORT_FILE"
|
|
274
|
+
echo "" >> "$REPORT_FILE"
|
|
275
|
+
|
|
276
|
+
# Count total schemas
|
|
277
|
+
TOTAL=$(find "$SCHEMA_DIR" -name "*.exp" | wc -l)
|
|
278
|
+
echo "Total schemas: $TOTAL" >> "$REPORT_FILE"
|
|
279
|
+
echo "" >> "$REPORT_FILE"
|
|
280
|
+
|
|
281
|
+
# Run validation
|
|
282
|
+
echo "Running validation..." | tee -a "$REPORT_FILE"
|
|
283
|
+
if expressir validate load "$SCHEMA_DIR"/*.exp >> "$REPORT_FILE" 2>&1; then
|
|
284
|
+
echo "✓ All schemas passed validation" | tee -a "$REPORT_FILE"
|
|
285
|
+
exit 0
|
|
286
|
+
else
|
|
287
|
+
echo "✗ Validation failed - see $REPORT_FILE" | tee -a "$REPORT_FILE"
|
|
288
|
+
exit 1
|
|
289
|
+
fi
|
|
290
|
+
----
|
|
291
|
+
|
|
292
|
+
==== Batch Validation with Reporting
|
|
293
|
+
|
|
294
|
+
[source,bash]
|
|
295
|
+
----
|
|
296
|
+
#!/bin/bash
|
|
297
|
+
# validate-with-report.sh
|
|
298
|
+
|
|
299
|
+
VALID=0
|
|
300
|
+
INVALID=0
|
|
301
|
+
MISSING_VERSION=0
|
|
302
|
+
|
|
303
|
+
for file in schemas/*.exp; do
|
|
304
|
+
echo "Checking: $file"
|
|
305
|
+
|
|
306
|
+
OUTPUT=$(expressir validate load "$file" 2>&1)
|
|
307
|
+
STATUS=$?
|
|
308
|
+
|
|
309
|
+
if [ $STATUS -eq 0 ]; then
|
|
310
|
+
echo " ✓ Valid"
|
|
311
|
+
((VALID++))
|
|
312
|
+
else
|
|
313
|
+
if echo "$OUTPUT" | grep -q "Failed to parse"; then
|
|
314
|
+
echo " ✗ Parse error"
|
|
315
|
+
((INVALID++))
|
|
316
|
+
fi
|
|
317
|
+
if echo "$OUTPUT" | grep -q "Missing version"; then
|
|
318
|
+
echo " ⚠ Missing version"
|
|
319
|
+
((MISSING_VERSION++))
|
|
320
|
+
fi
|
|
321
|
+
fi
|
|
322
|
+
done
|
|
323
|
+
|
|
324
|
+
echo ""
|
|
325
|
+
echo "Summary:"
|
|
326
|
+
echo " Valid: $VALID"
|
|
327
|
+
echo " Parse errors: $INVALID"
|
|
328
|
+
echo " Missing version: $MISSING_VERSION"
|
|
329
|
+
|
|
330
|
+
if [ $INVALID -gt 0 ] || [ $MISSING_VERSION -gt 0 ]; then
|
|
331
|
+
exit 1
|
|
332
|
+
fi
|
|
333
|
+
----
|
|
334
|
+
|
|
335
|
+
=== Validation Workflow
|
|
336
|
+
|
|
337
|
+
==== Development Workflow
|
|
338
|
+
|
|
339
|
+
[source,bash]
|
|
340
|
+
----
|
|
341
|
+
# 1. Edit schema
|
|
342
|
+
vim my_schema.exp
|
|
343
|
+
|
|
344
|
+
# 2. Validate
|
|
345
|
+
expressir validate load my_schema.exp
|
|
346
|
+
|
|
347
|
+
# 3. If valid, format
|
|
348
|
+
expressir format my_schema.exp -o my_schema.exp
|
|
349
|
+
|
|
350
|
+
# 4. Commit
|
|
351
|
+
git add my_schema.exp
|
|
352
|
+
git commit -m "Add my_schema"
|
|
353
|
+
----
|
|
354
|
+
|
|
355
|
+
==== Team Workflow
|
|
356
|
+
|
|
357
|
+
[source,bash]
|
|
358
|
+
----
|
|
359
|
+
# 1. Validate all schemas
|
|
360
|
+
expressir validate load schemas/*.exp
|
|
361
|
+
|
|
362
|
+
# 2. Fix any errors
|
|
363
|
+
# (edit files as needed)
|
|
364
|
+
|
|
365
|
+
# 3. Re-validate
|
|
366
|
+
expressir validate load schemas/*.exp
|
|
367
|
+
|
|
368
|
+
# 4. Proceed with deployment
|
|
369
|
+
./deploy.sh
|
|
370
|
+
----
|
|
371
|
+
|
|
372
|
+
=== Common Validation Errors
|
|
373
|
+
|
|
374
|
+
==== Parse Errors
|
|
375
|
+
|
|
376
|
+
**Missing Semicolon**
|
|
377
|
+
|
|
378
|
+
[source,express]
|
|
379
|
+
----
|
|
380
|
+
ENTITY person
|
|
381
|
+
name : STRING; (* Missing semicolon after entity name *)
|
|
382
|
+
----
|
|
383
|
+
|
|
384
|
+
**Solution**: Add semicolon after ENTITY declaration:
|
|
385
|
+
[source,express]
|
|
386
|
+
----
|
|
387
|
+
ENTITY person;
|
|
388
|
+
name : STRING;
|
|
389
|
+
----
|
|
390
|
+
|
|
391
|
+
**Invalid Keyword**
|
|
392
|
+
|
|
393
|
+
[source,express]
|
|
394
|
+
----
|
|
395
|
+
ENTITTY person; (* Typo in keyword *)
|
|
396
|
+
----
|
|
397
|
+
|
|
398
|
+
**Solution**: Correct the keyword spelling.
|
|
399
|
+
|
|
400
|
+
**Unclosed Block**
|
|
401
|
+
|
|
402
|
+
[source,express]
|
|
403
|
+
----
|
|
404
|
+
SCHEMA example;
|
|
405
|
+
ENTITY person;
|
|
406
|
+
name : STRING;
|
|
407
|
+
(* Missing END_ENTITY *)
|
|
408
|
+
END_SCHEMA;
|
|
409
|
+
----
|
|
410
|
+
|
|
411
|
+
**Solution**: Add missing END_ENTITY.
|
|
412
|
+
|
|
413
|
+
==== Version String Errors
|
|
414
|
+
|
|
415
|
+
**Missing Version**
|
|
416
|
+
|
|
417
|
+
[source,express]
|
|
418
|
+
----
|
|
419
|
+
SCHEMA example_schema;
|
|
420
|
+
(* No version declared *)
|
|
421
|
+
END_SCHEMA;
|
|
422
|
+
----
|
|
423
|
+
|
|
424
|
+
**Solution**: Add SCHEMA_VERSION declaration:
|
|
425
|
+
[source,express]
|
|
426
|
+
----
|
|
427
|
+
SCHEMA example_schema;
|
|
428
|
+
SCHEMA_VERSION('1.0.0');
|
|
429
|
+
END_SCHEMA;
|
|
430
|
+
----
|
|
431
|
+
|
|
432
|
+
**Invalid Version Format**
|
|
433
|
+
|
|
434
|
+
While any string is technically valid, use semantic versioning:
|
|
435
|
+
[source,express]
|
|
436
|
+
----
|
|
437
|
+
SCHEMA example_schema;
|
|
438
|
+
SCHEMA_VERSION('1.0.0'); (* Recommended format *)
|
|
439
|
+
END_SCHEMA;
|
|
440
|
+
----
|
|
441
|
+
|
|
442
|
+
=== Error Messages
|
|
443
|
+
|
|
444
|
+
==== Failed to Parse
|
|
445
|
+
|
|
446
|
+
[source]
|
|
447
|
+
----
|
|
448
|
+
******************** RESULTS: FAILED TO PARSE ********************
|
|
449
|
+
Failed to parse: schema.exp
|
|
450
|
+
----
|
|
451
|
+
|
|
452
|
+
**Meaning**: The schema file contains syntax errors that prevent parsing.
|
|
453
|
+
|
|
454
|
+
**Actions**:
|
|
455
|
+
1. Open the file in an editor
|
|
456
|
+
2. Check for common syntax errors
|
|
457
|
+
3. Validate EXPRESS grammar rules
|
|
458
|
+
4. Test with a minimal schema first
|
|
459
|
+
|
|
460
|
+
==== Missing Version String
|
|
461
|
+
|
|
462
|
+
[source]
|
|
463
|
+
----
|
|
464
|
+
******************** RESULTS: MISSING VERSION STRING ********************
|
|
465
|
+
Missing version string: schema `example_schema` | schema.exp
|
|
466
|
+
----
|
|
467
|
+
|
|
468
|
+
**Meaning**: The schema lacks a SCHEMA_VERSION declaration.
|
|
469
|
+
|
|
470
|
+
**Actions**:
|
|
471
|
+
1. Add SCHEMA_VERSION to the schema
|
|
472
|
+
2. Use semantic versioning format
|
|
473
|
+
3. Document version in project metadata
|
|
474
|
+
|
|
475
|
+
=== Best Practices
|
|
476
|
+
|
|
477
|
+
**Validate Before Committing**::
|
|
478
|
+
Always validate schemas before version control operations
|
|
479
|
+
+
|
|
480
|
+
[source,bash]
|
|
481
|
+
----
|
|
482
|
+
expressir validate load schema.exp && git commit -m "Update schema"
|
|
483
|
+
----
|
|
484
|
+
|
|
485
|
+
**Automate Validation**::
|
|
486
|
+
Add validation to CI/CD pipelines
|
|
487
|
+
+
|
|
488
|
+
[source,bash]
|
|
489
|
+
----
|
|
490
|
+
# In CI script
|
|
491
|
+
expressir validate load schemas/*.exp || exit 1
|
|
492
|
+
----
|
|
493
|
+
|
|
494
|
+
**Use Exit Codes**::
|
|
495
|
+
Check validation results programmatically
|
|
496
|
+
+
|
|
497
|
+
[source,bash]
|
|
498
|
+
----
|
|
499
|
+
if expressir validate load schema.exp; then
|
|
500
|
+
echo "Valid - proceeding"
|
|
501
|
+
else
|
|
502
|
+
echo "Invalid - stopping"
|
|
503
|
+
exit 1
|
|
504
|
+
fi
|
|
505
|
+
----
|
|
506
|
+
|
|
507
|
+
**Validate After Format**::
|
|
508
|
+
Ensure formatting didn't introduce errors
|
|
509
|
+
+
|
|
510
|
+
[source,bash]
|
|
511
|
+
----
|
|
512
|
+
expressir format schema.exp -o schema.exp
|
|
513
|
+
expressir validate load schema.exp
|
|
514
|
+
----
|
|
515
|
+
|
|
516
|
+
**Keep Versions Updated**::
|
|
517
|
+
Maintain accurate version strings in all schemas
|
|
518
|
+
|
|
519
|
+
|
|
520
|
+
|
|
521
|
+
=== Next Steps
|
|
522
|
+
|
|
523
|
+
**Related Commands**::
|
|
524
|
+
* link:validate-ascii.html[Validate ASCII Content] - Check for non-ASCII characters
|
|
525
|
+
* link:format-schemas.html[Format Schemas] - Pretty-print schemas
|
|
526
|
+
* link:coverage-analysis.html[Coverage Analysis] - Check documentation
|
|
527
|
+
|
|
528
|
+
**Advanced Topics**::
|
|
529
|
+
* link:../ruby-api/parsing-files.html[Ruby API Parsing] - Programmatic validation
|
|
530
|
+
* link:../deployment/ci-cd-setup.html[CI/CD Setup] - Automated workflows
|
|
531
|
+
|
|
532
|
+
**Quality Assurance**::
|
|
533
|
+
* link:benchmark-performance.html[Benchmark Performance] - Performance testing
|
|
534
|
+
* link:../../tutorials/working-with-multiple-schemas.html[Working with Multiple Schemas]
|