syntax_tree-haml 2.0.0 → 4.0.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 +4 -4
- data/CHANGELOG.md +16 -1
- data/Gemfile.lock +13 -17
- data/lib/syntax_tree/haml/format.rb +57 -29
- data/lib/syntax_tree/haml/version.rb +1 -1
- data/lib/syntax_tree/haml.rb +13 -11
- data/syntax_tree-haml.gemspec +2 -3
- metadata +5 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '090ea651f3d163420a8d52ec028c152238f2184770d1a1de3771391e37804550'
|
4
|
+
data.tar.gz: b9b1241849203a2b0ded757e135319d3f05c200cc6add2ca42991de03de28f7c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9ce10d5f934ab991630d7893a4439a829db161a796f54fa560407e07ab513046dd495cf8b84cd91c3aa59acb68543e0a5b6f622c18c48aa9c9aa2c54ce30378a
|
7
|
+
data.tar.gz: 6c706e13ce097c7dbf3484701cb88cb6007683dc825f0a4a0b9666fd0fc0bf0dee5fa1b92ba4e63528d118480a0e66df5aa363a9bb0607c5e08ec8b638e0694b
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,20 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
|
|
6
6
|
|
7
7
|
## [Unreleased]
|
8
8
|
|
9
|
+
## [4.0.0] - 2023-03-07
|
10
|
+
|
11
|
+
### Changed
|
12
|
+
|
13
|
+
- Required syntax_tree version 6.0.0 or higher.
|
14
|
+
- Fixed up hash attribute parser to handle multiline hashes using Syntax Tree itself.
|
15
|
+
|
16
|
+
## [3.0.0] - 2022-12-23
|
17
|
+
|
18
|
+
### Changed
|
19
|
+
|
20
|
+
- Required syntax_tree version 5.0.1 or higher.
|
21
|
+
- Drop internal pattern matching in order to support Ruby implementations that don't support it.
|
22
|
+
|
9
23
|
## [2.0.0] - 2022-10-18
|
10
24
|
|
11
25
|
### Added
|
@@ -72,7 +86,8 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
|
|
72
86
|
|
73
87
|
- 🎉 Initial release! 🎉
|
74
88
|
|
75
|
-
[unreleased]: https://github.com/ruby-syntax-tree/syntax_tree-haml/compare/
|
89
|
+
[unreleased]: https://github.com/ruby-syntax-tree/syntax_tree-haml/compare/v3.0.0...HEAD
|
90
|
+
[3.0.0]: https://github.com/ruby-syntax-tree/syntax_tree-haml/compare/v2.0.0...v3.0.0
|
76
91
|
[2.0.0]: https://github.com/ruby-syntax-tree/syntax_tree-haml/compare/v1.3.2...v2.0.0
|
77
92
|
[1.3.2]: https://github.com/ruby-syntax-tree/syntax_tree-haml/compare/v1.3.1...v1.3.2
|
78
93
|
[1.3.1]: https://github.com/ruby-syntax-tree/syntax_tree-haml/compare/v1.3.0...v1.3.1
|
data/Gemfile.lock
CHANGED
@@ -1,40 +1,36 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
syntax_tree-haml (
|
5
|
-
haml (>= 5.2
|
4
|
+
syntax_tree-haml (4.0.0)
|
5
|
+
haml (>= 5.2)
|
6
6
|
prettier_print (>= 1.0.0)
|
7
|
-
syntax_tree (>=
|
7
|
+
syntax_tree (>= 6.0.0)
|
8
8
|
|
9
9
|
GEM
|
10
10
|
remote: https://rubygems.org/
|
11
11
|
specs:
|
12
12
|
docile (1.4.0)
|
13
|
-
haml (6.
|
13
|
+
haml (6.1.1)
|
14
14
|
temple (>= 0.8.2)
|
15
15
|
thor
|
16
16
|
tilt
|
17
|
-
minitest (5.
|
18
|
-
prettier_print (1.0
|
17
|
+
minitest (5.18.0)
|
18
|
+
prettier_print (1.2.0)
|
19
19
|
rake (13.0.6)
|
20
|
-
simplecov (0.
|
20
|
+
simplecov (0.22.0)
|
21
21
|
docile (~> 1.1)
|
22
22
|
simplecov-html (~> 0.11)
|
23
23
|
simplecov_json_formatter (~> 0.1)
|
24
24
|
simplecov-html (0.12.3)
|
25
25
|
simplecov_json_formatter (0.1.4)
|
26
|
-
syntax_tree (
|
27
|
-
prettier_print (>= 1.0
|
28
|
-
temple (0.
|
26
|
+
syntax_tree (6.0.2)
|
27
|
+
prettier_print (>= 1.2.0)
|
28
|
+
temple (0.10.0)
|
29
29
|
thor (1.2.1)
|
30
|
-
tilt (2.0
|
30
|
+
tilt (2.1.0)
|
31
31
|
|
32
32
|
PLATFORMS
|
33
|
-
|
34
|
-
x86_64-darwin-19
|
35
|
-
x86_64-darwin-20
|
36
|
-
x86_64-darwin-21
|
37
|
-
x86_64-linux
|
33
|
+
arm64-darwin-22
|
38
34
|
|
39
35
|
DEPENDENCIES
|
40
36
|
bundler
|
@@ -44,4 +40,4 @@ DEPENDENCIES
|
|
44
40
|
syntax_tree-haml!
|
45
41
|
|
46
42
|
BUNDLED WITH
|
47
|
-
2.
|
43
|
+
2.4.1
|
@@ -4,9 +4,13 @@ module SyntaxTree
|
|
4
4
|
module Haml
|
5
5
|
class Format < Visitor
|
6
6
|
class Formatter < ::SyntaxTree::Formatter
|
7
|
-
attr_reader :literal_lines
|
7
|
+
attr_reader :literal_lines
|
8
8
|
|
9
|
-
def initialize(
|
9
|
+
def initialize(
|
10
|
+
source,
|
11
|
+
*rest,
|
12
|
+
options: ::SyntaxTree::Formatter::Options.new
|
13
|
+
)
|
10
14
|
@literal_lines = {}
|
11
15
|
source
|
12
16
|
.lines
|
@@ -15,7 +19,7 @@ module SyntaxTree
|
|
15
19
|
@literal_lines[index] = line.rstrip if line.start_with?("!")
|
16
20
|
end
|
17
21
|
|
18
|
-
super(source, *rest)
|
22
|
+
super(source, *rest, options: options)
|
19
23
|
end
|
20
24
|
end
|
21
25
|
|
@@ -157,7 +161,6 @@ module SyntaxTree
|
|
157
161
|
end
|
158
162
|
|
159
163
|
LiteralHashValue = Struct.new(:value)
|
160
|
-
StringHashValue = Struct.new(:value, :quote)
|
161
164
|
|
162
165
|
# When formatting a tag, there are a lot of different kinds of things that
|
163
166
|
# can be printed out. There's the tag name, the attributes, the content,
|
@@ -270,7 +273,7 @@ module SyntaxTree
|
|
270
273
|
q.group do
|
271
274
|
level == 0 ? q.breakable_empty : q.breakable_space
|
272
275
|
q.seplist(hash, nil, :each_pair) do |key, value|
|
273
|
-
if key.match?(/^@|[-:]/)
|
276
|
+
if key.match?(/^@|[-:]/) && !key.match?(/^["']/)
|
274
277
|
q.text("#{quote}#{Quotes.normalize(key, quote)}#{quote}:")
|
275
278
|
else
|
276
279
|
q.text("#{key}:")
|
@@ -348,17 +351,7 @@ module SyntaxTree
|
|
348
351
|
# we're going to print them out here.
|
349
352
|
if node.value[:dynamic_attributes].old
|
350
353
|
parts << PlainPart.new("%div") if parts.empty?
|
351
|
-
|
352
|
-
if ::Haml::AttributeParser.available?
|
353
|
-
dynamic = parse_attributes(node.value[:dynamic_attributes].old)
|
354
|
-
parts << if dynamic.is_a?(LiteralHashValue)
|
355
|
-
PlainPart.new(dynamic.value)
|
356
|
-
else
|
357
|
-
HashAttributesPart.new(dynamic)
|
358
|
-
end
|
359
|
-
else
|
360
|
-
parts << PlainPart.new(node.value[:dynamic_attributes].old)
|
361
|
-
end
|
354
|
+
parts << parse_attributes(node.value[:dynamic_attributes].old)
|
362
355
|
end
|
363
356
|
|
364
357
|
# https://haml.info/docs/yardoc/file.REFERENCE.html#object-reference-
|
@@ -412,11 +405,11 @@ module SyntaxTree
|
|
412
405
|
def continuation?(node, child)
|
413
406
|
return false if child.type != :silent_script
|
414
407
|
|
415
|
-
case
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
408
|
+
case node.value[:keyword]
|
409
|
+
when "case"
|
410
|
+
%w[in when else].include?(child.value[:keyword])
|
411
|
+
when "if", "unless"
|
412
|
+
%w[elsif else].include?(child.value[:keyword])
|
420
413
|
else
|
421
414
|
false
|
422
415
|
end
|
@@ -434,17 +427,52 @@ module SyntaxTree
|
|
434
427
|
# Take a source string and attempt to parse it into a set of attributes
|
435
428
|
# that can be used to format the source.
|
436
429
|
def parse_attributes(source)
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
430
|
+
source = source.strip
|
431
|
+
source = source.start_with?("{") ? source : "{#{source}}"
|
432
|
+
|
433
|
+
program = SyntaxTree.parse(source)
|
434
|
+
return PlainPart.new(source) if program.nil?
|
435
|
+
|
436
|
+
node = program.statements.body.first
|
437
|
+
return PlainPart.new(source) unless node.is_a?(HashLiteral)
|
438
|
+
|
439
|
+
HashAttributesPart.new(parse_attributes_hash(source, node))
|
440
|
+
rescue Parser::ParseError
|
441
|
+
PlainPart.new(source)
|
442
|
+
end
|
443
|
+
|
444
|
+
def parse_attributes_hash(source, node, level = 1)
|
445
|
+
node.assocs.to_h do |assoc|
|
446
|
+
key =
|
447
|
+
case assoc.key
|
448
|
+
when StringLiteral
|
449
|
+
format(assoc.key)
|
450
|
+
when Label
|
451
|
+
assoc.key.value.delete_suffix(":")
|
452
|
+
when DynaSymbol
|
453
|
+
format(assoc.key).delete_prefix(":")
|
454
|
+
else
|
455
|
+
format(assoc.key)
|
456
|
+
end
|
457
|
+
|
458
|
+
value =
|
459
|
+
case assoc.value
|
460
|
+
when HashLiteral
|
461
|
+
parse_attributes_hash(source, assoc.value, level + 1)
|
462
|
+
when StringLiteral
|
463
|
+
assoc.value
|
464
|
+
else
|
465
|
+
LiteralHashValue.new(format(assoc.value, level * 2).lstrip)
|
466
|
+
end
|
467
|
+
|
468
|
+
[key, value]
|
445
469
|
end
|
446
470
|
end
|
447
471
|
|
472
|
+
def format(node, column = 0)
|
473
|
+
SyntaxTree::Formatter.format(+"", node, column)
|
474
|
+
end
|
475
|
+
|
448
476
|
def with_children(node)
|
449
477
|
if node.children.empty?
|
450
478
|
q.group { yield }
|
data/lib/syntax_tree/haml.rb
CHANGED
@@ -33,8 +33,8 @@ module SyntaxTree
|
|
33
33
|
|
34
34
|
# This is the main entrypoint for the formatter. It parses the source,
|
35
35
|
# builds a formatter, then pretty prints the result.
|
36
|
-
def self.format(source, maxwidth = 80)
|
37
|
-
formatter = Format::Formatter.new(source, +"", maxwidth)
|
36
|
+
def self.format(source, maxwidth = 80, options: Formatter::Options.new)
|
37
|
+
formatter = Format::Formatter.new(source, +"", maxwidth, options: options)
|
38
38
|
parse(source).format(formatter)
|
39
39
|
|
40
40
|
formatter.flush
|
@@ -59,24 +59,26 @@ class Haml::Parser::ParseNode
|
|
59
59
|
# accept a visitor in order to walk through the tree.
|
60
60
|
def accept(visitor)
|
61
61
|
case type
|
62
|
-
|
62
|
+
when :comment
|
63
63
|
visitor.visit_comment(self)
|
64
|
-
|
64
|
+
when :doctype
|
65
65
|
visitor.visit_doctype(self)
|
66
|
-
|
66
|
+
when :filter
|
67
67
|
visitor.visit_filter(self)
|
68
|
-
|
68
|
+
when :haml_comment
|
69
69
|
visitor.visit_haml_comment(self)
|
70
|
-
|
70
|
+
when :plain
|
71
71
|
visitor.visit_plain(self)
|
72
|
-
|
72
|
+
when :root
|
73
73
|
visitor.visit_root(self)
|
74
|
-
|
74
|
+
when :script
|
75
75
|
visitor.visit_script(self)
|
76
|
-
|
76
|
+
when :silent_script
|
77
77
|
visitor.visit_silent_script(self)
|
78
|
-
|
78
|
+
when :tag
|
79
79
|
visitor.visit_tag(self)
|
80
|
+
else
|
81
|
+
raise "Unknown node type: #{type}"
|
80
82
|
end
|
81
83
|
end
|
82
84
|
|
data/syntax_tree-haml.gemspec
CHANGED
@@ -24,10 +24,9 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
25
25
|
spec.require_paths = %w[lib]
|
26
26
|
|
27
|
-
|
28
|
-
spec.add_dependency "haml", ">= 5.2", "!= 6.0.0"
|
27
|
+
spec.add_dependency "haml", ">= 5.2"
|
29
28
|
spec.add_dependency "prettier_print", ">= 1.0.0"
|
30
|
-
spec.add_dependency "syntax_tree", ">=
|
29
|
+
spec.add_dependency "syntax_tree", ">= 6.0.0"
|
31
30
|
|
32
31
|
spec.add_development_dependency "bundler"
|
33
32
|
spec.add_development_dependency "minitest"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: syntax_tree-haml
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kevin Newton
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-03-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: haml
|
@@ -17,9 +17,6 @@ dependencies:
|
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '5.2'
|
20
|
-
- - "!="
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: 6.0.0
|
23
20
|
type: :runtime
|
24
21
|
prerelease: false
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -27,9 +24,6 @@ dependencies:
|
|
27
24
|
- - ">="
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '5.2'
|
30
|
-
- - "!="
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version: 6.0.0
|
33
27
|
- !ruby/object:Gem::Dependency
|
34
28
|
name: prettier_print
|
35
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -50,14 +44,14 @@ dependencies:
|
|
50
44
|
requirements:
|
51
45
|
- - ">="
|
52
46
|
- !ruby/object:Gem::Version
|
53
|
-
version:
|
47
|
+
version: 6.0.0
|
54
48
|
type: :runtime
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
51
|
requirements:
|
58
52
|
- - ">="
|
59
53
|
- !ruby/object:Gem::Version
|
60
|
-
version:
|
54
|
+
version: 6.0.0
|
61
55
|
- !ruby/object:Gem::Dependency
|
62
56
|
name: bundler
|
63
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -159,7 +153,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
159
153
|
- !ruby/object:Gem::Version
|
160
154
|
version: '0'
|
161
155
|
requirements: []
|
162
|
-
rubygems_version: 3.
|
156
|
+
rubygems_version: 3.4.1
|
163
157
|
signing_key:
|
164
158
|
specification_version: 4
|
165
159
|
summary: Syntax Tree support for Haml
|