ruby-lsp 0.0.3 → 0.0.4

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.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +6 -0
  3. data/.rubocop.yml +16 -0
  4. data/CHANGELOG.md +13 -0
  5. data/Gemfile +8 -5
  6. data/Gemfile.lock +55 -10
  7. data/README.md +40 -0
  8. data/VERSION +1 -1
  9. data/bin/tapioca +29 -0
  10. data/dev.yml +3 -0
  11. data/exe/ruby-lsp +19 -4
  12. data/lib/internal.rb +7 -0
  13. data/lib/ruby-lsp.rb +1 -0
  14. data/lib/ruby_lsp/cli.rb +12 -5
  15. data/lib/ruby_lsp/document.rb +37 -14
  16. data/lib/ruby_lsp/handler.rb +78 -23
  17. data/lib/ruby_lsp/requests/base_request.rb +11 -0
  18. data/lib/ruby_lsp/requests/code_actions.rb +1 -0
  19. data/lib/ruby_lsp/requests/diagnostics.rb +1 -0
  20. data/lib/ruby_lsp/requests/document_highlight.rb +96 -0
  21. data/lib/ruby_lsp/requests/document_symbol.rb +1 -10
  22. data/lib/ruby_lsp/requests/folding_ranges.rb +3 -2
  23. data/lib/ruby_lsp/requests/formatting.rb +2 -1
  24. data/lib/ruby_lsp/requests/rubocop_request.rb +1 -0
  25. data/lib/ruby_lsp/requests/selection_ranges.rb +1 -0
  26. data/lib/ruby_lsp/requests/semantic_highlighting.rb +17 -3
  27. data/lib/ruby_lsp/requests/support/rubocop_diagnostic.rb +1 -0
  28. data/lib/ruby_lsp/requests/support/selection_range.rb +1 -0
  29. data/lib/ruby_lsp/requests/support/semantic_token_encoder.rb +12 -1
  30. data/lib/ruby_lsp/requests/support/syntax_error_diagnostic.rb +1 -0
  31. data/lib/ruby_lsp/requests.rb +2 -0
  32. data/lib/ruby_lsp/store.rb +19 -3
  33. data/rakelib/check_docs.rake +4 -1
  34. data/ruby-lsp.gemspec +1 -0
  35. data/sorbet/config +4 -0
  36. data/sorbet/rbi/.rubocop.yml +8 -0
  37. data/sorbet/rbi/gems/ansi@1.5.0.rbi +338 -0
  38. data/sorbet/rbi/gems/ast@2.4.2.rbi +522 -0
  39. data/sorbet/rbi/gems/builder@3.2.4.rbi +418 -0
  40. data/sorbet/rbi/gems/coderay@1.1.3.rbi +8 -0
  41. data/sorbet/rbi/gems/debug@1.5.0.rbi +1273 -0
  42. data/sorbet/rbi/gems/diff-lcs@1.5.0.rbi +867 -0
  43. data/sorbet/rbi/gems/io-console@0.5.11.rbi +8 -0
  44. data/sorbet/rbi/gems/irb@1.4.1.rbi +376 -0
  45. data/sorbet/rbi/gems/language_server-protocol@3.16.0.3.rbi +7325 -0
  46. data/sorbet/rbi/gems/method_source@1.0.0.rbi +8 -0
  47. data/sorbet/rbi/gems/minitest-reporters@1.5.0.rbi +612 -0
  48. data/sorbet/rbi/gems/minitest@5.15.0.rbi +994 -0
  49. data/sorbet/rbi/gems/parallel@1.22.1.rbi +163 -0
  50. data/sorbet/rbi/gems/parser@3.1.2.0.rbi +3968 -0
  51. data/sorbet/rbi/gems/prettier_print@0.1.0.rbi +734 -0
  52. data/sorbet/rbi/gems/pry@0.14.1.rbi +8 -0
  53. data/sorbet/rbi/gems/rainbow@3.1.1.rbi +227 -0
  54. data/sorbet/rbi/gems/rake@13.0.6.rbi +1853 -0
  55. data/sorbet/rbi/gems/rbi@0.0.14.rbi +2337 -0
  56. data/sorbet/rbi/gems/regexp_parser@2.5.0.rbi +1854 -0
  57. data/sorbet/rbi/gems/reline@0.3.1.rbi +1274 -0
  58. data/sorbet/rbi/gems/rexml@3.2.5.rbi +3852 -0
  59. data/sorbet/rbi/gems/rubocop-ast@1.18.0.rbi +4180 -0
  60. data/sorbet/rbi/gems/rubocop-minitest@0.20.0.rbi +1369 -0
  61. data/sorbet/rbi/gems/rubocop-rake@0.6.0.rbi +246 -0
  62. data/sorbet/rbi/gems/rubocop-shopify@2.6.0.rbi +8 -0
  63. data/sorbet/rbi/gems/rubocop-sorbet@0.6.8.rbi +652 -0
  64. data/sorbet/rbi/gems/rubocop@1.30.0.rbi +36729 -0
  65. data/sorbet/rbi/gems/ruby-progressbar@1.11.0.rbi +732 -0
  66. data/sorbet/rbi/gems/spoom@1.1.11.rbi +1600 -0
  67. data/sorbet/rbi/gems/syntax_tree@2.7.1.rbi +6777 -0
  68. data/sorbet/rbi/gems/tapioca@0.8.1.rbi +1972 -0
  69. data/sorbet/rbi/gems/thor@1.2.1.rbi +2921 -0
  70. data/sorbet/rbi/gems/unicode-display_width@2.1.0.rbi +27 -0
  71. data/sorbet/rbi/gems/unparser@0.6.5.rbi +2789 -0
  72. data/sorbet/rbi/gems/webrick@1.7.0.rbi +1779 -0
  73. data/sorbet/rbi/gems/yard-sorbet@0.6.1.rbi +289 -0
  74. data/sorbet/rbi/gems/yard@0.9.27.rbi +13048 -0
  75. data/sorbet/rbi/shims/fiddle.rbi +4 -0
  76. data/sorbet/rbi/shims/hash.rbi +6 -0
  77. data/sorbet/rbi/shims/rdoc.rbi +4 -0
  78. data/sorbet/tapioca/config.yml +13 -0
  79. data/sorbet/tapioca/require.rb +7 -0
  80. metadata +64 -2
@@ -0,0 +1,734 @@
1
+ # typed: true
2
+
3
+ # DO NOT EDIT MANUALLY
4
+ # This is an autogenerated file for types exported from the `prettier_print` gem.
5
+ # Please instead update this file by running `bin/tapioca gem prettier_print`.
6
+
7
+ # This class implements a pretty printing algorithm. It finds line breaks and
8
+ # nice indentations for grouped structure.
9
+ #
10
+ # By default, the class assumes that primitive elements are strings and each
11
+ # byte in the strings is a single column in width. But it can be used for other
12
+ # situations by giving suitable arguments for some methods:
13
+ #
14
+ # * newline object and space generation block for PrettierPrint.new
15
+ # * optional width argument for PrettierPrint#text
16
+ # * PrettierPrint#breakable
17
+ #
18
+ # There are several candidate uses:
19
+ # * text formatting using proportional fonts
20
+ # * multibyte characters which has columns different to number of bytes
21
+ # * non-string formatting
22
+ #
23
+ # == Usage
24
+ #
25
+ # To use this module, you will need to generate a tree of print nodes that
26
+ # represent indentation and newline behavior before it gets sent to the printer.
27
+ # Each node has different semantics, depending on the desired output.
28
+ #
29
+ # The most basic node is a Text node. This represents plain text content that
30
+ # cannot be broken up even if it doesn't fit on one line. You would create one
31
+ # of those with the text method, as in:
32
+ #
33
+ # PrettierPrint.format { |q| q.text('my content') }
34
+ #
35
+ # No matter what the desired output width is, the output for the snippet above
36
+ # will always be the same.
37
+ #
38
+ # If you want to allow the printer to break up the content on the space
39
+ # character when there isn't enough width for the full string on the same line,
40
+ # you can use the Breakable and Group nodes. For example:
41
+ #
42
+ # PrettierPrint.format do |q|
43
+ # q.group do
44
+ # q.text("my")
45
+ # q.breakable
46
+ # q.text("content")
47
+ # end
48
+ # end
49
+ #
50
+ # Now, if everything fits on one line (depending on the maximum width specified)
51
+ # then it will be the same output as the first example. If, however, there is
52
+ # not enough room on the line, then you will get two lines of output, one for
53
+ # the first string and one for the second.
54
+ #
55
+ # There are other nodes for the print tree as well, described in the
56
+ # documentation below. They control alignment, indentation, conditional
57
+ # formatting, and more.
58
+ #
59
+ # == References
60
+ # Christian Lindig, Strictly Pretty, March 2000
61
+ # https://lindig.github.io/papers/strictly-pretty-2000.pdf
62
+ #
63
+ # Philip Wadler, A prettier printer, March 1998
64
+ # https://homepages.inf.ed.ac.uk/wadler/papers/prettier/prettier.pdf
65
+ class PrettierPrint
66
+ # Creates a buffer for pretty printing.
67
+ #
68
+ # +output+ is an output target. If it is not specified, '' is assumed. It
69
+ # should have a << method which accepts the first argument +obj+ of
70
+ # PrettierPrint#text, the first argument +separator+ of PrettierPrint#breakable,
71
+ # the first argument +newline+ of PrettierPrint.new, and the result of a given
72
+ # block for PrettierPrint.new.
73
+ #
74
+ # +maxwidth+ specifies maximum line length. If it is not specified, 80 is
75
+ # assumed. However actual outputs may overflow +maxwidth+ if long
76
+ # non-breakable texts are provided.
77
+ #
78
+ # +newline+ is used for line breaks. "\n" is used if it is not specified.
79
+ #
80
+ # The block is used to generate spaces. ->(n) { ' ' * n } is used if it is not
81
+ # given.
82
+ #
83
+ # @return [PrettierPrint] a new instance of PrettierPrint
84
+ def initialize(output = T.unsafe(nil), maxwidth = T.unsafe(nil), newline = T.unsafe(nil), &genspace); end
85
+
86
+ # This inserts a BreakParent node into the print tree which forces the
87
+ # surrounding and all parent group nodes to break.
88
+ def break_parent; end
89
+
90
+ # This says "you can break a line here if necessary", and a +width+\-column
91
+ # text +separator+ is inserted if a line is not broken at the point.
92
+ #
93
+ # If +separator+ is not specified, ' ' is used.
94
+ #
95
+ # If +width+ is not specified, +separator.length+ is used. You will have to
96
+ # specify this when +separator+ is a multibyte character, for example.
97
+ #
98
+ # By default, if the surrounding group is broken and a newline is inserted,
99
+ # the printer will indent the subsequent line up to the current level of
100
+ # indentation. You can disable this behavior with the +indent+ argument if
101
+ # that's not desired (rare).
102
+ #
103
+ # By default, when you insert a Breakable into the print tree, it only breaks
104
+ # the surrounding group when the group's contents cannot fit onto the
105
+ # remaining space of the current line. You can force it to break the
106
+ # surrounding group instead if you always want the newline with the +force+
107
+ # argument.
108
+ #
109
+ # There are a few circumstances where you'll want to force the newline into
110
+ # the output but no insert a break parent (because you don't want to
111
+ # necessarily force the groups to break unless they need to). In this case you
112
+ # can pass `force: :skip_break_parent` to this method and it will not insert
113
+ # a break parent.`
114
+ def breakable(separator = T.unsafe(nil), width = T.unsafe(nil), indent: T.unsafe(nil), force: T.unsafe(nil)); end
115
+
116
+ # This is an output buffer that wraps the output object and provides
117
+ # additional functionality depending on its type.
118
+ #
119
+ # This defaults to Buffer::StringBuffer.new("".dup)
120
+ def buffer; end
121
+
122
+ # A convenience method which is same as follows:
123
+ #
124
+ # text(",")
125
+ # breakable
126
+ def comma_breakable; end
127
+
128
+ # Returns the group most recently added to the stack.
129
+ #
130
+ # Contrived example:
131
+ # out = ""
132
+ # => ""
133
+ # q = PrettierPrint.new(out)
134
+ # => #<PrettierPrint:0x0>
135
+ # q.group {
136
+ # q.text q.current_group.inspect
137
+ # q.text q.newline
138
+ # q.group(q.current_group.depth + 1) {
139
+ # q.text q.current_group.inspect
140
+ # q.text q.newline
141
+ # q.group(q.current_group.depth + 1) {
142
+ # q.text q.current_group.inspect
143
+ # q.text q.newline
144
+ # q.group(q.current_group.depth + 1) {
145
+ # q.text q.current_group.inspect
146
+ # q.text q.newline
147
+ # }
148
+ # }
149
+ # }
150
+ # }
151
+ # => 284
152
+ # puts out
153
+ # #<PrettierPrint::Group:0x0 @depth=1>
154
+ # #<PrettierPrint::Group:0x0 @depth=2>
155
+ # #<PrettierPrint::Group:0x0 @depth=3>
156
+ # #<PrettierPrint::Group:0x0 @depth=4>
157
+ def current_group; end
158
+
159
+ # This is similar to #breakable except the decision to break or not is
160
+ # determined individually.
161
+ #
162
+ # Two #fill_breakable under a group may cause 4 results:
163
+ # (break,break), (break,non-break), (non-break,break), (non-break,non-break).
164
+ # This is different to #breakable because two #breakable under a group
165
+ # may cause 2 results: (break,break), (non-break,non-break).
166
+ #
167
+ # The text +separator+ is inserted if a line is not broken at this point.
168
+ #
169
+ # If +separator+ is not specified, ' ' is used.
170
+ #
171
+ # If +width+ is not specified, +separator.length+ is used. You will have to
172
+ # specify this when +separator+ is a multibyte character, for example.
173
+ def fill_breakable(separator = T.unsafe(nil), width = T.unsafe(nil)); end
174
+
175
+ # Flushes all of the generated print tree onto the output buffer, then clears
176
+ # the generated tree from memory.
177
+ def flush; end
178
+
179
+ # An object that responds to call that takes one argument, of an Integer, and
180
+ # returns the corresponding number of spaces.
181
+ #
182
+ # By default this is: ->(n) { ' ' * n }
183
+ def genspace; end
184
+
185
+ # Groups line break hints added in the block. The line break hints are all to
186
+ # be used or not.
187
+ #
188
+ # If +indent+ is specified, the method call is regarded as nested by
189
+ # nest(indent) { ... }.
190
+ #
191
+ # If +open_object+ is specified, <tt>text(open_object, open_width)</tt> is
192
+ # called before grouping. If +close_object+ is specified,
193
+ # <tt>text(close_object, close_width)</tt> is called after grouping.
194
+ def group(indent = T.unsafe(nil), open_object = T.unsafe(nil), close_object = T.unsafe(nil), open_width = T.unsafe(nil), close_width = T.unsafe(nil)); end
195
+
196
+ # The stack of groups that are being printed.
197
+ def groups; end
198
+
199
+ # Inserts an IfBreak node with the contents of the block being added to its
200
+ # list of nodes that should be printed if the surrounding node breaks. If it
201
+ # doesn't, then you can specify the contents to be printed with the #if_flat
202
+ # method used on the return object from this method. For example,
203
+ #
204
+ # q.if_break { q.text('do') }.if_flat { q.text('{') }
205
+ #
206
+ # In the example above, if the surrounding group is broken it will print 'do'
207
+ # and if it is not it will print '{'.
208
+ def if_break; end
209
+
210
+ # This is similar to if_break in that it also inserts an IfBreak node into the
211
+ # print tree, however it's starting from the flat contents, and cannot be used
212
+ # to build the break contents.
213
+ def if_flat; end
214
+
215
+ # Very similar to the #nest method, this indents the nested content by one
216
+ # level by inserting an Indent node into the print tree. The contents of the
217
+ # node are determined by the block.
218
+ def indent; end
219
+
220
+ # This method calculates the position of the text relative to the current
221
+ # indentation level when the doc has been printed. It's useful for
222
+ # determining how to align text to doc nodes that are already built into the
223
+ # tree.
224
+ def last_position(node); end
225
+
226
+ # Inserts a LineSuffix node into the print tree. The contents of the node are
227
+ # determined by the block.
228
+ def line_suffix(priority: T.unsafe(nil)); end
229
+
230
+ # The maximum width of a line, before it is separated in to a newline
231
+ #
232
+ # This defaults to 80, and should be an Integer
233
+ def maxwidth; end
234
+
235
+ # Increases left margin after newline with +indent+ for line breaks added in
236
+ # the block.
237
+ def nest(indent); end
238
+
239
+ # The value that is appended to +output+ to add a new line.
240
+ #
241
+ # This defaults to "\n", and should be String
242
+ def newline; end
243
+
244
+ # The output object. It represents the final destination of the contents of
245
+ # the print tree. It should respond to <<.
246
+ #
247
+ # This defaults to "".dup
248
+ def output; end
249
+
250
+ # This method will remove any breakables from the list of contents so that
251
+ # no newlines are present in the output. If a newline is being forced into
252
+ # the output, the replace value will be used.
253
+ def remove_breaks(node, replace = T.unsafe(nil)); end
254
+
255
+ # Adds a separated list.
256
+ # The list is separated by comma with breakable space, by default.
257
+ #
258
+ # #seplist iterates the +list+ using +iter_method+.
259
+ # It yields each object to the block given for #seplist.
260
+ # The procedure +separator_proc+ is called between each yields.
261
+ #
262
+ # If the iteration is zero times, +separator_proc+ is not called at all.
263
+ #
264
+ # If +separator_proc+ is nil or not given,
265
+ # +lambda { comma_breakable }+ is used.
266
+ # If +iter_method+ is not given, :each is used.
267
+ #
268
+ # For example, following 3 code fragments has similar effect.
269
+ #
270
+ # q.seplist([1,2,3]) {|v| xxx v }
271
+ #
272
+ # q.seplist([1,2,3], lambda { q.comma_breakable }, :each) {|v| xxx v }
273
+ #
274
+ # xxx 1
275
+ # q.comma_breakable
276
+ # xxx 2
277
+ # q.comma_breakable
278
+ # xxx 3
279
+ def seplist(list, sep = T.unsafe(nil), iter_method = T.unsafe(nil)); end
280
+
281
+ # The current array of contents that calls to methods that generate print tree
282
+ # nodes will append to.
283
+ def target; end
284
+
285
+ # This adds +object+ as a text of +width+ columns in width.
286
+ #
287
+ # If +width+ is not specified, object.length is used.
288
+ def text(object = T.unsafe(nil), width = T.unsafe(nil)); end
289
+
290
+ # This inserts a Trim node into the print tree which, when printed, will clear
291
+ # all whitespace at the end of the output buffer. This is useful for the rare
292
+ # case where you need to delete printed indentation and force the next node
293
+ # to start at the beginning of the line.
294
+ def trim; end
295
+
296
+ # A convenience method used by a lot of the print tree node builders that
297
+ # temporarily changes the target that the builders will append to.
298
+ def with_target(target); end
299
+
300
+ private
301
+
302
+ # This method returns a boolean as to whether or not the remaining commands
303
+ # fit onto the remaining space on the current line. If we finish printing
304
+ # all of the commands or if we hit a newline, then we return true. Otherwise
305
+ # if we continue printing past the remaining space, we return false.
306
+ #
307
+ # @return [Boolean]
308
+ def fits?(next_command, rest_commands, remaining); end
309
+
310
+ def remove_breaks_with(doc, replace); end
311
+
312
+ # Resets the group stack and target array so that this pretty printer object
313
+ # can continue to be used before calling flush again if desired.
314
+ def reset; end
315
+
316
+ class << self
317
+ # This is a convenience method which is same as follows:
318
+ #
319
+ # begin
320
+ # q = PrettierPrint.new(output, maxwidth, newline, &genspace)
321
+ # ...
322
+ # q.flush
323
+ # output
324
+ # end
325
+ #
326
+ # @yield [q]
327
+ def format(output = T.unsafe(nil), maxwidth = T.unsafe(nil), newline = T.unsafe(nil), genspace = T.unsafe(nil)); end
328
+
329
+ # This is similar to PrettierPrint::format but the result has no breaks.
330
+ #
331
+ # +maxwidth+, +newline+ and +genspace+ are ignored.
332
+ #
333
+ # The invocation of +breakable+ in the block doesn't break a line and is
334
+ # treated as just an invocation of +text+.
335
+ #
336
+ # @yield [q]
337
+ def singleline_format(output = T.unsafe(nil), _maxwidth = T.unsafe(nil), _newline = T.unsafe(nil), _genspace = T.unsafe(nil)); end
338
+ end
339
+ end
340
+
341
+ # A node in the print tree that represents aligning nested nodes to a certain
342
+ # prefix width or string.
343
+ class PrettierPrint::Align
344
+ # @return [Align] a new instance of Align
345
+ def initialize(indent:, contents: T.unsafe(nil)); end
346
+
347
+ # Returns the value of attribute contents.
348
+ def contents; end
349
+
350
+ # Returns the value of attribute indent.
351
+ def indent; end
352
+
353
+ def pretty_print(q); end
354
+ end
355
+
356
+ # A node in the print tree that forces the surrounding group to print out in
357
+ # the "break" mode as opposed to the "flat" mode. Useful for when you need to
358
+ # force a newline into a group.
359
+ class PrettierPrint::BreakParent
360
+ def pretty_print(q); end
361
+ end
362
+
363
+ # A node in the print tree that represents a place in the buffer that the
364
+ # content can be broken onto multiple lines.
365
+ class PrettierPrint::Breakable
366
+ # @return [Breakable] a new instance of Breakable
367
+ def initialize(separator = T.unsafe(nil), width = T.unsafe(nil), force: T.unsafe(nil), indent: T.unsafe(nil)); end
368
+
369
+ # @return [Boolean]
370
+ def force?; end
371
+
372
+ # @return [Boolean]
373
+ def indent?; end
374
+
375
+ def pretty_print(q); end
376
+
377
+ # Returns the value of attribute separator.
378
+ def separator; end
379
+
380
+ # Returns the value of attribute width.
381
+ def width; end
382
+ end
383
+
384
+ # When building up the contents in the output buffer, it's convenient to be
385
+ # able to trim trailing whitespace before newlines. If the output object is a
386
+ # string or array or strings, then we can do this with some gsub calls. If
387
+ # not, then this effectively just wraps the output object and forwards on
388
+ # calls to <<.
389
+ module PrettierPrint::Buffer
390
+ class << self
391
+ # This is a switch for building the correct output buffer wrapper class for
392
+ # the given output object.
393
+ def for(output); end
394
+ end
395
+ end
396
+
397
+ # This is an output buffer that wraps an array output object. It provides a
398
+ # trim! method that trims off trailing whitespace from the last element in
399
+ # the array if it's an unfrozen string using the same method as the
400
+ # StringBuffer.
401
+ class PrettierPrint::Buffer::ArrayBuffer < ::PrettierPrint::Buffer::DefaultBuffer
402
+ # @return [ArrayBuffer] a new instance of ArrayBuffer
403
+ def initialize(output = T.unsafe(nil)); end
404
+
405
+ def trim!; end
406
+ end
407
+
408
+ # This is the default output buffer that provides a base implementation of
409
+ # trim! that does nothing. It's effectively a wrapper around whatever output
410
+ # object was given to the format command.
411
+ class PrettierPrint::Buffer::DefaultBuffer
412
+ # @return [DefaultBuffer] a new instance of DefaultBuffer
413
+ def initialize(output = T.unsafe(nil)); end
414
+
415
+ def <<(object); end
416
+
417
+ # Returns the value of attribute output.
418
+ def output; end
419
+
420
+ def trim!; end
421
+ end
422
+
423
+ # This is an output buffer that wraps a string output object. It provides a
424
+ # trim! method that trims off trailing whitespace from the string using
425
+ # gsub!.
426
+ class PrettierPrint::Buffer::StringBuffer < ::PrettierPrint::Buffer::DefaultBuffer
427
+ # @return [StringBuffer] a new instance of StringBuffer
428
+ def initialize(output = T.unsafe(nil)); end
429
+
430
+ def trim!; end
431
+ end
432
+
433
+ # When generating spaces after a newline for indentation, by default we
434
+ # generate one space per character needed for indentation. You can change this
435
+ # behavior (for instance to use tabs) by passing a different genspace
436
+ # procedure.
437
+ PrettierPrint::DEFAULT_GENSPACE = T.let(T.unsafe(nil), Proc)
438
+
439
+ # When printing, you can optionally specify the value that should be used
440
+ # whenever a group needs to be broken onto multiple lines. In this case the
441
+ # default is \n.
442
+ PrettierPrint::DEFAULT_NEWLINE = T.let(T.unsafe(nil), String)
443
+
444
+ # A node in the print tree that represents a group of items which the printer
445
+ # should try to fit onto one line. This is the basic command to tell the
446
+ # printer when to break. Groups are usually nested, and the printer will try
447
+ # to fit everything on one line, but if it doesn't fit it will break the
448
+ # outermost group first and try again. It will continue breaking groups until
449
+ # everything fits (or there are no more groups to break).
450
+ class PrettierPrint::Group
451
+ # @return [Group] a new instance of Group
452
+ def initialize(depth, contents: T.unsafe(nil)); end
453
+
454
+ def break; end
455
+
456
+ # @return [Boolean]
457
+ def break?; end
458
+
459
+ # Returns the value of attribute contents.
460
+ def contents; end
461
+
462
+ # Returns the value of attribute depth.
463
+ def depth; end
464
+
465
+ def pretty_print(q); end
466
+ end
467
+
468
+ # A node in the print tree that represents printing one thing if the
469
+ # surrounding group node is broken and another thing if the surrounding group
470
+ # node is flat.
471
+ class PrettierPrint::IfBreak
472
+ # @return [IfBreak] a new instance of IfBreak
473
+ def initialize(break_contents: T.unsafe(nil), flat_contents: T.unsafe(nil)); end
474
+
475
+ # Returns the value of attribute break_contents.
476
+ def break_contents; end
477
+
478
+ # Returns the value of attribute flat_contents.
479
+ def flat_contents; end
480
+
481
+ def pretty_print(q); end
482
+ end
483
+
484
+ # A small DSL-like object used for specifying the alternative contents to be
485
+ # printed if the surrounding group doesn't break for an IfBreak node.
486
+ class PrettierPrint::IfBreakBuilder
487
+ # @return [IfBreakBuilder] a new instance of IfBreakBuilder
488
+ def initialize(builder, if_break); end
489
+
490
+ # Returns the value of attribute builder.
491
+ def builder; end
492
+
493
+ # Returns the value of attribute if_break.
494
+ def if_break; end
495
+
496
+ def if_flat(&block); end
497
+ end
498
+
499
+ # A node in the print tree that is a variant of the Align node that indents
500
+ # its contents by one level.
501
+ class PrettierPrint::Indent
502
+ # @return [Indent] a new instance of Indent
503
+ def initialize(contents: T.unsafe(nil)); end
504
+
505
+ # Returns the value of attribute contents.
506
+ def contents; end
507
+
508
+ def pretty_print(q); end
509
+ end
510
+
511
+ # This object represents the current level of indentation within the printer.
512
+ # It has the ability to generate new levels of indentation through the #align
513
+ # and #indent methods.
514
+ class PrettierPrint::IndentLevel
515
+ # @return [IndentLevel] a new instance of IndentLevel
516
+ def initialize(genspace:, value: T.unsafe(nil), length: T.unsafe(nil), queue: T.unsafe(nil), root: T.unsafe(nil)); end
517
+
518
+ # This can accept a whole lot of different kinds of objects, due to the
519
+ # nature of the flexibility of the Align node.
520
+ def align(n); end
521
+
522
+ # Returns the value of attribute genspace.
523
+ def genspace; end
524
+
525
+ def indent(part = T.unsafe(nil)); end
526
+
527
+ # Returns the value of attribute length.
528
+ def length; end
529
+
530
+ # Returns the value of attribute queue.
531
+ def queue; end
532
+
533
+ # Returns the value of attribute root.
534
+ def root; end
535
+
536
+ # Returns the value of attribute value.
537
+ def value; end
538
+ end
539
+
540
+ PrettierPrint::IndentLevel::DedentPart = T.let(T.unsafe(nil), Object)
541
+ PrettierPrint::IndentLevel::IndentPart = T.let(T.unsafe(nil), Object)
542
+
543
+ class PrettierPrint::IndentLevel::NumberAlignPart < ::Struct
544
+ # Returns the value of attribute n
545
+ #
546
+ # @return [Object] the current value of n
547
+ def n; end
548
+
549
+ # Sets the attribute n
550
+ #
551
+ # @param value [Object] the value to set the attribute n to.
552
+ # @return [Object] the newly set value
553
+ def n=(_); end
554
+
555
+ class << self
556
+ def [](*_arg0); end
557
+ def inspect; end
558
+ def keyword_init?; end
559
+ def members; end
560
+ def new(*_arg0); end
561
+ end
562
+ end
563
+
564
+ class PrettierPrint::IndentLevel::StringAlignPart < ::Struct
565
+ # Returns the value of attribute n
566
+ #
567
+ # @return [Object] the current value of n
568
+ def n; end
569
+
570
+ # Sets the attribute n
571
+ #
572
+ # @param value [Object] the value to set the attribute n to.
573
+ # @return [Object] the newly set value
574
+ def n=(_); end
575
+
576
+ class << self
577
+ def [](*_arg0); end
578
+ def inspect; end
579
+ def keyword_init?; end
580
+ def members; end
581
+ def new(*_arg0); end
582
+ end
583
+ end
584
+
585
+ # A node in the print tree that has its own special buffer for implementing
586
+ # content that should flush before any newline.
587
+ #
588
+ # Useful for implementating trailing content, as it's not always practical to
589
+ # constantly check where the line ends to avoid accidentally printing some
590
+ # content after a line suffix node.
591
+ class PrettierPrint::LineSuffix
592
+ # @return [LineSuffix] a new instance of LineSuffix
593
+ def initialize(priority: T.unsafe(nil), contents: T.unsafe(nil)); end
594
+
595
+ # Returns the value of attribute contents.
596
+ def contents; end
597
+
598
+ def pretty_print(q); end
599
+
600
+ # Returns the value of attribute priority.
601
+ def priority; end
602
+ end
603
+
604
+ PrettierPrint::LineSuffix::DEFAULT_PRIORITY = T.let(T.unsafe(nil), Integer)
605
+
606
+ # There are two modes in printing, break and flat. When we're in break mode,
607
+ # any lines will use their newline, any if-breaks will use their break
608
+ # contents, etc.
609
+ PrettierPrint::MODE_BREAK = T.let(T.unsafe(nil), Integer)
610
+
611
+ # This is another print mode much like MODE_BREAK. When we're in flat mode, we
612
+ # attempt to print everything on one line until we either hit a broken group,
613
+ # a forced line, or the maximum width.
614
+ PrettierPrint::MODE_FLAT = T.let(T.unsafe(nil), Integer)
615
+
616
+ # PrettierPrint::SingleLine is used by PrettierPrint.singleline_format
617
+ #
618
+ # It is passed to be similar to a PrettierPrint object itself, by responding to
619
+ # all of the same print tree node builder methods, as well as the #flush
620
+ # method.
621
+ #
622
+ # The significant difference here is that there are no line breaks in the
623
+ # output. If an IfBreak node is used, only the flat contents are printed.
624
+ # LineSuffix nodes are printed at the end of the buffer when #flush is called.
625
+ class PrettierPrint::SingleLine
626
+ # Create a PrettierPrint::SingleLine object
627
+ #
628
+ # Arguments:
629
+ # * +output+ - String (or similar) to store rendered text. Needs to respond
630
+ # to '<<'.
631
+ # * +maxwidth+ - Argument position expected to be here for compatibility.
632
+ # This argument is a noop.
633
+ # * +newline+ - Argument position expected to be here for compatibility.
634
+ # This argument is a noop.
635
+ #
636
+ # @return [SingleLine] a new instance of SingleLine
637
+ def initialize(output, _maxwidth = T.unsafe(nil), _newline = T.unsafe(nil)); end
638
+
639
+ # Here for compatibility, does nothing.
640
+ def break_parent; end
641
+
642
+ # Appends +separator+ to the text to be output. By default +separator+ is
643
+ # ' '
644
+ #
645
+ # The +width+, +indent+, and +force+ arguments are here for compatibility.
646
+ # They are all noop arguments.
647
+ def breakable(separator = T.unsafe(nil), _width = T.unsafe(nil), indent: T.unsafe(nil), force: T.unsafe(nil)); end
648
+
649
+ # Appends +separator+ to the output buffer. +width+ is a noop here for
650
+ # compatibility.
651
+ def fill_breakable(separator = T.unsafe(nil), _width = T.unsafe(nil)); end
652
+
653
+ # Flushes the line suffixes onto the output buffer.
654
+ def flush; end
655
+
656
+ # Opens a block for grouping objects to be pretty printed.
657
+ #
658
+ # Arguments:
659
+ # * +indent+ - noop argument. Present for compatibility.
660
+ # * +open_obj+ - text appended before the &block. Default is ''
661
+ # * +close_obj+ - text appended after the &block. Default is ''
662
+ # * +open_width+ - noop argument. Present for compatibility.
663
+ # * +close_width+ - noop argument. Present for compatibility.
664
+ def group(_indent = T.unsafe(nil), open_object = T.unsafe(nil), close_object = T.unsafe(nil), _open_width = T.unsafe(nil), _close_width = T.unsafe(nil)); end
665
+
666
+ # Effectively unnecessary, but here for compatibility.
667
+ def if_break; end
668
+
669
+ # Also effectively unnecessary, but here for compatibility.
670
+ def if_flat; end
671
+
672
+ # A noop that immediately yields.
673
+ def indent; end
674
+
675
+ # Changes the target output buffer to the line suffix output buffer which
676
+ # will get flushed at the end of printing.
677
+ def line_suffix; end
678
+
679
+ # A buffer output that wraps any calls to line_suffix that will be flushed
680
+ # at the end of printing.
681
+ def line_suffixes; end
682
+
683
+ # Takes +indent+ arg, but does nothing with it.
684
+ #
685
+ # Yields to a block.
686
+ def nest(_indent); end
687
+
688
+ # The output object. It stores rendered text and should respond to <<.
689
+ def output; end
690
+
691
+ # The current array of contents that the print tree builder methods should
692
+ # append to.
693
+ def target; end
694
+
695
+ # Add +object+ to the text to be output.
696
+ #
697
+ # +width+ argument is here for compatibility. It is a noop argument.
698
+ def text(object = T.unsafe(nil), _width = T.unsafe(nil)); end
699
+
700
+ # Immediately trims the output buffer.
701
+ def trim; end
702
+ end
703
+
704
+ # A class that wraps the ability to call #if_flat. The contents of the
705
+ # #if_flat block are executed immediately, so effectively this class and the
706
+ # #if_break method that triggers it are unnecessary, but they're here to
707
+ # maintain compatibility.
708
+ class PrettierPrint::SingleLine::IfBreakBuilder
709
+ def if_flat; end
710
+ end
711
+
712
+ # A node in the print tree that represents plain content that cannot be broken
713
+ # up (by default this assumes strings, but it can really be anything).
714
+ class PrettierPrint::Text
715
+ # @return [Text] a new instance of Text
716
+ def initialize; end
717
+
718
+ def add(object: T.unsafe(nil), width: T.unsafe(nil)); end
719
+
720
+ # Returns the value of attribute objects.
721
+ def objects; end
722
+
723
+ def pretty_print(q); end
724
+
725
+ # Returns the value of attribute width.
726
+ def width; end
727
+ end
728
+
729
+ # A node in the print tree that represents trimming all of the indentation of
730
+ # the current line, in the rare case that you need to ignore the indentation
731
+ # that you've already created. This node should be placed after a Breakable.
732
+ class PrettierPrint::Trim
733
+ def pretty_print(q); end
734
+ end