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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4b1234ed5afef9a96ebefb415733354ac530ffa9bb35b718195d36be9f9fed7c
4
- data.tar.gz: 03c589bb628753e874f05aa6ea504f0d3d14e2057a7843d919abfd31f9fc66e9
3
+ metadata.gz: 9ebb5ab1bbcd632cf3e6b4dffa3eee540b6feff33ac8d0e7bec89de2b2171ebe
4
+ data.tar.gz: 3a11a343fb6ebd9b83e715e71e4dd615e997dc73e500b1b4b7f841055edc01db
5
5
  SHA512:
6
- metadata.gz: cb5dd5cad343aabf4eaa8bd8cb177eeabb673cf68b8a016f36c13ee5ff2fbbb277a313800849cee940013355e430edca26d5d8541d566588f7902c41816d20a9
7
- data.tar.gz: 3a147354e9fbef1bf89b604033c57f3746f1e17e69d050e7b4b41ffc409005000f4a7e5a12085e2704da71c4de4e16691795f6fe4600ba04de1106f5179c15b6
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.0.1] - 2023-05-25
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.1.0...HEAD
16
- [0.0.1]: https://github.com/davidwessman/syntax_tree-erb/compare/b280a...v0.1.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
- syntax_tree-erb (0.0.1)
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.0)
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
- syntax_tree-erb!
35
+ w_syntax_tree-erb!
36
36
 
37
37
  BUNDLED WITH
38
38
  2.4.1
data/README.md CHANGED
@@ -33,6 +33,8 @@ Add this line to your application's Gemfile:
33
33
  gem "w_syntax_tree-erb", "~> 0.9", require: false
34
34
  ```
35
35
 
36
+ > I added the `w_` prefix to avoid conflicts if there will ever be an official `syntax_tree-erb` gem.
37
+
36
38
  ## Usage
37
39
 
38
40
  ```sh
@@ -11,7 +11,11 @@ module SyntaxTree
11
11
 
12
12
  # Visit a Token node.
13
13
  def visit_token(node)
14
- q.text(node.value.strip)
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
- rows =
108
- if node.value.is_a?(String)
109
- node.value.split("\n")
110
- else
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
- if rows.size > 1
119
- q.group do
115
+ if child_nodes.size == 1
120
116
  q.text(" ")
121
- q.seplist(rows, -> { q.breakable(" ") }) { |row| q.text(row) }
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(syntax_tree)
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
- if statements.any? { |node| check_for_if_statement(node) }
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
- @keyword = keyword
224
- @content = ErbContent.new(value: content.map(&:value).join) if content
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.text("erb_end")
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.text(node.value)
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
- visit_node("erb_close", node)
135
+ visit(node.closing)
136
136
  end
137
137
 
138
138
  def visit_erb_do_close(node)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module SyntaxTree
4
4
  module ERB
5
- VERSION = "0.9.0"
5
+ VERSION = "0.9.2"
6
6
  end
7
7
  end
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.0
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-22 00:00:00.000000000 Z
12
+ date: 2023-06-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: prettier_print