syntax_tree-haml 1.3.2 → 3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bddc6888f36d28a1f0829960a0be5a71edb719342895c68a1635f474fe977634
4
- data.tar.gz: b56774e91f16a8521ca888824f84a4d9dbd3242837d74107add7255f3bc571d7
3
+ metadata.gz: 93531550f281631f3aa86988c3309f3a48250bd6e218c3712013bbcc1a590480
4
+ data.tar.gz: f8cf31bae239650f86a13dd8d0bdda41c5eab011bbd1ae829656df387b22b1bf
5
5
  SHA512:
6
- metadata.gz: e9b36d29e67e7ea5424825a8344580c3560e7a49672fceb121eec6959a4e0becbb0a8481e935450c3566e6c5647062f90ad6b9411d2d8ce202d2c98b4695eece
7
- data.tar.gz: 35dcaa252fdfe1b53bf8904feb2d312cd7c6f353bc48343f0944a030c315a9289bce62a6578f5c6d5813d992c35681cb9770abd66e2cc5ea53fab3389b8b4f7f
6
+ metadata.gz: caac6d625f266b6ac4d5808065573f2ae70de84ad3670cbed2c1cea8089e75e1f8986e5391f0349975ff0d1cb32a65aa114e3d3578207be46b8637358162f06a
7
+ data.tar.gz: fc8b9c900b04d1a6536ac7d7299d66be150111d11989f855e5bfd17820939fefca789f09fd8c830e761721a3ffc396c2a54865792e9c242e66de498efe5aef8d
@@ -0,0 +1,22 @@
1
+ name: Dependabot auto-merge
2
+ on: pull_request
3
+
4
+ permissions:
5
+ contents: write
6
+ pull-requests: write
7
+
8
+ jobs:
9
+ dependabot:
10
+ runs-on: ubuntu-latest
11
+ if: ${{ github.actor == 'dependabot[bot]' }}
12
+ steps:
13
+ - name: Dependabot metadata
14
+ id: metadata
15
+ uses: dependabot/fetch-metadata@v1.3.3
16
+ with:
17
+ github-token: "${{ secrets.GITHUB_TOKEN }}"
18
+ - name: Enable auto-merge for Dependabot PRs
19
+ run: gh pr merge --auto --merge "$PR_URL"
20
+ env:
21
+ PR_URL: ${{github.event.pull_request.html_url}}
22
+ GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
@@ -1,14 +1,17 @@
1
1
  name: Main
2
2
  on:
3
- - push
4
- - pull_request_target
3
+ push:
4
+ branches:
5
+ - main
6
+ pull_request: {}
5
7
  jobs:
6
8
  ci:
7
9
  strategy:
8
10
  fail-fast: false
9
11
  matrix:
10
12
  ruby:
11
- - '2.7'
13
+ - '2.7.0'
14
+ - '2.7.5'
12
15
  - '3.0'
13
16
  - '3.1'
14
17
  name: CI
@@ -16,7 +19,7 @@ jobs:
16
19
  env:
17
20
  CI: true
18
21
  steps:
19
- - uses: actions/checkout@master
22
+ - uses: actions/checkout@v3
20
23
  - uses: ruby/setup-ruby@v1
21
24
  with:
22
25
  bundler-cache: true
@@ -25,17 +28,3 @@ jobs:
25
28
  run: |
26
29
  bundle exec rake test
27
30
  bundle exec rake stree:check
28
- automerge:
29
- name: AutoMerge
30
- needs: ci
31
- runs-on: ubuntu-latest
32
- if: github.event_name == 'pull_request_target' && github.actor == 'dependabot[bot]'
33
- steps:
34
- - uses: actions/github-script@v3
35
- with:
36
- script: |
37
- github.pulls.merge({
38
- owner: context.payload.repository.owner.login,
39
- repo: context.payload.repository.name,
40
- pull_number: context.payload.pull_request.number
41
- })
data/CHANGELOG.md CHANGED
@@ -6,6 +6,25 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [3.0.0] - 2022-12-23
10
+
11
+ ### Changed
12
+
13
+ - Required syntax_tree version 5.0.1 or higher.
14
+ - Drop internal pattern matching in order to support Ruby implementations that don't support it.
15
+
16
+ ## [2.0.0] - 2022-10-18
17
+
18
+ ### Added
19
+
20
+ - Support for Ruby 2.7.0, not just 2.7.3
21
+ - Require syntax_tree 4.0.1 or higher.
22
+ - Require prettier_print 1.0.0 or higher.
23
+
24
+ ### Changed
25
+
26
+ - Nodes must now be formatted with a `SyntaxTree::Haml::Formatter`.
27
+
9
28
  ## [1.3.2] - 2022-09-19
10
29
 
11
30
  ### Added
@@ -60,7 +79,9 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
60
79
 
61
80
  - 🎉 Initial release! 🎉
62
81
 
63
- [unreleased]: https://github.com/ruby-syntax-tree/syntax_tree-haml/compare/v1.3.2...HEAD
82
+ [unreleased]: https://github.com/ruby-syntax-tree/syntax_tree-haml/compare/v3.0.0...HEAD
83
+ [3.0.0]: https://github.com/ruby-syntax-tree/syntax_tree-haml/compare/v2.0.0...v3.0.0
84
+ [2.0.0]: https://github.com/ruby-syntax-tree/syntax_tree-haml/compare/v1.3.2...v2.0.0
64
85
  [1.3.2]: https://github.com/ruby-syntax-tree/syntax_tree-haml/compare/v1.3.1...v1.3.2
65
86
  [1.3.1]: https://github.com/ruby-syntax-tree/syntax_tree-haml/compare/v1.3.0...v1.3.1
66
87
  [1.3.0]: https://github.com/ruby-syntax-tree/syntax_tree-haml/compare/v1.2.1...v1.3.0
data/Gemfile.lock CHANGED
@@ -1,20 +1,21 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- syntax_tree-haml (1.3.2)
5
- haml (>= 5.2)
6
- prettier_print
7
- syntax_tree (>= 2.0.1)
4
+ syntax_tree-haml (3.0.0)
5
+ haml (>= 5.2, != 6.0.0)
6
+ prettier_print (>= 1.0.0)
7
+ syntax_tree (>= 5.0.1)
8
8
 
9
9
  GEM
10
10
  remote: https://rubygems.org/
11
11
  specs:
12
12
  docile (1.4.0)
13
- haml (5.2.2)
14
- temple (>= 0.8.0)
13
+ haml (6.1.1)
14
+ temple (>= 0.8.2)
15
+ thor
15
16
  tilt
16
17
  minitest (5.16.3)
17
- prettier_print (0.1.0)
18
+ prettier_print (1.1.0)
18
19
  rake (13.0.6)
19
20
  simplecov (0.21.2)
20
21
  docile (~> 1.1)
@@ -22,9 +23,10 @@ GEM
22
23
  simplecov_json_formatter (~> 0.1)
23
24
  simplecov-html (0.12.3)
24
25
  simplecov_json_formatter (0.1.4)
25
- syntax_tree (3.6.0)
26
- prettier_print
27
- temple (0.8.2)
26
+ syntax_tree (5.0.1)
27
+ prettier_print (>= 1.1.0)
28
+ temple (0.9.1)
29
+ thor (1.2.1)
28
30
  tilt (2.0.11)
29
31
 
30
32
  PLATFORMS
@@ -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, :quote
7
+ attr_reader :literal_lines
8
8
 
9
- def initialize(source, ...)
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, ...)
22
+ super(source, *rest, options: options)
19
23
  end
20
24
  end
21
25
 
@@ -62,11 +66,17 @@ module SyntaxTree
62
66
  q.text(node.value[:name])
63
67
 
64
68
  q.indent do
65
- q.breakable(force: true)
69
+ q.breakable_force
70
+ first = true
66
71
 
67
- segments = node.value[:text].strip.split("\n")
68
- q.seplist(segments, -> { q.breakable(force: true) }) do |segment|
69
- q.text(segment)
72
+ node.value[:text].each_line(chomp: true) do |line|
73
+ if first
74
+ first = false
75
+ else
76
+ q.breakable_force
77
+ end
78
+
79
+ q.text(line)
70
80
  end
71
81
  end
72
82
  end
@@ -78,11 +88,19 @@ module SyntaxTree
78
88
  text = node.value[:text].strip
79
89
 
80
90
  if text.include?("\n")
81
- separator = -> { q.breakable(force: true) }
82
-
83
91
  q.indent do
84
- separator.call
85
- q.seplist(text.split("\n"), separator) { |segment| q.text(segment) }
92
+ q.breakable_force
93
+ first = true
94
+
95
+ text.each_line(chomp: true) do |line|
96
+ if first
97
+ first = false
98
+ else
99
+ q.breakable_force
100
+ end
101
+
102
+ q.text(line)
103
+ end
86
104
  end
87
105
  else
88
106
  q.text(" #{text}")
@@ -104,7 +122,7 @@ module SyntaxTree
104
122
  def visit_root(node)
105
123
  node.children.each do |child|
106
124
  visit(child)
107
- q.breakable(force: true)
125
+ q.breakable_force
108
126
  end
109
127
  end
110
128
 
@@ -130,11 +148,11 @@ module SyntaxTree
130
148
 
131
149
  node.children.each do |child|
132
150
  if continuation?(node, child)
133
- q.breakable(force: true)
151
+ q.breakable_force
134
152
  visit(child)
135
153
  else
136
154
  q.indent do
137
- q.breakable(force: true)
155
+ q.breakable_force
138
156
  visit(child)
139
157
  end
140
158
  end
@@ -143,7 +161,6 @@ module SyntaxTree
143
161
  end
144
162
 
145
163
  LiteralHashValue = Struct.new(:value)
146
-
147
164
  StringHashValue = Struct.new(:value, :quote)
148
165
 
149
166
  # When formatting a tag, there are a lot of different kinds of things that
@@ -201,6 +218,14 @@ module SyntaxTree
201
218
  end
202
219
 
203
220
  class HTMLAttributesPart
221
+ class Separator
222
+ def call(q)
223
+ q.fill_breakable
224
+ end
225
+ end
226
+
227
+ SEPARATOR = Separator.new
228
+
204
229
  attr_reader :values
205
230
 
206
231
  def initialize(raw)
@@ -214,11 +239,9 @@ module SyntaxTree
214
239
  q.group do
215
240
  q.text("(")
216
241
  q.nest(align) do
217
- q.seplist(
218
- values,
219
- -> { q.fill_breakable },
220
- :each_pair
221
- ) { |key, value| q.text("#{key}=#{value}") }
242
+ q.seplist(values, SEPARATOR, :each_pair) do |key, value|
243
+ q.text("#{key}=#{value}")
244
+ end
222
245
  end
223
246
  q.text(")")
224
247
  end
@@ -249,7 +272,7 @@ module SyntaxTree
249
272
  q.text("{")
250
273
  q.indent do
251
274
  q.group do
252
- q.breakable(level == 0 ? "" : " ")
275
+ level == 0 ? q.breakable_empty : q.breakable_space
253
276
  q.seplist(hash, nil, :each_pair) do |key, value|
254
277
  if key.match?(/^@|[-:]/)
255
278
  q.text("#{quote}#{Quotes.normalize(key, quote)}#{quote}:")
@@ -275,7 +298,7 @@ module SyntaxTree
275
298
  end
276
299
  end
277
300
 
278
- q.breakable(level == 0 ? "" : " ")
301
+ level == 0 ? q.breakable_empty : q.breakable_space
279
302
  q.text("}")
280
303
  end
281
304
  end
@@ -363,7 +386,7 @@ module SyntaxTree
363
386
  q.indent do
364
387
  # Split between the declaration of the tag and the contents of the
365
388
  # tag.
366
- q.breakable("")
389
+ q.breakable_empty
367
390
 
368
391
  if node.value[:parse] && value.match?(/#[{$@]/)
369
392
  # There's a weird case here where if the value includes
@@ -373,8 +396,7 @@ module SyntaxTree
373
396
  q.if_break { q.text("") }.if_flat { q.text(" ") }
374
397
  q.text(value[1...-1].gsub(/\\"/, "\""))
375
398
  elsif node.value[:parse]
376
- q.text("= ")
377
- q.text(value)
399
+ q.text("= #{value}")
378
400
  else
379
401
  q.if_break { q.text("") }.if_flat { q.text(" ") }
380
402
  q.text(value)
@@ -394,11 +416,11 @@ module SyntaxTree
394
416
  def continuation?(node, child)
395
417
  return false if child.type != :silent_script
396
418
 
397
- case [node.value[:keyword], child.value[:keyword]]
398
- in ["case", "in" | "when" | "else"]
399
- true
400
- in ["if" | "unless", "elsif" | "else"]
401
- true
419
+ case node.value[:keyword]
420
+ when "case"
421
+ %w[in when else].include?(child.value[:keyword])
422
+ when "if", "unless"
423
+ %w[elsif else].include?(child.value[:keyword])
402
424
  else
403
425
  false
404
426
  end
@@ -413,14 +435,15 @@ module SyntaxTree
413
435
  end
414
436
  end
415
437
 
416
- # Take a source string and attempt to parse it into a set of attributes that
417
- # can be used to format the source.
438
+ # Take a source string and attempt to parse it into a set of attributes
439
+ # that can be used to format the source.
418
440
  def parse_attributes(source)
419
- case Ripper.sexp(source)
420
- in [:program, [[:hash, *], *]] if parsed =
421
- ::Haml::AttributeParser.parse(source)
441
+ program = Ripper.sexp(source)
442
+ type = program && program[1][0][0]
443
+
444
+ if type == :hash && (parsed = ::Haml::AttributeParser.parse(source))
422
445
  parsed.to_h { |key, value| [key, parse_attributes(value)] }
423
- in [:program, [[:string_literal, *], *]]
446
+ elsif type == :string_literal
424
447
  SyntaxTree.parse(source).statements.body[0]
425
448
  else
426
449
  LiteralHashValue.new(source)
@@ -435,7 +458,7 @@ module SyntaxTree
435
458
  q.group { yield }
436
459
  q.indent do
437
460
  node.children.each do |child|
438
- q.breakable(force: true)
461
+ q.breakable_force
439
462
  visit(child)
440
463
  end
441
464
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module SyntaxTree
4
4
  module Haml
5
- VERSION = "1.3.2"
5
+ VERSION = "3.0.0"
6
6
  end
7
7
  end
@@ -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
- in :comment
62
+ when :comment
63
63
  visitor.visit_comment(self)
64
- in :doctype
64
+ when :doctype
65
65
  visitor.visit_doctype(self)
66
- in :filter
66
+ when :filter
67
67
  visitor.visit_filter(self)
68
- in :haml_comment
68
+ when :haml_comment
69
69
  visitor.visit_haml_comment(self)
70
- in :plain
70
+ when :plain
71
71
  visitor.visit_plain(self)
72
- in :root
72
+ when :root
73
73
  visitor.visit_root(self)
74
- in :script
74
+ when :script
75
75
  visitor.visit_script(self)
76
- in :silent_script
76
+ when :silent_script
77
77
  visitor.visit_silent_script(self)
78
- in :tag
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
 
@@ -24,9 +24,10 @@ 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
- spec.add_dependency "haml", ">= 5.2"
28
- spec.add_dependency "prettier_print"
29
- spec.add_dependency "syntax_tree", ">= 2.0.1"
27
+ # Can't use 6.0.0 due to https://github.com/haml/haml/issues/1085
28
+ spec.add_dependency "haml", ">= 5.2", "!= 6.0.0"
29
+ spec.add_dependency "prettier_print", ">= 1.0.0"
30
+ spec.add_dependency "syntax_tree", ">= 5.0.1"
30
31
 
31
32
  spec.add_development_dependency "bundler"
32
33
  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: 1.3.2
4
+ version: 3.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: 2022-09-19 00:00:00.000000000 Z
11
+ date: 2022-12-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: haml
@@ -17,6 +17,9 @@ 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
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -24,34 +27,37 @@ dependencies:
24
27
  - - ">="
25
28
  - !ruby/object:Gem::Version
26
29
  version: '5.2'
30
+ - - "!="
31
+ - !ruby/object:Gem::Version
32
+ version: 6.0.0
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: prettier_print
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
31
37
  - - ">="
32
38
  - !ruby/object:Gem::Version
33
- version: '0'
39
+ version: 1.0.0
34
40
  type: :runtime
35
41
  prerelease: false
36
42
  version_requirements: !ruby/object:Gem::Requirement
37
43
  requirements:
38
44
  - - ">="
39
45
  - !ruby/object:Gem::Version
40
- version: '0'
46
+ version: 1.0.0
41
47
  - !ruby/object:Gem::Dependency
42
48
  name: syntax_tree
43
49
  requirement: !ruby/object:Gem::Requirement
44
50
  requirements:
45
51
  - - ">="
46
52
  - !ruby/object:Gem::Version
47
- version: 2.0.1
53
+ version: 5.0.1
48
54
  type: :runtime
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
51
57
  requirements:
52
58
  - - ">="
53
59
  - !ruby/object:Gem::Version
54
- version: 2.0.1
60
+ version: 5.0.1
55
61
  - !ruby/object:Gem::Dependency
56
62
  name: bundler
57
63
  requirement: !ruby/object:Gem::Requirement
@@ -116,6 +122,7 @@ extensions: []
116
122
  extra_rdoc_files: []
117
123
  files:
118
124
  - ".github/dependabot.yml"
125
+ - ".github/workflows/auto-merge.yml"
119
126
  - ".github/workflows/main.yml"
120
127
  - ".gitignore"
121
128
  - CHANGELOG.md