w_syntax_tree-erb 0.10.2 → 0.10.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 657167139e259c320442756b2da4ce405e3ef3df7c3c370e6cd681561c3e7de6
4
- data.tar.gz: 7f369c4b9bb2416a533a10734a4b384496712712e9787465d96ff76661a8be6d
3
+ metadata.gz: 6b67bfa283053d82054d6b3f6f41723c4d9ffb6a54431c3e548eeceb0f3d53ef
4
+ data.tar.gz: 5de3bfd5e3a883a4d8cd595bf525298a7fc24b110acb32e8542aeebcd3e68b98
5
5
  SHA512:
6
- metadata.gz: 2a4efea93faf97c4fe05e9a7af6e0dcfd488ffbdea1ad1380e4d13d2a033490cc65ce275b3311d1c1d4c50d7d59efce2552fdd4e13a8324fc8cd5d514ac1c513
7
- data.tar.gz: 022be3662cdffa4bf6416354a1f8b518bf1ca0f84875c99d5a919519b7b48e8e8ec608f132c6e3a0f1eaeb2651a7ae337dec0b7961ea14782019205f0221faa2
6
+ metadata.gz: 3be81363e0f5c65864c43d225f4ffb56c3f1e7d5e32ef8a8188e64481d4b6124aa046399e9df05db10c64973eb459c40de63508b343789e0a9afda8fbf64a979
7
+ data.tar.gz: 22fd1884afe7d82abd172440c5a712b54101730718352acd3078ef7b37f2d79a503da90f90fa5c0831759be465bc6df0af6471a7ab015bb3a673db2df73d19c1
data/CHANGELOG.md CHANGED
@@ -6,6 +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.10.3] - 2023-08-27
10
+
11
+ ## Fixes
12
+
13
+ - Allows parsing ERB-tags with if, else and end in the same tag
14
+
15
+ ```erb
16
+ <%= if true
17
+ what
18
+ end %>
19
+ ```
20
+
21
+ This opens the possibility for formatting all if-statements with SyntaxTree properly
22
+ and removes the fix where any if-statement was force to one line.
23
+
9
24
  ## [0.10.2] - 2023-08-22
10
25
 
11
26
  ### Fixes
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- w_syntax_tree-erb (0.10.2)
4
+ w_syntax_tree-erb (0.10.3)
5
5
  prettier_print (~> 1.2, >= 1.2.0)
6
6
  syntax_tree (~> 6.1, >= 6.1.1)
7
7
 
@@ -114,7 +114,7 @@ module SyntaxTree
114
114
  q.text(" ")
115
115
  visit(node.keyword)
116
116
  end
117
- node.content.nil? ? q.text(" ") : visit(node.content)
117
+ node.content.blank? ? q.text(" ") : visit(node.content)
118
118
 
119
119
  visit(node.closing_tag)
120
120
  end
@@ -163,7 +163,8 @@ module SyntaxTree
163
163
 
164
164
  def format_statement(statement)
165
165
  formatter =
166
- SyntaxTree::Formatter.new("", [], erb_print_width(statement))
166
+ SyntaxTree::Formatter.new("", [], SyntaxTree::ERB::MAX_WIDTH)
167
+
167
168
  formatter.format(statement)
168
169
  formatter.flush
169
170
  rows = formatter.output.join.split("\n")
@@ -305,24 +306,6 @@ module SyntaxTree
305
306
  node.respond_to?(:new_line) ? node.new_line&.count || 0 : 0
306
307
  end
307
308
 
308
- def erb_print_width(node)
309
- # Set the width to maximum if we have an IfNode or IfOp,
310
- # we cannot format them purely with SyntaxTree because the ERB-syntax will be unparseable.
311
- check_for_if_statement(node) ? 999_999 : SyntaxTree::ERB::MAX_WIDTH
312
- end
313
-
314
- def check_for_if_statement(node)
315
- return false if node.nil?
316
-
317
- if node.is_a?(SyntaxTree::IfNode) || node.is_a?(SyntaxTree::IfOp)
318
- return true
319
- end
320
-
321
- node.child_nodes.any? do |child_node|
322
- check_for_if_statement(child_node)
323
- end
324
- end
325
-
326
309
  def handle_child_nodes(child_nodes)
327
310
  group = []
328
311
 
@@ -295,16 +295,7 @@ module SyntaxTree
295
295
  )
296
296
  end
297
297
 
298
- @content =
299
- if content.is_a?(ErbContent)
300
- content
301
- else
302
- # Set content to nil if it is empty
303
- content ||= []
304
- content = content.map(&:value).join if content.is_a?(Array)
305
- ErbContent.new(value: content) unless content.strip.empty?
306
- end
307
-
298
+ @content = prepare_content(content)
308
299
  @closing_tag = closing_tag
309
300
  end
310
301
 
@@ -338,6 +329,24 @@ module SyntaxTree
338
329
  closing_tag: closing_tag
339
330
  )
340
331
  end
332
+
333
+ private
334
+
335
+ def prepare_content(content)
336
+ if content.is_a?(ErbContent)
337
+ content
338
+ else
339
+ # Set content to nil if it is empty
340
+ content ||= []
341
+
342
+ ErbContent.new(value: content)
343
+ end
344
+ rescue SyntaxTree::Parser::ParseError
345
+ # Try to add the keyword to see if it parses
346
+ result = ErbContent.new(value: [keyword, *content])
347
+ @keyword = nil
348
+ result
349
+ end
341
350
  end
342
351
 
343
352
  class ErbBlock < Block
@@ -413,7 +422,7 @@ module SyntaxTree
413
422
 
414
423
  class ErbElse < ErbIf
415
424
  def accept(visitor)
416
- visitor.visit_erb_if(self)
425
+ visitor.visit_erb_else(self)
417
426
  end
418
427
  end
419
428
 
@@ -448,16 +457,23 @@ module SyntaxTree
448
457
  end
449
458
 
450
459
  class ErbContent < Node
451
- attr_reader(:value, :unparsed_value)
460
+ attr_reader(:value)
452
461
 
453
462
  def initialize(value:)
454
- @unparsed_value = value
455
- begin
456
- @value = SyntaxTree.parse(value.strip)
457
- rescue SyntaxTree::Parser::ParseError
458
- # Removes leading and trailing whitespace
459
- @value = value&.lstrip&.rstrip
463
+ if value.is_a?(Array)
464
+ value =
465
+ value.map { |token| token.is_a?(Token) ? token.value : token }.join
460
466
  end
467
+ @value = SyntaxTree.parse(value.strip)
468
+ end
469
+
470
+ def blank?
471
+ value.nil? ||
472
+ value
473
+ .statements
474
+ .child_nodes
475
+ .reject { |node| node.is_a?(SyntaxTree::VoidStmt) }
476
+ .empty?
461
477
  end
462
478
 
463
479
  def accept(visitor)
@@ -588,7 +588,7 @@ module SyntaxTree
588
588
  location: opening_tag.location.to(closing_tag.location)
589
589
  )
590
590
 
591
- case keyword&.type
591
+ case erb_node.keyword&.type
592
592
  when :erb_if, :erb_unless, :erb_elsif
593
593
  parse_erb_if(erb_node)
594
594
  when :erb_case, :erb_when
@@ -2,6 +2,6 @@
2
2
 
3
3
  module SyntaxTree
4
4
  module ERB
5
- VERSION = "0.10.2"
5
+ VERSION = "0.10.3"
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.10.2
4
+ version: 0.10.3
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-08-22 00:00:00.000000000 Z
12
+ date: 2023-08-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: prettier_print
@@ -159,7 +159,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
159
159
  - !ruby/object:Gem::Version
160
160
  version: '0'
161
161
  requirements: []
162
- rubygems_version: 3.4.19
162
+ rubygems_version: 3.4.10
163
163
  signing_key:
164
164
  specification_version: 4
165
165
  summary: Syntax Tree support for ERB