haml_lint 0.49.0 → 0.49.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/haml_lint/ruby_extraction/chunk_extractor.rb +44 -4
- data/lib/haml_lint/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: ccc4d7e3d573b44a76eb95a860b47023cacc016d84a423fab45ed5521ec4c859
|
4
|
+
data.tar.gz: 30df2f2e85a8b5629fc3e7be4d236f899e4a7350520d3fa6ff1ad544e298db81
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 31ee68b52d129a92e1ce5b0b08c5c1770cc79cb5fc334ead102b3512b3e01e899b9d4b48f14cfb75d047708c8274d76ef9f76c1c9ea96ce9418fbcc7d90a3d07
|
7
|
+
data.tar.gz: f5723c505efeb8b98c278d9ff6e18c6f04396542f5f45543b3fdde2c622f5431378592a03340cd3040a4ed357ab8e7f216f98c35bf0e65f17c3925e5fab14590
|
@@ -102,7 +102,8 @@ module HamlLint::RubyExtraction
|
|
102
102
|
# that contains interpolation.
|
103
103
|
indent = raw_first_line.index(/\S/)
|
104
104
|
@ruby_chunks << PlaceholderMarkerChunk.new(node, 'interpolation', indent: indent)
|
105
|
-
|
105
|
+
lines = extract_piped_plain_multilines(node.line - 1)
|
106
|
+
add_interpolation_chunks(node, lines.join("\n"), node.line - 1, indent: indent)
|
106
107
|
return
|
107
108
|
end
|
108
109
|
|
@@ -327,9 +328,16 @@ module HamlLint::RubyExtraction
|
|
327
328
|
# ex: %tag hello #{world}
|
328
329
|
# Sadly, the text with interpolation is escaped from the original, but this code
|
329
330
|
# needs the original.
|
330
|
-
interpolation_original = @document.unescape_interpolation_to_original_cache[node.script]
|
331
331
|
|
332
|
+
interpolation_original = @document.unescape_interpolation_to_original_cache[node.script]
|
332
333
|
line_start_index = @original_haml_lines[node.line - 1].rindex(interpolation_original)
|
334
|
+
if line_start_index.nil?
|
335
|
+
raw_lines = extract_piped_plain_multilines(node.line - 1)
|
336
|
+
equivalent_haml_code = "#{raw_lines.first} #{raw_lines[1..].map(&:lstrip).join(' ')}"
|
337
|
+
line_start_index = equivalent_haml_code.rindex(interpolation_original)
|
338
|
+
|
339
|
+
interpolation_original = raw_lines.join("\n")
|
340
|
+
end
|
333
341
|
add_interpolation_chunks(node, interpolation_original, node.line - 1,
|
334
342
|
line_start_index: line_start_index, indent: indent)
|
335
343
|
else
|
@@ -404,11 +412,14 @@ module HamlLint::RubyExtraction
|
|
404
412
|
# because Haml::Util.balance does a strip...
|
405
413
|
interpolated_code = code[char_index...scanner.charpos - 1]
|
406
414
|
|
407
|
-
interpolated_code = "#{' ' * indent}#{script_output_prefix}#{interpolated_code}"
|
408
|
-
|
409
415
|
if interpolated_code.include?("\n")
|
410
416
|
# We can't correct multiline interpolation.
|
411
417
|
# Finding meaningful code to generate and then transfer back is pretty complex
|
418
|
+
|
419
|
+
# Since we can't fix it, strip around the code to reduce RuboCop lints that we won't be able to fix.
|
420
|
+
interpolated_code = interpolated_code.strip
|
421
|
+
interpolated_code = "#{' ' * indent}#{script_output_prefix}#{interpolated_code}"
|
422
|
+
|
412
423
|
placeholder_code = interpolated_code.gsub(/\s*\n\s*/, ' ').rstrip
|
413
424
|
unless parse_ruby(placeholder_code)
|
414
425
|
placeholder_code = interpolated_code.gsub(/\s*\n\s*/, '; ').rstrip
|
@@ -416,6 +427,7 @@ module HamlLint::RubyExtraction
|
|
416
427
|
@ruby_chunks << AdHocChunk.new(node, [placeholder_code],
|
417
428
|
haml_line_index: haml_line_index + line_index)
|
418
429
|
else
|
430
|
+
interpolated_code = "#{' ' * indent}#{script_output_prefix}#{interpolated_code}"
|
419
431
|
@ruby_chunks << InterpolationChunk.new(node, [interpolated_code],
|
420
432
|
haml_line_index: haml_line_index + line_index,
|
421
433
|
start_char_index: start_char_index,
|
@@ -433,6 +445,15 @@ module HamlLint::RubyExtraction
|
|
433
445
|
end
|
434
446
|
end
|
435
447
|
|
448
|
+
def process_plain_multiline!(line)
|
449
|
+
if line&.end_with?(' |')
|
450
|
+
line[-2..] = ''
|
451
|
+
true
|
452
|
+
else
|
453
|
+
false
|
454
|
+
end
|
455
|
+
end
|
456
|
+
|
436
457
|
# Returns the raw lines from the haml for the given index.
|
437
458
|
# Multiple lines are returned when a line ends with a comma as that is the only
|
438
459
|
# time HAMLs allows Ruby lines to be split.
|
@@ -517,6 +538,25 @@ module HamlLint::RubyExtraction
|
|
517
538
|
[first_line_offset, ruby_lines]
|
518
539
|
end
|
519
540
|
|
541
|
+
def extract_piped_plain_multilines(first_line_index)
|
542
|
+
lines = []
|
543
|
+
|
544
|
+
cur_line = @original_haml_lines[first_line_index].rstrip
|
545
|
+
cur_line_index = first_line_index
|
546
|
+
|
547
|
+
# The pipes must also be on the last line of the multi-line section
|
548
|
+
while cur_line && process_plain_multiline!(cur_line)
|
549
|
+
lines << cur_line
|
550
|
+
cur_line_index += 1
|
551
|
+
cur_line = @original_haml_lines[cur_line_index].rstrip
|
552
|
+
end
|
553
|
+
|
554
|
+
if lines.empty?
|
555
|
+
lines << cur_line
|
556
|
+
end
|
557
|
+
lines
|
558
|
+
end
|
559
|
+
|
520
560
|
# Tag attributes actually handle multiline differently than scripts.
|
521
561
|
# The basic system basically keeps considering more lines until it meets the closing braces, but still
|
522
562
|
# processes pipes too (same as extract_raw_ruby_lines).
|
data/lib/haml_lint/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: haml_lint
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.49.
|
4
|
+
version: 0.49.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shane da Silva
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-07-
|
11
|
+
date: 2023-07-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: haml
|