expressir 1.2.11-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
@@ -3,26 +3,21 @@ module Expressir
3
3
  module DataTypes
4
4
  # Specified in ISO 10303-11:2004
5
5
  # - section 8.2.2 List data type
6
- class List < DataType
7
- model_attr_accessor :bound1, 'Expression'
8
- model_attr_accessor :bound2, 'Expression'
9
- model_attr_accessor :unique, '::Boolean'
10
- model_attr_accessor :base_type, 'DataType'
6
+ class List < ModelElement
7
+ attribute :bound1, ModelElement
8
+ attribute :bound2, ModelElement
9
+ attribute :unique, :boolean
10
+ attribute :base_type, ModelElement
11
+ attribute :_class, :string, default: -> { self.class.name }
11
12
 
12
- # @param [Hash] options
13
- # @option options [Expression] :bound1
14
- # @option options [Expression] :bound2
15
- # @option options [::Boolean] :unique
16
- # @option options [DataType] :base_type
17
- def initialize(options = {})
18
- @bound1 = options[:bound1]
19
- @bound2 = options[:bound2]
20
- @unique = options[:unique]
21
- @base_type = options[:base_type]
22
-
23
- super
13
+ key_value do
14
+ map "_class", to: :_class, render_default: true
15
+ map "bound1", to: :bound1
16
+ map "bound2", to: :bound2
17
+ map "unique", to: :unique
18
+ map "base_type", to: :base_type
24
19
  end
25
20
  end
26
21
  end
27
22
  end
28
- end
23
+ end
@@ -3,8 +3,13 @@ module Expressir
3
3
  module DataTypes
4
4
  # Specified in ISO 10303-11:2004
5
5
  # - section 8.1.4 Logical data type
6
- class Logical < DataType
6
+ class Logical < ModelElement
7
+ attribute :_class, :string, default: -> { self.class.name }
8
+
9
+ key_value do
10
+ map "_class", to: :_class, render_default: true
11
+ end
7
12
  end
8
13
  end
9
14
  end
10
- end
15
+ end
@@ -3,8 +3,13 @@ module Expressir
3
3
  module DataTypes
4
4
  # Specified in ISO 10303-11:2004
5
5
  # - section 8.1.1 Number data type
6
- class Number < DataType
6
+ class Number < ModelElement
7
+ attribute :_class, :string, default: -> { self.class.name }
8
+
9
+ key_value do
10
+ map "_class", to: :_class, render_default: true
11
+ end
7
12
  end
8
13
  end
9
14
  end
10
- end
15
+ end
@@ -3,17 +3,15 @@ module Expressir
3
3
  module DataTypes
4
4
  # Specified in ISO 10303-11:2004
5
5
  # - section 8.1.2 Real data type
6
- class Real < DataType
7
- model_attr_accessor :precision, 'Expression'
6
+ class Real < ModelElement
7
+ attribute :precision, ModelElement
8
+ attribute :_class, :string, default: -> { self.class.name }
8
9
 
9
- # @param [Hash] options
10
- # @option options [Expression] :precision
11
- def initialize(options = {})
12
- @precision = options[:precision]
13
-
14
- super
10
+ key_value do
11
+ map "_class", to: :_class, render_default: true
12
+ map "precision", to: :precision
15
13
  end
16
14
  end
17
15
  end
18
16
  end
19
- end
17
+ end
@@ -3,26 +3,21 @@ module Expressir
3
3
  module DataTypes
4
4
  # Specified in ISO 10303-11:2004
5
5
  # - section 8.4.2 Select data type
6
- class Select < DataType
7
- model_attr_accessor :extensible, '::Boolean'
8
- model_attr_accessor :generic_entity, '::Boolean'
9
- model_attr_accessor :based_on, 'Reference'
10
- model_attr_accessor :items, '::Array<Reference>'
6
+ class Select < ModelElement
7
+ attribute :extensible, :boolean
8
+ attribute :generic_entity, :boolean
9
+ attribute :based_on, ModelElement
10
+ attribute :items, ModelElement, collection: true
11
+ attribute :_class, :string, default: -> { self.class.name }
11
12
 
12
- # @param [Hash] options
13
- # @option options [::Boolean] :extensible
14
- # @option options [::Boolean] :generic_entity
15
- # @option options [Reference] :based_on
16
- # @option options [::Array<Reference>] :items
17
- def initialize(options = {})
18
- @extensible = options[:extensible]
19
- @generic_entity = options[:generic_entity]
20
- @based_on = options[:based_on]
21
- @items = options[:items] || []
22
-
23
- super
13
+ key_value do
14
+ map "_class", to: :_class, render_default: true
15
+ map "extensible", to: :extensible
16
+ map "generic_entity", to: :generic_entity
17
+ map "based_on", to: :based_on
18
+ map "items", to: :items
24
19
  end
25
20
  end
26
21
  end
27
22
  end
28
- end
23
+ end
@@ -3,23 +3,19 @@ module Expressir
3
3
  module DataTypes
4
4
  # Specified in ISO 10303-11:2004
5
5
  # - section 8.2.4 Set data type
6
- class Set < DataType
7
- model_attr_accessor :bound1, 'Expression'
8
- model_attr_accessor :bound2, 'Expression'
9
- model_attr_accessor :base_type, 'DataType'
6
+ class Set < ModelElement
7
+ attribute :bound1, ModelElement
8
+ attribute :bound2, ModelElement
9
+ attribute :base_type, ModelElement
10
+ attribute :_class, :string, default: -> { self.class.name }
10
11
 
11
- # @param [Hash] options
12
- # @option options [Expression] :bound1
13
- # @option options [Expression] :bound2
14
- # @option options [DataType] :base_type
15
- def initialize(options = {})
16
- @bound1 = options[:bound1]
17
- @bound2 = options[:bound2]
18
- @base_type = options[:base_type]
19
-
20
- super
12
+ key_value do
13
+ map "_class", to: :_class, render_default: true
14
+ map "bound1", to: :bound1
15
+ map "bound2", to: :bound2
16
+ map "base_type", to: :base_type
21
17
  end
22
18
  end
23
19
  end
24
20
  end
25
- end
21
+ end
@@ -3,20 +3,17 @@ module Expressir
3
3
  module DataTypes
4
4
  # Specified in ISO 10303-11:2004
5
5
  # - section 8.1.6 String data type
6
- class String < DataType
7
- model_attr_accessor :width, 'Expression'
8
- model_attr_accessor :fixed, '::Boolean'
6
+ class String < ModelElement
7
+ attribute :width, ModelElement
8
+ attribute :fixed, :boolean
9
+ attribute :_class, :string, default: -> { self.class.name }
9
10
 
10
- # @param [Hash] options
11
- # @option options [Expression] :width
12
- # @option options [::Boolean] :fixed
13
- def initialize(options = {})
14
- @width = options[:width]
15
- @fixed = options[:fixed]
16
-
17
- super
11
+ key_value do
12
+ map "_class", to: :_class, render_default: true
13
+ map "width", to: :width
14
+ map "fixed", to: :fixed
18
15
  end
19
16
  end
20
17
  end
21
18
  end
22
- end
19
+ end
@@ -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
@@ -3,45 +3,36 @@ module Expressir
3
3
  module Declarations
4
4
  # Specified in ISO 10303-11:2004
5
5
  # - section 9.2.1 Attributes
6
- class Attribute < Declaration
6
+ class Attribute < ModelElement
7
7
  include Identifier
8
8
 
9
- EXPLICIT = :EXPLICIT
10
- DERIVED = :DERIVED
11
- INVERSE = :INVERSE
9
+ EXPLICIT = "EXPLICIT".freeze
10
+ DERIVED = "DERIVED".freeze
11
+ INVERSE = "INVERSE".freeze
12
12
 
13
- model_attr_accessor :kind, ':EXPLICIT, :DERIVED, :INVERSE'
14
- model_attr_accessor :supertype_attribute, 'Reference'
15
- model_attr_accessor :optional, 'Boolean'
16
- model_attr_accessor :type, 'DataType'
17
- model_attr_accessor :expression, 'Expression'
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 }
18
19
 
19
- # @param [Hash] options
20
- # @option (see Identifier#initialize_identifier)
21
- # @option options [:EXPLICIT, :DERIVED, :INVERSE] :kind
22
- # @option options [Reference] :supertype_attribute
23
- # @option options [Boolean] :optional
24
- # @option options [DataType] :type
25
- # @option options [Expression] :operand
26
- def initialize(options = {})
27
- initialize_identifier(options)
28
-
29
- @kind = options[:kind]
30
- @supertype_attribute = options[:supertype_attribute]
31
- @optional = options[:optional]
32
- @type = options[:type]
33
- @expression = options[:expression]
34
-
35
- super
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
36
27
  end
37
28
 
38
29
  # @return [Array<Declaration>]
39
30
  def children
40
31
  [
41
- *remark_items
32
+ *remark_items,
42
33
  ]
43
34
  end
44
35
  end
45
36
  end
46
37
  end
47
- end
38
+ end
@@ -3,32 +3,26 @@ module Expressir
3
3
  module Declarations
4
4
  # Specified in ISO 10303-11:2004
5
5
  # - section 9.4 Constant
6
- class Constant < Declaration
6
+ class Constant < ModelElement
7
7
  include Identifier
8
8
 
9
- model_attr_accessor :type, 'DataType'
10
- model_attr_accessor :expression, 'Expression'
9
+ attribute :type, ModelElement
10
+ attribute :expression, ModelElement
11
+ attribute :_class, :string, default: -> { self.class.name }
11
12
 
12
- # @param [Hash] options
13
- # @option (see Identifier#initialize_identifier)
14
- # @option options [DataType] :type
15
- # @option options [Expression] :expression
16
- def initialize(options = {})
17
- initialize_identifier(options)
18
-
19
- @type = options[:type]
20
- @expression = options[:expression]
21
-
22
- super
13
+ key_value do
14
+ map "_class", to: :_class, render_default: true
15
+ map "type", to: :type
16
+ map "expression", to: :expression
23
17
  end
24
18
 
25
19
  # @return [Array<Declaration>]
26
20
  def children
27
21
  [
28
- *remark_items
22
+ *remark_items,
29
23
  ]
30
24
  end
31
25
  end
32
26
  end
33
27
  end
34
- 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
@@ -3,51 +3,60 @@ module Expressir
3
3
  module Declarations
4
4
  # Specified in ISO 10303-11:2004
5
5
  # - section 9.2 Entity declaration
6
- class Entity < Declaration
6
+ class Entity < ModelElement
7
7
  include Identifier
8
+ include ScopeContainer
9
+ include HasInformalPropositions
10
+ include HasWhereRules
8
11
 
9
- model_attr_accessor :abstract, 'Boolean'
10
- model_attr_accessor :supertype_expression, 'SupertypeExpression'
11
- model_attr_accessor :subtype_of, 'Array<Reference>'
12
- model_attr_accessor :attributes, 'Array<Attribute>'
13
- model_attr_accessor :unique_rules, 'Array<UniqueRule>'
14
- model_attr_accessor :where_rules, 'Array<WhereRule>'
15
- model_attr_accessor :informal_propositions, 'Array<RemarkItem>'
12
+ collection_attributes :attributes, :derived_attributes,
13
+ :inverse_attributes, :unique_rules,
14
+ :where_rules, :informal_propositions,
15
+ :remark_items
16
16
 
17
- # @param [Hash] options
18
- # @option (see Identifier#initialize_identifier)
19
- # @option options [Boolean] :abstract
20
- # @option options [SupertypeExpression] :supertype_expression
21
- # @option options [Array<Reference>] :subtype_of
22
- # @option options [Array<Attribute>] :attributes
23
- # @option options [Array<UniqueRule>] :unique_rules
24
- # @option options [Array<WhereRule>] :where_rules
25
- # @option options [Array<RemarkItem>] :informal_propositions
26
- def initialize(options = {})
27
- initialize_identifier(options)
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 }
28
33
 
29
- @abstract = options[:abstract]
30
- @supertype_expression = options[:supertype_expression]
31
- @subtype_of = options[:subtype_of] || []
32
- @attributes = options[:attributes] || []
33
- @unique_rules = options[:unique_rules] || []
34
- @where_rules = options[:where_rules] || []
35
- @informal_propositions = options[:informal_propositions] || []
36
-
37
- super
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
38
45
  end
39
46
 
40
47
  # @return [Array<Declaration>]
41
48
  def children
42
49
  [
43
50
  *attributes,
51
+ *derived_attributes,
52
+ *inverse_attributes,
44
53
  *unique_rules,
45
54
  *where_rules,
46
55
  *informal_propositions,
47
- *remark_items
56
+ *remark_items,
48
57
  ]
49
58
  end
50
59
  end
51
60
  end
52
61
  end
53
- end
62
+ end
@@ -3,47 +3,39 @@ module Expressir
3
3
  module Declarations
4
4
  # Specified in ISO 10303-11:2004
5
5
  # - section 9.5.1 Function
6
- class Function < Declaration
6
+ class Function < ModelElement
7
7
  include Identifier
8
+ include ScopeContainer
8
9
 
9
- model_attr_accessor :parameters, 'Array<Parameter>'
10
- model_attr_accessor :return_type, 'DataType'
11
- model_attr_accessor :types, 'Array<Type>'
12
- model_attr_accessor :entities, 'Array<Entity>'
13
- model_attr_accessor :subtype_constraints, 'Array<SubtypeConstraint>'
14
- model_attr_accessor :functions, 'Array<Function>'
15
- model_attr_accessor :procedures, 'Array<Procedure>'
16
- model_attr_accessor :constants, 'Array<Constant>'
17
- model_attr_accessor :variables, 'Array<Variable>'
18
- model_attr_accessor :statements, 'Array<Statement>'
10
+ collection_attributes :parameters, :types, :entities,
11
+ :subtype_constraints, :functions, :procedures,
12
+ :constants, :variables, :statements,
13
+ :remark_items
19
14
 
20
- # @param [Hash] options
21
- # @option (see Identifier#initialize_identifier)
22
- # @option options [Array<Parameter>] :parameters
23
- # @option options [DataType] :return_type
24
- # @option options [Array<Type>] :types
25
- # @option options [Array<Entity>] :entities
26
- # @option options [Array<SubtypeConstraint>] :subtype_constraints
27
- # @option options [Array<Function>] :functions
28
- # @option options [Array<Procedure>] :procedures
29
- # @option options [Array<Constant>] :constants
30
- # @option options [Array<Variable>] :variables
31
- # @option options [Array<Statement>] :statements
32
- def initialize(options = {})
33
- initialize_identifier(options)
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 }
34
26
 
35
- @parameters = options[:parameters] || []
36
- @return_type = options[:return_type]
37
- @types = options[:types] || []
38
- @entities = options[:entities] || []
39
- @subtype_constraints = options[:subtype_constraints] || []
40
- @functions = options[:functions] || []
41
- @procedures = options[:procedures] || []
42
- @constants = options[:constants] || []
43
- @variables = options[:variables] || []
44
- @statements = options[:statements] || []
45
-
46
- super
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
47
39
  end
48
40
 
49
41
  # @return [Array<Declaration>]
@@ -51,17 +43,17 @@ module Expressir
51
43
  [
52
44
  *parameters,
53
45
  *types,
54
- *types.flat_map{|x| x.enumeration_items},
46
+ *types&.flat_map(&:enumeration_items),
55
47
  *entities,
56
48
  *subtype_constraints,
57
49
  *functions,
58
50
  *procedures,
59
51
  *constants,
60
52
  *variables,
61
- *remark_items
53
+ *remark_items,
62
54
  ]
63
55
  end
64
56
  end
65
57
  end
66
58
  end
67
- 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
@@ -3,26 +3,35 @@ module Expressir
3
3
  module Declarations
4
4
  # Specified in ISO 10303-11:2004
5
5
  # - section 11 Interface specification
6
- class Interface < Declaration
7
- USE = :USE
8
- REFERENCE = :REFERENCE
6
+ class Interface < ModelElement
7
+ # A remark may trail the clause: `REFERENCE FROM x; -- why`.
8
+ include TakesInlineRemark
9
9
 
10
- model_attr_accessor :kind, ':USE, :REFERENCE'
11
- model_attr_accessor :schema, 'Reference'
12
- model_attr_accessor :items, 'Array<InterfaceItem>'
10
+ USE = "USE".freeze
11
+ REFERENCE = "REFERENCE".freeze
13
12
 
14
- # @param [Hash] options
15
- # @option options [:USE, :REFERENCE] :kind
16
- # @option options [Reference] :schema
17
- # @option options [Array<InterfaceItem>] :items
18
- def initialize(options = {})
19
- @kind = options[:kind]
20
- @schema = options[:schema]
21
- @items = options[:items] || []
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 }
22
17
 
23
- super
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
24
33
  end
25
34
  end
26
35
  end
27
36
  end
28
- end
37
+ end