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