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
@@ -1,9 +0,0 @@
1
- module Expressir
2
- module Model
3
- # Specified in ISO 10303-11:2004
4
- # - section 8 Data types
5
- # @abstract
6
- class DataType < ModelElement
7
- end
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- module Expressir
2
- module Model
3
- # Specified in ISO 10303-11:2004
4
- # - section 9 Declarations
5
- # @abstract
6
- class Declaration < ModelElement
7
- end
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- module Expressir
2
- module Model
3
- # Specified in ISO 10303-11:2004
4
- # - section 12 Expression
5
- # @abstract
6
- class Expression < ModelElement
7
- end
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- module Expressir
2
- module Model
3
- # Specified in ISO 10303-11:2004
4
- # - section 7.5 Literals
5
- # @abstract
6
- class Literal < ModelElement
7
- end
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- module Expressir
2
- module Model
3
- # Specified in ISO 10303-11:2004
4
- # - section 12.7 References
5
- # @abstract
6
- class Reference < ModelElement
7
- end
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- module Expressir
2
- module Model
3
- # Specified in ISO 10303-11:2004
4
- # - section 13 Executable statements
5
- # @abstract
6
- class Statement < ModelElement
7
- end
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- module Expressir
2
- module Model
3
- # Specified in ISO 10303-11:2004
4
- # - section 9.2.5 Subtype/supertype constraints
5
- # @abstract
6
- class SupertypeExpression < ModelElement
7
- end
8
- end
9
- end
@@ -1,161 +0,0 @@
1
- require "fileutils"
2
- require "antlr4-native"
3
- require "rake"
4
-
5
- def create_class_declarations(parser_source_lines)
6
- i = parser_source_lines.index { |x| x == "Class rb_cContextProxy;" }
7
- parser_source_lines[i] += <<~CPP.split("\n").map { |x| x == "" ? x : x.to_s }.join("\n")
8
-
9
- Class rb_cParserExt;
10
- Class rb_cTokenExt;
11
-
12
- CPP
13
- end
14
-
15
- def create_tp_class_definition(parser_source_lines)
16
- i = parser_source_lines.index { |x| x == "class ContextProxy {" }
17
- parser_source_lines[i - 2] += <<~CPP.split("\n").map { |x| x == "" ? x : x.to_s }.join("\n")
18
-
19
-
20
- class TokenProxy : public Object {
21
- public:
22
- TokenProxy(Token* orig) {
23
- this -> orig = orig;
24
- }
25
-
26
- std::string getText() {
27
- return orig->getText();
28
- }
29
-
30
- size_t getChannel() {
31
- return orig->getChannel();
32
- }
33
-
34
- size_t getTokenIndex() {
35
- return orig->getTokenIndex();
36
- }
37
-
38
- private:
39
- Token * orig = nullptr;
40
- };
41
-
42
- CPP
43
- end
44
-
45
- def create_pp_class_definition(parser_source_lines)
46
- i = parser_source_lines.index { |x| x == "extern \"C\"" }
47
- parser_source_lines[i - 2] += <<~CPP.split("\n").map { |x| x == "" ? x : x.to_s }.join("\n")
48
-
49
- class ParserProxyExt : public Object {
50
- public:
51
- ParserProxyExt(string file) {
52
- ifstream stream;
53
- stream.open(file);
54
- input = new ANTLRInputStream(stream);
55
- lexer = new ExpressLexer(input);
56
- tokens = new CommonTokenStream(lexer);
57
- parser = new ExpressParser(tokens);
58
- stream.close();
59
- };
60
-
61
- ~ParserProxyExt() {
62
- delete parser;
63
- delete tokens;
64
- delete lexer;
65
- delete input;
66
- }
67
-
68
- Object syntax() {
69
- auto ctx = parser -> syntax();
70
-
71
- SyntaxContextProxy proxy((ExpressParser::SyntaxContext*) ctx);
72
- return detail::To_Ruby<SyntaxContextProxy>().convert(proxy);
73
- }
74
-
75
- Array getTokens() {
76
- Array a;
77
- for (auto token : tokens -> getTokens()) {
78
- a.push(new TokenProxy(token));
79
- }
80
- return a;
81
- }
82
-
83
- Object visit(VisitorProxy* visitor) {
84
- auto result = visitor -> visit(parser -> syntax());
85
-
86
- lexer -> reset();
87
- parser -> reset();
88
-
89
- try {
90
- return std::any_cast<Object>(result);
91
- } catch(std::bad_cast) {
92
- return Qnil;
93
- }
94
- }
95
-
96
- private:
97
- ANTLRInputStream* input;
98
- ExpressLexer* lexer;
99
- CommonTokenStream* tokens;
100
- ExpressParser* parser;
101
- };
102
-
103
-
104
- CPP
105
- end
106
-
107
- def create_class_api(parser_source_lines)
108
- i = parser_source_lines.index { |x| x == " .define_method(\"visit\", &ParserProxy::visit, Return().keepAlive());" }
109
- parser_source_lines[i] += <<~CPP.split("\n").map { |x| x == "" ? x : " #{x}" }.join("\n")
110
-
111
-
112
- rb_cTokenExt = define_class_under<TokenProxy>(rb_mExpressParser, "TokenExt")
113
- .define_method("text", &TokenProxy::getText)
114
- .define_method("channel", &TokenProxy::getChannel)
115
- .define_method("token_index", &TokenProxy::getTokenIndex);
116
-
117
- rb_cParserExt = define_class_under<ParserProxyExt>(rb_mExpressParser, "ParserExt")
118
- .define_constructor(Constructor<ParserProxyExt, string>())
119
- .define_method("syntax", &ParserProxyExt::syntax, Return().keepAlive())
120
- .define_method("tokens", &ParserProxyExt::getTokens)
121
- .define_method("visit", &ParserProxyExt::visit, Return().keepAlive());
122
-
123
- CPP
124
- end
125
-
126
- def generate_extended_parser
127
- # Generate extended parser that provide Ruby access to token stream
128
- parser_source_file = File.join("ext", "express-parser", "express_parser.cpp")
129
- parser_source_lines = File.read(parser_source_file).split("\n")
130
- create_class_declarations(parser_source_lines)
131
- create_tp_class_definition(parser_source_lines)
132
- create_pp_class_definition(parser_source_lines)
133
- create_class_api(parser_source_lines)
134
- File.write(parser_source_file, "#{parser_source_lines.join("\n")}\n")
135
- end
136
-
137
- desc "Generate parser (Usage: 'rake generate <grammar_file>')"
138
- task "generate" do
139
- grammar_file = ARGV[1]
140
- if grammar_file.nil?
141
- grammar_file = File.expand_path(File.join("..", "ext", "express-grammar", "Express.g4"), __dir__)
142
- end
143
-
144
- puts "Generating parser from '#{grammar_file}'"
145
- # ANTLR does weird things if the grammar file isn't in the current working directory
146
- temp_grammar_file = File.join(FileUtils.pwd, File.basename(grammar_file))
147
- FileUtils.cp(grammar_file, temp_grammar_file)
148
-
149
- # generate parser
150
- generator = Antlr4Native::Generator.new(
151
- grammar_files: [File.basename(temp_grammar_file)],
152
- output_dir: "ext",
153
- parser_root_method: "syntax",
154
- )
155
- generator.generate
156
-
157
- puts "Generating extended parser"
158
- generate_extended_parser
159
- # cleanup
160
- FileUtils.rm(temp_grammar_file)
161
- end
@@ -1,368 +0,0 @@
1
- require "rbconfig"
2
- require "shellwords"
3
-
4
- WINDOWS_PLATFORM_REGEX = /mingw|mswin/.freeze
5
- LINUX_PLATFORM_REGEX = /linux/.freeze
6
- DARWIN_PLATFORM_REGEX = /darwin/.freeze
7
- GLIBC_MIN_VERSION = "2.17".freeze
8
-
9
- CrossRuby = Struct.new(:version, :host) do
10
- def dll_staging_path
11
- "tmp/#{platform}/stage/lib/expressir/express/#{minor_ver}/express_parser.#{dll_ext}"
12
- end
13
-
14
- def windows?
15
- !!(platform =~ WINDOWS_PLATFORM_REGEX)
16
- end
17
-
18
- def linux?
19
- !!(platform =~ LINUX_PLATFORM_REGEX)
20
- end
21
-
22
- def darwin?
23
- !!(platform =~ DARWIN_PLATFORM_REGEX)
24
- end
25
-
26
- def ver
27
- @ver ||= version[/\A[^-]+/]
28
- end
29
-
30
- def minor_ver
31
- @minor_ver ||= ver[/\A\d\.\d(?=\.)/]
32
- end
33
-
34
- def minor_ver_digi
35
- @minor_ver_digi = minor_ver.delete(".").to_i
36
- end
37
-
38
- def ucrt?
39
- minor_ver_digi >= 31
40
- end
41
-
42
- def api_ver_suffix
43
- case minor_ver
44
- when nil
45
- raise "CrossRuby.api_ver_suffix: unsupported version: #{ver}"
46
- else
47
- minor_ver.delete(".") << "0"
48
- end
49
- end
50
-
51
- # rubocop:disable Metrics/MethodLength
52
- # rubocop:disable Metrics/CyclomaticComplexity
53
- def platform
54
- @platform ||=
55
- case host
56
- when /\Ax86_64.*mingw32/
57
- if ucrt?
58
- "x64-mingw-ucrt"
59
- else
60
- "x64-mingw32"
61
- end
62
- when /\Ax86_64.*linux/
63
- "x86_64-linux"
64
- when /\A(arm64|aarch64).*linux/
65
- "aarch64-linux"
66
- when /\Ax86_64-darwin/
67
- "x86_64-darwin"
68
- when /\Aarm64-darwin/
69
- "arm64-darwin"
70
- else
71
- raise "CrossRuby.platform: unsupported host: #{host}"
72
- end
73
- end
74
-
75
- def tool(name)
76
- (@binutils_prefix ||=
77
- case platform
78
- when /x64-mingw(32|-ucrt)/
79
- "x86_64-w64-mingw32-"
80
- when /(x86_64|aarch64)-linux/
81
- # We do believe that we are on Linux and can use native tools
82
- ""
83
- when /x86_64.*darwin/
84
- "x86_64-apple-darwin-"
85
- when /a.*64.*darwin/
86
- "aarch64-apple-darwin-"
87
- else
88
- raise "CrossRuby.tool: unmatched platform: #{platform}"
89
- end) + name
90
- end
91
-
92
- def target_file_format
93
- case platform
94
- when /64-mingw(32|-ucrt)/
95
- "pei-x86-64"
96
- when "x86_64-linux"
97
- "elf64-x86-64"
98
- when "aarch64-linux"
99
- "elf64-little"
100
- when "x86_64-darwin"
101
- "Mach-O 64-bit x86-64"
102
- when "arm64-darwin"
103
- "Mach-O arm64"
104
- else
105
- raise "CrossRuby.target_file_format: unmatched platform: #{platform}"
106
- end
107
- end
108
- # rubocop:enable Metrics/MethodLength
109
- # rubocop:enable Metrics/CyclomaticComplexity
110
-
111
- def dll_ext
112
- darwin? ? "bundle" : "so"
113
- end
114
-
115
- def verify_format(dump, dll)
116
- format_match = (/file format #{Regexp.quote(target_file_format)}\s/ === dump)
117
- format_error = "Unexpected file format for '#{dll}', '#{target_file_format}' required"
118
- raise format_error unless format_match
119
- end
120
-
121
- def verify_entry_windows(dump, dll)
122
- unless /Table.*\sInit_express_parser\s/mi === dump
123
- raise "Export function Init_express_parser not in dll #{dll}"
124
- end
125
- end
126
-
127
- def verify_entry_linux(dll)
128
- nm = `#{["env", "LANG=C", tool("nm"), "-D", dll].shelljoin}`
129
- unless nm.include?(" T Init_express_parser")
130
- raise "Export function Init_express_parser not in dll #{dll}"
131
- end
132
- end
133
-
134
- def verify_entry_darwin(dll)
135
- nm = `#{["env", "LANG=C", tool("nm"), "-g", dll].shelljoin}`
136
- unless / T _?Init_express_parser/.match?(nm)
137
- raise "Export function Init_express_parser not in dll #{dll}"
138
- end
139
- end
140
-
141
- def verify_entry(dump, dll)
142
- case platform
143
- when WINDOWS_PLATFORM_REGEX
144
- verify_entry_windows(dump, dll)
145
- when LINUX_PLATFORM_REGEX
146
- verify_entry_linux(dll)
147
- when DARWIN_PLATFORM_REGEX
148
- verify_entry_darwin(dll)
149
- else
150
- raise "CrossRuby.verify_entry: unmatched platform: #{platform}"
151
- end
152
- end
153
-
154
- # rubocop:disable Metrics/MethodLength
155
- def allowed_dlls_ucrt
156
- ["kernel32.dll",
157
- "api-ms-win-crt-convert-l1-1-0.dll",
158
- "api-ms-win-crt-environment-l1-1-0.dll",
159
- "api-ms-win-crt-heap-l1-1-0.dll",
160
- "api-ms-win-crt-locale-l1-1-0.dll",
161
- "api-ms-win-crt-private-l1-1-0.dll",
162
- "api-ms-win-crt-runtime-l1-1-0.dll",
163
- "api-ms-win-crt-stdio-l1-1-0.dll",
164
- "api-ms-win-crt-string-l1-1-0.dll",
165
- "api-ms-win-crt-time-l1-1-0.dll",
166
- "api-ms-win-crt-filesystem-l1-1-0.dll",
167
- "api-ms-win-crt-math-l1-1-0.dll",
168
- "libwinpthread-1.dll",
169
- "x64-ucrt-ruby#{api_ver_suffix}.dll"]
170
- end
171
- # rubocop:enable Metrics/MethodLength
172
-
173
- def allowed_dlls_mingw
174
- [
175
- "kernel32.dll",
176
- "msvcrt.dll",
177
- "libwinpthread-1.dll",
178
- "x64-msvcrt-ruby#{api_ver_suffix}.dll",
179
- ]
180
- end
181
-
182
- def allowed_dlls_windows
183
- if ucrt?
184
- allowed_dlls_ucrt
185
- else
186
- allowed_dlls_mingw
187
- end
188
- end
189
-
190
- def allowed_dlls_linux
191
- suffix = (platform == "x86_64-linux" ? "x86-64" : "aarch64")
192
- [
193
- "ld-linux-#{suffix}.so",
194
- "libc.so",
195
- "libm.so",
196
- "libstdc++.so",
197
- "libgcc_s.so",
198
- "libpthread.so",
199
- ]
200
- end
201
-
202
- def allowed_dlls_darwin
203
- [
204
- "/usr/lib/libSystem.B.dylib",
205
- "/usr/lib/libc++.1.dylib",
206
- ]
207
- end
208
-
209
- def allowed_dlls
210
- case platform
211
- when WINDOWS_PLATFORM_REGEX
212
- allowed_dlls_windows
213
- when LINUX_PLATFORM_REGEX
214
- allowed_dlls_linux
215
- when DARWIN_PLATFORM_REGEX
216
- allowed_dlls_darwin
217
- else
218
- raise "CrossRuby.allowed_dlls: unmatched platform: #{platform}"
219
- end
220
- end
221
-
222
- def actual_dlls_linux(dump)
223
- dump.scan(/NEEDED\s+(.*)/).map(&:first).uniq
224
- end
225
-
226
- def actual_dlls_windows(dump)
227
- dump.scan(/DLL Name: (.*)$/).map { |x| x.first.downcase }.uniq
228
- end
229
-
230
- def actual_dlls_darwin(dll)
231
- ldd = `#{[tool("otool"), "-L", dll].shelljoin}`
232
- ldd.scan(/^\t([^ ]+) /).map(&:first).uniq
233
- end
234
-
235
- def actual_dlls(dump, dll)
236
- case platform
237
- when DARWIN_PLATFORM_REGEX
238
- actual_dlls_darwin(dll)
239
- when LINUX_PLATFORM_REGEX
240
- actual_dlls_linux(dump)
241
- when WINDOWS_PLATFORM_REGEX
242
- actual_dlls_windows(dump)
243
- else
244
- raise "CrossRuby.actual_dlls: unmatched platform: #{platform}"
245
- end
246
- end
247
-
248
- def verify_imports(dump, dll)
249
- l = actual_dlls(dump, dll)
250
- libs = allowed_dlls
251
- l.delete_if { |ln| libs.any? { |lib| ln.include?(lib) } }
252
- unless l.empty?
253
- raise "Unexpected references in '#{dll}' : #{l}"
254
- end
255
- end
256
-
257
- def lib_ref_versions(data)
258
- # Build a hash of library versions like {"LIBUDEV"=>"183", "GLIBC"=>"2.17"}
259
- data.each.with_object({}) do |(lib, ver), h|
260
- if !h[lib] || ver.split(".").map(&:to_i).pack("C*") > h[lib].split(".").map(&:to_i).pack("C*")
261
- h[lib] = ver
262
- end
263
- end
264
- end
265
-
266
- def verify_glibc_version(dump, dll)
267
- ref_versions_data = dump.scan(/0x[\da-f]+ 0x[\da-f]+ \d+ (\w+)_([\d.]+)$/i)
268
- ref_ver = lib_ref_versions(ref_versions_data)
269
-
270
- unless ref_ver["GLIBC"].delete(".").to_i <= GLIBC_MIN_VERSION.delete(".").to_i
271
- raise "Unexpected GLIBC version #{ref_ver['GLIBC']} for #{dll}, #{GLIBC_MIN_VERSION} or lower is expected"
272
- end
273
- end
274
- end
275
-
276
- CROSS_RUBIES = File.read(".cross_rubies").split("\n").filter_map do |line|
277
- case line
278
- when /\A([^#]+):([^#]+)/
279
- CrossRuby.new($1, $2)
280
- end
281
- end
282
-
283
- ENV["RUBY_CC_VERSION"] = CROSS_RUBIES.map(&:ver).uniq.join(":")
284
-
285
- require "rake_compiler_dock"
286
-
287
- def verify_dll(dll, cross_ruby)
288
- dump = `#{["env", "LANG=C", cross_ruby.tool("objdump"), "-p", dll].shelljoin}`
289
- cross_ruby.verify_format(dump, dll)
290
- cross_ruby.verify_entry(dump, dll)
291
- cross_ruby.verify_imports(dump, dll)
292
- # Not sure if it is required, probably not
293
- # I am keeping related code as a reference for future advances
294
- # cross_ruby.verify_glibc_version(dump, dll) if cross_ruby.linux?
295
-
296
- puts "#{dll}: passed shared library sanity checks"
297
- end
298
-
299
- CROSS_RUBIES.each do |cross_ruby|
300
- unless Rake::Task.task_defined?(cross_ruby.dll_staging_path)
301
- task cross_ruby.dll_staging_path do |t|
302
- verify_dll t.name, cross_ruby
303
- end
304
- end
305
- end
306
-
307
- def gem_builder(plat)
308
- # use Task#invoke because the pkg/*gem task is defined at runtime
309
- Rake::Task["native:#{plat}"].invoke
310
- Rake::Task["pkg/#{GEMSPEC.full_name}-#{Gem::Platform.new(plat)}.gem"].invoke
311
- end
312
-
313
- REDHAT_PREREQ = "sudo yum install -y git".freeze
314
- UBUNTU_PREREQ = "sudo apt-get update -y && sudo apt-get install -y automake autoconf libtool build-essential".freeze
315
-
316
- def pre_req(plat)
317
- case plat
318
- when /\linux/
319
- "if [[ $(awk -F= '/^NAME/{print $2}' /etc/os-release) == '\"Ubuntu\"' ]]; then #{UBUNTU_PREREQ}; else #{REDHAT_PREREQ}; fi"
320
- else
321
- UBUNTU_PREREQ.to_s
322
- end
323
- end
324
-
325
- namespace "gem" do
326
- CROSS_RUBIES.find_all { |cr| cr.windows? || cr.linux? || cr.darwin? }.map(&:platform).uniq.each do |plat|
327
- desc "build native gem for #{plat} platform"
328
- task plat do
329
- RakeCompilerDock.sh <<~RCD, platform: plat
330
- #{pre_req(plat)} &&
331
- gem install bundler --no-document &&
332
- bundle &&
333
- bundle exec rake gem:#{plat}:builder MAKE="nice make -j`nproc`"
334
- RCD
335
- end
336
-
337
- namespace plat do
338
- desc "build native gem for #{plat} platform (guest container)"
339
- task "builder" do
340
- gem_builder(plat)
341
- end
342
- end
343
- end
344
-
345
- desc "build native gems for windows"
346
- multitask "windows" => CROSS_RUBIES.find_all(&:windows?).map(&:platform).uniq
347
-
348
- desc "build native gems for linux"
349
- multitask "linux" => CROSS_RUBIES.find_all(&:linux?).map(&:platform).uniq
350
-
351
- desc "build native gems for darwin"
352
- multitask "darwin" => CROSS_RUBIES.find_all(&:darwin?).map(&:platform).uniq
353
- end
354
-
355
- require "rake/extensiontask"
356
-
357
- Rake::ExtensionTask.new("express_parser", GEMSPEC) do |ext|
358
- ext.ext_dir = "ext/express-parser"
359
- ext.lib_dir = File.join(*["lib", "expressir", "express", ENV.fetch("FAT_DIR", nil)].compact)
360
- ext.config_options << ENV.fetch("EXTOPTS", nil)
361
- ext.cross_compile = true
362
- ext.cross_platform = CROSS_RUBIES.map(&:platform).uniq
363
- ext.cross_config_options << "--enable-cross-build"
364
- ext.cross_compiling do |spec|
365
- spec.files.reject! { |path| File.fnmatch?("ext/*", path) }
366
- spec.dependencies.reject! { |dep| dep.name == "rice" }
367
- end
368
- end
@@ -1,27 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "Expressir" do
4
- describe "version" do
5
- it "has a version number" do |example|
6
- print "\n[#{example.description}] "
7
- expect(Expressir::VERSION).not_to be nil
8
-
9
- # Validate Object Space
10
- GC.start
11
- GC.verify_compaction_references
12
- GC.verify_internal_consistency
13
- end
14
-
15
- it "displays the current verison" do |example|
16
- print "\n[#{example.description}] "
17
- command = %w(version)
18
- output = capture_stdout { Expressir::Cli.start(command) }
19
- expect(output).to include("Version #{Expressir::VERSION}")
20
-
21
- # Validate Object Space
22
- GC.start
23
- GC.verify_compaction_references
24
- GC.verify_internal_consistency
25
- end
26
- end
27
- end