prettier_print 1.0.2 → 1.1.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: 81a51b0f4acf29f5f26a1eb71aa7f682c48a1a4cde776eb27140304a0b2e970f
4
- data.tar.gz: 7b72b908730bcff4c4c71205e2c3ee8f3ea77d791873543195c55efb07a78320
3
+ metadata.gz: 94274541967c7d4bb242bbbd4b141e8166d3239c27a03fb28fe606807fa2f302
4
+ data.tar.gz: c27c69952f928c0533121941c584bda279966d5b0c04d78671d067d4479c3fbe
5
5
  SHA512:
6
- metadata.gz: c5f85439e98bb48f9357b7ef1fbb98f5f85153d921e220ffd77c6e0f4d9aad76975374f8ba4f056770622d807232e5dbb5cdf43938e609f5d22d02a64a67e4fb
7
- data.tar.gz: f4de2a0f56adb16425bc26861e1a20c05b29db8f8e47fce164e5c1695e731f878e048ab6e042f94f7774fab9b55a6e32c0eb4ac058d82e56c7f640ef57124a6a
6
+ metadata.gz: 4d79d0c356c618ba5c89070f708f44993f43efaec89bba478d52c9432b1295dce150555fd1f242d48060ba4cf3152207b8d02d5b3d8121722b71af60b133098c
7
+ data.tar.gz: ae5fcfb0885b70c3e1de247da94fedca3d0897a2345efca6f231c3bbdb9565d2ccb2b8b18796c1226d2ede30fdc54bd1baa1d6138d5c1c777e8c6a875574db46
@@ -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}}
@@ -24,19 +24,3 @@ jobs:
24
24
  ruby-version: ${{ matrix.ruby }}
25
25
  - name: Test
26
26
  run: bundle exec rake test
27
-
28
- automerge:
29
- name: AutoMerge
30
- needs:
31
- - ci
32
- runs-on: ubuntu-latest
33
- if: github.event_name == 'pull_request_target' && github.actor == 'dependabot[bot]'
34
- steps:
35
- - uses: actions/github-script@v3
36
- with:
37
- script: |
38
- github.pulls.merge({
39
- owner: context.payload.repository.owner.login,
40
- repo: context.payload.repository.name,
41
- pull_number: context.payload.pull_request.number
42
- })
data/CHANGELOG.md CHANGED
@@ -6,6 +6,12 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [1.1.0] - 2022-11-08
10
+
11
+ ### Added
12
+
13
+ - `prettier_print` now works with Ractors.
14
+
9
15
  ## [1.0.2] - 2022-10-19
10
16
 
11
17
  ### Changed
@@ -43,7 +49,8 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
43
49
 
44
50
  - 🎉 Initial release! 🎉
45
51
 
46
- [unreleased]: https://github.com/ruby-syntax-tree/prettier_print/compare/v1.0.2...HEAD
52
+ [unreleased]: https://github.com/ruby-syntax-tree/prettier_print/compare/v1.1.0...HEAD
53
+ [1.1.0]: https://github.com/ruby-syntax-tree/prettier_print/compare/v1.0.2...v1.1.0
47
54
  [1.0.2]: https://github.com/ruby-syntax-tree/prettier_print/compare/v1.0.1...v1.0.2
48
55
  [1.0.1]: https://github.com/ruby-syntax-tree/prettier_print/compare/v1.0.0...v1.0.1
49
56
  [1.0.0]: https://github.com/ruby-syntax-tree/prettier_print/compare/v0.1.0...v1.0.0
data/Gemfile CHANGED
@@ -4,5 +4,6 @@ source "https://rubygems.org"
4
4
 
5
5
  gemspec
6
6
 
7
+ gem "simplecov"
7
8
  gem "rake"
8
9
  gem "test-unit"
data/Gemfile.lock CHANGED
@@ -1,13 +1,20 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- prettier_print (1.0.2)
4
+ prettier_print (1.1.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
+ docile (1.4.0)
9
10
  power_assert (2.0.1)
10
11
  rake (13.0.6)
12
+ simplecov (0.21.2)
13
+ docile (~> 1.1)
14
+ simplecov-html (~> 0.11)
15
+ simplecov_json_formatter (~> 0.1)
16
+ simplecov-html (0.12.3)
17
+ simplecov_json_formatter (0.1.4)
11
18
  test-unit (3.5.5)
12
19
  power_assert
13
20
 
@@ -19,6 +26,7 @@ PLATFORMS
19
26
  DEPENDENCIES
20
27
  prettier_print!
21
28
  rake
29
+ simplecov
22
30
  test-unit
23
31
 
24
32
  BUNDLED WITH
@@ -0,0 +1,166 @@
1
+ # frozen_string_literal: true
2
+
3
+ class PrettierPrint
4
+ # PrettierPrint::SingleLine is used by PrettierPrint.singleline_format
5
+ #
6
+ # It is passed to be similar to a PrettierPrint object itself, by responding to
7
+ # all of the same print tree node builder methods, as well as the #flush
8
+ # method.
9
+ #
10
+ # The significant difference here is that there are no line breaks in the
11
+ # output. If an IfBreak node is used, only the flat contents are printed.
12
+ # LineSuffix nodes are printed at the end of the buffer when #flush is called.
13
+ class SingleLine
14
+ # The output object. It stores rendered text and should respond to <<.
15
+ attr_reader :output
16
+
17
+ # The current array of contents that the print tree builder methods should
18
+ # append to.
19
+ attr_reader :target
20
+
21
+ # A buffer output that wraps any calls to line_suffix that will be flushed
22
+ # at the end of printing.
23
+ attr_reader :line_suffixes
24
+
25
+ # Create a PrettierPrint::SingleLine object
26
+ #
27
+ # Arguments:
28
+ # * +output+ - String (or similar) to store rendered text. Needs to respond
29
+ # to '<<'.
30
+ # * +maxwidth+ - Argument position expected to be here for compatibility.
31
+ # This argument is a noop.
32
+ # * +newline+ - Argument position expected to be here for compatibility.
33
+ # This argument is a noop.
34
+ def initialize(output, _maxwidth = nil, _newline = nil)
35
+ @output = Buffer.for(output)
36
+ @target = @output
37
+ @line_suffixes = Buffer::ArrayBuffer.new
38
+ end
39
+
40
+ # Flushes the line suffixes onto the output buffer.
41
+ def flush
42
+ line_suffixes.output.each { |doc| output << doc }
43
+ end
44
+
45
+ # --------------------------------------------------------------------------
46
+ # Markers node builders
47
+ # --------------------------------------------------------------------------
48
+
49
+ # Appends +separator+ to the text to be output. By default +separator+ is
50
+ # ' '
51
+ #
52
+ # The +width+, +indent+, and +force+ arguments are here for compatibility.
53
+ # They are all noop arguments.
54
+ def breakable(
55
+ separator = " ",
56
+ _width = separator.length,
57
+ indent: nil,
58
+ force: nil
59
+ )
60
+ target << separator
61
+ end
62
+
63
+ # Here for compatibility, does nothing.
64
+ def break_parent
65
+ end
66
+
67
+ # Appends +separator+ to the output buffer. +width+ is a noop here for
68
+ # compatibility.
69
+ def fill_breakable(separator = " ", _width = separator.length)
70
+ target << separator
71
+ end
72
+
73
+ # Immediately trims the output buffer.
74
+ def trim
75
+ target.trim!
76
+ end
77
+
78
+ # --------------------------------------------------------------------------
79
+ # Container node builders
80
+ # --------------------------------------------------------------------------
81
+
82
+ # Opens a block for grouping objects to be pretty printed.
83
+ #
84
+ # Arguments:
85
+ # * +indent+ - noop argument. Present for compatibility.
86
+ # * +open_obj+ - text appended before the &block. Default is ''
87
+ # * +close_obj+ - text appended after the &block. Default is ''
88
+ # * +open_width+ - noop argument. Present for compatibility.
89
+ # * +close_width+ - noop argument. Present for compatibility.
90
+ def group(
91
+ _indent = nil,
92
+ open_object = "",
93
+ close_object = "",
94
+ _open_width = nil,
95
+ _close_width = nil
96
+ )
97
+ target << open_object
98
+ yield
99
+ target << close_object
100
+ end
101
+
102
+ # A class that wraps the ability to call #if_flat. The contents of the
103
+ # #if_flat block are executed immediately, so effectively this class and the
104
+ # #if_break method that triggers it are unnecessary, but they're here to
105
+ # maintain compatibility.
106
+ class IfBreakBuilder
107
+ def if_flat
108
+ yield
109
+ end
110
+ end
111
+
112
+ # Effectively unnecessary, but here for compatibility.
113
+ def if_break
114
+ IfBreakBuilder.new
115
+ end
116
+
117
+ # Also effectively unnecessary, but here for compatibility.
118
+ def if_flat
119
+ end
120
+
121
+ # A noop that immediately yields.
122
+ def indent
123
+ yield
124
+ end
125
+
126
+ # Changes the target output buffer to the line suffix output buffer which
127
+ # will get flushed at the end of printing.
128
+ def line_suffix
129
+ previous_target, @target = @target, line_suffixes
130
+ yield
131
+ @target = previous_target
132
+ end
133
+
134
+ # Takes +indent+ arg, but does nothing with it.
135
+ #
136
+ # Yields to a block.
137
+ def nest(_indent)
138
+ yield
139
+ end
140
+
141
+ # Add +object+ to the text to be output.
142
+ #
143
+ # +width+ argument is here for compatibility. It is a noop argument.
144
+ def text(object = "", _width = nil)
145
+ target << object
146
+ end
147
+ end
148
+
149
+ # This is similar to PrettierPrint::format but the result has no breaks.
150
+ #
151
+ # +maxwidth+, +newline+ and +genspace+ are ignored.
152
+ #
153
+ # The invocation of +breakable+ in the block doesn't break a line and is
154
+ # treated as just an invocation of +text+.
155
+ #
156
+ def self.singleline_format(
157
+ output = +"",
158
+ _maxwidth = nil,
159
+ _newline = nil,
160
+ _genspace = nil
161
+ )
162
+ q = SingleLine.new(output)
163
+ yield q
164
+ output
165
+ end
166
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class PrettierPrint
4
- VERSION = "1.0.2"
4
+ VERSION = "1.1.0"
5
5
  end
@@ -122,10 +122,10 @@ class PrettierPrint
122
122
 
123
123
  # Below here are the most common combination of options that are created when
124
124
  # creating new breakables. They are here to cut down on some allocations.
125
- BREAKABLE_SPACE = Breakable.new(" ", 1, indent: true, force: false)
126
- BREAKABLE_EMPTY = Breakable.new("", 0, indent: true, force: false)
127
- BREAKABLE_FORCE = Breakable.new(" ", 1, indent: true, force: true)
128
- BREAKABLE_RETURN = Breakable.new(" ", 1, indent: false, force: true)
125
+ BREAKABLE_SPACE = Breakable.new(" ", 1, indent: true, force: false).freeze
126
+ BREAKABLE_EMPTY = Breakable.new("", 0, indent: true, force: false).freeze
127
+ BREAKABLE_FORCE = Breakable.new(" ", 1, indent: true, force: true).freeze
128
+ BREAKABLE_RETURN = Breakable.new(" ", 1, indent: false, force: true).freeze
129
129
 
130
130
  # A node in the print tree that forces the surrounding group to print out in
131
131
  # the "break" mode as opposed to the "flat" mode. Useful for when you need to
@@ -138,7 +138,7 @@ class PrettierPrint
138
138
 
139
139
  # Since there's really no difference in these instances, just using the same
140
140
  # one saves on some allocations.
141
- BREAK_PARENT = BreakParent.new
141
+ BREAK_PARENT = BreakParent.new.freeze
142
142
 
143
143
  # A node in the print tree that represents a group of items which the printer
144
144
  # should try to fit onto one line. This is the basic command to tell the
@@ -267,7 +267,7 @@ class PrettierPrint
267
267
 
268
268
  # Since all of the instances here are the same, we can reuse the same one to
269
269
  # cut down on allocations.
270
- TRIM = Trim.new
270
+ TRIM = Trim.new.freeze
271
271
 
272
272
  # When building up the contents in the output buffer, it's convenient to be
273
273
  # able to trim trailing whitespace before newlines. If the output object is a
@@ -338,151 +338,6 @@ class PrettierPrint
338
338
  end
339
339
  end
340
340
 
341
- # PrettierPrint::SingleLine is used by PrettierPrint.singleline_format
342
- #
343
- # It is passed to be similar to a PrettierPrint object itself, by responding to
344
- # all of the same print tree node builder methods, as well as the #flush
345
- # method.
346
- #
347
- # The significant difference here is that there are no line breaks in the
348
- # output. If an IfBreak node is used, only the flat contents are printed.
349
- # LineSuffix nodes are printed at the end of the buffer when #flush is called.
350
- class SingleLine
351
- # The output object. It stores rendered text and should respond to <<.
352
- attr_reader :output
353
-
354
- # The current array of contents that the print tree builder methods should
355
- # append to.
356
- attr_reader :target
357
-
358
- # A buffer output that wraps any calls to line_suffix that will be flushed
359
- # at the end of printing.
360
- attr_reader :line_suffixes
361
-
362
- # Create a PrettierPrint::SingleLine object
363
- #
364
- # Arguments:
365
- # * +output+ - String (or similar) to store rendered text. Needs to respond
366
- # to '<<'.
367
- # * +maxwidth+ - Argument position expected to be here for compatibility.
368
- # This argument is a noop.
369
- # * +newline+ - Argument position expected to be here for compatibility.
370
- # This argument is a noop.
371
- def initialize(output, _maxwidth = nil, _newline = nil)
372
- @output = Buffer.for(output)
373
- @target = @output
374
- @line_suffixes = Buffer::ArrayBuffer.new
375
- end
376
-
377
- # Flushes the line suffixes onto the output buffer.
378
- def flush
379
- line_suffixes.output.each { |doc| output << doc }
380
- end
381
-
382
- # --------------------------------------------------------------------------
383
- # Markers node builders
384
- # --------------------------------------------------------------------------
385
-
386
- # Appends +separator+ to the text to be output. By default +separator+ is
387
- # ' '
388
- #
389
- # The +width+, +indent+, and +force+ arguments are here for compatibility.
390
- # They are all noop arguments.
391
- def breakable(
392
- separator = " ",
393
- _width = separator.length,
394
- indent: nil,
395
- force: nil
396
- )
397
- target << separator
398
- end
399
-
400
- # Here for compatibility, does nothing.
401
- def break_parent
402
- end
403
-
404
- # Appends +separator+ to the output buffer. +width+ is a noop here for
405
- # compatibility.
406
- def fill_breakable(separator = " ", _width = separator.length)
407
- target << separator
408
- end
409
-
410
- # Immediately trims the output buffer.
411
- def trim
412
- target.trim!
413
- end
414
-
415
- # --------------------------------------------------------------------------
416
- # Container node builders
417
- # --------------------------------------------------------------------------
418
-
419
- # Opens a block for grouping objects to be pretty printed.
420
- #
421
- # Arguments:
422
- # * +indent+ - noop argument. Present for compatibility.
423
- # * +open_obj+ - text appended before the &block. Default is ''
424
- # * +close_obj+ - text appended after the &block. Default is ''
425
- # * +open_width+ - noop argument. Present for compatibility.
426
- # * +close_width+ - noop argument. Present for compatibility.
427
- def group(
428
- _indent = nil,
429
- open_object = "",
430
- close_object = "",
431
- _open_width = nil,
432
- _close_width = nil
433
- )
434
- target << open_object
435
- yield
436
- target << close_object
437
- end
438
-
439
- # A class that wraps the ability to call #if_flat. The contents of the
440
- # #if_flat block are executed immediately, so effectively this class and the
441
- # #if_break method that triggers it are unnecessary, but they're here to
442
- # maintain compatibility.
443
- class IfBreakBuilder
444
- def if_flat
445
- yield
446
- end
447
- end
448
-
449
- # Effectively unnecessary, but here for compatibility.
450
- def if_break
451
- IfBreakBuilder.new
452
- end
453
-
454
- # Also effectively unnecessary, but here for compatibility.
455
- def if_flat
456
- end
457
-
458
- # A noop that immediately yields.
459
- def indent
460
- yield
461
- end
462
-
463
- # Changes the target output buffer to the line suffix output buffer which
464
- # will get flushed at the end of printing.
465
- def line_suffix
466
- previous_target, @target = @target, line_suffixes
467
- yield
468
- @target = previous_target
469
- end
470
-
471
- # Takes +indent+ arg, but does nothing with it.
472
- #
473
- # Yields to a block.
474
- def nest(_indent)
475
- yield
476
- end
477
-
478
- # Add +object+ to the text to be output.
479
- #
480
- # +width+ argument is here for compatibility. It is a noop argument.
481
- def text(object = "", _width = nil)
482
- target << object
483
- end
484
- end
485
-
486
341
  # When printing, you can optionally specify the value that should be used
487
342
  # whenever a group needs to be broken onto multiple lines. In this case the
488
343
  # default is \n.
@@ -493,6 +348,7 @@ class PrettierPrint
493
348
  # behavior (for instance to use tabs) by passing a different genspace
494
349
  # procedure.
495
350
  DEFAULT_GENSPACE = ->(n) { " " * n }
351
+ Ractor.make_shareable(DEFAULT_GENSPACE) if defined?(Ractor)
496
352
 
497
353
  # There are two modes in printing, break and flat. When we're in break mode,
498
354
  # any lines will use their newline, any if-breaks will use their break
@@ -525,24 +381,6 @@ class PrettierPrint
525
381
  output
526
382
  end
527
383
 
528
- # This is similar to PrettierPrint::format but the result has no breaks.
529
- #
530
- # +maxwidth+, +newline+ and +genspace+ are ignored.
531
- #
532
- # The invocation of +breakable+ in the block doesn't break a line and is
533
- # treated as just an invocation of +text+.
534
- #
535
- def self.singleline_format(
536
- output = +"",
537
- _maxwidth = nil,
538
- _newline = nil,
539
- _genspace = nil
540
- )
541
- q = SingleLine.new(output)
542
- yield q
543
- output
544
- end
545
-
546
384
  # The output object. It represents the final destination of the contents of
547
385
  # the print tree. It should respond to <<.
548
386
  #
@@ -1251,3 +1089,5 @@ class PrettierPrint
1251
1089
  end
1252
1090
  end
1253
1091
  end
1092
+
1093
+ require_relative "prettier_print/single_line"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prettier_print
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.1.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-10-19 00:00:00.000000000 Z
11
+ date: 2022-11-09 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email:
@@ -18,6 +18,7 @@ extensions: []
18
18
  extra_rdoc_files: []
19
19
  files:
20
20
  - ".github/dependabot.yml"
21
+ - ".github/workflows/auto-merge.yml"
21
22
  - ".github/workflows/main.yml"
22
23
  - ".gitignore"
23
24
  - CHANGELOG.md
@@ -28,6 +29,7 @@ files:
28
29
  - Rakefile
29
30
  - bin/console
30
31
  - lib/prettier_print.rb
32
+ - lib/prettier_print/single_line.rb
31
33
  - lib/prettier_print/version.rb
32
34
  - prettier_print.gemspec
33
35
  homepage: https://github.com/ruby-syntax-tree/prettier_print