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,401 @@
|
|
|
1
|
+
== Formatter architecture
|
|
2
|
+
|
|
3
|
+
=== General
|
|
4
|
+
|
|
5
|
+
The Expressir formatter uses a modular architecture that separates formatting
|
|
6
|
+
concerns into focused, composable modules. This design improves maintainability,
|
|
7
|
+
testability, and extensibility while preserving full backward compatibility with
|
|
8
|
+
existing code.
|
|
9
|
+
|
|
10
|
+
The formatter architecture follows object-oriented design principles with clear
|
|
11
|
+
separation of concerns. Each module handles a specific aspect of EXPRESS
|
|
12
|
+
formatting, and they work together through Ruby's module inclusion mechanism.
|
|
13
|
+
|
|
14
|
+
The concept of Profiles is used to define different formatting styles or
|
|
15
|
+
conventions. The base `Formatter` class provides standard formatting, while
|
|
16
|
+
specialized formatters like `PrettyFormatter` extend it with additional features
|
|
17
|
+
and ELF compliance.
|
|
18
|
+
|
|
19
|
+
=== Feature
|
|
20
|
+
|
|
21
|
+
==== Remark preservation
|
|
22
|
+
|
|
23
|
+
Expressir fully preserves EXPRESS remarks (comments) during parsing and formatting, maintaining them in their original positions:
|
|
24
|
+
|
|
25
|
+
==== Preamble remarks
|
|
26
|
+
|
|
27
|
+
Remarks between a scope declaration and its first child are preserved as preamble remarks:
|
|
28
|
+
|
|
29
|
+
[source,express]
|
|
30
|
+
----
|
|
31
|
+
SCHEMA example;
|
|
32
|
+
-- This is a preamble remark
|
|
33
|
+
-- It appears after SCHEMA but before declarations
|
|
34
|
+
|
|
35
|
+
ENTITY person;
|
|
36
|
+
-- Entity preamble remark
|
|
37
|
+
name : STRING;
|
|
38
|
+
END_ENTITY;
|
|
39
|
+
|
|
40
|
+
END_SCHEMA;
|
|
41
|
+
----
|
|
42
|
+
|
|
43
|
+
==== Inline tail remarks
|
|
44
|
+
|
|
45
|
+
Remarks on the same line as attribute or enumeration item declarations:
|
|
46
|
+
|
|
47
|
+
[source,express]
|
|
48
|
+
----
|
|
49
|
+
ENTITY person;
|
|
50
|
+
name : STRING; -- Inline remark for name attribute
|
|
51
|
+
age : INTEGER; -- Inline remark for age attribute
|
|
52
|
+
END_ENTITY;
|
|
53
|
+
|
|
54
|
+
TYPE status = ENUMERATION OF
|
|
55
|
+
(active, -- Active status
|
|
56
|
+
inactive, -- Inactive status
|
|
57
|
+
pending); -- Pending status
|
|
58
|
+
END_TYPE;
|
|
59
|
+
----
|
|
60
|
+
|
|
61
|
+
==== END_* scope remarks
|
|
62
|
+
|
|
63
|
+
Remarks on END_TYPE, END_ENTITY, END_SCHEMA, etc. lines:
|
|
64
|
+
|
|
65
|
+
[source,express]
|
|
66
|
+
----
|
|
67
|
+
TYPE status = ENUMERATION OF
|
|
68
|
+
(active,
|
|
69
|
+
inactive);
|
|
70
|
+
END_TYPE; -- Status enumeration type
|
|
71
|
+
|
|
72
|
+
ENTITY person;
|
|
73
|
+
name : STRING;
|
|
74
|
+
END_ENTITY; -- Person entity
|
|
75
|
+
|
|
76
|
+
END_SCHEMA; -- schema_name
|
|
77
|
+
----
|
|
78
|
+
|
|
79
|
+
==== Unicode support
|
|
80
|
+
|
|
81
|
+
All remark types support full Unicode content:
|
|
82
|
+
|
|
83
|
+
[source,express]
|
|
84
|
+
----
|
|
85
|
+
SCHEMA test;
|
|
86
|
+
-- 日本語、中文、한글 in remarks
|
|
87
|
+
|
|
88
|
+
ENTITY person;
|
|
89
|
+
name : STRING; -- Name in Japanese: 名前
|
|
90
|
+
END_ENTITY;
|
|
91
|
+
|
|
92
|
+
END_SCHEMA; -- test
|
|
93
|
+
----
|
|
94
|
+
|
|
95
|
+
For implementation details, see link:docs/ARCHITECTURE.md#remark-attachment-system[Remark Attachment System].
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
=== Module organization
|
|
99
|
+
|
|
100
|
+
The formatter consists of a main `Formatter` class that includes specialized
|
|
101
|
+
formatting modules, each responsible for a distinct category of EXPRESS language
|
|
102
|
+
constructs.
|
|
103
|
+
|
|
104
|
+
==== Formatter modules
|
|
105
|
+
|
|
106
|
+
RemarkFormatter:: Handles formatting of remarks (comments) in all forms
|
|
107
|
+
+
|
|
108
|
+
[example]
|
|
109
|
+
====
|
|
110
|
+
* Embedded remarks: `(* comment *)`
|
|
111
|
+
* Tail remarks: `-- comment`
|
|
112
|
+
* Tagged remarks with identifiers
|
|
113
|
+
* Preamble remarks before first declarations
|
|
114
|
+
* END_* scope remarks on closing statements
|
|
115
|
+
====
|
|
116
|
+
|
|
117
|
+
RemarkItemFormatter:: Formats individual remark items and remark metadata
|
|
118
|
+
+
|
|
119
|
+
[example]
|
|
120
|
+
====
|
|
121
|
+
Handles the internal structure of remark items, including tags, format specification, and text content.
|
|
122
|
+
====
|
|
123
|
+
|
|
124
|
+
LiteralsFormatter:: Formats literal values (strings, numbers, booleans, binary)
|
|
125
|
+
+
|
|
126
|
+
[example]
|
|
127
|
+
====
|
|
128
|
+
[source,express]
|
|
129
|
+
----
|
|
130
|
+
'string literal'
|
|
131
|
+
123
|
|
132
|
+
3.14
|
|
133
|
+
TRUE
|
|
134
|
+
%10101011
|
|
135
|
+
----
|
|
136
|
+
====
|
|
137
|
+
|
|
138
|
+
ReferencesFormatter:: Formats references to entities, attributes, and other elements
|
|
139
|
+
+
|
|
140
|
+
[example]
|
|
141
|
+
====
|
|
142
|
+
[source,express]
|
|
143
|
+
----
|
|
144
|
+
entity_ref
|
|
145
|
+
entity_ref.attribute_ref
|
|
146
|
+
entity_ref[index]
|
|
147
|
+
----
|
|
148
|
+
====
|
|
149
|
+
|
|
150
|
+
SupertypeExpressionsFormatter:: Formats supertype constraint expressions
|
|
151
|
+
+
|
|
152
|
+
[example]
|
|
153
|
+
====
|
|
154
|
+
[source,express]
|
|
155
|
+
----
|
|
156
|
+
SUPERTYPE OF (ONEOF(subtype1, subtype2))
|
|
157
|
+
ABSTRACT SUPERTYPE OF (subtype1 AND subtype2)
|
|
158
|
+
----
|
|
159
|
+
====
|
|
160
|
+
|
|
161
|
+
StatementsFormatter:: Formats procedural statements (assignment, if, case, repeat, etc.)
|
|
162
|
+
+
|
|
163
|
+
[example]
|
|
164
|
+
====
|
|
165
|
+
[source,express]
|
|
166
|
+
----
|
|
167
|
+
IF condition THEN
|
|
168
|
+
statement;
|
|
169
|
+
END_IF;
|
|
170
|
+
----
|
|
171
|
+
====
|
|
172
|
+
|
|
173
|
+
ExpressionsFormatter:: Formats expressions (binary, unary, function calls, queries)
|
|
174
|
+
+
|
|
175
|
+
[example]
|
|
176
|
+
====
|
|
177
|
+
[source,express]
|
|
178
|
+
----
|
|
179
|
+
a + b * c
|
|
180
|
+
QUERY(x <* entity | condition)
|
|
181
|
+
entity_constructor(arg1, arg2)
|
|
182
|
+
----
|
|
183
|
+
====
|
|
184
|
+
|
|
185
|
+
DataTypesFormatter:: Formats data type declarations (INTEGER, STRING, ENUMERATION, SELECT, etc.)
|
|
186
|
+
+
|
|
187
|
+
[example]
|
|
188
|
+
====
|
|
189
|
+
[source,express]
|
|
190
|
+
----
|
|
191
|
+
STRING(255)
|
|
192
|
+
ENUMERATION OF (red, green, blue)
|
|
193
|
+
SELECT (type1, type2, type3)
|
|
194
|
+
----
|
|
195
|
+
====
|
|
196
|
+
|
|
197
|
+
DeclarationsFormatter:: Formats declarations (ENTITY, TYPE, FUNCTION, SCHEMA, etc.)
|
|
198
|
+
+
|
|
199
|
+
[example]
|
|
200
|
+
====
|
|
201
|
+
[source,express]
|
|
202
|
+
----
|
|
203
|
+
ENTITY person;
|
|
204
|
+
name : STRING;
|
|
205
|
+
END_ENTITY;
|
|
206
|
+
----
|
|
207
|
+
====
|
|
208
|
+
|
|
209
|
+
=== RemarkInfo model
|
|
210
|
+
|
|
211
|
+
==== General
|
|
212
|
+
|
|
213
|
+
Remarks were previously represented as plain strings, which lost important formatting information. The [`RemarkInfo`](lib/expressir/model/remark_info.rb:6) class properly models remarks with their complete metadata.
|
|
214
|
+
|
|
215
|
+
==== Attributes
|
|
216
|
+
|
|
217
|
+
The `RemarkInfo` class has three attributes:
|
|
218
|
+
|
|
219
|
+
`text`:: The remark content (String)
|
|
220
|
+
|
|
221
|
+
`format`:: The remark format: 'tail' or 'embedded' (String)
|
|
222
|
+
|
|
223
|
+
`tag`:: Optional tag for associating the remark with specific items (String or nil)
|
|
224
|
+
|
|
225
|
+
==== Methods
|
|
226
|
+
|
|
227
|
+
`tail?`:: Returns true if the remark uses tail format (`-- comment`)
|
|
228
|
+
|
|
229
|
+
`embedded?`:: Returns true if the remark uses embedded format (`(* comment *)`)
|
|
230
|
+
|
|
231
|
+
`tagged?`:: Returns true if the remark has an associated tag
|
|
232
|
+
|
|
233
|
+
`to_s`:: Returns the remark text for backward compatibility
|
|
234
|
+
|
|
235
|
+
==== Benefits over plain strings
|
|
236
|
+
|
|
237
|
+
Type safety:: Explicit format information prevents format confusion
|
|
238
|
+
|
|
239
|
+
Preservation:: Original format is maintained through parse/format cycles
|
|
240
|
+
|
|
241
|
+
Extensibility:: Easy to add metadata (tags, positions, etc.) without breaking existing code
|
|
242
|
+
|
|
243
|
+
Clarity:: Code explicitly shows whether a remark is tail or embedded
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
=== Using the base formatter
|
|
247
|
+
|
|
248
|
+
The base [`Formatter`](lib/expressir/express/formatter.rb:13) class provides
|
|
249
|
+
standard EXPRESS formatting with fixed 2-space indentation.
|
|
250
|
+
|
|
251
|
+
.Format a repository
|
|
252
|
+
[example]
|
|
253
|
+
====
|
|
254
|
+
[source,ruby]
|
|
255
|
+
----
|
|
256
|
+
# Parse an EXPRESS schema
|
|
257
|
+
repository = Expressir::Express::Parser.from_file("schema.exp")
|
|
258
|
+
|
|
259
|
+
# Format to string
|
|
260
|
+
formatted = Expressir::Express::Formatter.format(repository)
|
|
261
|
+
puts formatted
|
|
262
|
+
|
|
263
|
+
# Or create instance for custom options
|
|
264
|
+
formatter = Expressir::Express::Formatter.new(no_remarks: true)
|
|
265
|
+
formatted = formatter.format(repository)
|
|
266
|
+
----
|
|
267
|
+
====
|
|
268
|
+
|
|
269
|
+
.Format without remarks
|
|
270
|
+
[example]
|
|
271
|
+
====
|
|
272
|
+
[source,ruby]
|
|
273
|
+
----
|
|
274
|
+
# Useful for generating clean schemas without documentation
|
|
275
|
+
formatter = Expressir::Express::Formatter.new(no_remarks: true)
|
|
276
|
+
clean_schema = formatter.format(repository)
|
|
277
|
+
----
|
|
278
|
+
====
|
|
279
|
+
|
|
280
|
+
=== Using ELF PrettyFormatter
|
|
281
|
+
|
|
282
|
+
The [`PrettyFormatter`](lib/expressir/express/pretty_formatter.rb:7) extends the
|
|
283
|
+
base `Formatter` with ELF (EXPRESS Language Foundation) compliance and
|
|
284
|
+
additional features.
|
|
285
|
+
|
|
286
|
+
See the <<_pretty_print_with_elf_compliance,Pretty print with ELF compliance>>
|
|
287
|
+
section for detailed usage examples and configuration options.
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
=== Extending the formatter
|
|
291
|
+
|
|
292
|
+
==== Creating a custom formatter
|
|
293
|
+
|
|
294
|
+
You can create custom formatters by extending `Formatter` or any class that
|
|
295
|
+
inherits from it.
|
|
296
|
+
|
|
297
|
+
.Custom formatter with specific behavior
|
|
298
|
+
[example]
|
|
299
|
+
====
|
|
300
|
+
[source,ruby]
|
|
301
|
+
----
|
|
302
|
+
class MyCustomFormatter < Expressir::Express::Formatter
|
|
303
|
+
# Override specific formatting methods
|
|
304
|
+
def format_declarations_entity(node)
|
|
305
|
+
# Custom entity formatting logic
|
|
306
|
+
super(node) # Or completely custom implementation
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
# Override indentation
|
|
310
|
+
def indent(str)
|
|
311
|
+
return if str.nil?
|
|
312
|
+
|
|
313
|
+
# Use 3 spaces instead of 2
|
|
314
|
+
indent_str = " "
|
|
315
|
+
str.split("\n").map { |x| "#{indent_str}#{x}" }.join("\n")
|
|
316
|
+
end
|
|
317
|
+
end
|
|
318
|
+
|
|
319
|
+
# Use the custom formatter
|
|
320
|
+
formatter = MyCustomFormatter.new
|
|
321
|
+
formatted = formatter.format(repository)
|
|
322
|
+
----
|
|
323
|
+
====
|
|
324
|
+
|
|
325
|
+
==== Adding new formatter modules
|
|
326
|
+
|
|
327
|
+
To add a new formatting module:
|
|
328
|
+
|
|
329
|
+
. Create module in `lib/expressir/express/formatters/`
|
|
330
|
+
. Define private formatting methods
|
|
331
|
+
. Include module in `Formatter` class
|
|
332
|
+
. Add tests in `spec/expressir/express/formatters/`
|
|
333
|
+
|
|
334
|
+
.Example: Creating a new formatter module
|
|
335
|
+
[example]
|
|
336
|
+
====
|
|
337
|
+
[source,ruby]
|
|
338
|
+
----
|
|
339
|
+
# lib/expressir/express/formatters/my_formatter.rb
|
|
340
|
+
module Expressir
|
|
341
|
+
module Express
|
|
342
|
+
module MyFormatter
|
|
343
|
+
private
|
|
344
|
+
|
|
345
|
+
def format_my_construct(node)
|
|
346
|
+
# Formatting logic here
|
|
347
|
+
end
|
|
348
|
+
end
|
|
349
|
+
end
|
|
350
|
+
end
|
|
351
|
+
|
|
352
|
+
# In lib/expressir/express/formatter.rb
|
|
353
|
+
require_relative "formatters/my_formatter"
|
|
354
|
+
|
|
355
|
+
class Formatter
|
|
356
|
+
include MyFormatter
|
|
357
|
+
# ... other includes ...
|
|
358
|
+
end
|
|
359
|
+
----
|
|
360
|
+
====
|
|
361
|
+
|
|
362
|
+
=== Design decisions
|
|
363
|
+
|
|
364
|
+
==== Why modules instead of inheritance
|
|
365
|
+
|
|
366
|
+
The formatter uses module composition instead of class inheritance because:
|
|
367
|
+
|
|
368
|
+
Separation of concerns:: Each module handles one category of formatting
|
|
369
|
+
+
|
|
370
|
+
Each formatter module is focused on a single responsibility (remarks, literals,
|
|
371
|
+
expressions, etc.), making the code easier to understand and maintain.
|
|
372
|
+
|
|
373
|
+
Composability:: Modules can be mixed and matched as needed
|
|
374
|
+
+
|
|
375
|
+
Different formatters can include only the modules they need, or override
|
|
376
|
+
specific modules without affecting others.
|
|
377
|
+
|
|
378
|
+
Testability:: Each module can be tested independently
|
|
379
|
+
+
|
|
380
|
+
Unit tests can focus on individual modules without needing to set up the entire
|
|
381
|
+
formatter.
|
|
382
|
+
|
|
383
|
+
Maintainability:: Changes to one area don't affect others
|
|
384
|
+
+
|
|
385
|
+
Bug fixes or enhancements to one formatter module don't risk breaking other
|
|
386
|
+
formatting logic.
|
|
387
|
+
|
|
388
|
+
==== Why RemarkInfo instead of strings
|
|
389
|
+
|
|
390
|
+
The `RemarkInfo` model was introduced to:
|
|
391
|
+
|
|
392
|
+
Preserve format information:: Tail vs embedded format is crucial for round-trip
|
|
393
|
+
formatting
|
|
394
|
+
|
|
395
|
+
Support tags:: Tags associate remarks with specific schema elements
|
|
396
|
+
|
|
397
|
+
Enable future extensions:: Easy to add line numbers, positions, or other
|
|
398
|
+
metadata
|
|
399
|
+
|
|
400
|
+
Improve type safety:: Explicit object type prevents formatting errors
|
|
401
|
+
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Overview
|
|
3
|
+
has_children: true
|
|
4
|
+
nav_order: 1
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
= Overview
|
|
8
|
+
|
|
9
|
+
Task-oriented guides that show you how to accomplish specific goals with Expressir. Each guide focuses on a particular aspect or workflow.
|
|
10
|
+
|
|
11
|
+
== About These Guides
|
|
12
|
+
|
|
13
|
+
The guides are organized by topic area:
|
|
14
|
+
|
|
15
|
+
* *CLI* - Command-line interface usage and commands
|
|
16
|
+
* *Ruby API* - Programmatic usage from Ruby code
|
|
17
|
+
* *LER* - Working with LER packages
|
|
18
|
+
* *Manifests* - Managing schema collections with manifests
|
|
19
|
+
* *Changes* - Tracking and managing schema changes
|
|
20
|
+
* *Liquid* - Template integration and documentation generation
|
|
21
|
+
* *Deployment* - Production deployment patterns
|
|
22
|
+
|
|
23
|
+
== Guide Categories
|
|
24
|
+
|
|
25
|
+
=== link:../cli/[CLI Guides]
|
|
26
|
+
|
|
27
|
+
Learn to use Expressir's command-line tools effectively.
|
|
28
|
+
|
|
29
|
+
*Available guides:*
|
|
30
|
+
|
|
31
|
+
* link:../cli/format-schemas.html[Formatting Schemas] - Pretty-print and clean schemas
|
|
32
|
+
* link:../cli/validate-schemas.html[Validating Schemas] - Ensure schema correctness
|
|
33
|
+
* link:../cli/benchmark-performance.html[Benchmarking Performance] - Measure and optimize
|
|
34
|
+
* link:../cli/coverage-analysis.html[Coverage Analysis] - Check documentation coverage
|
|
35
|
+
* link:../cli/managing-changes.html[Managing Changes] - Work with change files
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
=== link:../ruby-api/[Ruby API Guides]
|
|
40
|
+
|
|
41
|
+
Integrate Expressir into your Ruby applications.
|
|
42
|
+
|
|
43
|
+
*Available guides:*
|
|
44
|
+
|
|
45
|
+
* link:../ruby-api/parsing-files.html[Parsing Files] - Load EXPRESS schemas
|
|
46
|
+
* link:../ruby-api/working-with-repository.html[Working with Repository] - Navigate schema collections
|
|
47
|
+
* link:../ruby-api/formatting-schemas.html[Formatting Schemas] - Format schemas programmatically
|
|
48
|
+
* link:../ruby-api/search-engine.html[Search Engine] - Use the search API
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
=== link:../ler/[LER Guides]
|
|
53
|
+
|
|
54
|
+
Work with high-performance LER packages.
|
|
55
|
+
|
|
56
|
+
*Available guides:*
|
|
57
|
+
|
|
58
|
+
* link:../ler/creating-packages.html[Creating Packages] - Build LER files
|
|
59
|
+
* link:../ler/loading-packages.html[Loading Packages] - Use pre-built packages
|
|
60
|
+
* link:../ler/querying-packages.html[Querying Packages] - Search and filter
|
|
61
|
+
* link:../ler/validating-packages.html[Validating Packages] - Ensure package integrity
|
|
62
|
+
* link:../ler/package-formats.html[Package Formats] - Choose serialization formats
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
=== link:../manifests/[Manifest Guides]
|
|
67
|
+
|
|
68
|
+
Manage schema collections with manifests for reproducible builds.
|
|
69
|
+
|
|
70
|
+
*Available guides:*
|
|
71
|
+
|
|
72
|
+
* link:../manifests/creating-manifests.html[Creating Manifests] - Generate manifests from root schemas
|
|
73
|
+
* link:../manifests/resolving-manifests.html[Resolving Manifests] - Auto-resolve missing schema paths
|
|
74
|
+
* link:../manifests/validating-manifests.html[Validating Manifests] - Ensure manifest completeness and integrity
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
=== link:../changes/[Changes Guides]
|
|
79
|
+
|
|
80
|
+
Track and manage schema modifications across versions.
|
|
81
|
+
|
|
82
|
+
*Available guides:*
|
|
83
|
+
|
|
84
|
+
* link:../changes/changes-format.html[Changes Format] - Understanding the format
|
|
85
|
+
* link:../changes/validating-changes.html[Validating Changes] - Verify change files
|
|
86
|
+
* link:../changes/importing-eengine.html[Importing from eengine] - Convert eengine XML
|
|
87
|
+
* link:../changes/programmatic-usage.html[Programmatic Usage] - Use changes API
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
=== link:../liquid/[Liquid Guides]
|
|
92
|
+
|
|
93
|
+
Generate documentation using Liquid templates.
|
|
94
|
+
|
|
95
|
+
*Available guides:*
|
|
96
|
+
|
|
97
|
+
* link:../liquid/basic-templates.html[Basic Templates] - Create simple templates
|
|
98
|
+
* link:../liquid/filters-and-tags.html[Filters and Tags] - Use Liquid features
|
|
99
|
+
* link:../liquid/drops-reference.html[Drops Reference] - Access model data
|
|
100
|
+
* link:../liquid/documentation-generation.html[Documentation Generation] - Generate docs
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
=== link:../deployment/[Deployment Guides]
|
|
105
|
+
|
|
106
|
+
Deploy Expressir in production environments.
|
|
107
|
+
|
|
108
|
+
*Available guides:*
|
|
109
|
+
|
|
110
|
+
* link:../deployment/integrating-rails.html[Integrating with Rails] - Use in Rails apps
|
|
111
|
+
* link:../deployment/gem-configuration.html[Gem Configuration] - Configure for production
|
|
112
|
+
* link:../deployment/performance-tuning.html[Performance Tuning] - Optimize for scale
|
|
113
|
+
|
|
114
|
+
== Using These Guides
|
|
115
|
+
|
|
116
|
+
=== Guide Format
|
|
117
|
+
|
|
118
|
+
Each guide follows a structured format:
|
|
119
|
+
|
|
120
|
+
. *Purpose* - What the guide covers
|
|
121
|
+
. *References* - Related documentation
|
|
122
|
+
. *Concepts* - Key terminology
|
|
123
|
+
. *Instructions* - Step-by-step procedures with examples
|
|
124
|
+
. *Best practices* - Recommended approaches
|
|
125
|
+
. *Troubleshooting* - Common issues and solutions
|
|
126
|
+
|
|
127
|
+
=== Finding the Right Guide
|
|
128
|
+
|
|
129
|
+
*If you want to...*
|
|
130
|
+
|
|
131
|
+
* Use the command-line tools → Start with link:../cli/[CLI Guides]
|
|
132
|
+
* Write Ruby code → Begin with link:../ruby-api/[Ruby API Guides]
|
|
133
|
+
* Work with packages → Explore link:../ler/[LER Guides]
|
|
134
|
+
* Manage schema collections → See link:../manifests/[Manifest Guides]
|
|
135
|
+
* Track changes → Check link:../changes/[Changes Guides]
|
|
136
|
+
* Generate docs → See link:../liquid/[Liquid Guides]
|
|
137
|
+
* Deploy to production → Review link:../deployment/[Deployment Guides]
|
|
138
|
+
|
|
139
|
+
=== Quick Reference
|
|
140
|
+
|
|
141
|
+
For quick answers, use the link:../references/[References] section:
|
|
142
|
+
|
|
143
|
+
* link:../references/cli-commands.html[CLI Commands Reference]
|
|
144
|
+
* link:../references/ruby-api.html[Ruby API Reference]
|
|
145
|
+
* link:../references/data-model/[Data Model Reference]
|
|
146
|
+
|
|
147
|
+
== Getting Help
|
|
148
|
+
|
|
149
|
+
If a guide doesn't cover your specific use case:
|
|
150
|
+
|
|
151
|
+
* Check the link:../tutorials/[Tutorials] for learning-focused content
|
|
152
|
+
* Review the link:../references/[References] for detailed specifications
|
|
153
|
+
* Search https://github.com/lutaml/expressir/issues[GitHub Issues] for similar questions
|
|
154
|
+
* Ask in https://github.com/lutaml/expressir/discussions[GitHub Discussions]
|
|
155
|
+
|
|
156
|
+
== Contributing
|
|
157
|
+
|
|
158
|
+
Help improve these guides:
|
|
159
|
+
|
|
160
|
+
* Report unclear or missing information
|
|
161
|
+
* Suggest new guides for common tasks
|
|
162
|
+
* Share your own usage patterns
|
|
163
|
+
* Submit pull requests with improvements
|
|
164
|
+
|
|
165
|
+
See the https://github.com/lutaml/expressir/blob/main/CONTRIBUTING.md[Contributing Guide] for details.
|