expressir 2.4.31-arm-linux → 2.4.36-arm-linux

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/conformance.yml +34 -0
  3. data/.gitignore +3 -0
  4. data/Gemfile +1 -1
  5. data/TODO.eengine/00-overview.md +39 -0
  6. data/TODO.eengine/01-resolution-diagnostics.md +30 -0
  7. data/TODO.eengine/02-check-catalog-completion.md +53 -0
  8. data/TODO.eengine/03-entity-computations.md +22 -0
  9. data/TODO.eengine/04-shtolo-rule-audit.md +32 -0
  10. data/TODO.eengine/05-shtolo-longform-flatten.md +12 -0
  11. data/TODO.eengine/06-population-p21.md +34 -0
  12. data/TODO.eengine/07-schema-compare-patch.md +25 -0
  13. data/TODO.eengine/08-official-corpus-gate.md +7 -0
  14. data/TODO.eengine/09-mim-mapping-parser.md +9 -0
  15. data/TODO.parity-ee/00-overview.md +1 -1
  16. data/TODO.sota/00-overview.md +57 -0
  17. data/TODO.sota/01-type-checking.md +115 -0
  18. data/TODO.sota/02-evaluator.md +86 -0
  19. data/TODO.sota/03-conformance.md +53 -0
  20. data/TODO.sota/04-lsp.md +70 -0
  21. data/TODO.sota/05-interop.md +55 -0
  22. data/TODO.sota/06-dialects.md +57 -0
  23. data/TODO.sota/07-reference-artifacts.md +55 -0
  24. data/TODO.suma-improvements/07-part28-xml.md +10 -13
  25. data/docs/_guides/interop/index.adoc +25 -0
  26. data/docs/_guides/interop/json-schema.adoc +88 -0
  27. data/docs/_guides/interop/owl-rdf.adoc +87 -0
  28. data/docs/_guides/reference/checker-notes.adoc +55 -0
  29. data/docs/_guides/reference/checker.adoc +36 -0
  30. data/docs/_guides/reference/evaluator.adoc +40 -0
  31. data/docs/_guides/reference/grammar-crosswalk.adoc +299 -0
  32. data/docs/_guides/reference/index.adoc +22 -0
  33. data/docs/_guides/reference/lsp.adoc +41 -0
  34. data/docs/_guides/reference/p21.adoc +30 -0
  35. data/docs/_guides/reference/shtolo.adoc +36 -0
  36. data/exe/expressir-lsp +6 -0
  37. data/expressir.gemspec +2 -2
  38. data/lib/expressir/3.2/expressir_core.so +0 -0
  39. data/lib/expressir/3.3/expressir_core.so +0 -0
  40. data/lib/expressir/3.4/expressir_core.so +0 -0
  41. data/lib/expressir/4.0/expressir_core.so +0 -0
  42. data/lib/expressir/cli.rb +25 -0
  43. data/lib/expressir/commands/check.rb +3 -1
  44. data/lib/expressir/commands/export_json_schema.rb +29 -0
  45. data/lib/expressir/commands/export_owl.rb +26 -0
  46. data/lib/expressir/commands/smrl_xml_index.rb +25 -0
  47. data/lib/expressir/commands/validate.rb +3 -0
  48. data/lib/expressir/commands.rb +3 -0
  49. data/lib/expressir/conformance/trend.rb +100 -0
  50. data/lib/expressir/conformance.rb +8 -0
  51. data/lib/expressir/eval/environment.rb +83 -0
  52. data/lib/expressir/eval/expression.rb +610 -0
  53. data/lib/expressir/eval/interpreter.rb +316 -0
  54. data/lib/expressir/eval/rules.rb +88 -0
  55. data/lib/expressir/eval/values.rb +74 -0
  56. data/lib/expressir/eval.rb +17 -0
  57. data/lib/expressir/express/builder.rb +17 -5
  58. data/lib/expressir/express/builders/entity_decl_builder.rb +17 -5
  59. data/lib/expressir/express/builders/expression_builder.rb +9 -1
  60. data/lib/expressir/express/checker.rb +970 -5
  61. data/lib/expressir/express/dialect.rb +44 -0
  62. data/lib/expressir/express/formatters/declarations_formatter.rb +21 -14
  63. data/lib/expressir/express/formatters/expressions_formatter.rb +4 -1
  64. data/lib/expressir/express/parser.rb +9 -4
  65. data/lib/expressir/express/pretty_formatter.rb +9 -14
  66. data/lib/expressir/express/schema_compare.rb +194 -0
  67. data/lib/expressir/express/shtolo.rb +194 -63
  68. data/lib/expressir/express.rb +3 -0
  69. data/lib/expressir/interop/json_schema.rb +195 -0
  70. data/lib/expressir/interop/owl.rb +216 -0
  71. data/lib/expressir/interop.rb +13 -0
  72. data/lib/expressir/lsp/document.rb +226 -0
  73. data/lib/expressir/lsp/server.rb +184 -0
  74. data/lib/expressir/lsp/workspace.rb +402 -0
  75. data/lib/expressir/lsp.rb +11 -0
  76. data/lib/expressir/model/declarations/entity.rb +132 -0
  77. data/lib/expressir/model/declarations/schema.rb +37 -6
  78. data/lib/expressir/p21/builder.rb +92 -0
  79. data/lib/expressir/p21/grammar.rb +107 -0
  80. data/lib/expressir/p21/parser.rb +16 -0
  81. data/lib/expressir/p21/population.rb +35 -0
  82. data/lib/expressir/p21/validator.rb +213 -0
  83. data/lib/expressir/p21.rb +17 -0
  84. data/lib/expressir/reference/grammar_crosswalk.rb +122 -0
  85. data/lib/expressir/reference/grammar_crosswalk.yml +800 -0
  86. data/lib/expressir/reference/note_catalog.rb +54 -0
  87. data/lib/expressir/reference.rb +10 -0
  88. data/lib/expressir/version.rb +1 -1
  89. data/lib/expressir.rb +5 -0
  90. data/lib/tasks/conformance.rake +27 -0
  91. data/lib/tasks/reference.rake +25 -0
  92. metadata +68 -4
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Expressir
4
+ module Reference
5
+ # Catalog of Checker note ids, generated from the checker source so
6
+ # the published guide cannot drift from the implementation.
7
+ class NoteCatalog
8
+ CHECKER_PATH = File.expand_path("../express/checker.rb", __dir__)
9
+ NOTE_CALL = /note!\(:([a-z0-9_]+)/
10
+
11
+ class << self
12
+ def checker_path
13
+ CHECKER_PATH
14
+ end
15
+
16
+ def entries
17
+ File.read(CHECKER_PATH).scan(NOTE_CALL).flatten.tally.sort.to_h
18
+ end
19
+
20
+ def ids
21
+ entries.keys
22
+ end
23
+
24
+ def render_adoc
25
+ lines = [
26
+ "= Checker note-id catalog",
27
+ "",
28
+ "// Generated from lib/expressir/express/checker.rb by",
29
+ "// `rake reference:notes`. Do not edit by hand; the reference",
30
+ "// spec fails when this file is stale.",
31
+ "",
32
+ "== Purpose",
33
+ "",
34
+ "Every note id the Checker can raise, with the number of call",
35
+ "sites in the implementation. New checks use `:check_*` ids;",
36
+ "the conformance-derived ids (`:check_expr_*`, `:check_dialect_*`)",
37
+ "cite their clause in the note message.",
38
+ "",
39
+ '[cols="3,1", options="header"]',
40
+ "|===",
41
+ "| Note id | Call sites",
42
+ "",
43
+ *entries.map { |id, count| "| `#{id}` | #{count}" },
44
+ "|===",
45
+ "",
46
+ "The catalog covers #{ids.size} note ids.",
47
+ "",
48
+ ]
49
+ lines.join("\n")
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Expressir
4
+ # Citable reference artifacts generated from the implementation:
5
+ # the grammar cross-walk and the checker note-id catalog.
6
+ module Reference
7
+ autoload :GrammarCrosswalk, "#{__dir__}/reference/grammar_crosswalk"
8
+ autoload :NoteCatalog, "#{__dir__}/reference/note_catalog"
9
+ end
10
+ end
@@ -3,6 +3,6 @@ module Expressir
3
3
  # autoload it (Ruby autoload only works for module/class constants, not
4
4
  # for string constants like `Expressir::VERSION`).
5
5
  module Version
6
- VERSION = "2.4.31".freeze
6
+ VERSION = "2.4.36".freeze
7
7
  end
8
8
  end
data/lib/expressir.rb CHANGED
@@ -30,6 +30,8 @@ module Expressir
30
30
 
31
31
  autoload :Version, "#{__dir__}/expressir/version"
32
32
  autoload :Mapping, "#{__dir__}/expressir/mapping"
33
+ autoload :P21, "#{__dir__}/expressir/p21"
34
+ autoload :Reference, "#{__dir__}/expressir/reference"
33
35
 
34
36
  # Error classes — autoload the same errors.rb file from each name.
35
37
  # The first reference triggers the load; the file defines all 21 classes.
@@ -74,9 +76,12 @@ module Expressir
74
76
  autoload :Model, "#{__dir__}/expressir/model"
75
77
  autoload :Commands, "#{__dir__}/expressir/commands"
76
78
  autoload :Changes, "#{__dir__}/expressir/changes"
79
+ autoload :Conformance, "#{__dir__}/expressir/conformance"
77
80
  autoload :Package, "#{__dir__}/expressir/package"
78
81
  autoload :Manifest, "#{__dir__}/expressir/manifest"
79
82
  autoload :Eengine, "#{__dir__}/expressir/eengine"
83
+ autoload :Interop, "#{__dir__}/expressir/interop"
84
+ autoload :Lsp, "#{__dir__}/expressir/lsp"
80
85
  autoload :SchemaManifest, "#{__dir__}/expressir/schema_manifest"
81
86
  autoload :SchemaManifestEntry, "#{__dir__}/expressir/schema_manifest_entry"
82
87
 
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ desc "Property-based conformance harness over the full corpus " \
4
+ "(parse → format → parse idempotence)"
5
+ task :conformance do
6
+ ENV["EXPRESSIR_CONFORMANCE"] = "1"
7
+ sh "bundle exec rspec spec/expressir/express/formatter_roundtrip_conformance_spec.rb"
8
+ end
9
+
10
+ namespace :conformance do
11
+ desc "Measure parse, diagnostic and idempotence rates over the corpus " \
12
+ "and write a JSON trend artifact"
13
+ task :trend do
14
+ require "expressir"
15
+
16
+ stepmod = ENV["STEPMOD_DIR"] ||
17
+ File.expand_path("~/src/mn/iso-10303-stepmod")
18
+ corpus = File.join(stepmod, "data/resources")
19
+ files = Dir[File.join(corpus, "**/*.exp")]
20
+ .select { |file| File.size(file) < 250_000 }
21
+ output = ENV["CONFORMANCE_TREND_OUT"] || "conformance-trend.json"
22
+ report = Expressir::Conformance::Trend.run(files, output: output)
23
+ puts "wrote #{output} " \
24
+ "(parse #{report['parse_rate']}, idempotence " \
25
+ "#{report['idempotence_rate']}, diagnostics #{report['diagnostic_rate']})"
26
+ end
27
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :reference do
4
+ desc "Regenerate the grammar cross-walk guide"
5
+ task :crosswalk do
6
+ require "expressir"
7
+
8
+ path = Expressir.root_path.join(
9
+ "docs/_guides/reference/grammar-crosswalk.adoc",
10
+ )
11
+ File.write(path, Expressir::Reference::GrammarCrosswalk.render_adoc)
12
+ puts "wrote #{path}"
13
+ end
14
+
15
+ desc "Regenerate the checker note-id catalog"
16
+ task :notes do
17
+ require "expressir"
18
+
19
+ path = Expressir.root_path.join(
20
+ "docs/_guides/reference/checker-notes.adoc",
21
+ )
22
+ File.write(path, Expressir::Reference::NoteCatalog.render_adoc)
23
+ puts "wrote #{path}"
24
+ end
25
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: expressir
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.31
4
+ version: 2.4.36
5
5
  platform: arm-linux
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-10-12 00:00:00.000000000 Z
11
+ date: 2026-10-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: base64
@@ -86,14 +86,14 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 0.8.76
89
+ version: 0.8.114
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 0.8.76
96
+ version: 0.8.114
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: moxml
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -232,12 +232,14 @@ email:
232
232
  - open.source@ribose.com
233
233
  executables:
234
234
  - expressir
235
+ - expressir-lsp
235
236
  extensions: []
236
237
  extra_rdoc_files: []
237
238
  files:
238
239
  - ".cargo/config.toml"
239
240
  - ".github/scripts/test_installed_gem.rb"
240
241
  - ".github/workflows/codeql.yml"
242
+ - ".github/workflows/conformance.yml"
241
243
  - ".github/workflows/docs.yml"
242
244
  - ".github/workflows/links.yml"
243
245
  - ".github/workflows/native-gems.yml"
@@ -287,6 +289,16 @@ files:
287
289
  - TODO.bugs/29-validate-ascii-god-class.md
288
290
  - TODO.bugs/30-unicode-map-extraction.md
289
291
  - TODO.bugs/README.md
292
+ - TODO.eengine/00-overview.md
293
+ - TODO.eengine/01-resolution-diagnostics.md
294
+ - TODO.eengine/02-check-catalog-completion.md
295
+ - TODO.eengine/03-entity-computations.md
296
+ - TODO.eengine/04-shtolo-rule-audit.md
297
+ - TODO.eengine/05-shtolo-longform-flatten.md
298
+ - TODO.eengine/06-population-p21.md
299
+ - TODO.eengine/07-schema-compare-patch.md
300
+ - TODO.eengine/08-official-corpus-gate.md
301
+ - TODO.eengine/09-mim-mapping-parser.md
290
302
  - TODO.max-perf/01-restore-ci-green.md
291
303
  - TODO.max-perf/02-streaming-parse-path.md
292
304
  - TODO.max-perf/03-cli-parallel-opt-in.md
@@ -323,6 +335,14 @@ files:
323
335
  - TODO.parity-ee/19-architecture.md
324
336
  - TODO.parity-ee/parity-matrix.md
325
337
  - TODO.refpath-v2/00-overview.md
338
+ - TODO.sota/00-overview.md
339
+ - TODO.sota/01-type-checking.md
340
+ - TODO.sota/02-evaluator.md
341
+ - TODO.sota/03-conformance.md
342
+ - TODO.sota/04-lsp.md
343
+ - TODO.sota/05-interop.md
344
+ - TODO.sota/06-dialects.md
345
+ - TODO.sota/07-reference-artifacts.md
326
346
  - TODO.suma-improvements/00-overview.md
327
347
  - TODO.suma-improvements/01-prebuilt-platform-gems.md
328
348
  - TODO.suma-improvements/02-suma-e2e.md
@@ -356,6 +376,9 @@ files:
356
376
  - docs/_guides/cli/validate-schemas.adoc
357
377
  - docs/_guides/formatter/formatter-architecture.adoc
358
378
  - docs/_guides/index.adoc
379
+ - docs/_guides/interop/index.adoc
380
+ - docs/_guides/interop/json-schema.adoc
381
+ - docs/_guides/interop/owl-rdf.adoc
359
382
  - docs/_guides/ler/creating-packages.adoc
360
383
  - docs/_guides/ler/index.adoc
361
384
  - docs/_guides/ler/loading-packages.adoc
@@ -372,6 +395,14 @@ files:
372
395
  - docs/_guides/manifests/index.adoc
373
396
  - docs/_guides/manifests/resolving-manifests.adoc
374
397
  - docs/_guides/manifests/validating-manifests.adoc
398
+ - docs/_guides/reference/checker-notes.adoc
399
+ - docs/_guides/reference/checker.adoc
400
+ - docs/_guides/reference/evaluator.adoc
401
+ - docs/_guides/reference/grammar-crosswalk.adoc
402
+ - docs/_guides/reference/index.adoc
403
+ - docs/_guides/reference/lsp.adoc
404
+ - docs/_guides/reference/p21.adoc
405
+ - docs/_guides/reference/shtolo.adoc
375
406
  - docs/_guides/ruby-api/formatting-schemas.adoc
376
407
  - docs/_guides/ruby-api/index.adoc
377
408
  - docs/_guides/ruby-api/parsing-files.adoc
@@ -411,6 +442,7 @@ files:
411
442
  - exe/expressir
412
443
  - exe/expressir-format
413
444
  - exe/expressir-format-test
445
+ - exe/expressir-lsp
414
446
  - expressir.gemspec
415
447
  - lib/expressir.rb
416
448
  - lib/expressir/3.2/expressir_core.so
@@ -435,6 +467,8 @@ files:
435
467
  - lib/expressir/commands/clean.rb
436
468
  - lib/expressir/commands/coverage.rb
437
469
  - lib/expressir/commands/expand.rb
470
+ - lib/expressir/commands/export_json_schema.rb
471
+ - lib/expressir/commands/export_owl.rb
438
472
  - lib/expressir/commands/file_violations.rb
439
473
  - lib/expressir/commands/fix.rb
440
474
  - lib/expressir/commands/flatten.rb
@@ -445,12 +479,15 @@ files:
445
479
  - lib/expressir/commands/non_ascii_violation_collection.rb
446
480
  - lib/expressir/commands/package.rb
447
481
  - lib/expressir/commands/parity_inputs.rb
482
+ - lib/expressir/commands/smrl_xml_index.rb
448
483
  - lib/expressir/commands/validate.rb
449
484
  - lib/expressir/commands/validate_ascii.rb
450
485
  - lib/expressir/commands/validate_load.rb
451
486
  - lib/expressir/commands/version_command.rb
452
487
  - lib/expressir/commands/xsd.rb
453
488
  - lib/expressir/config.rb
489
+ - lib/expressir/conformance.rb
490
+ - lib/expressir/conformance/trend.rb
454
491
  - lib/expressir/coverage.rb
455
492
  - lib/expressir/eengine.rb
456
493
  - lib/expressir/eengine/arm_compare_report.rb
@@ -459,6 +496,12 @@ files:
459
496
  - lib/expressir/eengine/mim_compare_report.rb
460
497
  - lib/expressir/eengine/modified_object.rb
461
498
  - lib/expressir/errors.rb
499
+ - lib/expressir/eval.rb
500
+ - lib/expressir/eval/environment.rb
501
+ - lib/expressir/eval/expression.rb
502
+ - lib/expressir/eval/interpreter.rb
503
+ - lib/expressir/eval/rules.rb
504
+ - lib/expressir/eval/values.rb
462
505
  - lib/expressir/express.rb
463
506
  - lib/expressir/express/adoc_hyperlink_formatter.rb
464
507
  - lib/expressir/express/adoc_source_formatter.rb
@@ -504,6 +547,7 @@ files:
504
547
  - lib/expressir/express/checker.rb
505
548
  - lib/expressir/express/concatenator.rb
506
549
  - lib/expressir/express/core.rb
550
+ - lib/expressir/express/dialect.rb
507
551
  - lib/expressir/express/error.rb
508
552
  - lib/expressir/express/formatter.rb
509
553
  - lib/expressir/express/formatters.rb
@@ -536,6 +580,7 @@ files:
536
580
  - lib/expressir/express/remark_scanner.rb
537
581
  - lib/expressir/express/resolve_references_model_visitor.rb
538
582
  - lib/expressir/express/schema_block_scanner.rb
583
+ - lib/expressir/express/schema_compare.rb
539
584
  - lib/expressir/express/schema_head_formatter.rb
540
585
  - lib/expressir/express/schema_plain_source_formatter.rb
541
586
  - lib/expressir/express/schema_source_formatter.rb
@@ -546,7 +591,14 @@ files:
546
591
  - lib/expressir/express/source_formatter.rb
547
592
  - lib/expressir/express/streaming_builder.rb
548
593
  - lib/expressir/express/xsd.rb
594
+ - lib/expressir/interop.rb
595
+ - lib/expressir/interop/json_schema.rb
596
+ - lib/expressir/interop/owl.rb
549
597
  - lib/expressir/liquid.rb
598
+ - lib/expressir/lsp.rb
599
+ - lib/expressir/lsp/document.rb
600
+ - lib/expressir/lsp/server.rb
601
+ - lib/expressir/lsp/workspace.rb
550
602
  - lib/expressir/manifest.rb
551
603
  - lib/expressir/manifest/resolver.rb
552
604
  - lib/expressir/manifest/validator.rb
@@ -648,13 +700,25 @@ files:
648
700
  - lib/expressir/model/supertype_expressions.rb
649
701
  - lib/expressir/model/supertype_expressions/binary_supertype_expression.rb
650
702
  - lib/expressir/model/supertype_expressions/oneof_supertype_expression.rb
703
+ - lib/expressir/p21.rb
704
+ - lib/expressir/p21/builder.rb
705
+ - lib/expressir/p21/grammar.rb
706
+ - lib/expressir/p21/parser.rb
707
+ - lib/expressir/p21/population.rb
708
+ - lib/expressir/p21/validator.rb
651
709
  - lib/expressir/package.rb
652
710
  - lib/expressir/package/builder.rb
653
711
  - lib/expressir/package/metadata.rb
654
712
  - lib/expressir/package/reader.rb
713
+ - lib/expressir/reference.rb
714
+ - lib/expressir/reference/grammar_crosswalk.rb
715
+ - lib/expressir/reference/grammar_crosswalk.yml
716
+ - lib/expressir/reference/note_catalog.rb
655
717
  - lib/expressir/schema_manifest.rb
656
718
  - lib/expressir/schema_manifest_entry.rb
657
719
  - lib/expressir/version.rb
720
+ - lib/tasks/conformance.rake
721
+ - lib/tasks/reference.rake
658
722
  - lib/tasks/verify_remarks.rake
659
723
  - rakelib/native.rake
660
724
  - rakelib/oracle.rake