prettier_print 1.0.1 → 1.1.0

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: 5392f4dae350d56612ec1850aa3ca28bb51e5776690e213d31cf1671db789fac
4
- data.tar.gz: 72494c92f76eafe77b4afd04e2c8da7d45a209dd4d1c9b2d5aaf5820b3153050
3
+ metadata.gz: 94274541967c7d4bb242bbbd4b141e8166d3239c27a03fb28fe606807fa2f302
4
+ data.tar.gz: c27c69952f928c0533121941c584bda279966d5b0c04d78671d067d4479c3fbe
5
5
  SHA512:
6
- metadata.gz: 9db5ca110447b075995e72c89cdaa0d881d9e7cef6786820ff1bec18b1cc1fc05c035717b7a8641a67a0586c8612a5a3a11933d9f95f5248f5fb95bb378b547d
7
- data.tar.gz: de1c9038d6c84db2d9e2f8bf047b446abe3b4561cbf6700c8c925244adb46dffdcb2c2b19dfa23e800ba44cc09f77aa64d00f6848449e22a31b6617a375d8e8e
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,18 @@ 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
+
15
+ ## [1.0.2] - 2022-10-19
16
+
17
+ ### Changed
18
+
19
+ - Fix trailing whitespace stripping to not including newlines.
20
+
9
21
  ## [1.0.1] - 2022-10-18
10
22
 
11
23
  ### Changed
@@ -37,7 +49,9 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
37
49
 
38
50
  - 🎉 Initial release! 🎉
39
51
 
40
- [unreleased]: https://github.com/ruby-syntax-tree/prettier_print/compare/v1.0.1...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
54
+ [1.0.2]: https://github.com/ruby-syntax-tree/prettier_print/compare/v1.0.1...v1.0.2
41
55
  [1.0.1]: https://github.com/ruby-syntax-tree/prettier_print/compare/v1.0.0...v1.0.1
42
56
  [1.0.0]: https://github.com/ruby-syntax-tree/prettier_print/compare/v0.1.0...v1.0.0
43
57
  [0.1.0]: https://github.com/ruby-syntax-tree/prettier_print/compare/df51ce...v0.1.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.1)
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.1"
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
@@ -291,7 +291,7 @@ class PrettierPrint
291
291
 
292
292
  def trim!
293
293
  length = output.length
294
- output.rstrip!
294
+ output.gsub!(/[\t ]*\z/, "")
295
295
  length - output.length
296
296
  end
297
297
  end
@@ -323,7 +323,7 @@ class PrettierPrint
323
323
 
324
324
  if output.any? && output.last.is_a?(String) && !output.last.frozen?
325
325
  length = output.last.length
326
- output.last.rstrip!
326
+ output.last.gsub!(/[\t ]*\z/, "")
327
327
  trimmed += length - output.last.length
328
328
  end
329
329
 
@@ -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.1
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-18 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