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.
Files changed (467) hide show
  1. checksums.yaml +4 -4
  2. data/.cargo/config.toml +3 -0
  3. data/.github/scripts/test_installed_gem.rb +34 -0
  4. data/.github/workflows/codeql.yml +35 -0
  5. data/.github/workflows/docs.yml +99 -0
  6. data/.github/workflows/links.yml +100 -0
  7. data/.github/workflows/native-gems.yml +201 -0
  8. data/.github/workflows/rake.yml +10 -296
  9. data/.github/workflows/release.yml +26 -114
  10. data/.github/workflows/rust-ext.yml +41 -0
  11. data/.github/workflows/stress.yml +36 -0
  12. data/.github/workflows/validate_schemas.yml +48 -0
  13. data/.github/workflows/verify_remarks.yml +33 -0
  14. data/.gitignore +33 -1
  15. data/.rubocop.yml +11 -11
  16. data/.rubocop_todo.yml +297 -0
  17. data/CHANGELOG.md +159 -0
  18. data/Gemfile +15 -1
  19. data/README.adoc +2675 -47
  20. data/Rakefile +34 -10
  21. data/TODO.bugs/01-stale-transformer-autoload.md +39 -0
  22. data/TODO.bugs/02-parser-class-instance-vars.md +36 -0
  23. data/TODO.bugs/03-builder-mutable-state.md +43 -0
  24. data/TODO.bugs/04-formatter-public-send-dispatch.md +53 -0
  25. data/TODO.bugs/05-anonymous-formatter-subclass.md +45 -0
  26. data/TODO.bugs/06-collection-registry-single-source.md +53 -0
  27. data/TODO.bugs/07-require-relative-cleanup.md +42 -0
  28. data/TODO.bugs/08-require-expressir-in-commands.md +34 -0
  29. data/TODO.bugs/09-parser-split.md +53 -0
  30. data/TODO.bugs/10-to-s-override.md +42 -0
  31. data/TODO.bugs/11-parser-class-variables.md +39 -0
  32. data/TODO.bugs/12-marker-modules-vs-registry.md +64 -0
  33. data/TODO.bugs/13-string-literal-scanner-limitation.md +52 -0
  34. data/TODO.bugs/14-model-formatting-leak.md +30 -0
  35. data/TODO.bugs/15-expression-children-macro.md +27 -0
  36. data/TODO.bugs/16-pretty-formatter-duplication.md +28 -0
  37. data/TODO.bugs/17-snake-case-cache-mutable-constant.md +28 -0
  38. data/TODO.bugs/18-const-get-private-constants.md +30 -0
  39. data/TODO.bugs/19-format-methods-public.md +22 -0
  40. data/TODO.bugs/20-coverage-nested-entities-dedup.md +20 -0
  41. data/TODO.bugs/21-operator-tokens-secondary-dispatch.md +21 -0
  42. data/TODO.bugs/22-builder-fast-path-wrappers.md +32 -0
  43. data/TODO.bugs/23-coverage-inverse-maps.md +21 -0
  44. data/TODO.bugs/24-streaming-builder-complexity.md +19 -0
  45. data/TODO.bugs/25-debug-puts-in-production.md +21 -0
  46. data/TODO.bugs/26-generic-entity-children-misplaced.md +21 -0
  47. data/TODO.bugs/27-package-build-god-method.md +19 -0
  48. data/TODO.bugs/28-package-god-class.md +30 -0
  49. data/TODO.bugs/29-validate-ascii-god-class.md +24 -0
  50. data/TODO.bugs/30-unicode-map-extraction.md +19 -0
  51. data/TODO.bugs/README.md +43 -0
  52. data/TODO.max-perf/01-restore-ci-green.md +36 -0
  53. data/TODO.max-perf/02-streaming-parse-path.md +31 -0
  54. data/TODO.max-perf/03-cli-parallel-opt-in.md +27 -0
  55. data/TODO.max-perf/04-benchmark-harness.md +28 -0
  56. data/TODO.max-perf/05-parallel-fidelity-specs.md +22 -0
  57. data/TODO.max-perf/06-builder-cpu-audit.md +41 -0
  58. data/TODO.max-perf/07-upstream-parsanol-roadmap.md +27 -0
  59. data/TODO.max-perf/08-builder-build-perf.md +45 -0
  60. data/TODO.max-perf/09-grammar-cold-start.md +25 -0
  61. data/TODO.max-perf/10-parser-facade-hygiene.md +23 -0
  62. data/TODO.max-perf/11-ci-green-closeout.md +25 -0
  63. data/TODO.max-perf/12-require-boot-profile.md +25 -0
  64. data/TODO.max-perf/13-key-conversion-specs.md +26 -0
  65. data/TODO.max-perf/14-builder-call-handler-audit.md +28 -0
  66. data/TODO.parity-ee/00-overview.md +76 -0
  67. data/TODO.parity-ee/01-annex-g-rule-extraction.md +41 -0
  68. data/TODO.parity-ee/02-eeng-algorithm-inventory.md +8 -0
  69. data/TODO.parity-ee/03-eeng-oracle-harness.md +33 -0
  70. data/TODO.parity-ee/04-shtolo-concatenate.md +44 -0
  71. data/TODO.parity-ee/05-shtolo-longform-flatten.md +53 -0
  72. data/TODO.parity-ee/06-interface-scheduling-parity.md +47 -0
  73. data/TODO.parity-ee/07-semantic-checks-port.md +35 -0
  74. data/TODO.parity-ee/08-pretty-roundtrip-gate.md +27 -0
  75. data/TODO.parity-ee/09-smrl-index-and-listing.md +22 -0
  76. data/TODO.parity-ee/10-interface-dot-graph.md +21 -0
  77. data/TODO.parity-ee/11-import-eeng-tests.md +79 -0
  78. data/TODO.parity-ee/12-full-check-catalog.md +67 -0
  79. data/TODO.parity-ee/13-population-p21.md +54 -0
  80. data/TODO.parity-ee/14-shtolo-completion.md +44 -0
  81. data/TODO.parity-ee/15-part28-xml.md +51 -0
  82. data/TODO.parity-ee/16-compare-patch.md +48 -0
  83. data/TODO.parity-ee/17-official-tests.md +42 -0
  84. data/TODO.parity-ee/18-mim-mapping.md +47 -0
  85. data/TODO.parity-ee/19-architecture.md +97 -0
  86. data/TODO.parity-ee/parity-matrix.md +108 -0
  87. data/TODO.refpath-v2/00-overview.md +64 -0
  88. data/TODO.suma-improvements/00-overview.md +23 -0
  89. data/TODO.suma-improvements/01-prebuilt-platform-gems.md +33 -0
  90. data/TODO.suma-improvements/02-suma-e2e.md +39 -0
  91. data/TODO.suma-improvements/03-item-graph.md +22 -0
  92. data/TODO.suma-improvements/04-compiled-set-default.md +16 -0
  93. data/TODO.suma-improvements/05-validation-in-docs.md +17 -0
  94. data/TODO.suma-improvements/06-memory-remeasure.md +36 -0
  95. data/TODO.suma-improvements/07-part28-xml.md +15 -0
  96. data/TODO.suma-improvements/08-windows-gnu-toolchain.md +15 -0
  97. data/TODO.suma-improvements/09-checker-tranche3.md +13 -0
  98. data/TODO.suma-improvements/10-expressdoc.md +8 -0
  99. data/benchmark/srl_benchmark.rb +458 -0
  100. data/benchmark/srl_native_benchmark.rb +146 -0
  101. data/benchmark/srl_ruby_benchmark.rb +132 -0
  102. data/bin/rspec +2 -1
  103. data/docs/Gemfile +12 -0
  104. data/docs/_config.yml +141 -0
  105. data/docs/_guides/changes/changes-format.adoc +778 -0
  106. data/docs/_guides/changes/importing-eengine.adoc +898 -0
  107. data/docs/_guides/changes/index.adoc +396 -0
  108. data/docs/_guides/changes/programmatic-usage.adoc +1038 -0
  109. data/docs/_guides/changes/validating-changes.adoc +681 -0
  110. data/docs/_guides/cli/benchmark-performance.adoc +834 -0
  111. data/docs/_guides/cli/coverage-analysis.adoc +921 -0
  112. data/docs/_guides/cli/format-schemas.adoc +547 -0
  113. data/docs/_guides/cli/index.adoc +8 -0
  114. data/docs/_guides/cli/managing-changes.adoc +927 -0
  115. data/docs/_guides/cli/validate-ascii.adoc +645 -0
  116. data/docs/_guides/cli/validate-schemas.adoc +534 -0
  117. data/docs/_guides/formatter/formatter-architecture.adoc +401 -0
  118. data/docs/_guides/index.adoc +165 -0
  119. data/docs/_guides/ler/creating-packages.adoc +664 -0
  120. data/docs/_guides/ler/index.adoc +305 -0
  121. data/docs/_guides/ler/loading-packages.adoc +707 -0
  122. data/docs/_guides/ler/package-formats.adoc +748 -0
  123. data/docs/_guides/ler/querying-packages.adoc +826 -0
  124. data/docs/_guides/ler/step-packages.adoc +385 -0
  125. data/docs/_guides/ler/validating-packages.adoc +750 -0
  126. data/docs/_guides/liquid/basic-templates.adoc +813 -0
  127. data/docs/_guides/liquid/documentation-generation.adoc +1042 -0
  128. data/docs/_guides/liquid/drops-reference.adoc +829 -0
  129. data/docs/_guides/liquid/filters-and-tags.adoc +912 -0
  130. data/docs/_guides/liquid/index.adoc +468 -0
  131. data/docs/_guides/manifests/creating-manifests.adoc +483 -0
  132. data/docs/_guides/manifests/index.adoc +307 -0
  133. data/docs/_guides/manifests/resolving-manifests.adoc +557 -0
  134. data/docs/_guides/manifests/validating-manifests.adoc +713 -0
  135. data/docs/_guides/ruby-api/formatting-schemas.adoc +605 -0
  136. data/docs/_guides/ruby-api/index.adoc +257 -0
  137. data/docs/_guides/ruby-api/parsing-files.adoc +421 -0
  138. data/docs/_guides/ruby-api/search-engine.adoc +609 -0
  139. data/docs/_guides/ruby-api/working-with-repository.adoc +577 -0
  140. data/docs/_pages/data-model.adoc +665 -0
  141. data/docs/_pages/express-language.adoc +506 -0
  142. data/docs/_pages/getting-started.adoc +414 -0
  143. data/docs/_pages/index.adoc +116 -0
  144. data/docs/_pages/introduction.adoc +256 -0
  145. data/docs/_pages/ler-packages.adoc +837 -0
  146. data/docs/_pages/parsers.adoc +709 -0
  147. data/docs/_pages/schema-manifests.adoc +431 -0
  148. data/docs/_references/index.adoc +228 -0
  149. data/docs/_tutorials/creating-ler-package.adoc +735 -0
  150. data/docs/_tutorials/documentation-coverage.adoc +795 -0
  151. data/docs/_tutorials/formatting-schemas.adoc +89 -0
  152. data/docs/_tutorials/index.adoc +231 -0
  153. data/docs/_tutorials/liquid-templates.adoc +806 -0
  154. data/docs/_tutorials/parsing-your-first-schema.adoc +522 -0
  155. data/docs/_tutorials/querying-schemas.adoc +751 -0
  156. data/docs/_tutorials/working-with-multiple-schemas.adoc +676 -0
  157. data/docs/index.adoc +242 -0
  158. data/docs/lychee.toml +90 -0
  159. data/examples/demo_ler_usage.sh +86 -0
  160. data/examples/ler/README.md +111 -0
  161. data/examples/ler/simple_example.ler +0 -0
  162. data/examples/ler/simple_schema.exp +33 -0
  163. data/examples/ler_build.rb +75 -0
  164. data/examples/ler_cli.rb +79 -0
  165. data/examples/ler_demo_complete.rb +276 -0
  166. data/examples/ler_query.rb +91 -0
  167. data/examples/ler_query_examples.rb +305 -0
  168. data/examples/ler_stats.rb +81 -0
  169. data/examples/phase3_demo.rb +159 -0
  170. data/examples/query_demo_simple.rb +131 -0
  171. data/exe/expressir +6 -17
  172. data/exe/expressir-format +14 -0
  173. data/exe/{format-test → expressir-format-test} +8 -7
  174. data/expressir.gemspec +50 -37
  175. data/lib/expressir/3.2/expressir_core.so +0 -0
  176. data/lib/expressir/3.3/expressir_core.so +0 -0
  177. data/lib/expressir/3.4/expressir_core.so +0 -0
  178. data/lib/expressir/4.0/expressir_core.so +0 -0
  179. data/lib/expressir/benchmark.rb +310 -0
  180. data/lib/expressir/changes/item_change.rb +20 -0
  181. data/lib/expressir/changes/mapping_change.rb +16 -0
  182. data/lib/expressir/changes/schema_change.rb +85 -0
  183. data/lib/expressir/changes/version_change.rb +26 -0
  184. data/lib/expressir/changes.rb +9 -0
  185. data/lib/expressir/cli.rb +138 -11
  186. data/lib/expressir/commands/base.rb +25 -0
  187. data/lib/expressir/commands/benchmark.rb +59 -0
  188. data/lib/expressir/commands/benchmark_cache.rb +80 -0
  189. data/lib/expressir/commands/changes.rb +34 -0
  190. data/lib/expressir/commands/changes_import_eengine.rb +146 -0
  191. data/lib/expressir/commands/changes_validate.rb +63 -0
  192. data/lib/expressir/commands/check.rb +56 -0
  193. data/lib/expressir/commands/clean.rb +20 -0
  194. data/lib/expressir/commands/coverage.rb +458 -0
  195. data/lib/expressir/commands/expand.rb +26 -0
  196. data/lib/expressir/commands/file_violations.rb +70 -0
  197. data/lib/expressir/commands/fix.rb +33 -0
  198. data/lib/expressir/commands/flatten.rb +29 -0
  199. data/lib/expressir/commands/format.rb +43 -0
  200. data/lib/expressir/commands/manifest.rb +420 -0
  201. data/lib/expressir/commands/mapping_validate.rb +68 -0
  202. data/lib/expressir/commands/non_ascii_character.rb +49 -0
  203. data/lib/expressir/commands/non_ascii_violation_collection.rb +301 -0
  204. data/lib/expressir/commands/package.rb +1222 -0
  205. data/lib/expressir/commands/parity_inputs.rb +160 -0
  206. data/lib/expressir/commands/validate.rb +106 -0
  207. data/lib/expressir/commands/validate_ascii.rb +94 -0
  208. data/lib/expressir/commands/validate_load.rb +91 -0
  209. data/lib/expressir/commands/version.rb +9 -0
  210. data/lib/expressir/commands/xsd.rb +23 -0
  211. data/lib/expressir/commands.rb +30 -0
  212. data/lib/expressir/config.rb +40 -3
  213. data/lib/expressir/coverage.rb +510 -0
  214. data/lib/expressir/eengine/arm_compare_report.rb +23 -0
  215. data/lib/expressir/eengine/changes_section.rb +16 -0
  216. data/lib/expressir/eengine/compare_report.rb +69 -0
  217. data/lib/expressir/eengine/mim_compare_report.rb +23 -0
  218. data/lib/expressir/eengine/modified_object.rb +21 -0
  219. data/lib/expressir/eengine.rb +9 -0
  220. data/lib/expressir/errors.rb +113 -0
  221. data/lib/expressir/express/adoc_hyperlink_formatter.rb +30 -0
  222. data/lib/expressir/express/adoc_source_formatter.rb +12 -0
  223. data/lib/expressir/express/ast_key_converter.rb +114 -0
  224. data/lib/expressir/express/builder.rb +277 -0
  225. data/lib/expressir/express/builder_context.rb +22 -0
  226. data/lib/expressir/express/builder_registry.rb +397 -0
  227. data/lib/expressir/express/builders/attribute_decl_builder.rb +32 -0
  228. data/lib/expressir/express/builders/built_in_builder.rb +75 -0
  229. data/lib/expressir/express/builders/constant_builder.rb +108 -0
  230. data/lib/expressir/express/builders/declaration_builder.rb +20 -0
  231. data/lib/expressir/express/builders/derive_clause_builder.rb +14 -0
  232. data/lib/expressir/express/builders/derived_attr_builder.rb +28 -0
  233. data/lib/expressir/express/builders/domain_rule_builder.rb +21 -0
  234. data/lib/expressir/express/builders/entity_decl_builder.rb +116 -0
  235. data/lib/expressir/express/builders/explicit_attr_builder.rb +49 -0
  236. data/lib/expressir/express/builders/expression_builder.rb +416 -0
  237. data/lib/expressir/express/builders/function_decl_builder.rb +86 -0
  238. data/lib/expressir/express/builders/helpers.rb +148 -0
  239. data/lib/expressir/express/builders/interface_builder.rb +151 -0
  240. data/lib/expressir/express/builders/inverse_attr_builder.rb +43 -0
  241. data/lib/expressir/express/builders/inverse_attr_type_builder.rb +30 -0
  242. data/lib/expressir/express/builders/inverse_clause_builder.rb +14 -0
  243. data/lib/expressir/express/builders/literal_builder.rb +93 -0
  244. data/lib/expressir/express/builders/procedure_decl_builder.rb +82 -0
  245. data/lib/expressir/express/builders/qualifier_builder.rb +102 -0
  246. data/lib/expressir/express/builders/reference_builder.rb +18 -0
  247. data/lib/expressir/express/builders/rule_decl_builder.rb +97 -0
  248. data/lib/expressir/express/builders/schema_body_decl_builder.rb +18 -0
  249. data/lib/expressir/express/builders/schema_decl_builder.rb +56 -0
  250. data/lib/expressir/express/builders/schema_version_builder.rb +34 -0
  251. data/lib/expressir/express/builders/simple_id_builder.rb +17 -0
  252. data/lib/expressir/express/builders/statement_builder.rb +243 -0
  253. data/lib/expressir/express/builders/subtype_constraint_builder.rb +166 -0
  254. data/lib/expressir/express/builders/syntax_builder.rb +30 -0
  255. data/lib/expressir/express/builders/type_builder.rb +238 -0
  256. data/lib/expressir/express/builders/type_decl_builder.rb +26 -0
  257. data/lib/expressir/express/builders/unique_clause_builder.rb +20 -0
  258. data/lib/expressir/express/builders/unique_rule_builder.rb +41 -0
  259. data/lib/expressir/express/builders/where_clause_builder.rb +20 -0
  260. data/lib/expressir/express/builders.rb +55 -0
  261. data/lib/expressir/express/cache.rb +43 -18
  262. data/lib/expressir/express/checker.rb +812 -0
  263. data/lib/expressir/express/concatenator.rb +79 -0
  264. data/lib/expressir/express/core.rb +95 -0
  265. data/lib/expressir/express/error.rb +124 -0
  266. data/lib/expressir/express/formatter.rb +89 -1548
  267. data/lib/expressir/express/formatters/data_types_formatter.rb +362 -0
  268. data/lib/expressir/express/formatters/declarations_formatter.rb +753 -0
  269. data/lib/expressir/express/formatters/expressions_formatter.rb +180 -0
  270. data/lib/expressir/express/formatters/literals_formatter.rb +55 -0
  271. data/lib/expressir/express/formatters/references_formatter.rb +53 -0
  272. data/lib/expressir/express/formatters/remark_formatter.rb +270 -0
  273. data/lib/expressir/express/formatters/remark_item_formatter.rb +28 -0
  274. data/lib/expressir/express/formatters/statements_formatter.rb +272 -0
  275. data/lib/expressir/express/formatters/supertype_expressions_formatter.rb +54 -0
  276. data/lib/expressir/express/formatters.rb +22 -0
  277. data/lib/expressir/express/grammar/parser.rb +712 -0
  278. data/lib/expressir/express/grammar.rb +11 -0
  279. data/lib/expressir/express/hyperlink_formatter.rb +4 -5
  280. data/lib/expressir/express/interface_dot.rb +105 -0
  281. data/lib/expressir/express/lazy_repository.rb +211 -0
  282. data/lib/expressir/express/line_map.rb +48 -0
  283. data/lib/expressir/express/listing.rb +174 -0
  284. data/lib/expressir/express/model_traversal.rb +42 -0
  285. data/lib/expressir/express/model_visitor.rb +11 -10
  286. data/lib/expressir/express/node_position_index.rb +342 -0
  287. data/lib/expressir/express/parallel_files.rb +229 -0
  288. data/lib/expressir/express/parser.rb +501 -62
  289. data/lib/expressir/express/pretty_formatter.rb +586 -0
  290. data/lib/expressir/express/pretty_gate.rb +61 -0
  291. data/lib/expressir/express/refs_overlay.rb +47 -0
  292. data/lib/expressir/express/remark_attacher.rb +1098 -0
  293. data/lib/expressir/express/remark_overlay.rb +86 -0
  294. data/lib/expressir/express/remark_scanner.rb +245 -0
  295. data/lib/expressir/express/resolve_references_model_visitor.rb +7 -9
  296. data/lib/expressir/express/schema_block_scanner.rb +137 -0
  297. data/lib/expressir/express/schema_head_formatter.rb +4 -5
  298. data/lib/expressir/express/schema_plain_source_formatter.rb +11 -0
  299. data/lib/expressir/express/schema_source_formatter.rb +15 -0
  300. data/lib/expressir/express/scope_resolver.rb +223 -0
  301. data/lib/expressir/express/self_schema_reference.rb +126 -0
  302. data/lib/expressir/express/shtolo.rb +679 -0
  303. data/lib/expressir/express/smrl_xml.rb +125 -0
  304. data/lib/expressir/express/source_formatter.rb +15 -0
  305. data/lib/expressir/express/streaming_builder.rb +435 -0
  306. data/lib/expressir/express/xsd.rb +259 -0
  307. data/lib/expressir/express.rb +53 -0
  308. data/lib/expressir/liquid.rb +1 -0
  309. data/lib/expressir/manifest/resolver.rb +210 -0
  310. data/lib/expressir/manifest/validator.rb +192 -0
  311. data/lib/expressir/manifest.rb +6 -0
  312. data/lib/expressir/mapping/refpath.rb +857 -0
  313. data/lib/expressir/mapping.rb +253 -0
  314. data/lib/expressir/model/cache.rb +10 -9
  315. data/lib/expressir/model/concerns.rb +42 -0
  316. data/lib/expressir/model/data_types/aggregate.rb +8 -13
  317. data/lib/expressir/model/data_types/array.rb +15 -21
  318. data/lib/expressir/model/data_types/bag.rb +11 -15
  319. data/lib/expressir/model/data_types/binary.rb +9 -12
  320. data/lib/expressir/model/data_types/boolean.rb +7 -2
  321. data/lib/expressir/model/data_types/enumeration.rb +11 -15
  322. data/lib/expressir/model/data_types/enumeration_item.rb +5 -7
  323. data/lib/expressir/model/data_types/generic.rb +6 -8
  324. data/lib/expressir/model/data_types/generic_entity.rb +11 -13
  325. data/lib/expressir/model/data_types/integer.rb +7 -2
  326. data/lib/expressir/model/data_types/list.rb +13 -18
  327. data/lib/expressir/model/data_types/logical.rb +7 -2
  328. data/lib/expressir/model/data_types/number.rb +7 -2
  329. data/lib/expressir/model/data_types/real.rb +7 -9
  330. data/lib/expressir/model/data_types/select.rb +13 -18
  331. data/lib/expressir/model/data_types/set.rb +11 -15
  332. data/lib/expressir/model/data_types/string.rb +9 -12
  333. data/lib/expressir/model/data_types.rb +25 -0
  334. data/lib/expressir/model/declarations/attribute.rb +19 -28
  335. data/lib/expressir/model/declarations/constant.rb +10 -16
  336. data/lib/expressir/model/declarations/derived_attribute.rb +25 -0
  337. data/lib/expressir/model/declarations/entity.rb +39 -30
  338. data/lib/expressir/model/declarations/function.rb +32 -40
  339. data/lib/expressir/model/declarations/informal_proposition_rule.rb +25 -0
  340. data/lib/expressir/model/declarations/interface.rb +25 -16
  341. data/lib/expressir/model/declarations/interface_item.rb +9 -11
  342. data/lib/expressir/model/declarations/interfaced_item.rb +15 -19
  343. data/lib/expressir/model/declarations/inverse_attribute.rb +25 -0
  344. data/lib/expressir/model/declarations/parameter.rb +10 -16
  345. data/lib/expressir/model/declarations/procedure.rb +30 -37
  346. data/lib/expressir/model/declarations/remark_item.rb +11 -11
  347. data/lib/expressir/model/declarations/rule.rb +38 -43
  348. data/lib/expressir/model/declarations/schema.rb +162 -64
  349. data/lib/expressir/model/declarations/schema_version.rb +8 -11
  350. data/lib/expressir/model/declarations/schema_version_item.rb +8 -11
  351. data/lib/expressir/model/declarations/subtype_constraint.rb +14 -22
  352. data/lib/expressir/model/declarations/type.rb +18 -18
  353. data/lib/expressir/model/declarations/unique_rule.rb +8 -13
  354. data/lib/expressir/model/declarations/variable.rb +10 -16
  355. data/lib/expressir/model/declarations/where_rule.rb +8 -13
  356. data/lib/expressir/model/declarations.rb +31 -0
  357. data/lib/expressir/model/dependency_resolver.rb +268 -0
  358. data/lib/expressir/model/exp_file.rb +42 -0
  359. data/lib/expressir/model/expressions/aggregate_initializer.rb +8 -9
  360. data/lib/expressir/model/expressions/aggregate_initializer_item.rb +10 -12
  361. data/lib/expressir/model/expressions/binary_expression.rb +42 -36
  362. data/lib/expressir/model/expressions/entity_constructor.rb +10 -12
  363. data/lib/expressir/model/expressions/function_call.rb +10 -12
  364. data/lib/expressir/model/expressions/interval.rb +18 -23
  365. data/lib/expressir/model/expressions/query_expression.rb +11 -15
  366. data/lib/expressir/model/expressions/unary_expression.rb +13 -15
  367. data/lib/expressir/model/expressions.rb +18 -0
  368. data/lib/expressir/model/identifier.rb +18 -26
  369. data/lib/expressir/model/indexes/entity_index.rb +103 -0
  370. data/lib/expressir/model/indexes/item_graph.rb +185 -0
  371. data/lib/expressir/model/indexes/reference_index.rb +148 -0
  372. data/lib/expressir/model/indexes/type_index.rb +149 -0
  373. data/lib/expressir/model/indexes.rb +12 -0
  374. data/lib/expressir/model/interface_validator.rb +384 -0
  375. data/lib/expressir/model/literals/binary.rb +7 -9
  376. data/lib/expressir/model/literals/integer.rb +7 -9
  377. data/lib/expressir/model/literals/logical.rb +10 -12
  378. data/lib/expressir/model/literals/real.rb +7 -9
  379. data/lib/expressir/model/literals/string.rb +10 -12
  380. data/lib/expressir/model/literals.rb +13 -0
  381. data/lib/expressir/model/model_element.rb +286 -117
  382. data/lib/expressir/model/references/attribute_reference.rb +9 -12
  383. data/lib/expressir/model/references/group_reference.rb +9 -12
  384. data/lib/expressir/model/references/index_reference.rb +11 -15
  385. data/lib/expressir/model/references/simple_reference.rb +11 -14
  386. data/lib/expressir/model/references.rb +12 -0
  387. data/lib/expressir/model/remark_format.rb +17 -0
  388. data/lib/expressir/model/remark_info.rb +92 -0
  389. data/lib/expressir/model/remark_placement.rb +42 -0
  390. data/lib/expressir/model/repository.rb +472 -12
  391. data/lib/expressir/model/repository_validator.rb +293 -0
  392. data/lib/expressir/model/search_engine.rb +551 -0
  393. data/lib/expressir/model/statements/alias.rb +12 -16
  394. data/lib/expressir/model/statements/assignment.rb +12 -11
  395. data/lib/expressir/model/statements/case.rb +31 -14
  396. data/lib/expressir/model/statements/case_action.rb +9 -11
  397. data/lib/expressir/model/statements/compound.rb +10 -8
  398. data/lib/expressir/model/statements/escape.rb +10 -2
  399. data/lib/expressir/model/statements/if.rb +15 -14
  400. data/lib/expressir/model/statements/null.rb +10 -2
  401. data/lib/expressir/model/statements/procedure_call.rb +11 -11
  402. data/lib/expressir/model/statements/repeat.rb +21 -28
  403. data/lib/expressir/model/statements/return.rb +9 -8
  404. data/lib/expressir/model/statements/skip.rb +10 -2
  405. data/lib/expressir/model/statements.rb +20 -0
  406. data/lib/expressir/model/supertype_expressions/binary_supertype_expression.rb +13 -17
  407. data/lib/expressir/model/supertype_expressions/oneof_supertype_expression.rb +7 -9
  408. data/lib/expressir/model/supertype_expressions.rb +12 -0
  409. data/lib/expressir/model.rb +38 -78
  410. data/lib/expressir/package/builder.rb +231 -0
  411. data/lib/expressir/package/metadata.rb +79 -0
  412. data/lib/expressir/package/reader.rb +149 -0
  413. data/lib/expressir/package.rb +8 -0
  414. data/lib/expressir/schema_manifest.rb +159 -0
  415. data/lib/expressir/schema_manifest_entry.rb +15 -0
  416. data/lib/expressir/version.rb +6 -1
  417. data/lib/expressir.rb +79 -9
  418. data/lib/tasks/verify_remarks.rake +16 -0
  419. data/rakelib/native.rake +24 -0
  420. data/rakelib/oracle.rake +52 -0
  421. data/rakelib/verify_remarks.rake +16 -0
  422. metadata +431 -129
  423. data/.cross_rubies +0 -20
  424. data/.gitmodules +0 -6
  425. data/.yardopts +0 -11
  426. data/docs/development.md +0 -90
  427. data/exe/format +0 -18
  428. data/exe/generate-parser +0 -51
  429. data/lib/expressir/cli/ui.rb +0 -36
  430. data/lib/expressir/express/2.7/express_parser.so +0 -0
  431. data/lib/expressir/express/3.0/express_parser.so +0 -0
  432. data/lib/expressir/express/3.1/express_parser.so +0 -0
  433. data/lib/expressir/express/3.2/express_parser.so +0 -0
  434. data/lib/expressir/express/visitor.rb +0 -2588
  435. data/lib/expressir/model/data_type.rb +0 -9
  436. data/lib/expressir/model/declaration.rb +0 -9
  437. data/lib/expressir/model/expression.rb +0 -9
  438. data/lib/expressir/model/literal.rb +0 -9
  439. data/lib/expressir/model/reference.rb +0 -9
  440. data/lib/expressir/model/statement.rb +0 -9
  441. data/lib/expressir/model/supertype_expression.rb +0 -9
  442. data/rakelib/antlr4-native.rake +0 -161
  443. data/rakelib/cross-ruby.rake +0 -368
  444. data/spec/acceptance/version_spec.rb +0 -27
  445. data/spec/expressir/express/cache_spec.rb +0 -89
  446. data/spec/expressir/express/formatter_spec.rb +0 -173
  447. data/spec/expressir/express/parser_spec.rb +0 -141
  448. data/spec/expressir/model/model_element_spec.rb +0 -318
  449. data/spec/spec_helper.rb +0 -24
  450. data/spec/support/console_helper.rb +0 -29
  451. data/spec/syntax/multiple.exp +0 -23
  452. data/spec/syntax/multiple.yaml +0 -198
  453. data/spec/syntax/multiple_formatted.exp +0 -71
  454. data/spec/syntax/multiple_hyperlink_formatted.exp +0 -71
  455. data/spec/syntax/multiple_schema_head_hyperlink_formatted.exp +0 -13
  456. data/spec/syntax/remark.exp +0 -193
  457. data/spec/syntax/remark.yaml +0 -471
  458. data/spec/syntax/remark_formatted.exp +0 -228
  459. data/spec/syntax/single.exp +0 -4
  460. data/spec/syntax/single.yaml +0 -18
  461. data/spec/syntax/single_formatted.exp +0 -10
  462. data/spec/syntax/single_formatted.yaml +0 -36
  463. data/spec/syntax/syntax.exp +0 -333
  464. data/spec/syntax/syntax.yaml +0 -3509
  465. data/spec/syntax/syntax_formatted.exp +0 -902
  466. data/spec/syntax/syntax_hyperlink_formatted.exp +0 -902
  467. 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]