w_syntax_tree-erb 0.9.0 → 0.9.2
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 +4 -4
- data/CHANGELOG.md +14 -4
- data/Gemfile.lock +3 -3
- data/README.md +2 -0
- data/lib/syntax_tree/erb/format.rb +40 -27
- data/lib/syntax_tree/erb/nodes.rb +13 -2
- data/lib/syntax_tree/erb/pretty_print.rb +3 -3
- data/lib/syntax_tree/erb/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9ebb5ab1bbcd632cf3e6b4dffa3eee540b6feff33ac8d0e7bec89de2b2171ebe
|
4
|
+
data.tar.gz: 3a11a343fb6ebd9b83e715e71e4dd615e997dc73e500b1b4b7f841055edc01db
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e5440a04f66cc2117e4be78d6736afeee2aa28f2baf76208d4de2a4225a0b5d81597d4f834d9e228f31f1a8e7a7f4814a90e321cda5972d177c2ee05691ad086
|
7
|
+
data.tar.gz: 67eac9bcb1faac4736047b2870f80b8173073c74d5c74fe4c2900d0a917780c86405b6b7968abd40efff4d55efc2a8ddf7fabce8e0434260734ddc611c2f0312
|
data/CHANGELOG.md
CHANGED
@@ -6,11 +6,21 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
|
|
6
6
|
|
7
7
|
## [Unreleased]
|
8
8
|
|
9
|
-
## [0.
|
9
|
+
## [0.9.2] - 2023-06-30
|
10
|
+
|
11
|
+
- Handle whitespace in HTML-strings using ERB-tags
|
12
|
+
|
13
|
+
## [0.9.1] - 2023-06-28
|
14
|
+
|
15
|
+
- Handle formatting of multi-line ERB-tags with more than one statement.
|
16
|
+
|
17
|
+
## [0.9.0] - 2023-06-22
|
10
18
|
|
11
19
|
### Added
|
12
20
|
|
13
|
-
- 🎉 First version based on syntax_tree-xml
|
21
|
+
- 🎉 First version based on syntax_tree-xml 🎉.
|
22
|
+
- Can format a lot of .html.erb-syntax and works as a plugin to syntax_tree.
|
23
|
+
- This is still early and there are a lot of different weird syntaxes out there.
|
14
24
|
|
15
|
-
[unreleased]: https://github.com/davidwessman/syntax_tree-erb/compare/v0.
|
16
|
-
[0.0
|
25
|
+
[unreleased]: https://github.com/davidwessman/syntax_tree-erb/compare/v0.9.0...HEAD
|
26
|
+
[0.9.0]: https://github.com/davidwessman/syntax_tree-erb/compare/419727a73af94057ca0980733e69ac8b4d52fdf4...v0.9.0
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
|
4
|
+
w_syntax_tree-erb (0.9.2)
|
5
5
|
prettier_print (>= 1.2.0)
|
6
6
|
syntax_tree (>= 6.1.1)
|
7
7
|
|
@@ -9,7 +9,7 @@ GEM
|
|
9
9
|
remote: https://rubygems.org/
|
10
10
|
specs:
|
11
11
|
docile (1.4.0)
|
12
|
-
minitest (5.18.
|
12
|
+
minitest (5.18.1)
|
13
13
|
prettier_print (1.2.1)
|
14
14
|
rake (13.0.6)
|
15
15
|
simplecov (0.22.0)
|
@@ -32,7 +32,7 @@ DEPENDENCIES
|
|
32
32
|
minitest
|
33
33
|
rake
|
34
34
|
simplecov
|
35
|
-
|
35
|
+
w_syntax_tree-erb!
|
36
36
|
|
37
37
|
BUNDLED WITH
|
38
38
|
2.4.1
|
data/README.md
CHANGED
@@ -11,7 +11,11 @@ module SyntaxTree
|
|
11
11
|
|
12
12
|
# Visit a Token node.
|
13
13
|
def visit_token(node)
|
14
|
-
|
14
|
+
if %i[text whitespace].include?(node.type)
|
15
|
+
q.text(node.value)
|
16
|
+
else
|
17
|
+
q.text(node.value.strip)
|
18
|
+
end
|
15
19
|
end
|
16
20
|
|
17
21
|
# Visit a Document node.
|
@@ -80,8 +84,7 @@ module SyntaxTree
|
|
80
84
|
q.text(" ")
|
81
85
|
visit(node.keyword)
|
82
86
|
end
|
83
|
-
|
84
|
-
visit(node.content)
|
87
|
+
node.content.nil? ? q.text(" ") : visit(node.content)
|
85
88
|
|
86
89
|
visit(node.closing_tag)
|
87
90
|
end
|
@@ -104,29 +107,44 @@ module SyntaxTree
|
|
104
107
|
end
|
105
108
|
|
106
109
|
def visit_erb_content(node)
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
formatter =
|
112
|
-
SyntaxTree::Formatter.new("", [], erb_print_width(node.value))
|
113
|
-
formatter.format(node.value.statements)
|
114
|
-
formatter.flush
|
115
|
-
formatter.output.join.split("\n")
|
116
|
-
end
|
110
|
+
if node.value.is_a?(String)
|
111
|
+
output_rows(node.value.split("\n"))
|
112
|
+
else
|
113
|
+
child_nodes = node.value&.statements&.child_nodes || []
|
117
114
|
|
118
|
-
|
119
|
-
q.group do
|
115
|
+
if child_nodes.size == 1
|
120
116
|
q.text(" ")
|
121
|
-
q.seplist(
|
117
|
+
q.seplist(child_nodes, -> { q.breakable("") }) do |child_node|
|
118
|
+
format_statement(child_node)
|
119
|
+
end
|
122
120
|
q.text(" ")
|
121
|
+
elsif child_nodes.size > 1
|
122
|
+
q.indent do
|
123
|
+
q.breakable("")
|
124
|
+
q.seplist(child_nodes, -> { q.breakable("") }) do |child_node|
|
125
|
+
format_statement(child_node)
|
126
|
+
end
|
127
|
+
end
|
128
|
+
q.breakable
|
123
129
|
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
def format_statement(statement)
|
134
|
+
formatter =
|
135
|
+
SyntaxTree::Formatter.new("", [], erb_print_width(statement))
|
136
|
+
formatter.format(statement)
|
137
|
+
formatter.flush
|
138
|
+
rows = formatter.output.join.split("\n")
|
139
|
+
|
140
|
+
output_rows(formatter.output.join.split("\n"))
|
141
|
+
end
|
142
|
+
|
143
|
+
def output_rows(rows)
|
144
|
+
if rows.size > 1
|
145
|
+
q.seplist(rows, -> { q.breakable("") }) { |row| q.text(row) }
|
124
146
|
elsif rows.size == 1
|
125
|
-
q.text(" ")
|
126
147
|
q.text(rows.first)
|
127
|
-
q.text(" ")
|
128
|
-
else
|
129
|
-
q.text(" ")
|
130
148
|
end
|
131
149
|
end
|
132
150
|
|
@@ -203,15 +221,10 @@ module SyntaxTree
|
|
203
221
|
end
|
204
222
|
end
|
205
223
|
|
206
|
-
def erb_print_width(
|
207
|
-
statements = syntax_tree.statements.body
|
224
|
+
def erb_print_width(node)
|
208
225
|
# Set the width to maximum if we have an IfNode or IfOp,
|
209
226
|
# we cannot format them purely with SyntaxTree because the ERB-syntax will be unparseable.
|
210
|
-
|
211
|
-
999_999
|
212
|
-
else
|
213
|
-
SyntaxTree::ERB::MAX_WIDTH
|
214
|
-
end
|
227
|
+
check_for_if_statement(node) ? 999_999 : SyntaxTree::ERB::MAX_WIDTH
|
215
228
|
end
|
216
229
|
|
217
230
|
def check_for_if_statement(node)
|
@@ -220,8 +220,19 @@ module SyntaxTree
|
|
220
220
|
|
221
221
|
def initialize(opening_tag:, keyword:, content:, closing_tag:, location:)
|
222
222
|
@opening_tag = opening_tag
|
223
|
-
|
224
|
-
@
|
223
|
+
# prune whitespace from keyword
|
224
|
+
@keyword =
|
225
|
+
if keyword
|
226
|
+
Token.new(
|
227
|
+
type: keyword.type,
|
228
|
+
value: keyword.value.strip,
|
229
|
+
location: keyword.location
|
230
|
+
)
|
231
|
+
end
|
232
|
+
# Set content to nil if it is empty
|
233
|
+
content ||= []
|
234
|
+
content = content.map(&:value).join if content.is_a?(Array)
|
235
|
+
@content = ErbContent.new(value: content) unless content.strip.empty?
|
225
236
|
@closing_tag = closing_tag
|
226
237
|
@location = location
|
227
238
|
end
|
@@ -108,12 +108,12 @@ module SyntaxTree
|
|
108
108
|
end
|
109
109
|
|
110
110
|
def visit_erb_end(node)
|
111
|
-
q.
|
111
|
+
q.pp("erb_end")
|
112
112
|
end
|
113
113
|
|
114
114
|
# Visit an ErbContent node.
|
115
115
|
def visit_erb_content(node)
|
116
|
-
q.
|
116
|
+
q.pp(node.value)
|
117
117
|
end
|
118
118
|
|
119
119
|
# Visit an Attribute node.
|
@@ -132,7 +132,7 @@ module SyntaxTree
|
|
132
132
|
end
|
133
133
|
|
134
134
|
def visit_erb_close(node)
|
135
|
-
|
135
|
+
visit(node.closing)
|
136
136
|
end
|
137
137
|
|
138
138
|
def visit_erb_do_close(node)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: w_syntax_tree-erb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kevin Newton
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2023-06-
|
12
|
+
date: 2023-06-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: prettier_print
|