expressir 2.2.0 → 2.3.0

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 (192) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -1
  3. data/.rubocop_todo.yml +254 -77
  4. data/Gemfile +4 -1
  5. data/README.adoc +63 -26
  6. data/benchmark/srl_benchmark.rb +386 -0
  7. data/benchmark/srl_native_benchmark.rb +142 -0
  8. data/benchmark/srl_ruby_benchmark.rb +130 -0
  9. data/expressir.gemspec +4 -2
  10. data/lib/expressir/benchmark.rb +1 -1
  11. data/lib/expressir/changes/item_change.rb +0 -1
  12. data/lib/expressir/changes/mapping_change.rb +0 -1
  13. data/lib/expressir/changes/schema_change.rb +0 -2
  14. data/lib/expressir/changes/version_change.rb +0 -3
  15. data/lib/expressir/changes.rb +5 -6
  16. data/lib/expressir/cli.rb +10 -24
  17. data/lib/expressir/commands/base.rb +2 -9
  18. data/lib/expressir/commands/changes.rb +0 -2
  19. data/lib/expressir/commands/changes_import_eengine.rb +0 -3
  20. data/lib/expressir/commands/changes_validate.rb +0 -2
  21. data/lib/expressir/commands/format.rb +5 -3
  22. data/lib/expressir/commands/manifest.rb +0 -7
  23. data/lib/expressir/commands/package.rb +93 -101
  24. data/lib/expressir/commands/validate.rb +0 -2
  25. data/lib/expressir/commands/validate_ascii.rb +2 -4
  26. data/lib/expressir/commands/validate_load.rb +8 -5
  27. data/lib/expressir/commands.rb +20 -0
  28. data/lib/expressir/config.rb +0 -2
  29. data/lib/expressir/coverage.rb +11 -4
  30. data/lib/expressir/eengine/arm_compare_report.rb +1 -4
  31. data/lib/expressir/eengine/changes_section.rb +1 -3
  32. data/lib/expressir/eengine/compare_report.rb +1 -13
  33. data/lib/expressir/eengine/mim_compare_report.rb +1 -4
  34. data/lib/expressir/eengine/modified_object.rb +1 -2
  35. data/lib/expressir/eengine.rb +9 -0
  36. data/lib/expressir/errors.rb +113 -0
  37. data/lib/expressir/express/builder.rb +22 -7
  38. data/lib/expressir/express/builder_registry.rb +411 -0
  39. data/lib/expressir/express/builders/attribute_decl_builder.rb +0 -6
  40. data/lib/expressir/express/builders/built_in_builder.rb +1 -16
  41. data/lib/expressir/express/builders/constant_builder.rb +4 -19
  42. data/lib/expressir/express/builders/declaration_builder.rb +0 -4
  43. data/lib/expressir/express/builders/derive_clause_builder.rb +0 -2
  44. data/lib/expressir/express/builders/derived_attr_builder.rb +0 -2
  45. data/lib/expressir/express/builders/domain_rule_builder.rb +0 -2
  46. data/lib/expressir/express/builders/entity_decl_builder.rb +7 -13
  47. data/lib/expressir/express/builders/explicit_attr_builder.rb +5 -8
  48. data/lib/expressir/express/builders/expression_builder.rb +31 -67
  49. data/lib/expressir/express/builders/function_decl_builder.rb +20 -18
  50. data/lib/expressir/express/builders/interface_builder.rb +0 -20
  51. data/lib/expressir/express/builders/inverse_attr_builder.rb +0 -2
  52. data/lib/expressir/express/builders/inverse_attr_type_builder.rb +0 -6
  53. data/lib/expressir/express/builders/inverse_clause_builder.rb +0 -2
  54. data/lib/expressir/express/builders/literal_builder.rb +1 -15
  55. data/lib/expressir/express/builders/procedure_decl_builder.rb +20 -19
  56. data/lib/expressir/express/builders/qualifier_builder.rb +0 -27
  57. data/lib/expressir/express/builders/reference_builder.rb +1 -10
  58. data/lib/expressir/express/builders/rule_decl_builder.rb +21 -19
  59. data/lib/expressir/express/builders/schema_body_decl_builder.rb +0 -4
  60. data/lib/expressir/express/builders/schema_decl_builder.rb +7 -13
  61. data/lib/expressir/express/builders/schema_version_builder.rb +0 -6
  62. data/lib/expressir/express/builders/simple_id_builder.rb +1 -10
  63. data/lib/expressir/express/builders/statement_builder.rb +4 -32
  64. data/lib/expressir/express/builders/subtype_constraint_builder.rb +6 -30
  65. data/lib/expressir/express/builders/syntax_builder.rb +60 -7
  66. data/lib/expressir/express/builders/type_builder.rb +3 -45
  67. data/lib/expressir/express/builders/type_decl_builder.rb +1 -7
  68. data/lib/expressir/express/builders/unique_clause_builder.rb +1 -3
  69. data/lib/expressir/express/builders/unique_rule_builder.rb +0 -2
  70. data/lib/expressir/express/builders/where_clause_builder.rb +1 -3
  71. data/lib/expressir/express/builders.rb +47 -35
  72. data/lib/expressir/express/error.rb +0 -3
  73. data/lib/expressir/express/formatter.rb +17 -19
  74. data/lib/expressir/express/formatters/data_types_formatter.rb +295 -293
  75. data/lib/expressir/express/formatters/declarations_formatter.rb +617 -615
  76. data/lib/expressir/express/formatters/expressions_formatter.rb +146 -144
  77. data/lib/expressir/express/formatters/literals_formatter.rb +35 -33
  78. data/lib/expressir/express/formatters/references_formatter.rb +34 -32
  79. data/lib/expressir/express/formatters/remark_formatter.rb +176 -209
  80. data/lib/expressir/express/formatters/remark_item_formatter.rb +18 -16
  81. data/lib/expressir/express/formatters/statements_formatter.rb +190 -188
  82. data/lib/expressir/express/formatters/supertype_expressions_formatter.rb +41 -39
  83. data/lib/expressir/express/formatters.rb +22 -0
  84. data/lib/expressir/express/parser.rb +40 -41
  85. data/lib/expressir/express/pretty_formatter.rb +68 -47
  86. data/lib/expressir/express/remark_attacher.rb +210 -147
  87. data/lib/expressir/express/streaming_builder.rb +0 -3
  88. data/lib/expressir/express/transformer/remark_handling.rb +1 -2
  89. data/lib/expressir/express.rb +29 -0
  90. data/lib/expressir/manifest/resolver.rb +0 -3
  91. data/lib/expressir/manifest/validator.rb +0 -3
  92. data/lib/expressir/manifest.rb +6 -0
  93. data/lib/expressir/model/cache.rb +1 -1
  94. data/lib/expressir/model/concerns.rb +19 -0
  95. data/lib/expressir/model/data_types/aggregate.rb +1 -1
  96. data/lib/expressir/model/data_types/array.rb +1 -1
  97. data/lib/expressir/model/data_types/bag.rb +1 -1
  98. data/lib/expressir/model/data_types/binary.rb +1 -1
  99. data/lib/expressir/model/data_types/boolean.rb +1 -1
  100. data/lib/expressir/model/data_types/enumeration.rb +1 -1
  101. data/lib/expressir/model/data_types/enumeration_item.rb +1 -1
  102. data/lib/expressir/model/data_types/generic.rb +1 -1
  103. data/lib/expressir/model/data_types/generic_entity.rb +1 -1
  104. data/lib/expressir/model/data_types/integer.rb +1 -1
  105. data/lib/expressir/model/data_types/list.rb +1 -1
  106. data/lib/expressir/model/data_types/logical.rb +1 -1
  107. data/lib/expressir/model/data_types/number.rb +1 -1
  108. data/lib/expressir/model/data_types/real.rb +1 -1
  109. data/lib/expressir/model/data_types/select.rb +1 -1
  110. data/lib/expressir/model/data_types/set.rb +1 -1
  111. data/lib/expressir/model/data_types/string.rb +1 -1
  112. data/lib/expressir/model/data_types.rb +25 -0
  113. data/lib/expressir/model/declarations/attribute.rb +1 -1
  114. data/lib/expressir/model/declarations/constant.rb +1 -1
  115. data/lib/expressir/model/declarations/derived_attribute.rb +1 -1
  116. data/lib/expressir/model/declarations/entity.rb +4 -1
  117. data/lib/expressir/model/declarations/function.rb +3 -1
  118. data/lib/expressir/model/declarations/informal_proposition_rule.rb +2 -1
  119. data/lib/expressir/model/declarations/interface.rb +1 -1
  120. data/lib/expressir/model/declarations/interface_item.rb +1 -1
  121. data/lib/expressir/model/declarations/interfaced_item.rb +1 -1
  122. data/lib/expressir/model/declarations/inverse_attribute.rb +1 -1
  123. data/lib/expressir/model/declarations/parameter.rb +1 -1
  124. data/lib/expressir/model/declarations/procedure.rb +3 -1
  125. data/lib/expressir/model/declarations/remark_item.rb +1 -1
  126. data/lib/expressir/model/declarations/rule.rb +4 -1
  127. data/lib/expressir/model/declarations/schema.rb +2 -1
  128. data/lib/expressir/model/declarations/schema_version.rb +1 -1
  129. data/lib/expressir/model/declarations/schema_version_item.rb +1 -1
  130. data/lib/expressir/model/declarations/subtype_constraint.rb +1 -1
  131. data/lib/expressir/model/declarations/type.rb +4 -1
  132. data/lib/expressir/model/declarations/unique_rule.rb +1 -1
  133. data/lib/expressir/model/declarations/variable.rb +1 -1
  134. data/lib/expressir/model/declarations/where_rule.rb +1 -1
  135. data/lib/expressir/model/declarations.rb +31 -0
  136. data/lib/expressir/model/dependency_resolver.rb +0 -2
  137. data/lib/expressir/model/exp_file.rb +38 -0
  138. data/lib/expressir/model/expressions/aggregate_initializer.rb +1 -1
  139. data/lib/expressir/model/expressions/aggregate_initializer_item.rb +1 -1
  140. data/lib/expressir/model/expressions/binary_expression.rb +1 -1
  141. data/lib/expressir/model/expressions/entity_constructor.rb +1 -1
  142. data/lib/expressir/model/expressions/function_call.rb +1 -1
  143. data/lib/expressir/model/expressions/interval.rb +1 -1
  144. data/lib/expressir/model/expressions/query_expression.rb +1 -1
  145. data/lib/expressir/model/expressions/unary_expression.rb +1 -1
  146. data/lib/expressir/model/expressions.rb +18 -0
  147. data/lib/expressir/model/identifier.rb +5 -1
  148. data/lib/expressir/model/indexes.rb +11 -0
  149. data/lib/expressir/model/literals/binary.rb +1 -1
  150. data/lib/expressir/model/literals/integer.rb +1 -1
  151. data/lib/expressir/model/literals/logical.rb +1 -1
  152. data/lib/expressir/model/literals/real.rb +1 -1
  153. data/lib/expressir/model/literals/string.rb +1 -1
  154. data/lib/expressir/model/literals.rb +13 -0
  155. data/lib/expressir/model/model_element.rb +7 -15
  156. data/lib/expressir/model/references/attribute_reference.rb +1 -1
  157. data/lib/expressir/model/references/group_reference.rb +1 -1
  158. data/lib/expressir/model/references/index_reference.rb +1 -1
  159. data/lib/expressir/model/references/simple_reference.rb +1 -1
  160. data/lib/expressir/model/references.rb +12 -0
  161. data/lib/expressir/model/remark_info.rb +1 -7
  162. data/lib/expressir/model/repository.rb +72 -36
  163. data/lib/expressir/model/repository_validator.rb +0 -2
  164. data/lib/expressir/model/search_engine.rb +6 -30
  165. data/lib/expressir/model/statements/alias.rb +1 -1
  166. data/lib/expressir/model/statements/assignment.rb +1 -1
  167. data/lib/expressir/model/statements/case.rb +1 -1
  168. data/lib/expressir/model/statements/case_action.rb +1 -1
  169. data/lib/expressir/model/statements/compound.rb +1 -1
  170. data/lib/expressir/model/statements/escape.rb +1 -1
  171. data/lib/expressir/model/statements/if.rb +1 -1
  172. data/lib/expressir/model/statements/null.rb +1 -1
  173. data/lib/expressir/model/statements/procedure_call.rb +1 -1
  174. data/lib/expressir/model/statements/repeat.rb +1 -1
  175. data/lib/expressir/model/statements/return.rb +1 -1
  176. data/lib/expressir/model/statements/skip.rb +1 -1
  177. data/lib/expressir/model/statements.rb +20 -0
  178. data/lib/expressir/model/supertype_expressions/binary_supertype_expression.rb +1 -1
  179. data/lib/expressir/model/supertype_expressions/oneof_supertype_expression.rb +1 -1
  180. data/lib/expressir/model/supertype_expressions.rb +12 -0
  181. data/lib/expressir/model.rb +28 -4
  182. data/lib/expressir/package/builder.rb +33 -4
  183. data/lib/expressir/package/metadata.rb +0 -1
  184. data/lib/expressir/package/reader.rb +0 -1
  185. data/lib/expressir/package.rb +8 -0
  186. data/lib/expressir/schema_manifest.rb +5 -6
  187. data/lib/expressir/schema_manifest_entry.rb +3 -4
  188. data/lib/expressir/transformer.rb +7 -0
  189. data/lib/expressir/version.rb +1 -1
  190. data/lib/expressir.rb +23 -173
  191. metadata +64 -9
  192. data/lib/expressir/express/builders/token_builder.rb +0 -15
@@ -1,223 +1,225 @@
1
1
  module Expressir
2
2
  module Express
3
- module StatementsFormatter
4
- private
3
+ module Formatters
4
+ module StatementsFormatter
5
+ private
5
6
 
6
- def format_statements_alias(node)
7
- [
7
+ def format_statements_alias(node)
8
8
  [
9
- "ALIAS",
10
- " ",
11
- node.id,
9
+ [
10
+ "ALIAS",
11
+ " ",
12
+ node.id,
13
+ " ",
14
+ "FOR",
15
+ " ",
16
+ format(node.expression),
17
+ ";",
18
+ ].join,
19
+ *if node.statements&.length&.positive?
20
+ indent(node.statements.map { |x| format(x) }.join("\n"))
21
+ end,
22
+ *format_remarks(node),
23
+ [
24
+ "END_ALIAS",
25
+ ";",
26
+ ].join,
27
+ ].join("\n")
28
+ end
29
+
30
+ def format_statements_assignment(node)
31
+ [
32
+ format(node.ref),
12
33
  " ",
13
- "FOR",
34
+ ":=",
14
35
  " ",
15
36
  format(node.expression),
16
37
  ";",
17
- ].join,
18
- *if node.statements&.length&.positive?
19
- indent(node.statements.map { |x| format(x) }.join("\n"))
20
- end,
21
- *format_remarks(node),
22
- [
23
- "END_ALIAS",
24
- ";",
25
- ].join,
26
- ].join("\n")
27
- end
38
+ ].join
39
+ end
28
40
 
29
- def format_statements_assignment(node)
30
- [
31
- format(node.ref),
32
- " ",
33
- ":=",
34
- " ",
35
- format(node.expression),
36
- ";",
37
- ].join
38
- end
39
-
40
- def format_statements_procedure_call(node)
41
- [
42
- format(node.procedure),
43
- *if node.parameters&.length&.positive?
44
- [
45
- "(",
46
- node.parameters.map { |x| format(x) }.join(", "),
47
- ")",
48
- ].join
49
- end,
50
- ";",
51
- ].join
52
- end
53
-
54
- def format_statements_case(node)
55
- [
41
+ def format_statements_procedure_call(node)
56
42
  [
57
- "CASE",
58
- " ",
59
- format(node.expression),
60
- " ",
61
- "OF",
62
- ].join,
63
- *if node.actions&.length&.positive?
64
- node.actions.map { |x| format(x) }
65
- end,
66
- *if node.otherwise_statement
67
- [
43
+ format(node.procedure),
44
+ *if node.parameters&.length&.positive?
68
45
  [
69
- "OTHERWISE",
70
- " ",
71
- ":",
72
- ].join,
73
- indent(format(node.otherwise_statement)),
74
- ]
75
- end,
76
- [
77
- "END_CASE",
46
+ "(",
47
+ node.parameters.map { |x| format(x) }.join(", "),
48
+ ")",
49
+ ].join
50
+ end,
78
51
  ";",
79
- ].join,
80
- ].join("\n")
81
- end
52
+ ].join
53
+ end
82
54
 
83
- def format_statements_case_action(node)
84
- node.labels ||= []
85
- [
55
+ def format_statements_case(node)
86
56
  [
87
- node.labels.map { |x| format(x) }.join(", "),
88
- " ",
89
- ":",
90
- ].join,
91
- indent(format(node.statement)),
92
- ].join("\n")
93
- end
57
+ [
58
+ "CASE",
59
+ " ",
60
+ format(node.expression),
61
+ " ",
62
+ "OF",
63
+ ].join,
64
+ *if node.actions&.length&.positive?
65
+ node.actions.map { |x| format(x) }
66
+ end,
67
+ *if node.otherwise_statement
68
+ [
69
+ [
70
+ "OTHERWISE",
71
+ " ",
72
+ ":",
73
+ ].join,
74
+ indent(format(node.otherwise_statement)),
75
+ ]
76
+ end,
77
+ [
78
+ "END_CASE",
79
+ ";",
80
+ ].join,
81
+ ].join("\n")
82
+ end
94
83
 
95
- def format_statements_compound(node)
96
- node.statements ||= []
97
- [
98
- "BEGIN",
99
- *if node.statements&.length&.positive?
100
- indent(node.statements.map { |x| format(x) }.join("\n"))
101
- end,
84
+ def format_statements_case_action(node)
85
+ node.labels ||= []
102
86
  [
103
- "END",
104
- ";",
105
- ].join,
106
- ].join("\n")
107
- end
87
+ [
88
+ node.labels.map { |x| format(x) }.join(", "),
89
+ " ",
90
+ ":",
91
+ ].join,
92
+ indent(format(node.statement)),
93
+ ].join("\n")
94
+ end
108
95
 
109
- def format_statements_escape(_node)
110
- [
111
- "ESCAPE",
112
- ";",
113
- ].join
114
- end
115
-
116
- def format_statements_if(node)
117
- [
96
+ def format_statements_compound(node)
97
+ node.statements ||= []
118
98
  [
119
- "IF",
120
- " ",
121
- format(node.expression),
122
- " ",
123
- "THEN",
124
- ].join,
125
- *if node.statements&.length&.positive?
126
- indent(node.statements.map { |x| format(x) }.join("\n"))
127
- end,
128
- *if node.else_statements&.length&.positive?
129
- [
130
- "ELSE",
131
- indent(node.else_statements.map { |x| format(x) }.join("\n")),
132
- ].join("\n")
133
- end,
99
+ "BEGIN",
100
+ *if node.statements&.length&.positive?
101
+ indent(node.statements.map { |x| format(x) }.join("\n"))
102
+ end,
103
+ [
104
+ "END",
105
+ ";",
106
+ ].join,
107
+ ].join("\n")
108
+ end
109
+
110
+ def format_statements_escape(_node)
134
111
  [
135
- "END_IF",
112
+ "ESCAPE",
136
113
  ";",
137
- ].join,
138
- ].join("\n")
139
- end
140
-
141
- def format_statements_null(_node)
142
- ";"
143
- end
114
+ ].join
115
+ end
144
116
 
145
- def format_statements_repeat(node)
146
- node.statements ||= []
147
- [
117
+ def format_statements_if(node)
148
118
  [
149
- "REPEAT",
150
- *if node.id
151
- [
152
- " ",
153
- node.id,
154
- " ",
155
- ":=",
156
- " ",
157
- format(node.bound1),
158
- " ",
159
- "TO",
160
- " ",
161
- format(node.bound2),
162
- *if node.increment
163
- [
164
- " ",
165
- "BY",
166
- " ",
167
- format(node.increment),
168
- ].join
169
- end,
170
- ].join
119
+ [
120
+ "IF",
121
+ " ",
122
+ format(node.expression),
123
+ " ",
124
+ "THEN",
125
+ ].join,
126
+ *if node.statements&.length&.positive?
127
+ indent(node.statements.map { |x| format(x) }.join("\n"))
171
128
  end,
172
- *if node.while_expression
129
+ *if node.else_statements&.length&.positive?
173
130
  [
174
- " ",
175
- "WHILE",
176
- " ",
177
- format(node.while_expression),
178
- ].join
131
+ "ELSE",
132
+ indent(node.else_statements.map { |x| format(x) }.join("\n")),
133
+ ].join("\n")
179
134
  end,
180
- *if node.until_expression
135
+ [
136
+ "END_IF",
137
+ ";",
138
+ ].join,
139
+ ].join("\n")
140
+ end
141
+
142
+ def format_statements_null(_node)
143
+ ";"
144
+ end
145
+
146
+ def format_statements_repeat(node)
147
+ node.statements ||= []
148
+ [
149
+ [
150
+ "REPEAT",
151
+ *if node.id
152
+ [
153
+ " ",
154
+ node.id,
155
+ " ",
156
+ ":=",
157
+ " ",
158
+ format(node.bound1),
159
+ " ",
160
+ "TO",
161
+ " ",
162
+ format(node.bound2),
163
+ *if node.increment
164
+ [
165
+ " ",
166
+ "BY",
167
+ " ",
168
+ format(node.increment),
169
+ ].join
170
+ end,
171
+ ].join
172
+ end,
173
+ *if node.while_expression
174
+ [
175
+ " ",
176
+ "WHILE",
177
+ " ",
178
+ format(node.while_expression),
179
+ ].join
180
+ end,
181
+ *if node.until_expression
182
+ [
183
+ " ",
184
+ "UNTIL",
185
+ " ",
186
+ format(node.until_expression),
187
+ ].join
188
+ end,
189
+ ";",
190
+ ].join,
191
+ *if node.statements&.length&.positive?
192
+ indent(node.statements.map { |x| format(x) }.join("\n"))
193
+ end,
194
+ *format_remarks(node),
195
+ [
196
+ "END_REPEAT",
197
+ ";",
198
+ ].join,
199
+ ].join("\n")
200
+ end
201
+
202
+ def format_statements_return(node)
203
+ [
204
+ "RETURN",
205
+ *if node.expression
181
206
  [
182
207
  " ",
183
- "UNTIL",
184
- " ",
185
- format(node.until_expression),
208
+ "(",
209
+ format(node.expression),
210
+ ")",
186
211
  ].join
187
212
  end,
188
213
  ";",
189
- ].join,
190
- *if node.statements&.length&.positive?
191
- indent(node.statements.map { |x| format(x) }.join("\n"))
192
- end,
193
- *format_remarks(node),
214
+ ].join
215
+ end
216
+
217
+ def format_statements_skip(_node)
194
218
  [
195
- "END_REPEAT",
219
+ "SKIP",
196
220
  ";",
197
- ].join,
198
- ].join("\n")
199
- end
200
-
201
- def format_statements_return(node)
202
- [
203
- "RETURN",
204
- *if node.expression
205
- [
206
- " ",
207
- "(",
208
- format(node.expression),
209
- ")",
210
- ].join
211
- end,
212
- ";",
213
- ].join
214
- end
215
-
216
- def format_statements_skip(_node)
217
- [
218
- "SKIP",
219
- ";",
220
- ].join
221
+ ].join
222
+ end
221
223
  end
222
224
  end
223
225
  end
@@ -1,47 +1,49 @@
1
1
  module Expressir
2
2
  module Express
3
- module SupertypeExpressionsFormatter
4
- private
3
+ module Formatters
4
+ module SupertypeExpressionsFormatter
5
+ private
5
6
 
6
- def format_supertype_expressions_binary_supertype_expression(node)
7
- supertype_precedence = self.class.const_get(:SUPERTYPE_OPERATOR_PRECEDENCE)
8
- op1_higher_precedence = node.operand1.is_a?(Model::SupertypeExpressions::BinarySupertypeExpression) &&
9
- (supertype_precedence[node.operand1.operator] > supertype_precedence[node.operator])
10
- op2_higher_precedence = node.operand2.is_a?(Model::SupertypeExpressions::BinarySupertypeExpression) &&
11
- (supertype_precedence[node.operand2.operator] > supertype_precedence[node.operator])
7
+ def format_supertype_expressions_binary_supertype_expression(node)
8
+ supertype_precedence = self.class.const_get(:SUPERTYPE_OPERATOR_PRECEDENCE)
9
+ op1_higher_precedence = node.operand1.is_a?(Model::SupertypeExpressions::BinarySupertypeExpression) &&
10
+ (supertype_precedence[node.operand1.operator] > supertype_precedence[node.operator])
11
+ op2_higher_precedence = node.operand2.is_a?(Model::SupertypeExpressions::BinarySupertypeExpression) &&
12
+ (supertype_precedence[node.operand2.operator] > supertype_precedence[node.operator])
12
13
 
13
- [
14
- *if op1_higher_precedence
15
- "("
16
- end,
17
- format(node.operand1),
18
- *if op1_higher_precedence
19
- ")"
20
- end,
21
- " ",
22
- case node.operator
23
- when Model::SupertypeExpressions::BinarySupertypeExpression::AND then "AND"
24
- when Model::SupertypeExpressions::BinarySupertypeExpression::ANDOR then "ANDOR"
25
- end,
26
- " ",
27
- *if op2_higher_precedence
28
- "("
29
- end,
30
- format(node.operand2),
31
- *if op2_higher_precedence
32
- ")"
33
- end,
34
- ].join
35
- end
14
+ [
15
+ *if op1_higher_precedence
16
+ "("
17
+ end,
18
+ format(node.operand1),
19
+ *if op1_higher_precedence
20
+ ")"
21
+ end,
22
+ " ",
23
+ case node.operator
24
+ when Model::SupertypeExpressions::BinarySupertypeExpression::AND then "AND"
25
+ when Model::SupertypeExpressions::BinarySupertypeExpression::ANDOR then "ANDOR"
26
+ end,
27
+ " ",
28
+ *if op2_higher_precedence
29
+ "("
30
+ end,
31
+ format(node.operand2),
32
+ *if op2_higher_precedence
33
+ ")"
34
+ end,
35
+ ].join
36
+ end
36
37
 
37
- def format_supertype_expressions_oneof_supertype_expression(node)
38
- node.operands ||= []
39
- [
40
- "ONEOF",
41
- "(",
42
- node.operands.map { |x| format(x) }.join(", "),
43
- ")",
44
- ].join
38
+ def format_supertype_expressions_oneof_supertype_expression(node)
39
+ node.operands ||= []
40
+ [
41
+ "ONEOF",
42
+ "(",
43
+ node.operands.map { |x| format(x) }.join(", "),
44
+ ")",
45
+ ].join
46
+ end
45
47
  end
46
48
  end
47
49
  end
@@ -0,0 +1,22 @@
1
+ module Expressir
2
+ module Express
3
+ # Formatter mixin modules
4
+ module Formatters
5
+ autoload :RemarkItemFormatter,
6
+ "#{__dir__}/formatters/remark_item_formatter"
7
+ autoload :RemarkFormatter, "#{__dir__}/formatters/remark_formatter"
8
+ autoload :LiteralsFormatter, "#{__dir__}/formatters/literals_formatter"
9
+ autoload :ReferencesFormatter,
10
+ "#{__dir__}/formatters/references_formatter"
11
+ autoload :SupertypeExpressionsFormatter,
12
+ "#{__dir__}/formatters/supertype_expressions_formatter"
13
+ autoload :StatementsFormatter,
14
+ "#{__dir__}/formatters/statements_formatter"
15
+ autoload :ExpressionsFormatter,
16
+ "#{__dir__}/formatters/expressions_formatter"
17
+ autoload :DataTypesFormatter, "#{__dir__}/formatters/data_types_formatter"
18
+ autoload :DeclarationsFormatter,
19
+ "#{__dir__}/formatters/declarations_formatter"
20
+ end
21
+ end
22
+ end