expressir 2.4.29-arm-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 (426) hide show
  1. checksums.yaml +7 -0
  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 +19 -0
  9. data/.github/workflows/release.yml +37 -0
  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 +55 -0
  15. data/.hound.yml +3 -0
  16. data/.rspec +2 -0
  17. data/.rubocop.yml +18 -0
  18. data/.rubocop_todo.yml +297 -0
  19. data/CHANGELOG.md +159 -0
  20. data/Gemfile +18 -0
  21. data/README.adoc +2783 -0
  22. data/Rakefile +41 -0
  23. data/TODO.bugs/01-stale-transformer-autoload.md +39 -0
  24. data/TODO.bugs/02-parser-class-instance-vars.md +36 -0
  25. data/TODO.bugs/03-builder-mutable-state.md +43 -0
  26. data/TODO.bugs/04-formatter-public-send-dispatch.md +53 -0
  27. data/TODO.bugs/05-anonymous-formatter-subclass.md +45 -0
  28. data/TODO.bugs/06-collection-registry-single-source.md +53 -0
  29. data/TODO.bugs/07-require-relative-cleanup.md +42 -0
  30. data/TODO.bugs/08-require-expressir-in-commands.md +34 -0
  31. data/TODO.bugs/09-parser-split.md +53 -0
  32. data/TODO.bugs/10-to-s-override.md +42 -0
  33. data/TODO.bugs/11-parser-class-variables.md +39 -0
  34. data/TODO.bugs/12-marker-modules-vs-registry.md +64 -0
  35. data/TODO.bugs/13-string-literal-scanner-limitation.md +52 -0
  36. data/TODO.bugs/14-model-formatting-leak.md +30 -0
  37. data/TODO.bugs/15-expression-children-macro.md +27 -0
  38. data/TODO.bugs/16-pretty-formatter-duplication.md +28 -0
  39. data/TODO.bugs/17-snake-case-cache-mutable-constant.md +28 -0
  40. data/TODO.bugs/18-const-get-private-constants.md +30 -0
  41. data/TODO.bugs/19-format-methods-public.md +22 -0
  42. data/TODO.bugs/20-coverage-nested-entities-dedup.md +20 -0
  43. data/TODO.bugs/21-operator-tokens-secondary-dispatch.md +21 -0
  44. data/TODO.bugs/22-builder-fast-path-wrappers.md +32 -0
  45. data/TODO.bugs/23-coverage-inverse-maps.md +21 -0
  46. data/TODO.bugs/24-streaming-builder-complexity.md +19 -0
  47. data/TODO.bugs/25-debug-puts-in-production.md +21 -0
  48. data/TODO.bugs/26-generic-entity-children-misplaced.md +21 -0
  49. data/TODO.bugs/27-package-build-god-method.md +19 -0
  50. data/TODO.bugs/28-package-god-class.md +30 -0
  51. data/TODO.bugs/29-validate-ascii-god-class.md +24 -0
  52. data/TODO.bugs/30-unicode-map-extraction.md +19 -0
  53. data/TODO.bugs/README.md +43 -0
  54. data/TODO.max-perf/01-restore-ci-green.md +36 -0
  55. data/TODO.max-perf/02-streaming-parse-path.md +31 -0
  56. data/TODO.max-perf/03-cli-parallel-opt-in.md +27 -0
  57. data/TODO.max-perf/04-benchmark-harness.md +28 -0
  58. data/TODO.max-perf/05-parallel-fidelity-specs.md +22 -0
  59. data/TODO.max-perf/06-builder-cpu-audit.md +41 -0
  60. data/TODO.max-perf/07-upstream-parsanol-roadmap.md +27 -0
  61. data/TODO.max-perf/08-builder-build-perf.md +45 -0
  62. data/TODO.max-perf/09-grammar-cold-start.md +25 -0
  63. data/TODO.max-perf/10-parser-facade-hygiene.md +23 -0
  64. data/TODO.max-perf/11-ci-green-closeout.md +25 -0
  65. data/TODO.max-perf/12-require-boot-profile.md +25 -0
  66. data/TODO.max-perf/13-key-conversion-specs.md +26 -0
  67. data/TODO.max-perf/14-builder-call-handler-audit.md +28 -0
  68. data/TODO.parity-ee/00-overview.md +76 -0
  69. data/TODO.parity-ee/01-annex-g-rule-extraction.md +41 -0
  70. data/TODO.parity-ee/02-eeng-algorithm-inventory.md +8 -0
  71. data/TODO.parity-ee/03-eeng-oracle-harness.md +33 -0
  72. data/TODO.parity-ee/04-shtolo-concatenate.md +44 -0
  73. data/TODO.parity-ee/05-shtolo-longform-flatten.md +53 -0
  74. data/TODO.parity-ee/06-interface-scheduling-parity.md +47 -0
  75. data/TODO.parity-ee/07-semantic-checks-port.md +35 -0
  76. data/TODO.parity-ee/08-pretty-roundtrip-gate.md +27 -0
  77. data/TODO.parity-ee/09-smrl-index-and-listing.md +22 -0
  78. data/TODO.parity-ee/10-interface-dot-graph.md +21 -0
  79. data/TODO.parity-ee/11-import-eeng-tests.md +79 -0
  80. data/TODO.parity-ee/12-full-check-catalog.md +67 -0
  81. data/TODO.parity-ee/13-population-p21.md +54 -0
  82. data/TODO.parity-ee/14-shtolo-completion.md +44 -0
  83. data/TODO.parity-ee/15-part28-xml.md +51 -0
  84. data/TODO.parity-ee/16-compare-patch.md +48 -0
  85. data/TODO.parity-ee/17-official-tests.md +42 -0
  86. data/TODO.parity-ee/18-mim-mapping.md +47 -0
  87. data/TODO.parity-ee/19-architecture.md +97 -0
  88. data/TODO.parity-ee/parity-matrix.md +108 -0
  89. data/TODO.refpath-v2/00-overview.md +64 -0
  90. data/TODO.suma-improvements/00-overview.md +23 -0
  91. data/TODO.suma-improvements/01-prebuilt-platform-gems.md +33 -0
  92. data/TODO.suma-improvements/02-suma-e2e.md +39 -0
  93. data/TODO.suma-improvements/03-item-graph.md +22 -0
  94. data/TODO.suma-improvements/04-compiled-set-default.md +16 -0
  95. data/TODO.suma-improvements/05-validation-in-docs.md +17 -0
  96. data/TODO.suma-improvements/06-memory-remeasure.md +36 -0
  97. data/TODO.suma-improvements/07-part28-xml.md +15 -0
  98. data/TODO.suma-improvements/08-windows-gnu-toolchain.md +15 -0
  99. data/TODO.suma-improvements/09-checker-tranche3.md +13 -0
  100. data/TODO.suma-improvements/10-expressdoc.md +8 -0
  101. data/benchmark/srl_benchmark.rb +458 -0
  102. data/benchmark/srl_native_benchmark.rb +146 -0
  103. data/benchmark/srl_ruby_benchmark.rb +132 -0
  104. data/bin/console +11 -0
  105. data/bin/rspec +30 -0
  106. data/bin/setup +8 -0
  107. data/docs/Gemfile +12 -0
  108. data/docs/_config.yml +141 -0
  109. data/docs/_guides/changes/changes-format.adoc +778 -0
  110. data/docs/_guides/changes/importing-eengine.adoc +898 -0
  111. data/docs/_guides/changes/index.adoc +396 -0
  112. data/docs/_guides/changes/programmatic-usage.adoc +1038 -0
  113. data/docs/_guides/changes/validating-changes.adoc +681 -0
  114. data/docs/_guides/cli/benchmark-performance.adoc +834 -0
  115. data/docs/_guides/cli/coverage-analysis.adoc +921 -0
  116. data/docs/_guides/cli/format-schemas.adoc +547 -0
  117. data/docs/_guides/cli/index.adoc +8 -0
  118. data/docs/_guides/cli/managing-changes.adoc +927 -0
  119. data/docs/_guides/cli/validate-ascii.adoc +645 -0
  120. data/docs/_guides/cli/validate-schemas.adoc +534 -0
  121. data/docs/_guides/formatter/formatter-architecture.adoc +401 -0
  122. data/docs/_guides/index.adoc +165 -0
  123. data/docs/_guides/ler/creating-packages.adoc +664 -0
  124. data/docs/_guides/ler/index.adoc +305 -0
  125. data/docs/_guides/ler/loading-packages.adoc +707 -0
  126. data/docs/_guides/ler/package-formats.adoc +748 -0
  127. data/docs/_guides/ler/querying-packages.adoc +826 -0
  128. data/docs/_guides/ler/step-packages.adoc +385 -0
  129. data/docs/_guides/ler/validating-packages.adoc +750 -0
  130. data/docs/_guides/liquid/basic-templates.adoc +813 -0
  131. data/docs/_guides/liquid/documentation-generation.adoc +1042 -0
  132. data/docs/_guides/liquid/drops-reference.adoc +829 -0
  133. data/docs/_guides/liquid/filters-and-tags.adoc +912 -0
  134. data/docs/_guides/liquid/index.adoc +468 -0
  135. data/docs/_guides/manifests/creating-manifests.adoc +483 -0
  136. data/docs/_guides/manifests/index.adoc +307 -0
  137. data/docs/_guides/manifests/resolving-manifests.adoc +557 -0
  138. data/docs/_guides/manifests/validating-manifests.adoc +713 -0
  139. data/docs/_guides/ruby-api/formatting-schemas.adoc +605 -0
  140. data/docs/_guides/ruby-api/index.adoc +257 -0
  141. data/docs/_guides/ruby-api/parsing-files.adoc +421 -0
  142. data/docs/_guides/ruby-api/search-engine.adoc +609 -0
  143. data/docs/_guides/ruby-api/working-with-repository.adoc +577 -0
  144. data/docs/_pages/data-model.adoc +665 -0
  145. data/docs/_pages/express-language.adoc +506 -0
  146. data/docs/_pages/getting-started.adoc +414 -0
  147. data/docs/_pages/index.adoc +116 -0
  148. data/docs/_pages/introduction.adoc +256 -0
  149. data/docs/_pages/ler-packages.adoc +837 -0
  150. data/docs/_pages/parsers.adoc +709 -0
  151. data/docs/_pages/schema-manifests.adoc +431 -0
  152. data/docs/_references/index.adoc +228 -0
  153. data/docs/_tutorials/creating-ler-package.adoc +735 -0
  154. data/docs/_tutorials/documentation-coverage.adoc +795 -0
  155. data/docs/_tutorials/formatting-schemas.adoc +89 -0
  156. data/docs/_tutorials/index.adoc +231 -0
  157. data/docs/_tutorials/liquid-templates.adoc +806 -0
  158. data/docs/_tutorials/parsing-your-first-schema.adoc +522 -0
  159. data/docs/_tutorials/querying-schemas.adoc +751 -0
  160. data/docs/_tutorials/working-with-multiple-schemas.adoc +676 -0
  161. data/docs/index.adoc +242 -0
  162. data/docs/lychee.toml +90 -0
  163. data/examples/demo_ler_usage.sh +86 -0
  164. data/examples/ler/README.md +111 -0
  165. data/examples/ler/simple_example.ler +0 -0
  166. data/examples/ler/simple_schema.exp +33 -0
  167. data/examples/ler_build.rb +75 -0
  168. data/examples/ler_cli.rb +79 -0
  169. data/examples/ler_demo_complete.rb +276 -0
  170. data/examples/ler_query.rb +91 -0
  171. data/examples/ler_query_examples.rb +305 -0
  172. data/examples/ler_stats.rb +81 -0
  173. data/examples/phase3_demo.rb +159 -0
  174. data/examples/query_demo_simple.rb +131 -0
  175. data/exe/expressir +11 -0
  176. data/exe/expressir-format +14 -0
  177. data/exe/expressir-format-test +82 -0
  178. data/expressir.gemspec +61 -0
  179. data/lib/expressir/3.2/expressir_core.so +0 -0
  180. data/lib/expressir/3.3/expressir_core.so +0 -0
  181. data/lib/expressir/3.4/expressir_core.so +0 -0
  182. data/lib/expressir/4.0/expressir_core.so +0 -0
  183. data/lib/expressir/benchmark.rb +310 -0
  184. data/lib/expressir/changes/item_change.rb +20 -0
  185. data/lib/expressir/changes/mapping_change.rb +16 -0
  186. data/lib/expressir/changes/schema_change.rb +85 -0
  187. data/lib/expressir/changes/version_change.rb +26 -0
  188. data/lib/expressir/changes.rb +9 -0
  189. data/lib/expressir/cli.rb +148 -0
  190. data/lib/expressir/commands/base.rb +25 -0
  191. data/lib/expressir/commands/benchmark.rb +59 -0
  192. data/lib/expressir/commands/benchmark_cache.rb +80 -0
  193. data/lib/expressir/commands/changes.rb +34 -0
  194. data/lib/expressir/commands/changes_import_eengine.rb +146 -0
  195. data/lib/expressir/commands/changes_validate.rb +63 -0
  196. data/lib/expressir/commands/check.rb +56 -0
  197. data/lib/expressir/commands/clean.rb +20 -0
  198. data/lib/expressir/commands/coverage.rb +458 -0
  199. data/lib/expressir/commands/expand.rb +26 -0
  200. data/lib/expressir/commands/file_violations.rb +70 -0
  201. data/lib/expressir/commands/fix.rb +33 -0
  202. data/lib/expressir/commands/flatten.rb +29 -0
  203. data/lib/expressir/commands/format.rb +43 -0
  204. data/lib/expressir/commands/manifest.rb +420 -0
  205. data/lib/expressir/commands/mapping_validate.rb +68 -0
  206. data/lib/expressir/commands/non_ascii_character.rb +49 -0
  207. data/lib/expressir/commands/non_ascii_violation_collection.rb +301 -0
  208. data/lib/expressir/commands/package.rb +1222 -0
  209. data/lib/expressir/commands/parity_inputs.rb +160 -0
  210. data/lib/expressir/commands/validate.rb +106 -0
  211. data/lib/expressir/commands/validate_ascii.rb +94 -0
  212. data/lib/expressir/commands/validate_load.rb +91 -0
  213. data/lib/expressir/commands/version.rb +9 -0
  214. data/lib/expressir/commands/xsd.rb +23 -0
  215. data/lib/expressir/commands.rb +30 -0
  216. data/lib/expressir/config.rb +60 -0
  217. data/lib/expressir/coverage.rb +510 -0
  218. data/lib/expressir/eengine/arm_compare_report.rb +23 -0
  219. data/lib/expressir/eengine/changes_section.rb +16 -0
  220. data/lib/expressir/eengine/compare_report.rb +69 -0
  221. data/lib/expressir/eengine/mim_compare_report.rb +23 -0
  222. data/lib/expressir/eengine/modified_object.rb +21 -0
  223. data/lib/expressir/eengine.rb +9 -0
  224. data/lib/expressir/errors.rb +113 -0
  225. data/lib/expressir/express/adoc_hyperlink_formatter.rb +30 -0
  226. data/lib/expressir/express/adoc_source_formatter.rb +12 -0
  227. data/lib/expressir/express/ast_key_converter.rb +114 -0
  228. data/lib/expressir/express/builder.rb +277 -0
  229. data/lib/expressir/express/builder_context.rb +22 -0
  230. data/lib/expressir/express/builder_registry.rb +397 -0
  231. data/lib/expressir/express/builders/attribute_decl_builder.rb +32 -0
  232. data/lib/expressir/express/builders/built_in_builder.rb +75 -0
  233. data/lib/expressir/express/builders/constant_builder.rb +108 -0
  234. data/lib/expressir/express/builders/declaration_builder.rb +20 -0
  235. data/lib/expressir/express/builders/derive_clause_builder.rb +14 -0
  236. data/lib/expressir/express/builders/derived_attr_builder.rb +28 -0
  237. data/lib/expressir/express/builders/domain_rule_builder.rb +21 -0
  238. data/lib/expressir/express/builders/entity_decl_builder.rb +116 -0
  239. data/lib/expressir/express/builders/explicit_attr_builder.rb +49 -0
  240. data/lib/expressir/express/builders/expression_builder.rb +416 -0
  241. data/lib/expressir/express/builders/function_decl_builder.rb +86 -0
  242. data/lib/expressir/express/builders/helpers.rb +148 -0
  243. data/lib/expressir/express/builders/interface_builder.rb +151 -0
  244. data/lib/expressir/express/builders/inverse_attr_builder.rb +43 -0
  245. data/lib/expressir/express/builders/inverse_attr_type_builder.rb +30 -0
  246. data/lib/expressir/express/builders/inverse_clause_builder.rb +14 -0
  247. data/lib/expressir/express/builders/literal_builder.rb +93 -0
  248. data/lib/expressir/express/builders/procedure_decl_builder.rb +82 -0
  249. data/lib/expressir/express/builders/qualifier_builder.rb +102 -0
  250. data/lib/expressir/express/builders/reference_builder.rb +18 -0
  251. data/lib/expressir/express/builders/rule_decl_builder.rb +97 -0
  252. data/lib/expressir/express/builders/schema_body_decl_builder.rb +18 -0
  253. data/lib/expressir/express/builders/schema_decl_builder.rb +56 -0
  254. data/lib/expressir/express/builders/schema_version_builder.rb +34 -0
  255. data/lib/expressir/express/builders/simple_id_builder.rb +17 -0
  256. data/lib/expressir/express/builders/statement_builder.rb +243 -0
  257. data/lib/expressir/express/builders/subtype_constraint_builder.rb +166 -0
  258. data/lib/expressir/express/builders/syntax_builder.rb +30 -0
  259. data/lib/expressir/express/builders/type_builder.rb +238 -0
  260. data/lib/expressir/express/builders/type_decl_builder.rb +26 -0
  261. data/lib/expressir/express/builders/unique_clause_builder.rb +20 -0
  262. data/lib/expressir/express/builders/unique_rule_builder.rb +41 -0
  263. data/lib/expressir/express/builders/where_clause_builder.rb +20 -0
  264. data/lib/expressir/express/builders.rb +55 -0
  265. data/lib/expressir/express/cache.rb +76 -0
  266. data/lib/expressir/express/checker.rb +812 -0
  267. data/lib/expressir/express/concatenator.rb +79 -0
  268. data/lib/expressir/express/core.rb +95 -0
  269. data/lib/expressir/express/error.rb +124 -0
  270. data/lib/expressir/express/formatter.rb +149 -0
  271. data/lib/expressir/express/formatters/data_types_formatter.rb +362 -0
  272. data/lib/expressir/express/formatters/declarations_formatter.rb +753 -0
  273. data/lib/expressir/express/formatters/expressions_formatter.rb +180 -0
  274. data/lib/expressir/express/formatters/literals_formatter.rb +55 -0
  275. data/lib/expressir/express/formatters/references_formatter.rb +53 -0
  276. data/lib/expressir/express/formatters/remark_formatter.rb +270 -0
  277. data/lib/expressir/express/formatters/remark_item_formatter.rb +28 -0
  278. data/lib/expressir/express/formatters/statements_formatter.rb +272 -0
  279. data/lib/expressir/express/formatters/supertype_expressions_formatter.rb +54 -0
  280. data/lib/expressir/express/formatters.rb +22 -0
  281. data/lib/expressir/express/grammar/parser.rb +712 -0
  282. data/lib/expressir/express/grammar.rb +11 -0
  283. data/lib/expressir/express/hyperlink_formatter.rb +35 -0
  284. data/lib/expressir/express/interface_dot.rb +105 -0
  285. data/lib/expressir/express/lazy_repository.rb +211 -0
  286. data/lib/expressir/express/line_map.rb +48 -0
  287. data/lib/expressir/express/listing.rb +174 -0
  288. data/lib/expressir/express/model_traversal.rb +42 -0
  289. data/lib/expressir/express/model_visitor.rb +25 -0
  290. data/lib/expressir/express/node_position_index.rb +342 -0
  291. data/lib/expressir/express/parallel_files.rb +229 -0
  292. data/lib/expressir/express/parser.rb +523 -0
  293. data/lib/expressir/express/pretty_formatter.rb +586 -0
  294. data/lib/expressir/express/pretty_gate.rb +61 -0
  295. data/lib/expressir/express/refs_overlay.rb +47 -0
  296. data/lib/expressir/express/remark_attacher.rb +1098 -0
  297. data/lib/expressir/express/remark_overlay.rb +86 -0
  298. data/lib/expressir/express/remark_scanner.rb +245 -0
  299. data/lib/expressir/express/resolve_references_model_visitor.rb +29 -0
  300. data/lib/expressir/express/schema_block_scanner.rb +137 -0
  301. data/lib/expressir/express/schema_head_formatter.rb +22 -0
  302. data/lib/expressir/express/schema_plain_source_formatter.rb +11 -0
  303. data/lib/expressir/express/schema_source_formatter.rb +15 -0
  304. data/lib/expressir/express/scope_resolver.rb +223 -0
  305. data/lib/expressir/express/self_schema_reference.rb +126 -0
  306. data/lib/expressir/express/shtolo.rb +679 -0
  307. data/lib/expressir/express/smrl_xml.rb +125 -0
  308. data/lib/expressir/express/source_formatter.rb +15 -0
  309. data/lib/expressir/express/streaming_builder.rb +435 -0
  310. data/lib/expressir/express/xsd.rb +259 -0
  311. data/lib/expressir/express.rb +53 -0
  312. data/lib/expressir/liquid.rb +1 -0
  313. data/lib/expressir/manifest/resolver.rb +210 -0
  314. data/lib/expressir/manifest/validator.rb +192 -0
  315. data/lib/expressir/manifest.rb +6 -0
  316. data/lib/expressir/mapping/refpath.rb +857 -0
  317. data/lib/expressir/mapping.rb +253 -0
  318. data/lib/expressir/model/cache.rb +18 -0
  319. data/lib/expressir/model/concerns.rb +42 -0
  320. data/lib/expressir/model/data_types/aggregate.rb +26 -0
  321. data/lib/expressir/model/data_types/array.rb +25 -0
  322. data/lib/expressir/model/data_types/bag.rb +21 -0
  323. data/lib/expressir/model/data_types/binary.rb +19 -0
  324. data/lib/expressir/model/data_types/boolean.rb +15 -0
  325. data/lib/expressir/model/data_types/enumeration.rb +21 -0
  326. data/lib/expressir/model/data_types/enumeration_item.rb +24 -0
  327. data/lib/expressir/model/data_types/generic.rb +24 -0
  328. data/lib/expressir/model/data_types/generic_entity.rb +24 -0
  329. data/lib/expressir/model/data_types/integer.rb +15 -0
  330. data/lib/expressir/model/data_types/list.rb +23 -0
  331. data/lib/expressir/model/data_types/logical.rb +15 -0
  332. data/lib/expressir/model/data_types/number.rb +15 -0
  333. data/lib/expressir/model/data_types/real.rb +17 -0
  334. data/lib/expressir/model/data_types/select.rb +23 -0
  335. data/lib/expressir/model/data_types/set.rb +21 -0
  336. data/lib/expressir/model/data_types/string.rb +19 -0
  337. data/lib/expressir/model/data_types.rb +25 -0
  338. data/lib/expressir/model/declarations/attribute.rb +38 -0
  339. data/lib/expressir/model/declarations/constant.rb +28 -0
  340. data/lib/expressir/model/declarations/derived_attribute.rb +25 -0
  341. data/lib/expressir/model/declarations/entity.rb +62 -0
  342. data/lib/expressir/model/declarations/function.rb +59 -0
  343. data/lib/expressir/model/declarations/informal_proposition_rule.rb +25 -0
  344. data/lib/expressir/model/declarations/interface.rb +37 -0
  345. data/lib/expressir/model/declarations/interface_item.rb +21 -0
  346. data/lib/expressir/model/declarations/interfaced_item.rb +33 -0
  347. data/lib/expressir/model/declarations/inverse_attribute.rb +25 -0
  348. data/lib/expressir/model/declarations/parameter.rb +28 -0
  349. data/lib/expressir/model/declarations/procedure.rb +57 -0
  350. data/lib/expressir/model/declarations/remark_item.rb +21 -0
  351. data/lib/expressir/model/declarations/rule.rb +66 -0
  352. data/lib/expressir/model/declarations/schema.rb +215 -0
  353. data/lib/expressir/model/declarations/schema_version.rb +19 -0
  354. data/lib/expressir/model/declarations/schema_version_item.rb +19 -0
  355. data/lib/expressir/model/declarations/subtype_constraint.rb +32 -0
  356. data/lib/expressir/model/declarations/type.rb +45 -0
  357. data/lib/expressir/model/declarations/unique_rule.rb +26 -0
  358. data/lib/expressir/model/declarations/variable.rb +28 -0
  359. data/lib/expressir/model/declarations/where_rule.rb +26 -0
  360. data/lib/expressir/model/declarations.rb +31 -0
  361. data/lib/expressir/model/dependency_resolver.rb +268 -0
  362. data/lib/expressir/model/exp_file.rb +42 -0
  363. data/lib/expressir/model/expressions/aggregate_initializer.rb +18 -0
  364. data/lib/expressir/model/expressions/aggregate_initializer_item.rb +20 -0
  365. data/lib/expressir/model/expressions/binary_expression.rb +59 -0
  366. data/lib/expressir/model/expressions/entity_constructor.rb +20 -0
  367. data/lib/expressir/model/expressions/function_call.rb +20 -0
  368. data/lib/expressir/model/expressions/interval.rb +29 -0
  369. data/lib/expressir/model/expressions/query_expression.rb +31 -0
  370. data/lib/expressir/model/expressions/unary_expression.rb +25 -0
  371. data/lib/expressir/model/expressions.rb +18 -0
  372. data/lib/expressir/model/identifier.rb +26 -0
  373. data/lib/expressir/model/indexes/entity_index.rb +103 -0
  374. data/lib/expressir/model/indexes/item_graph.rb +185 -0
  375. data/lib/expressir/model/indexes/reference_index.rb +148 -0
  376. data/lib/expressir/model/indexes/type_index.rb +149 -0
  377. data/lib/expressir/model/indexes.rb +12 -0
  378. data/lib/expressir/model/interface_validator.rb +384 -0
  379. data/lib/expressir/model/literals/binary.rb +17 -0
  380. data/lib/expressir/model/literals/integer.rb +17 -0
  381. data/lib/expressir/model/literals/logical.rb +21 -0
  382. data/lib/expressir/model/literals/real.rb +17 -0
  383. data/lib/expressir/model/literals/string.rb +20 -0
  384. data/lib/expressir/model/literals.rb +13 -0
  385. data/lib/expressir/model/model_element.rb +377 -0
  386. data/lib/expressir/model/references/attribute_reference.rb +19 -0
  387. data/lib/expressir/model/references/group_reference.rb +19 -0
  388. data/lib/expressir/model/references/index_reference.rb +23 -0
  389. data/lib/expressir/model/references/simple_reference.rb +21 -0
  390. data/lib/expressir/model/references.rb +12 -0
  391. data/lib/expressir/model/remark_format.rb +17 -0
  392. data/lib/expressir/model/remark_info.rb +92 -0
  393. data/lib/expressir/model/remark_placement.rb +42 -0
  394. data/lib/expressir/model/repository.rb +483 -0
  395. data/lib/expressir/model/repository_validator.rb +293 -0
  396. data/lib/expressir/model/search_engine.rb +551 -0
  397. data/lib/expressir/model/statements/alias.rb +31 -0
  398. data/lib/expressir/model/statements/assignment.rb +23 -0
  399. data/lib/expressir/model/statements/case.rb +42 -0
  400. data/lib/expressir/model/statements/case_action.rb +20 -0
  401. data/lib/expressir/model/statements/compound.rb +21 -0
  402. data/lib/expressir/model/statements/escape.rb +18 -0
  403. data/lib/expressir/model/statements/if.rb +26 -0
  404. data/lib/expressir/model/statements/null.rb +18 -0
  405. data/lib/expressir/model/statements/procedure_call.rb +22 -0
  406. data/lib/expressir/model/statements/repeat.rb +40 -0
  407. data/lib/expressir/model/statements/return.rb +20 -0
  408. data/lib/expressir/model/statements/skip.rb +18 -0
  409. data/lib/expressir/model/statements.rb +20 -0
  410. data/lib/expressir/model/supertype_expressions/binary_supertype_expression.rb +25 -0
  411. data/lib/expressir/model/supertype_expressions/oneof_supertype_expression.rb +17 -0
  412. data/lib/expressir/model/supertype_expressions.rb +12 -0
  413. data/lib/expressir/model.rb +39 -0
  414. data/lib/expressir/package/builder.rb +231 -0
  415. data/lib/expressir/package/metadata.rb +79 -0
  416. data/lib/expressir/package/reader.rb +149 -0
  417. data/lib/expressir/package.rb +8 -0
  418. data/lib/expressir/schema_manifest.rb +159 -0
  419. data/lib/expressir/schema_manifest_entry.rb +15 -0
  420. data/lib/expressir/version.rb +8 -0
  421. data/lib/expressir.rb +94 -0
  422. data/lib/tasks/verify_remarks.rake +16 -0
  423. data/rakelib/native.rake +24 -0
  424. data/rakelib/oracle.rake +52 -0
  425. data/rakelib/verify_remarks.rake +16 -0
  426. metadata +692 -0
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Expressir
4
+ module Model
5
+ module DataTypes
6
+ autoload :Aggregate, "#{__dir__}/data_types/aggregate"
7
+ autoload :Array, "#{__dir__}/data_types/array"
8
+ autoload :Bag, "#{__dir__}/data_types/bag"
9
+ autoload :Binary, "#{__dir__}/data_types/binary"
10
+ autoload :Boolean, "#{__dir__}/data_types/boolean"
11
+ autoload :Enumeration, "#{__dir__}/data_types/enumeration"
12
+ autoload :EnumerationItem, "#{__dir__}/data_types/enumeration_item"
13
+ autoload :GenericEntity, "#{__dir__}/data_types/generic_entity"
14
+ autoload :Generic, "#{__dir__}/data_types/generic"
15
+ autoload :Integer, "#{__dir__}/data_types/integer"
16
+ autoload :List, "#{__dir__}/data_types/list"
17
+ autoload :Logical, "#{__dir__}/data_types/logical"
18
+ autoload :Number, "#{__dir__}/data_types/number"
19
+ autoload :Real, "#{__dir__}/data_types/real"
20
+ autoload :Select, "#{__dir__}/data_types/select"
21
+ autoload :Set, "#{__dir__}/data_types/set"
22
+ autoload :String, "#{__dir__}/data_types/string"
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,38 @@
1
+ module Expressir
2
+ module Model
3
+ module Declarations
4
+ # Specified in ISO 10303-11:2004
5
+ # - section 9.2.1 Attributes
6
+ class Attribute < ModelElement
7
+ include Identifier
8
+
9
+ EXPLICIT = "EXPLICIT".freeze
10
+ DERIVED = "DERIVED".freeze
11
+ INVERSE = "INVERSE".freeze
12
+
13
+ attribute :kind, :string, values: %w[EXPLICIT DERIVED INVERSE]
14
+ attribute :supertype_attribute, ModelElement
15
+ attribute :optional, :boolean
16
+ attribute :type, ModelElement
17
+ attribute :expression, ModelElement
18
+ attribute :_class, :string, default: -> { self.class.name }
19
+
20
+ key_value do
21
+ map "_class", to: :_class, render_default: true
22
+ map "kind", to: :kind
23
+ map "supertype_attribute", to: :supertype_attribute
24
+ map "optional", to: :optional
25
+ map "type", to: :type
26
+ map "expression", to: :expression
27
+ end
28
+
29
+ # @return [Array<Declaration>]
30
+ def children
31
+ [
32
+ *remark_items,
33
+ ]
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,28 @@
1
+ module Expressir
2
+ module Model
3
+ module Declarations
4
+ # Specified in ISO 10303-11:2004
5
+ # - section 9.4 Constant
6
+ class Constant < ModelElement
7
+ include Identifier
8
+
9
+ attribute :type, ModelElement
10
+ attribute :expression, ModelElement
11
+ attribute :_class, :string, default: -> { self.class.name }
12
+
13
+ key_value do
14
+ map "_class", to: :_class, render_default: true
15
+ map "type", to: :type
16
+ map "expression", to: :expression
17
+ end
18
+
19
+ # @return [Array<Declaration>]
20
+ def children
21
+ [
22
+ *remark_items,
23
+ ]
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,25 @@
1
+ module Expressir
2
+ module Model
3
+ module Declarations
4
+ # Specified in ISO 10303-11:2004
5
+ # - section 9.2.1 Attributes
6
+ class DerivedAttribute < Attribute
7
+ include Identifier
8
+
9
+ DERIVED = "DERIVED".freeze
10
+
11
+ attribute :kind, :string, default: -> { DERIVED }
12
+ attribute :_class, :string, default: -> { self.class.name }
13
+
14
+ key_value do
15
+ map "_class", to: :_class, render_default: true
16
+ map "kind", to: :kind, render_default: true
17
+ map "supertype_attribute", to: :supertype_attribute
18
+ map "optional", to: :optional
19
+ map "type", to: :type
20
+ map "expression", to: :expression
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,62 @@
1
+ module Expressir
2
+ module Model
3
+ module Declarations
4
+ # Specified in ISO 10303-11:2004
5
+ # - section 9.2 Entity declaration
6
+ class Entity < ModelElement
7
+ include Identifier
8
+ include ScopeContainer
9
+ include HasInformalPropositions
10
+ include HasWhereRules
11
+
12
+ collection_attributes :attributes, :derived_attributes,
13
+ :inverse_attributes, :unique_rules,
14
+ :where_rules, :informal_propositions,
15
+ :remark_items
16
+
17
+ attribute :abstract, :boolean
18
+ attribute :supertype_expression, ModelElement
19
+ attribute :subtype_of, ModelElement, collection: true
20
+ # Heterogeneous by design: Attribute, DerivedAttribute, and
21
+ # InverseAttribute all live here (the builders concatenate the
22
+ # three clauses in declaration order). The ModelElement base
23
+ # keeps from_hash polymorphic via the _class marker, exactly
24
+ # like the Ruby-built model.
25
+ attribute :attributes, ModelElement, collection: true
26
+ attribute :derived_attributes, DerivedAttribute, collection: true
27
+ attribute :inverse_attributes, InverseAttribute, collection: true
28
+ attribute :unique_rules, UniqueRule, collection: true
29
+ attribute :where_rules, WhereRule, collection: true
30
+ attribute :informal_propositions, InformalPropositionRule,
31
+ collection: true
32
+ attribute :_class, :string, default: -> { self.class.name }
33
+
34
+ key_value do
35
+ map "_class", to: :_class, render_default: true
36
+ map "abstract", to: :abstract
37
+ map "supertype_expression", to: :supertype_expression
38
+ map "subtype_of", to: :subtype_of
39
+ map "attributes", to: :attributes
40
+ map "derived_attributes", to: :derived_attributes
41
+ map "inverse_attributes", to: :inverse_attributes
42
+ map "unique_rules", to: :unique_rules
43
+ map "where_rules", to: :where_rules
44
+ map "informal_propositions", to: :informal_propositions
45
+ end
46
+
47
+ # @return [Array<Declaration>]
48
+ def children
49
+ [
50
+ *attributes,
51
+ *derived_attributes,
52
+ *inverse_attributes,
53
+ *unique_rules,
54
+ *where_rules,
55
+ *informal_propositions,
56
+ *remark_items,
57
+ ]
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,59 @@
1
+ module Expressir
2
+ module Model
3
+ module Declarations
4
+ # Specified in ISO 10303-11:2004
5
+ # - section 9.5.1 Function
6
+ class Function < ModelElement
7
+ include Identifier
8
+ include ScopeContainer
9
+
10
+ collection_attributes :parameters, :types, :entities,
11
+ :subtype_constraints, :functions, :procedures,
12
+ :constants, :variables, :statements,
13
+ :remark_items
14
+
15
+ attribute :parameters, Parameter, collection: true
16
+ attribute :return_type, ModelElement
17
+ attribute :types, ModelElement, collection: true
18
+ attribute :entities, Entity, collection: true
19
+ attribute :subtype_constraints, SubtypeConstraint, collection: true
20
+ attribute :functions, Function, collection: true
21
+ attribute :procedures, Procedure, collection: true
22
+ attribute :constants, Constant, collection: true
23
+ attribute :variables, Variable, collection: true
24
+ attribute :statements, ModelElement, collection: true
25
+ attribute :_class, :string, default: -> { self.class.name }
26
+
27
+ key_value do
28
+ map "_class", to: :_class, render_default: true
29
+ map "parameters", to: :parameters
30
+ map "return_type", to: :return_type
31
+ map "types", to: :types
32
+ map "entities", to: :entities
33
+ map "subtype_constraints", to: :subtype_constraints
34
+ map "functions", to: :functions
35
+ map "procedures", to: :procedures
36
+ map "constants", to: :constants
37
+ map "variables", to: :variables
38
+ map "statements", to: :statements
39
+ end
40
+
41
+ # @return [Array<Declaration>]
42
+ def children
43
+ [
44
+ *parameters,
45
+ *types,
46
+ *types&.flat_map(&:enumeration_items),
47
+ *entities,
48
+ *subtype_constraints,
49
+ *functions,
50
+ *procedures,
51
+ *constants,
52
+ *variables,
53
+ *remark_items,
54
+ ]
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,25 @@
1
+ module Expressir
2
+ module Model
3
+ module Declarations
4
+ # Informal proposition rules are used to specify constraints that cannot be formally expressed
5
+ class InformalPropositionRule < ModelElement
6
+ include Identifier
7
+ include HasInformalPropositions
8
+
9
+ attribute :expression, ModelElement
10
+ attribute :_class, :string, default: -> { self.class.name }
11
+
12
+ key_value do
13
+ map "_class", to: :_class, render_default: true
14
+ map "expression", to: :expression
15
+ end
16
+
17
+ def children
18
+ [
19
+ *remark_items,
20
+ ]
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,37 @@
1
+ module Expressir
2
+ module Model
3
+ module Declarations
4
+ # Specified in ISO 10303-11:2004
5
+ # - section 11 Interface specification
6
+ class Interface < ModelElement
7
+ # A remark may trail the clause: `REFERENCE FROM x; -- why`.
8
+ include TakesInlineRemark
9
+
10
+ USE = "USE".freeze
11
+ REFERENCE = "REFERENCE".freeze
12
+
13
+ attribute :kind, :string, values: %w[USE REFERENCE]
14
+ attribute :schema, ModelElement
15
+ attribute :items, InterfaceItem, collection: true
16
+ attribute :_class, :string, default: -> { self.class.name }
17
+
18
+ # Registers :items with the tree-walker registry: the position index
19
+ # needs the item list to size the clause's span, so an opener-line
20
+ # remark gets the OPENER_REGION and renders back on the clause's
21
+ # first line instead of after the closing semicolon.
22
+ collection_attributes :items
23
+
24
+ key_value do
25
+ map "_class", to: :_class, render_default: true
26
+ map "kind", to: :kind
27
+ map "schema", to: :schema
28
+ map "items", to: :items
29
+ # Without this the clause's remark survives a format but not a
30
+ # cache round trip: it would be dropped on serialization and never
31
+ # come back.
32
+ map "untagged_remarks", to: :untagged_remarks
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,21 @@
1
+ module Expressir
2
+ module Model
3
+ module Declarations
4
+ # Specified in ISO 10303-11:2004
5
+ # - section 11 Interface specification
6
+ class InterfaceItem < ModelElement
7
+ include HasId
8
+
9
+ attribute :ref, ModelElement
10
+ attribute :id, :string
11
+ attribute :_class, :string, default: -> { self.class.name }
12
+
13
+ key_value do
14
+ map "_class", to: :_class, render_default: true
15
+ map "ref", to: :ref
16
+ map "id", to: :id
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,33 @@
1
+ module Expressir
2
+ module Model
3
+ module Declarations
4
+ # Specified in ISO 10303-11:2004
5
+ # - section 11 Interface specification
6
+ class InterfacedItem < ModelElement
7
+ include HasId
8
+ include HasRemarks
9
+
10
+ attribute :id, :string
11
+ attribute :remarks, :string, collection: true
12
+ attribute :remark_items, RemarkItem, collection: true
13
+ attribute :base_item, ModelElement
14
+ attribute :_class, :string, default: -> { self.class.name }
15
+
16
+ key_value do
17
+ map "_class", to: :_class, render_default: true
18
+ map "id", to: :id
19
+ map "remarks", to: :remarks
20
+ map "remark_items", to: :remark_items
21
+ map "base_item", to: :base_item
22
+ end
23
+
24
+ # @return [Array<Declaration>]
25
+ def children
26
+ [
27
+ *remark_items,
28
+ ]
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,25 @@
1
+ module Expressir
2
+ module Model
3
+ module Declarations
4
+ # Specified in ISO 10303-11:2004
5
+ # - section 9.2.1 Attributes
6
+ class InverseAttribute < Attribute
7
+ include Identifier
8
+
9
+ INVERSE = "INVERSE".freeze
10
+
11
+ attribute :kind, :string, default: -> { INVERSE }
12
+ attribute :_class, :string, default: -> { self.class.name }
13
+
14
+ key_value do
15
+ map "_class", to: :_class, render_default: true
16
+ map "kind", to: :kind, render_default: true
17
+ map "supertype_attribute", to: :supertype_attribute
18
+ map "optional", to: :optional
19
+ map "type", to: :type
20
+ map "expression", to: :expression
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,28 @@
1
+ module Expressir
2
+ module Model
3
+ module Declarations
4
+ # Specified in ISO 10303-11:2004
5
+ # - section 9.5.3 Parameters
6
+ class Parameter < ModelElement
7
+ include Identifier
8
+
9
+ attribute :var, :boolean
10
+ attribute :type, ModelElement
11
+ attribute :_class, :string, default: -> { self.class.name }
12
+
13
+ key_value do
14
+ map "_class", to: :_class, render_default: true
15
+ map "var", to: :var
16
+ map "type", to: :type
17
+ end
18
+
19
+ # @return [Array<Declaration>]
20
+ def children
21
+ [
22
+ *remark_items,
23
+ ]
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,57 @@
1
+ module Expressir
2
+ module Model
3
+ module Declarations
4
+ # Specified in ISO 10303-11:2004
5
+ # - section 9.5.2 Procedure
6
+ class Procedure < ModelElement
7
+ include Identifier
8
+ include ScopeContainer
9
+
10
+ collection_attributes :parameters, :types, :entities,
11
+ :subtype_constraints, :functions, :procedures,
12
+ :constants, :variables, :statements,
13
+ :remark_items
14
+
15
+ attribute :parameters, Parameter, collection: true
16
+ attribute :types, ModelElement, collection: true
17
+ attribute :entities, Entity, collection: true
18
+ attribute :subtype_constraints, SubtypeConstraint, collection: true
19
+ attribute :functions, Function, collection: true
20
+ attribute :procedures, Procedure, collection: true
21
+ attribute :constants, Constant, collection: true
22
+ attribute :variables, Variable, collection: true
23
+ attribute :statements, ModelElement, collection: true
24
+ attribute :_class, :string, default: -> { self.class.name }
25
+
26
+ key_value do
27
+ map "_class", to: :_class, render_default: true
28
+ map "parameters", to: :parameters
29
+ map "types", to: :types
30
+ map "entities", to: :entities
31
+ map "subtype_constraints", to: :subtype_constraints
32
+ map "functions", to: :functions
33
+ map "procedures", to: :procedures
34
+ map "constants", to: :constants
35
+ map "variables", to: :variables
36
+ map "statements", to: :statements
37
+ end
38
+
39
+ # @return [Array<Declaration>]
40
+ def children
41
+ [
42
+ *parameters,
43
+ *types,
44
+ *types&.flat_map(&:enumeration_items),
45
+ *entities,
46
+ *subtype_constraints,
47
+ *functions,
48
+ *procedures,
49
+ *constants,
50
+ *variables,
51
+ *remark_items,
52
+ ]
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,21 @@
1
+ module Expressir
2
+ module Model
3
+ module Declarations
4
+ # Implicit item with remarks
5
+ class RemarkItem < ModelElement
6
+ include HasId
7
+ include HasRemarks
8
+
9
+ attribute :id, :string
10
+ attribute :remarks, :string, collection: true
11
+ attribute :_class, :string, default: -> { self.class.name }
12
+
13
+ key_value do
14
+ map "_class", to: :_class, render_default: true
15
+ map "id", to: :id
16
+ map "remarks", to: :remarks
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,66 @@
1
+ module Expressir
2
+ module Model
3
+ module Declarations
4
+ # Specified in ISO 10303-11:2004
5
+ # - section 9.6 Rule
6
+ class Rule < ModelElement
7
+ include Identifier
8
+ include ScopeContainer
9
+ include HasInformalPropositions
10
+ include HasWhereRules
11
+
12
+ collection_attributes :applies_to, :types, :entities,
13
+ :subtype_constraints, :functions, :procedures,
14
+ :constants, :variables, :statements,
15
+ :where_rules, :informal_propositions,
16
+ :remark_items
17
+
18
+ attribute :applies_to, ModelElement, collection: true
19
+ attribute :types, ModelElement, collection: true
20
+ attribute :entities, Entity, collection: true
21
+ attribute :subtype_constraints, SubtypeConstraint, collection: true
22
+ attribute :functions, Function, collection: true
23
+ attribute :procedures, Procedure, collection: true
24
+ attribute :constants, Constant, collection: true
25
+ attribute :variables, Variable, collection: true
26
+ attribute :statements, ModelElement, collection: true
27
+ attribute :where_rules, WhereRule, collection: true
28
+ attribute :informal_propositions, InformalPropositionRule,
29
+ collection: true
30
+ attribute :_class, :string, default: -> { self.class.name }
31
+
32
+ key_value do
33
+ map "_class", to: :_class, render_default: true
34
+ map "applies_to", to: :applies_to
35
+ map "types", to: :types
36
+ map "entities", to: :entities
37
+ map "subtype_constraints", to: :subtype_constraints
38
+ map "functions", to: :functions
39
+ map "procedures", to: :procedures
40
+ map "constants", to: :constants
41
+ map "variables", to: :variables
42
+ map "statements", to: :statements
43
+ map "where_rules", to: :where_rules
44
+ map "informal_propositions", to: :informal_propositions
45
+ end
46
+
47
+ # @return [Array<Declaration>]
48
+ def children
49
+ [
50
+ *types,
51
+ *types&.flat_map(&:enumeration_items),
52
+ *entities,
53
+ *subtype_constraints,
54
+ *functions,
55
+ *procedures,
56
+ *constants,
57
+ *variables,
58
+ *where_rules,
59
+ *informal_propositions,
60
+ *remark_items,
61
+ ]
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end