expressir 0.2.27-x86-mingw32 → 1.0.0-x86-mingw32

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 (90) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +3 -3
  3. data/.gitignore +2 -2
  4. data/demo.rb +5 -5
  5. data/exe/format +8 -8
  6. data/exe/format-test +11 -11
  7. data/expressir.gemspec +0 -1
  8. data/lib/expressir.rb +0 -1
  9. data/lib/expressir/cli.rb +0 -6
  10. data/lib/expressir/{express_exp → express}/2.4/express_parser.so +0 -0
  11. data/lib/expressir/{express_exp → express}/2.5/express_parser.so +0 -0
  12. data/lib/expressir/{express_exp → express}/2.6/express_parser.so +0 -0
  13. data/lib/expressir/{express_exp → express}/2.7/express_parser.so +0 -0
  14. data/lib/expressir/{express_exp → express}/3.0/express_parser.so +0 -0
  15. data/lib/expressir/{express_exp → express}/cache.rb +3 -6
  16. data/lib/expressir/{express_exp → express}/formatter.rb +72 -66
  17. data/lib/expressir/{express_exp → express}/hyperlink_formatter.rb +1 -1
  18. data/lib/expressir/{express_exp → express}/model_visitor.rb +1 -1
  19. data/lib/expressir/{express_exp → express}/parser.rb +3 -3
  20. data/lib/expressir/{express_exp → express}/resolve_references_model_visitor.rb +2 -2
  21. data/lib/expressir/{express_exp → express}/schema_head_formatter.rb +1 -1
  22. data/lib/expressir/{express_exp → express}/visitor.rb +21 -25
  23. data/lib/expressir/model.rb +2 -2
  24. data/lib/expressir/model/entity.rb +6 -6
  25. data/lib/expressir/model/model_element.rb +1 -1
  26. data/lib/expressir/model/rule.rb +3 -3
  27. data/lib/expressir/model/type.rb +6 -6
  28. data/lib/expressir/model/types/enumeration.rb +2 -4
  29. data/lib/expressir/model/types/select.rb +2 -4
  30. data/lib/expressir/model/{unique.rb → unique_rule.rb} +1 -1
  31. data/lib/expressir/model/{where.rb → where_rule.rb} +1 -1
  32. data/lib/expressir/version.rb +1 -1
  33. data/rakelib/cross-ruby.rake +1 -1
  34. data/spec/expressir/{express_exp → express}/cache_spec.rb +9 -9
  35. data/spec/expressir/express/formatter_spec.rb +127 -0
  36. data/spec/expressir/{express_exp → express}/parser_spec.rb +23 -23
  37. data/spec/expressir/model/model_element_spec.rb +45 -45
  38. data/{original/examples → spec}/syntax/multiple.exp +0 -0
  39. data/{original/examples → spec}/syntax/multiple.yaml +4 -4
  40. data/{original/examples → spec}/syntax/multiple_formatted.exp +0 -0
  41. data/{original/examples → spec}/syntax/multiple_hyperlink_formatted.exp +0 -0
  42. data/{original/examples → spec}/syntax/multiple_schema_head_hyperlink_formatted.exp +0 -0
  43. data/{original/examples → spec}/syntax/remark.exp +0 -0
  44. data/{original/examples → spec}/syntax/remark.yaml +13 -13
  45. data/{original/examples → spec}/syntax/remark_formatted.exp +0 -0
  46. data/{original/examples → spec}/syntax/single.exp +0 -0
  47. data/{original/examples → spec}/syntax/single.yaml +1 -1
  48. data/{original/examples → spec}/syntax/single_formatted.exp +0 -0
  49. data/{original/examples → spec}/syntax/single_formatted.yaml +1 -1
  50. data/{original/examples → spec}/syntax/syntax.exp +10 -10
  51. data/{original/examples → spec}/syntax/syntax.yaml +106 -106
  52. data/{original/examples → spec}/syntax/syntax_formatted.exp +10 -10
  53. data/{original/examples → spec}/syntax/syntax_hyperlink_formatted.exp +10 -10
  54. data/{original/examples → spec}/syntax/syntax_schema_head_formatted.exp +0 -0
  55. metadata +37 -85
  56. data/lib/expressir/express.rb +0 -11
  57. data/lib/expressir/express/aggregate_dimension.rb +0 -38
  58. data/lib/expressir/express/attribute.rb +0 -15
  59. data/lib/expressir/express/comment.rb +0 -7
  60. data/lib/expressir/express/defined_type.rb +0 -36
  61. data/lib/expressir/express/derived.rb +0 -65
  62. data/lib/expressir/express/derived_aggregate.rb +0 -43
  63. data/lib/expressir/express/entity.rb +0 -137
  64. data/lib/expressir/express/explicit.rb +0 -70
  65. data/lib/expressir/express/explicit_aggregate.rb +0 -46
  66. data/lib/expressir/express/explicit_or_derived.rb +0 -16
  67. data/lib/expressir/express/global_rule.rb +0 -44
  68. data/lib/expressir/express/interface_specification.rb +0 -51
  69. data/lib/expressir/express/interfaced_item.rb +0 -38
  70. data/lib/expressir/express/inverse.rb +0 -46
  71. data/lib/expressir/express/inverse_aggregate.rb +0 -37
  72. data/lib/expressir/express/model_element.rb +0 -7
  73. data/lib/expressir/express/named_type.rb +0 -19
  74. data/lib/expressir/express/remark.rb +0 -8
  75. data/lib/expressir/express/repository.rb +0 -306
  76. data/lib/expressir/express/schema_definition.rb +0 -96
  77. data/lib/expressir/express/subtype_constraint.rb +0 -14
  78. data/lib/expressir/express/type.rb +0 -26
  79. data/lib/expressir/express/type_aggregate.rb +0 -42
  80. data/lib/expressir/express/type_enum.rb +0 -29
  81. data/lib/expressir/express/type_parser.rb +0 -45
  82. data/lib/expressir/express/type_select.rb +0 -82
  83. data/lib/expressir/express/unique_rule.rb +0 -35
  84. data/lib/expressir/express/where_rule.rb +0 -32
  85. data/lib/expressir/express_parser.rb +0 -30
  86. data/lib/expressir/parser.rb +0 -6
  87. data/lib/expressir/parser/owl_parser.rb +0 -8
  88. data/spec/acceptance/express_to_owl_spec.rb +0 -18
  89. data/spec/expressir/express/repository_spec.rb +0 -25
  90. data/spec/expressir/express_exp/formatter_spec.rb +0 -127
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 87e46046901c95e321f9da5763ad736c9638f9923f17fd3e1b4f72f9f0d56ba1
4
- data.tar.gz: 6b2499c91a14af68f79ac709dcfa84b17a02697038440547d24a68494ff642ef
3
+ metadata.gz: 84e02857a08c830d2a37eb62823db7798bd5e52bfb990508694ef7e63284413a
4
+ data.tar.gz: d9ec87bbdd174c685463f8b507d00f1ae2ea0ff2f72cce87cea509b1914045d8
5
5
  SHA512:
6
- metadata.gz: df706d606d4249d280f7e01e4378ffb3db1e5c7821797122cf5b87f2b51ee7d30e40013f11db20b4614a863f9ab7b3419e9725a4f7fe5fb67bda3d090290b103
7
- data.tar.gz: 72e1364e5f377477f31d9ced76020ff811a19f8d0a94dc6fa5f7a7a65eeeb3c782c134624c17f5a59f20da1b9662f10843210d1483f62558ab26156902ed3c6f
6
+ metadata.gz: 7d37662b35953c9b0712b2947cf1550fbd4e3d9179bcd27fb54171e309dd48d8530cb939e765755eeb63959886ddf2030e71e27b5cac5b9f16e1f68a5ec42bee
7
+ data.tar.gz: b22d68cc8c259786a3f36c261ee4a5d3d8991d7c43649f1c703de43910ee70a2bd41cfb81763a642ffa0f53b9cad21eaeb9c21c2b63ca52dcba364b358b9db6e
@@ -42,10 +42,10 @@ jobs:
42
42
 
43
43
  - uses: actions/cache@v2
44
44
  with:
45
- path: lib/expressir/express_exp/express_parser.*
46
- key: v3-${{ runner.os }}-${{ matrix.ruby }}-${{ hashFiles('ext/express-parser/extconf.rb', 'ext/express-parser/antlrgen/**', 'ext/express-parser/express_parser.cpp', '.git/modules/ext/express-parser/antlr4-upstream/HEAD') }}
45
+ path: lib/expressir/express/express_parser.*
46
+ key: v4-${{ runner.os }}-${{ matrix.ruby }}-${{ hashFiles('ext/express-parser/extconf.rb', 'ext/express-parser/antlrgen/**', 'ext/express-parser/express_parser.cpp', '.git/modules/ext/express-parser/antlr4-upstream/HEAD') }}
47
47
 
48
- - if: hashFiles('lib/expressir/express_exp/express_parser.*') == ''
48
+ - if: hashFiles('lib/expressir/express/express_parser.*') == ''
49
49
  run: bundle exec rake compile
50
50
 
51
51
  - run: bundle exec rake
data/.gitignore CHANGED
@@ -8,8 +8,8 @@
8
8
  /tmp/
9
9
  /Gemfile.lock
10
10
  /.idea
11
- /lib/expressir/express_exp/express_parser.bundle
12
- /original/examples/syntax/*-pretty.exp
11
+ /lib/expressir/express/express_parser.bundle
12
+ /spec/syntax/*-pretty.exp
13
13
 
14
14
  # rspec failure tracking
15
15
  .rspec_status
data/demo.rb CHANGED
@@ -1,18 +1,18 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'expressir'
4
- require 'expressir/express_exp/parser'
4
+ require 'expressir/express/parser'
5
5
 
6
6
  # This file is from:
7
7
  # https://github.com/metanorma/annotated-express/blob/master/data/resources/action_schema/action_schema.exp
8
8
  file = 'action_schema.exp'
9
9
 
10
- # repo = Expressir::ExpressExp::Parser.from_exp(file)
10
+ # repo = Expressir::Express::Parser.from_exp(file)
11
11
  # schema = repo.schemas.find{|schema| schema.id == "support_resource_schema"}
12
12
 
13
- repo = Expressir::ExpressExp::Parser.from_exp(file)
13
+ repo = Expressir::Express::Parser.from_exp(file)
14
14
  schema = repo.schemas.find{|schema| schema.id == "action_schema"}
15
15
  entity = schema.entities.find{|entity| entity.id == "action_directive_relationship"}
16
- where = entity.where.find{|where| where.id == "WR1"}
16
+ where_rule = entity.where_rules.find{|where_rule| where_rule.id == "WR1"}
17
17
 
18
- puts where.inspect
18
+ puts where_rule.inspect
data/exe/format CHANGED
@@ -1,17 +1,17 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require "yaml"
4
- require "expressir/express_exp/parser"
5
- require "expressir/express_exp/formatter"
6
- require "expressir/express_exp/schema_head_formatter"
7
- require "expressir/express_exp/hyperlink_formatter"
4
+ require "expressir/express/parser"
5
+ require "expressir/express/formatter"
6
+ require "expressir/express/schema_head_formatter"
7
+ require "expressir/express/hyperlink_formatter"
8
8
 
9
9
  exp_files = ARGV
10
10
 
11
- repository = Expressir::ExpressExp::Parser.from_files(exp_files)
12
- formatter = Class.new(Expressir::ExpressExp::Formatter) do
13
- include Expressir::ExpressExp::SchemaHeadFormatter
14
- include Expressir::ExpressExp::HyperlinkFormatter
11
+ repository = Expressir::Express::Parser.from_files(exp_files)
12
+ formatter = Class.new(Expressir::Express::Formatter) do
13
+ include Expressir::Express::SchemaHeadFormatter
14
+ include Expressir::Express::HyperlinkFormatter
15
15
  end
16
16
  result = repository.to_hash(formatter: formatter, skip_empty: true)
17
17
 
data/exe/format-test CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  require "yaml"
4
4
  require "tempfile"
5
- require "expressir/express_exp/parser"
6
- require "expressir/express_exp/formatter"
7
- require "expressir/express_exp/schema_head_formatter"
8
- require "expressir/express_exp/hyperlink_formatter"
9
- require "expressir/express_exp/cache"
5
+ require "expressir/express/parser"
6
+ require "expressir/express/formatter"
7
+ require "expressir/express/schema_head_formatter"
8
+ require "expressir/express/hyperlink_formatter"
9
+ require "expressir/express/cache"
10
10
 
11
11
  exp_files = [
12
12
  # basic test
@@ -53,17 +53,17 @@ exp_files = [
53
53
  ]
54
54
 
55
55
  start = Time.now
56
- repository = Expressir::ExpressExp::Parser.from_files(exp_files)
56
+ repository = Expressir::Express::Parser.from_files(exp_files)
57
57
  puts "Parser.from_files time: #{(Time.now - start).round(2)}s"
58
58
 
59
59
  temp_file = Tempfile.new
60
60
  begin
61
61
  start = Time.now
62
- Expressir::ExpressExp::Cache.to_file(temp_file, repository)
62
+ Expressir::Express::Cache.to_file(temp_file, repository)
63
63
  puts "Cache.to_file time: #{(Time.now - start).round(2)}s"
64
64
 
65
65
  start = Time.now
66
- repository = Expressir::ExpressExp::Cache.from_file(temp_file)
66
+ repository = Expressir::Express::Cache.from_file(temp_file)
67
67
  puts "Cache.from_file time: #{(Time.now - start).round(2)}s"
68
68
  ensure
69
69
  temp_file.close
@@ -71,9 +71,9 @@ ensure
71
71
  end
72
72
 
73
73
  start = Time.now
74
- formatter = Class.new(Expressir::ExpressExp::Formatter) do
75
- include Expressir::ExpressExp::SchemaHeadFormatter
76
- include Expressir::ExpressExp::HyperlinkFormatter
74
+ formatter = Class.new(Expressir::Express::Formatter) do
75
+ include Expressir::Express::SchemaHeadFormatter
76
+ include Expressir::Express::HyperlinkFormatter
77
77
  end
78
78
  result = repository.to_hash(formatter: formatter, skip_empty: true)
79
79
  puts "Repository.to_hash time: #{(Time.now - start).round(2)}s"
data/expressir.gemspec CHANGED
@@ -30,7 +30,6 @@ Gem::Specification.new do |spec|
30
30
 
31
31
  spec.extensions = File.join(*%w(ext express-parser extconf.rb))
32
32
 
33
- spec.add_runtime_dependency "nokogiri", "~> 1.10"
34
33
  spec.add_runtime_dependency "thor", "~> 1.0"
35
34
  spec.add_runtime_dependency "rice", "~> 3"
36
35
  spec.add_development_dependency "antlr4-native", "~> 1.1.0"
data/lib/expressir.rb CHANGED
@@ -2,7 +2,6 @@ require "expressir/version"
2
2
 
3
3
  require "expressir/cli"
4
4
  require "expressir/config"
5
- require "expressir/express"
6
5
 
7
6
  module Expressir
8
7
  class Error < StandardError; end
data/lib/expressir/cli.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  require "thor"
2
2
  require "expressir/cli/ui"
3
- require "expressir/express_parser"
4
3
 
5
4
  module Expressir
6
5
  module Cli
@@ -17,11 +16,6 @@ module Expressir
17
16
  def version
18
17
  Cli.ui.say("Version #{Expressir::VERSION}")
19
18
  end
20
-
21
- desc "express-to-owl FILE", "Express to OWL conversion"
22
- def express_to_owl(file)
23
- Cli.ui.say(ExpressParser.to_owl(file))
24
- end
25
19
  end
26
20
  end
27
21
  end
@@ -3,7 +3,7 @@ require 'zlib'
3
3
  require 'expressir/model'
4
4
 
5
5
  module Expressir
6
- module ExpressExp
6
+ module Express
7
7
  class Cache
8
8
  def self.to_file(file, content, options = {})
9
9
  root_path = options[:root_path]
@@ -16,7 +16,7 @@ module Expressir
16
16
  content: content
17
17
  })
18
18
 
19
- hash = cache.to_hash(root_path: root_path, skip_empty: true)
19
+ hash = cache.to_hash(root_path: root_path)
20
20
  yaml = YAML.dump(hash)
21
21
  yaml_compressed = Zlib::Deflate.deflate(yaml)
22
22
 
@@ -35,14 +35,11 @@ module Expressir
35
35
  cache = Model::ModelElement.from_hash(hash, root_path: root_path)
36
36
 
37
37
  if cache.version != version
38
- raise CacheLoadError.new("Cache version mismatch, cache version is #{cache.version}, Expressir version is #{version}")
38
+ raise Error.new("Cache version mismatch, cache version is #{cache.version}, Expressir version is #{version}")
39
39
  end
40
40
 
41
41
  cache.content
42
42
  end
43
43
  end
44
-
45
- class CacheLoadError < StandardError
46
- end
47
44
  end
48
45
  end
@@ -1,7 +1,7 @@
1
1
  require 'expressir/model'
2
2
 
3
3
  module Expressir
4
- module ExpressExp
4
+ module Express
5
5
  class Formatter
6
6
  INDENT_CHAR = ' '
7
7
  INDENT_WIDTH = 2
@@ -68,12 +68,12 @@ module Expressir
68
68
  format_subtype_constraint(node)
69
69
  elsif node.is_a? Model::Type
70
70
  format_type(node)
71
- elsif node.is_a? Model::Unique
72
- format_unique(node)
71
+ elsif node.is_a? Model::UniqueRule
72
+ format_unique_rule(node)
73
73
  elsif node.is_a? Model::Variable
74
74
  format_variable(node)
75
- elsif node.is_a? Model::Where
76
- format_where(node)
75
+ elsif node.is_a? Model::WhereRule
76
+ format_where_rule(node)
77
77
  elsif node.is_a? Model::Expressions::AggregateInitializer
78
78
  format_expressions_aggregate_initializer(node)
79
79
  elsif node.is_a? Model::Expressions::AggregateItem
@@ -316,16 +316,16 @@ module Expressir
316
316
  indent(inverse_attributes.map{|x| format(x)}.join("\n")),
317
317
  ]
318
318
  end,
319
- *if node.unique.length > 0
319
+ *if node.unique_rules.length > 0
320
320
  [
321
321
  'UNIQUE',
322
- indent(node.unique.map{|x| format(x)}.join("\n"))
322
+ indent(node.unique_rules.map{|x| format(x)}.join("\n"))
323
323
  ]
324
324
  end,
325
- *if node.where.length > 0
325
+ *if node.where_rules.length > 0
326
326
  [
327
327
  'WHERE',
328
- indent(node.where.map{|x| format(x)}.join("\n")),
328
+ indent(node.where_rules.map{|x| format(x)}.join("\n")),
329
329
  ]
330
330
  end,
331
331
  [
@@ -576,10 +576,10 @@ module Expressir
576
576
  *if node.statements.length > 0
577
577
  indent(node.statements.map{|x| format(x)}.join("\n"))
578
578
  end,
579
- *if node.where.length > 0
579
+ *if node.where_rules.length > 0
580
580
  [
581
581
  'WHERE',
582
- indent(node.where.map{|x| format(x)}.join("\n"))
582
+ indent(node.where_rules.map{|x| format(x)}.join("\n"))
583
583
  ]
584
584
  end,
585
585
  [
@@ -720,13 +720,13 @@ module Expressir
720
720
  ' ',
721
721
  '=',
722
722
  ' ',
723
- format(node.type),
723
+ format(node.underlying_type),
724
724
  ';',
725
725
  ].join(''),
726
- *if node.where.length > 0
726
+ *if node.where_rules.length > 0
727
727
  [
728
728
  'WHERE',
729
- indent(node.where.map{|x| format(x)}.join("\n"))
729
+ indent(node.where_rules.map{|x| format(x)}.join("\n"))
730
730
  ]
731
731
  end,
732
732
  [
@@ -736,7 +736,7 @@ module Expressir
736
736
  ].join("\n")
737
737
  end
738
738
 
739
- def format_unique(node)
739
+ def format_unique_rule(node)
740
740
  [
741
741
  *if node.id
742
742
  [
@@ -769,7 +769,7 @@ module Expressir
769
769
  ].join('')
770
770
  end
771
771
 
772
- def format_where(node)
772
+ def format_where_rule(node)
773
773
  [
774
774
  *if node.id
775
775
  [
@@ -1299,38 +1299,41 @@ module Expressir
1299
1299
  ].join('')
1300
1300
  end,
1301
1301
  'ENUMERATION',
1302
- *if node.items.length > 0
1303
- item_indent = INDENT_CHAR * '('.length
1304
- [
1305
- ' ',
1306
- 'OF',
1307
- "\n",
1308
- indent([
1309
- '(',
1310
- node.items.map{|x| format(x)}.join(",\n#{item_indent}"),
1311
- ')'
1312
- ].join(''))
1313
- ].join('')
1314
- end,
1315
- *if node.extension_type
1302
+ *if node.based_on
1316
1303
  [
1317
1304
  ' ',
1318
1305
  'BASED_ON',
1319
1306
  ' ',
1320
- format(node.extension_type)
1307
+ format(node.based_on),
1308
+ *if node.items.length > 0
1309
+ item_indent = INDENT_CHAR * '('.length
1310
+ [
1311
+ ' ',
1312
+ 'WITH',
1313
+ "\n",
1314
+ indent([
1315
+ '(',
1316
+ node.items.map{|x| format(x)}.join(",\n#{item_indent}"),
1317
+ ')'
1318
+ ].join(''))
1319
+ ].join('')
1320
+ end
1321
1321
  ].join('')
1322
- end,
1323
- *if node.extension_items.length > 0
1324
- item_indent = INDENT_CHAR * '('.length
1322
+ else
1325
1323
  [
1326
- ' ',
1327
- 'WITH',
1328
- "\n",
1329
- indent([
1330
- '(',
1331
- node.extension_items.map{|x| format(x)}.join(",\n#{item_indent}"),
1332
- ')'
1333
- ].join(''))
1324
+ *if node.items.length > 0
1325
+ item_indent = INDENT_CHAR * '('.length
1326
+ [
1327
+ ' ',
1328
+ 'OF',
1329
+ "\n",
1330
+ indent([
1331
+ '(',
1332
+ node.items.map{|x| format(x)}.join(",\n#{item_indent}"),
1333
+ ')'
1334
+ ].join(''))
1335
+ ].join('')
1336
+ end
1334
1337
  ].join('')
1335
1338
  end
1336
1339
  ].join('')
@@ -1427,36 +1430,39 @@ module Expressir
1427
1430
  ].join('')
1428
1431
  end,
1429
1432
  'SELECT',
1430
- *if node.items.length > 0
1431
- item_indent = INDENT_CHAR * '('.length
1432
- [
1433
- "\n",
1434
- indent([
1435
- '(',
1436
- node.items.map{|x| format(x)}.join(",\n#{item_indent}"),
1437
- ')'
1438
- ].join(''))
1439
- ].join('')
1440
- end,
1441
- *if node.extension_type
1433
+ *if node.based_on
1442
1434
  [
1443
1435
  ' ',
1444
1436
  'BASED_ON',
1445
1437
  ' ',
1446
- format(node.extension_type)
1438
+ format(node.based_on),
1439
+ *if node.items.length > 0
1440
+ item_indent = INDENT_CHAR * '('.length
1441
+ [
1442
+ ' ',
1443
+ 'WITH',
1444
+ "\n",
1445
+ indent([
1446
+ '(',
1447
+ node.items.map{|x| format(x)}.join(",\n#{item_indent}"),
1448
+ ')'
1449
+ ].join(''))
1450
+ ].join('')
1451
+ end
1447
1452
  ].join('')
1448
- end,
1449
- *if node.extension_items.length > 0
1450
- item_indent = INDENT_CHAR * '('.length
1453
+ else
1451
1454
  [
1452
- ' ',
1453
- 'WITH',
1454
- "\n",
1455
- indent([
1456
- '(',
1457
- node.extension_items.map{|x| format(x)}.join(",\n#{item_indent}"),
1458
- ')'
1459
- ].join(''))
1455
+ *if node.items.length > 0
1456
+ item_indent = INDENT_CHAR * '('.length
1457
+ [
1458
+ "\n",
1459
+ indent([
1460
+ '(',
1461
+ node.items.map{|x| format(x)}.join(",\n#{item_indent}"),
1462
+ ')'
1463
+ ].join(''))
1464
+ ].join('')
1465
+ end
1460
1466
  ].join('')
1461
1467
  end
1462
1468
  ].join('')