ruby-lsp 0.0.3 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +6 -0
  3. data/.rubocop.yml +25 -0
  4. data/CHANGELOG.md +35 -0
  5. data/Gemfile +10 -6
  6. data/Gemfile.lock +63 -16
  7. data/README.md +41 -0
  8. data/Rakefile +8 -1
  9. data/VERSION +1 -1
  10. data/bin/console +19 -0
  11. data/bin/tapioca +29 -0
  12. data/dev.yml +3 -0
  13. data/exe/ruby-lsp +19 -4
  14. data/lib/ruby-lsp.rb +2 -1
  15. data/lib/ruby_lsp/cli.rb +13 -5
  16. data/lib/ruby_lsp/document.rb +43 -14
  17. data/lib/ruby_lsp/handler.rb +107 -37
  18. data/lib/ruby_lsp/internal.rb +7 -0
  19. data/lib/ruby_lsp/requests/base_request.rb +18 -5
  20. data/lib/ruby_lsp/requests/code_actions.rb +20 -8
  21. data/lib/ruby_lsp/requests/diagnostics.rb +25 -7
  22. data/lib/ruby_lsp/requests/document_highlight.rb +113 -0
  23. data/lib/ruby_lsp/requests/document_symbol.rb +56 -16
  24. data/lib/ruby_lsp/requests/folding_ranges.rb +70 -34
  25. data/lib/ruby_lsp/requests/formatting.rb +24 -14
  26. data/lib/ruby_lsp/requests/selection_ranges.rb +18 -4
  27. data/lib/ruby_lsp/requests/semantic_highlighting.rb +187 -34
  28. data/lib/ruby_lsp/requests/support/rubocop_diagnostic.rb +16 -3
  29. data/lib/ruby_lsp/requests/support/rubocop_diagnostics_runner.rb +61 -0
  30. data/lib/ruby_lsp/requests/support/rubocop_formatting_runner.rb +50 -0
  31. data/lib/ruby_lsp/requests/support/selection_range.rb +4 -0
  32. data/lib/ruby_lsp/requests/support/semantic_token_encoder.rb +24 -3
  33. data/lib/ruby_lsp/requests/support/syntax_error_diagnostic.rb +6 -0
  34. data/lib/ruby_lsp/requests.rb +13 -1
  35. data/lib/ruby_lsp/store.rb +20 -3
  36. data/rakelib/check_docs.rake +34 -6
  37. data/ruby-lsp.gemspec +7 -5
  38. data/sorbet/config +4 -0
  39. data/sorbet/rbi/.rubocop.yml +8 -0
  40. data/sorbet/rbi/gems/ansi@1.5.0.rbi +338 -0
  41. data/sorbet/rbi/gems/ast@2.4.2.rbi +522 -0
  42. data/sorbet/rbi/gems/builder@3.2.4.rbi +418 -0
  43. data/sorbet/rbi/gems/coderay@1.1.3.rbi +8 -0
  44. data/sorbet/rbi/gems/debug@1.5.0.rbi +1273 -0
  45. data/sorbet/rbi/gems/diff-lcs@1.5.0.rbi +867 -0
  46. data/sorbet/rbi/gems/io-console@0.5.11.rbi +8 -0
  47. data/sorbet/rbi/gems/irb@1.4.1.rbi +376 -0
  48. data/sorbet/rbi/gems/language_server-protocol@3.16.0.3.rbi +7325 -0
  49. data/sorbet/rbi/gems/method_source@1.0.0.rbi +8 -0
  50. data/sorbet/rbi/gems/minitest-reporters@1.5.0.rbi +612 -0
  51. data/sorbet/rbi/gems/minitest@5.15.0.rbi +994 -0
  52. data/sorbet/rbi/gems/parallel@1.22.1.rbi +163 -0
  53. data/sorbet/rbi/gems/parser@3.1.2.0.rbi +3968 -0
  54. data/sorbet/rbi/gems/prettier_print@0.1.0.rbi +734 -0
  55. data/sorbet/rbi/gems/pry@0.14.1.rbi +8 -0
  56. data/sorbet/rbi/gems/rainbow@3.1.1.rbi +227 -0
  57. data/sorbet/rbi/gems/rake@13.0.6.rbi +1853 -0
  58. data/sorbet/rbi/gems/rbi@0.0.14.rbi +2337 -0
  59. data/sorbet/rbi/gems/regexp_parser@2.5.0.rbi +1854 -0
  60. data/sorbet/rbi/gems/reline@0.3.1.rbi +1274 -0
  61. data/sorbet/rbi/gems/rexml@3.2.5.rbi +3852 -0
  62. data/sorbet/rbi/gems/rubocop-ast@1.18.0.rbi +4180 -0
  63. data/sorbet/rbi/gems/rubocop-minitest@0.20.0.rbi +1369 -0
  64. data/sorbet/rbi/gems/rubocop-rake@0.6.0.rbi +246 -0
  65. data/sorbet/rbi/gems/rubocop-shopify@2.6.0.rbi +8 -0
  66. data/sorbet/rbi/gems/rubocop-sorbet@0.6.8.rbi +652 -0
  67. data/sorbet/rbi/gems/rubocop@1.30.0.rbi +36729 -0
  68. data/sorbet/rbi/gems/ruby-progressbar@1.11.0.rbi +732 -0
  69. data/sorbet/rbi/gems/spoom@1.1.11.rbi +1600 -0
  70. data/sorbet/rbi/gems/syntax_tree@2.7.1.rbi +6777 -0
  71. data/sorbet/rbi/gems/tapioca@0.8.1.rbi +1972 -0
  72. data/sorbet/rbi/gems/thor@1.2.1.rbi +2921 -0
  73. data/sorbet/rbi/gems/unicode-display_width@2.1.0.rbi +27 -0
  74. data/sorbet/rbi/gems/unparser@0.6.5.rbi +2789 -0
  75. data/sorbet/rbi/gems/webrick@1.7.0.rbi +1779 -0
  76. data/sorbet/rbi/gems/yard-sorbet@0.6.1.rbi +289 -0
  77. data/sorbet/rbi/gems/yard@0.9.27.rbi +13048 -0
  78. data/sorbet/rbi/shims/fiddle.rbi +4 -0
  79. data/sorbet/rbi/shims/hash.rbi +6 -0
  80. data/sorbet/rbi/shims/rdoc.rbi +4 -0
  81. data/sorbet/tapioca/config.yml +13 -0
  82. data/sorbet/tapioca/require.rb +7 -0
  83. metadata +62 -13
  84. data/lib/ruby_lsp/requests/rubocop_request.rb +0 -49
  85. data/shipit.production.yml +0 -1
@@ -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