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
@@ -96,8 +96,5 @@ module Expressir
96
96
  end
97
97
  end
98
98
  end
99
-
100
- # For backward compatibility
101
- CacheVersionMismatchError = Error::CacheVersionMismatchError
102
99
  end
103
100
  end
@@ -1,25 +1,15 @@
1
- require_relative "formatters/remark_item_formatter"
2
- require_relative "formatters/remark_formatter"
3
- require_relative "formatters/literals_formatter"
4
- require_relative "formatters/references_formatter"
5
- require_relative "formatters/supertype_expressions_formatter"
6
- require_relative "formatters/statements_formatter"
7
- require_relative "formatters/expressions_formatter"
8
- require_relative "formatters/data_types_formatter"
9
- require_relative "formatters/declarations_formatter"
10
-
11
1
  module Expressir
12
2
  module Express
13
3
  class Formatter
14
- include RemarkItemFormatter
15
- include RemarkFormatter
16
- include LiteralsFormatter
17
- include ReferencesFormatter
18
- include SupertypeExpressionsFormatter
19
- include StatementsFormatter
20
- include ExpressionsFormatter
21
- include DataTypesFormatter
22
- include DeclarationsFormatter
4
+ include Formatters::RemarkItemFormatter
5
+ include Formatters::RemarkFormatter
6
+ include Formatters::LiteralsFormatter
7
+ include Formatters::ReferencesFormatter
8
+ include Formatters::SupertypeExpressionsFormatter
9
+ include Formatters::StatementsFormatter
10
+ include Formatters::ExpressionsFormatter
11
+ include Formatters::DataTypesFormatter
12
+ include Formatters::DeclarationsFormatter
23
13
 
24
14
  INDENT_CHAR = " ".freeze
25
15
  INDENT_WIDTH = 2
@@ -79,6 +69,8 @@ module Expressir
79
69
  case node
80
70
  when Model::Repository
81
71
  format_repository(node)
72
+ when Model::ExpFile
73
+ format_exp_file(node)
82
74
  when Model::Declarations::Attribute
83
75
  format_declarations_attribute(node)
84
76
  when Model::Declarations::Constant
@@ -232,6 +224,12 @@ module Expressir
232
224
  private
233
225
 
234
226
  def format_repository(node)
227
+ # Format each file in the repository
228
+ result = node.files&.map { |f| format(f) }&.join("\n\n")
229
+ result ? "#{result}\n" : ""
230
+ end
231
+
232
+ def format_exp_file(node)
235
233
  result = node.schemas&.map { |x| format(x) }&.join("\n\n")
236
234
  result ? "#{result}\n" : ""
237
235
  end
@@ -1,316 +1,318 @@
1
1
  module Expressir
2
2
  module Express
3
- module DataTypesFormatter
4
- private
3
+ module Formatters
4
+ module DataTypesFormatter
5
+ private
5
6
 
6
- def format_data_types_aggregate(_node)
7
- "AGGREGATE"
8
- end
9
-
10
- def format_data_types_array(node)
11
- [
12
- "ARRAY",
13
- *if node.bound1 && node.bound2
14
- [
15
- " ",
16
- "[",
17
- format(node.bound1),
18
- ":",
19
- format(node.bound2),
20
- "]",
21
- ].join
22
- end,
23
- " ",
24
- "OF",
25
- *if node.optional
26
- [
27
- " ",
28
- "OPTIONAL",
29
- ].join
30
- end,
31
- *if node.unique
32
- [
33
- " ",
34
- "UNIQUE",
35
- ].join
36
- end,
37
- " ",
38
- format(node.base_type),
39
- ].join
40
- end
7
+ def format_data_types_aggregate(_node)
8
+ "AGGREGATE"
9
+ end
41
10
 
42
- def format_data_types_bag(node)
43
- [
44
- "BAG",
45
- *if node.bound1 && node.bound2
46
- [
47
- " ",
48
- "[",
49
- format(node.bound1),
50
- ":",
51
- format(node.bound2),
52
- "]",
53
- ].join
54
- end,
55
- " ",
56
- "OF",
57
- " ",
58
- format(node.base_type),
59
- ].join
60
- end
11
+ def format_data_types_array(node)
12
+ [
13
+ "ARRAY",
14
+ *if node.bound1 && node.bound2
15
+ [
16
+ " ",
17
+ "[",
18
+ format(node.bound1),
19
+ ":",
20
+ format(node.bound2),
21
+ "]",
22
+ ].join
23
+ end,
24
+ " ",
25
+ "OF",
26
+ *if node.optional
27
+ [
28
+ " ",
29
+ "OPTIONAL",
30
+ ].join
31
+ end,
32
+ *if node.unique
33
+ [
34
+ " ",
35
+ "UNIQUE",
36
+ ].join
37
+ end,
38
+ " ",
39
+ format(node.base_type),
40
+ ].join
41
+ end
61
42
 
62
- def format_data_types_binary(node)
63
- [
64
- "BINARY",
65
- *if node.width
66
- [
67
- " ",
68
- "(",
69
- format(node.width),
70
- ")",
71
- ].join
72
- end,
73
- *if node.fixed
74
- [
75
- " ",
76
- "FIXED",
77
- ].join
78
- end,
79
- ].join
80
- end
43
+ def format_data_types_bag(node)
44
+ [
45
+ "BAG",
46
+ *if node.bound1 && node.bound2
47
+ [
48
+ " ",
49
+ "[",
50
+ format(node.bound1),
51
+ ":",
52
+ format(node.bound2),
53
+ "]",
54
+ ].join
55
+ end,
56
+ " ",
57
+ "OF",
58
+ " ",
59
+ format(node.base_type),
60
+ ].join
61
+ end
81
62
 
82
- def format_data_types_boolean(_node)
83
- "BOOLEAN"
84
- end
63
+ def format_data_types_binary(node)
64
+ [
65
+ "BINARY",
66
+ *if node.width
67
+ [
68
+ " ",
69
+ "(",
70
+ format(node.width),
71
+ ")",
72
+ ].join
73
+ end,
74
+ *if node.fixed
75
+ [
76
+ " ",
77
+ "FIXED",
78
+ ].join
79
+ end,
80
+ ].join
81
+ end
85
82
 
86
- def format_data_types_enumeration(node)
87
- indent_char = self.class.const_get(:INDENT_CHAR)
88
- [
89
- *if node.extensible
90
- [
91
- "EXTENSIBLE",
92
- " ",
93
- ].join
94
- end,
95
- "ENUMERATION",
96
- *if node.based_on
97
- [
98
- " ",
99
- "BASED_ON",
100
- " ",
101
- format(node.based_on),
102
- *if node.items&.length&.positive?
103
- item_indent = indent_char * "(".length
104
- [
105
- " ",
106
- "WITH",
107
- "\n",
108
- indent([
109
- "(",
110
- node.items.map do |x|
111
- format(x)
112
- end.join(",\n#{item_indent}"),
113
- ")",
114
- ].join),
115
- ].join
116
- end,
117
- ].join
118
- else
119
- [
120
- *if node.items&.length&.positive?
121
- item_indent = indent_char * "(".length
122
- [
123
- " ",
124
- "OF",
125
- "\n",
126
- indent([
127
- "(",
128
- node.items.map do |x|
129
- format(x)
130
- end.join(",\n#{item_indent}"),
131
- ")",
132
- ].join),
133
- ].join
134
- end,
135
- ].join
136
- end,
137
- ].join
138
- end
83
+ def format_data_types_boolean(_node)
84
+ "BOOLEAN"
85
+ end
139
86
 
140
- def format_data_types_enumeration_item(node)
141
- node.id
142
- end
87
+ def format_data_types_enumeration(node)
88
+ indent_char = self.class.const_get(:INDENT_CHAR)
89
+ [
90
+ *if node.extensible
91
+ [
92
+ "EXTENSIBLE",
93
+ " ",
94
+ ].join
95
+ end,
96
+ "ENUMERATION",
97
+ *if node.based_on
98
+ [
99
+ " ",
100
+ "BASED_ON",
101
+ " ",
102
+ format(node.based_on),
103
+ *if node.items&.length&.positive?
104
+ item_indent = indent_char * "(".length
105
+ [
106
+ " ",
107
+ "WITH",
108
+ "\n",
109
+ indent([
110
+ "(",
111
+ node.items.map do |x|
112
+ format(x)
113
+ end.join(",\n#{item_indent}"),
114
+ ")",
115
+ ].join),
116
+ ].join
117
+ end,
118
+ ].join
119
+ else
120
+ [
121
+ *if node.items&.length&.positive?
122
+ item_indent = indent_char * "(".length
123
+ [
124
+ " ",
125
+ "OF",
126
+ "\n",
127
+ indent([
128
+ "(",
129
+ node.items.map do |x|
130
+ format(x)
131
+ end.join(",\n#{item_indent}"),
132
+ ")",
133
+ ].join),
134
+ ].join
135
+ end,
136
+ ].join
137
+ end,
138
+ ].join
139
+ end
143
140
 
144
- def format_data_types_generic_entity(node)
145
- [
146
- "GENERIC_ENTITY",
147
- *if node.id
148
- [
149
- ":",
150
- node.id,
151
- ]
152
- end,
153
- ].join
154
- end
141
+ def format_data_types_enumeration_item(node)
142
+ node.id
143
+ end
155
144
 
156
- def format_data_types_generic(node)
157
- [
158
- "GENERIC",
159
- *if node.id
160
- [
161
- ":",
162
- node.id,
163
- ]
164
- end,
165
- ].join
166
- end
145
+ def format_data_types_generic_entity(node)
146
+ [
147
+ "GENERIC_ENTITY",
148
+ *if node.id
149
+ [
150
+ ":",
151
+ node.id,
152
+ ]
153
+ end,
154
+ ].join
155
+ end
167
156
 
168
- def format_data_types_integer(_node)
169
- "INTEGER"
170
- end
157
+ def format_data_types_generic(node)
158
+ [
159
+ "GENERIC",
160
+ *if node.id
161
+ [
162
+ ":",
163
+ node.id,
164
+ ]
165
+ end,
166
+ ].join
167
+ end
171
168
 
172
- def format_data_types_list(node)
173
- [
174
- "LIST",
175
- *if node.bound1 && node.bound2
176
- [
177
- " ",
178
- "[",
179
- format(node.bound1),
180
- ":",
181
- format(node.bound2),
182
- "]",
183
- ].join
184
- end,
185
- " ",
186
- "OF",
187
- *if node.unique
188
- [
189
- " ",
190
- "UNIQUE",
191
- ].join
192
- end,
193
- " ",
194
- format(node.base_type),
195
- ].join
196
- end
169
+ def format_data_types_integer(_node)
170
+ "INTEGER"
171
+ end
197
172
 
198
- def format_data_types_logical(_node)
199
- "LOGICAL"
200
- end
173
+ def format_data_types_list(node)
174
+ [
175
+ "LIST",
176
+ *if node.bound1 && node.bound2
177
+ [
178
+ " ",
179
+ "[",
180
+ format(node.bound1),
181
+ ":",
182
+ format(node.bound2),
183
+ "]",
184
+ ].join
185
+ end,
186
+ " ",
187
+ "OF",
188
+ *if node.unique
189
+ [
190
+ " ",
191
+ "UNIQUE",
192
+ ].join
193
+ end,
194
+ " ",
195
+ format(node.base_type),
196
+ ].join
197
+ end
201
198
 
202
- def format_data_types_number(_node)
203
- "NUMBER"
204
- end
199
+ def format_data_types_logical(_node)
200
+ "LOGICAL"
201
+ end
205
202
 
206
- def format_data_types_real(node)
207
- [
208
- "REAL",
209
- *if node.precision
210
- [
211
- " ",
212
- "(",
213
- format(node.precision),
214
- ")",
215
- ].join
216
- end,
217
- ].join
218
- end
203
+ def format_data_types_number(_node)
204
+ "NUMBER"
205
+ end
219
206
 
220
- def format_data_types_select(node)
221
- indent_char = self.class.const_get(:INDENT_CHAR)
222
- node.items ||= []
223
- [
224
- *if node.extensible
225
- [
226
- "EXTENSIBLE",
227
- " ",
228
- ].join
229
- end,
230
- *if node.generic_entity
231
- [
232
- "GENERIC_ENTITY",
233
- " ",
234
- ].join
235
- end,
236
- "SELECT",
237
- *if node.based_on
238
- [
239
- " ",
240
- "BASED_ON",
241
- " ",
242
- format(node.based_on),
243
- *if node.items&.length&.positive?
244
- item_indent = indent_char * "(".length
245
- [
246
- " ",
247
- "WITH",
248
- "\n",
249
- indent([
250
- "(",
251
- node.items.map do |x|
252
- format(x)
253
- end.join(",\n#{item_indent}"),
254
- ")",
255
- ].join),
256
- ].join
257
- end,
258
- ].join
259
- else
260
- indent_char = self.class.const_get(:INDENT_CHAR)
261
- item_indent = indent_char * "(".length
262
- [
263
- "\n",
264
- indent([
207
+ def format_data_types_real(node)
208
+ [
209
+ "REAL",
210
+ *if node.precision
211
+ [
212
+ " ",
265
213
  "(",
266
- node.items.map do |x|
267
- format(x)
268
- end.join(",\n#{item_indent}"),
214
+ format(node.precision),
269
215
  ")",
270
- ].join),
271
- ].join
272
- end,
273
- ].join
274
- end
216
+ ].join
217
+ end,
218
+ ].join
219
+ end
275
220
 
276
- def format_data_types_set(node)
277
- [
278
- "SET",
279
- *if node.bound1 && node.bound2
280
- [
281
- " ",
282
- "[",
283
- format(node.bound1),
284
- ":",
285
- format(node.bound2),
286
- "]",
287
- ].join
288
- end,
289
- " ",
290
- "OF",
291
- " ",
292
- format(node.base_type),
293
- ].join
294
- end
221
+ def format_data_types_select(node)
222
+ indent_char = self.class.const_get(:INDENT_CHAR)
223
+ node.items ||= []
224
+ [
225
+ *if node.extensible
226
+ [
227
+ "EXTENSIBLE",
228
+ " ",
229
+ ].join
230
+ end,
231
+ *if node.generic_entity
232
+ [
233
+ "GENERIC_ENTITY",
234
+ " ",
235
+ ].join
236
+ end,
237
+ "SELECT",
238
+ *if node.based_on
239
+ [
240
+ " ",
241
+ "BASED_ON",
242
+ " ",
243
+ format(node.based_on),
244
+ *if node.items&.length&.positive?
245
+ item_indent = indent_char * "(".length
246
+ [
247
+ " ",
248
+ "WITH",
249
+ "\n",
250
+ indent([
251
+ "(",
252
+ node.items.map do |x|
253
+ format(x)
254
+ end.join(",\n#{item_indent}"),
255
+ ")",
256
+ ].join),
257
+ ].join
258
+ end,
259
+ ].join
260
+ else
261
+ indent_char = self.class.const_get(:INDENT_CHAR)
262
+ item_indent = indent_char * "(".length
263
+ [
264
+ "\n",
265
+ indent([
266
+ "(",
267
+ node.items.map do |x|
268
+ format(x)
269
+ end.join(",\n#{item_indent}"),
270
+ ")",
271
+ ].join),
272
+ ].join
273
+ end,
274
+ ].join
275
+ end
276
+
277
+ def format_data_types_set(node)
278
+ [
279
+ "SET",
280
+ *if node.bound1 && node.bound2
281
+ [
282
+ " ",
283
+ "[",
284
+ format(node.bound1),
285
+ ":",
286
+ format(node.bound2),
287
+ "]",
288
+ ].join
289
+ end,
290
+ " ",
291
+ "OF",
292
+ " ",
293
+ format(node.base_type),
294
+ ].join
295
+ end
295
296
 
296
- def format_data_types_string(node)
297
- [
298
- "STRING",
299
- *if node.width
300
- [
301
- " ",
302
- "(",
303
- format(node.width),
304
- ")",
305
- ].join
306
- end,
307
- *if node.fixed
308
- [
309
- " ",
310
- "FIXED",
311
- ].join
312
- end,
313
- ].join
297
+ def format_data_types_string(node)
298
+ [
299
+ "STRING",
300
+ *if node.width
301
+ [
302
+ " ",
303
+ "(",
304
+ format(node.width),
305
+ ")",
306
+ ].join
307
+ end,
308
+ *if node.fixed
309
+ [
310
+ " ",
311
+ "FIXED",
312
+ ].join
313
+ end,
314
+ ].join
315
+ end
314
316
  end
315
317
  end
316
318
  end