refract 1.0.0 → 1.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8b42e2ba437813613a9e793d44876702acdf9c730426f890f5696c65dc930591
4
- data.tar.gz: f920d8b6cba89d57710d8175f0b977445128c66e4936d0e6a0092f8d2338d292
3
+ metadata.gz: b6108db4a82b8d13ee9e82726fb9a546e9ca2307ebf798f9dc46c7088a4954b3
4
+ data.tar.gz: 8a1568765775444eef901017163818dd90e724da75f75c418ebc838f6f05cb73
5
5
  SHA512:
6
- metadata.gz: 814f27c216c27736cb7caf003770855996af84c326637ce8f2edc7087d506e9a4228b7707f2824f852f0e1d333e948514efa6c60b130f4ca55b60aa67a923f04
7
- data.tar.gz: d029a121d9ce0bdabe5a809de3e47d687f807b9978b815cf6138fd2fc73f221b76888d35094e96e05e2d691fd38546862831d008096b9a3677a237ffd77e7522
6
+ metadata.gz: 616aa31f777bee9127836f599337e4d23b7e1e28ec3b5089c979cc48d901b8e16d26e09390f6c716885464ad88125875288d4e5667ba3b0e5f1c1b164b7cfc69
7
+ data.tar.gz: bc620ad21498d5c4351c145047a5b29aa6ff73537809529594bb9c163c088f36f47de7590cf4fe1f2cdd5c04594a2d276bd439d9da19440771af108158ac1ab3
@@ -163,6 +163,7 @@ module Refract
163
163
  name: node.name,
164
164
  arguments: visit(node.arguments),
165
165
  block: visit(node.block),
166
+ safe_navigation: node.safe_navigation?,
166
167
  )
167
168
  end
168
169
 
@@ -1135,6 +1136,7 @@ module Refract
1135
1136
  SymbolNode.new(
1136
1137
  prism_node: node,
1137
1138
  unescaped: node.unescaped,
1139
+ quoted: node.opening_loc && node.closing_loc,
1138
1140
  )
1139
1141
  end
1140
1142
 
@@ -2,11 +2,13 @@
2
2
 
3
3
  module Refract
4
4
  class Formatter < BasicVisitor
5
- def initialize
6
- super
5
+ Result = Data.define(:source, :source_map)
6
+
7
+ def initialize(starting_line: 1)
8
+ super()
7
9
  @buffer = []
8
10
  @source_map = []
9
- @current_line = 1
11
+ @current_line = starting_line
10
12
  @indent = 0
11
13
  end
12
14
 
@@ -20,7 +22,11 @@ module Refract
20
22
 
21
23
  def format_node(node)
22
24
  visit(node)
23
- @buffer.join
25
+
26
+ Result.new(
27
+ source: @buffer.join,
28
+ source_map: @source_map,
29
+ )
24
30
  end
25
31
 
26
32
  visit AliasGlobalVariableNode do |node|
@@ -77,7 +83,13 @@ module Refract
77
83
  visit AssocNode do |node|
78
84
  case node.key
79
85
  when SymbolNode
80
- push node.key.unescaped
86
+ if node.key.quoted
87
+ doubles do
88
+ push node.key.unescaped.gsub('"', '\"')
89
+ end
90
+ else
91
+ push node.key.unescaped
92
+ end
81
93
  push ":"
82
94
  space unless ImplicitNode === node.value
83
95
  visit node.value
@@ -98,32 +110,30 @@ module Refract
98
110
  end
99
111
 
100
112
  visit BeginNode do |node|
101
- outdent do
102
- push "begin"
113
+ push "begin"
103
114
 
104
- indent do
105
- visit node.statements
106
- end
107
-
108
- new_line
115
+ indent do
116
+ visit node.statements
117
+ end
109
118
 
110
- if node.rescue_clause
111
- visit node.rescue_clause
112
- new_line
113
- end
119
+ new_line
114
120
 
115
- if node.else_clause
116
- visit node.else_clause
117
- new_line
118
- end
121
+ if node.rescue_clause
122
+ visit node.rescue_clause
123
+ new_line
124
+ end
119
125
 
120
- if node.ensure_clause
121
- visit node.ensure_clause
122
- new_line
123
- end
126
+ if node.else_clause
127
+ visit node.else_clause
128
+ new_line
129
+ end
124
130
 
125
- push "end"
131
+ if node.ensure_clause
132
+ visit node.ensure_clause
133
+ new_line
126
134
  end
135
+
136
+ push "end"
127
137
  end
128
138
 
129
139
  visit BlockArgumentNode do |node|
@@ -195,6 +205,7 @@ module Refract
195
205
  visit CallNode do |node|
196
206
  if node.receiver
197
207
  visit node.receiver
208
+ push "&" if node.safe_navigation
198
209
  push "."
199
210
  end
200
211
 
@@ -1115,7 +1126,7 @@ module Refract
1115
1126
  end
1116
1127
 
1117
1128
  visit StatementsNode do |node|
1118
- visit_each(node.body) { new_line }
1129
+ visit_each(node.body.flat_map { |n| (Refract::StatementsNode === n) ? n.body : n }) { new_line }
1119
1130
  end
1120
1131
 
1121
1132
  visit StringNode do |node|
@@ -1126,17 +1137,39 @@ module Refract
1126
1137
 
1127
1138
  visit SuperNode do |node|
1128
1139
  push "super"
1129
- if node.arguments
1140
+ case node.block
1141
+ when BlockNode
1142
+ if node.arguments
1143
+ parens { visit node.arguments }
1144
+ end
1145
+
1146
+ space
1147
+ visit node.block
1148
+ when BlockArgumentNode
1130
1149
  parens do
1131
- visit node.arguments
1150
+ if node.arguments
1151
+ visit node.arguments
1152
+ push ", "
1153
+ end
1154
+
1155
+ visit node.block
1156
+ end
1157
+ else
1158
+ if node.arguments
1159
+ parens { visit node.arguments }
1132
1160
  end
1133
1161
  end
1134
- visit node.block if node.block
1135
1162
  end
1136
1163
 
1137
1164
  visit SymbolNode do |node|
1138
1165
  push ":"
1139
- push node.unescaped
1166
+ if node.quoted
1167
+ doubles do
1168
+ push node.unescaped.gsub('"', '\"')
1169
+ end
1170
+ else
1171
+ push node.unescaped
1172
+ end
1140
1173
  end
1141
1174
 
1142
1175
  visit TrueNode do |node|
@@ -2,15 +2,16 @@
2
2
 
3
3
  module Refract
4
4
  class CallNode < Node
5
- def initialize(prism_node: nil, receiver: nil, name:, arguments: nil, block: nil)
5
+ def initialize(prism_node: nil, receiver: nil, name:, arguments: nil, block: nil, safe_navigation: nil)
6
6
  @prism_node = prism_node => Prism::Node | nil
7
7
  @receiver = receiver
8
8
  @name = name => Symbol
9
9
  @arguments = arguments
10
10
  @block = block
11
+ @safe_navigation = safe_navigation
11
12
  freeze
12
13
  end
13
14
 
14
- attr_accessor :receiver, :name, :arguments, :block
15
+ attr_accessor :receiver, :name, :arguments, :block, :safe_navigation
15
16
  end
16
17
  end
@@ -2,12 +2,13 @@
2
2
 
3
3
  module Refract
4
4
  class SymbolNode < Node
5
- def initialize(prism_node: nil, unescaped:)
5
+ def initialize(prism_node: nil, unescaped:, quoted:)
6
6
  @prism_node = prism_node => Prism::Node | nil
7
7
  @unescaped = unescaped
8
+ @quoted = quoted
8
9
  freeze
9
10
  end
10
11
 
11
- attr_accessor :unescaped
12
+ attr_accessor :unescaped, :quoted
12
13
  end
13
14
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Refract
4
- VERSION = "1.0.0"
4
+ VERSION = "1.1.0"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: refract
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joel Drapper