prettier_print 1.0.2 → 1.2.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/.github/workflows/auto-merge.yml +22 -0
- data/.github/workflows/main.yml +0 -16
- data/CHANGELOG.md +15 -1
- data/Gemfile +1 -0
- data/Gemfile.lock +11 -3
- data/lib/prettier_print/single_line.rb +166 -0
- data/lib/prettier_print/version.rb +1 -1
- data/lib/prettier_print.rb +23 -174
- metadata +4 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: cd1acc23437a5cf57c8f770a8f6ae6273d14c4716a64566f7966c19fe0f63276
|
|
4
|
+
data.tar.gz: bee4b7fcdd680e7a3747ad025054830426638f166bd14229e1a3386350fd542e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e59fb5d9131f40d75e458b45ad069329da4ae83df63f3111f7ffba01347d1ddf1a214f636a4bf5afa08502458c171ed7d17a8e358294ef101c9f1db68a924e20
|
|
7
|
+
data.tar.gz: ae31224da56d3983e6c3fa4329dbaa1bb86a4cf8b500852cfc105cfb01d69b11d61b285860e924768664f652964e300c72dbca141441e3f31222dad7be1545e7
|
|
@@ -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}}
|
data/.github/workflows/main.yml
CHANGED
|
@@ -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.2.0] - 2022-12-23
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- You can now supply the base indentation level for the output buffer.
|
|
14
|
+
|
|
15
|
+
## [1.1.0] - 2022-11-08
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
|
|
19
|
+
- `prettier_print` now works with Ractors.
|
|
20
|
+
|
|
9
21
|
## [1.0.2] - 2022-10-19
|
|
10
22
|
|
|
11
23
|
### Changed
|
|
@@ -43,7 +55,9 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
|
|
|
43
55
|
|
|
44
56
|
- 🎉 Initial release! 🎉
|
|
45
57
|
|
|
46
|
-
[unreleased]: https://github.com/ruby-syntax-tree/prettier_print/compare/v1.0
|
|
58
|
+
[unreleased]: https://github.com/ruby-syntax-tree/prettier_print/compare/v1.2.0...HEAD
|
|
59
|
+
[1.2.0]: https://github.com/ruby-syntax-tree/prettier_print/compare/v1.1.0...v1.2.0
|
|
60
|
+
[1.1.0]: https://github.com/ruby-syntax-tree/prettier_print/compare/v1.0.2...v1.1.0
|
|
47
61
|
[1.0.2]: https://github.com/ruby-syntax-tree/prettier_print/compare/v1.0.1...v1.0.2
|
|
48
62
|
[1.0.1]: https://github.com/ruby-syntax-tree/prettier_print/compare/v1.0.0...v1.0.1
|
|
49
63
|
[1.0.0]: https://github.com/ruby-syntax-tree/prettier_print/compare/v0.1.0...v1.0.0
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,14 +1,21 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
prettier_print (1.0
|
|
4
|
+
prettier_print (1.2.0)
|
|
5
5
|
|
|
6
6
|
GEM
|
|
7
7
|
remote: https://rubygems.org/
|
|
8
8
|
specs:
|
|
9
|
-
|
|
9
|
+
docile (1.4.0)
|
|
10
|
+
power_assert (2.0.2)
|
|
10
11
|
rake (13.0.6)
|
|
11
|
-
|
|
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)
|
|
18
|
+
test-unit (3.5.7)
|
|
12
19
|
power_assert
|
|
13
20
|
|
|
14
21
|
PLATFORMS
|
|
@@ -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
|
data/lib/prettier_print.rb
CHANGED
|
@@ -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
|
|
@@ -504,6 +360,11 @@ class PrettierPrint
|
|
|
504
360
|
# a forced line, or the maximum width.
|
|
505
361
|
MODE_FLAT = 2
|
|
506
362
|
|
|
363
|
+
# The default indentation for printing is zero, assuming that the code starts
|
|
364
|
+
# at the top level. That can be changed if desired to start from a different
|
|
365
|
+
# indentation level.
|
|
366
|
+
DEFAULT_INDENTATION = 0
|
|
367
|
+
|
|
507
368
|
# This is a convenience method which is same as follows:
|
|
508
369
|
#
|
|
509
370
|
# begin
|
|
@@ -517,29 +378,12 @@ class PrettierPrint
|
|
|
517
378
|
output = "".dup,
|
|
518
379
|
maxwidth = 80,
|
|
519
380
|
newline = DEFAULT_NEWLINE,
|
|
520
|
-
genspace = DEFAULT_GENSPACE
|
|
381
|
+
genspace = DEFAULT_GENSPACE,
|
|
382
|
+
indentation = DEFAULT_INDENTATION
|
|
521
383
|
)
|
|
522
384
|
q = new(output, maxwidth, newline, &genspace)
|
|
523
385
|
yield q
|
|
524
|
-
q.flush
|
|
525
|
-
output
|
|
526
|
-
end
|
|
527
|
-
|
|
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
|
|
386
|
+
q.flush(indentation)
|
|
543
387
|
output
|
|
544
388
|
end
|
|
545
389
|
|
|
@@ -643,17 +487,20 @@ class PrettierPrint
|
|
|
643
487
|
|
|
644
488
|
# Flushes all of the generated print tree onto the output buffer, then clears
|
|
645
489
|
# the generated tree from memory.
|
|
646
|
-
def flush
|
|
490
|
+
def flush(base_indentation = DEFAULT_INDENTATION)
|
|
647
491
|
# First, get the root group, since we placed one at the top to begin with.
|
|
648
492
|
doc = groups.first
|
|
649
493
|
|
|
650
494
|
# This represents how far along the current line we are. It gets reset
|
|
651
495
|
# back to 0 when we encounter a newline.
|
|
652
|
-
position =
|
|
496
|
+
position = base_indentation
|
|
497
|
+
|
|
498
|
+
# Start the buffer with the base indentation level.
|
|
499
|
+
buffer << genspace.call(base_indentation) if base_indentation > 0
|
|
653
500
|
|
|
654
501
|
# This is our command stack. A command consists of a triplet of an
|
|
655
502
|
# indentation level, the mode (break or flat), and a doc node.
|
|
656
|
-
commands = [[
|
|
503
|
+
commands = [[base_indentation, MODE_BREAK, doc]]
|
|
657
504
|
|
|
658
505
|
# This is a small optimization boolean. It keeps track of whether or not
|
|
659
506
|
# when we hit a group node we should check if it fits on the same line.
|
|
@@ -1251,3 +1098,5 @@ class PrettierPrint
|
|
|
1251
1098
|
end
|
|
1252
1099
|
end
|
|
1253
1100
|
end
|
|
1101
|
+
|
|
1102
|
+
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
|
|
4
|
+
version: 1.2.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-
|
|
11
|
+
date: 2022-12-23 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
|