parlour 5.0.0.beta.1 → 5.0.0.beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8117de48194856013f343430fd893e1b8bc75e51fc8b8811e70bc89a3f9989aa
4
- data.tar.gz: bc980c3cb70a33c60fc92c23f10f2d844da076161a65e2c24fde49e24d4aceb9
3
+ metadata.gz: 67507b0ea29af60c22d4e326220ea362441969c56c06d357767660356ff39b6c
4
+ data.tar.gz: 1f2cc037d17d4a3bfabc86b34b937d9a7fc9986af0302eb950fe310146944739
5
5
  SHA512:
6
- metadata.gz: 6bcf142fd126d52f38d2d0d5f597e85d7a4274c321b927230ce100aae9d3941bd6abb7e2cf35ccf597c2b5eaf71121126d5bd85c814d63cdece0e479536740c3
7
- data.tar.gz: 5af1d6099e12dff2105dca26c4a6db90bba1190018ab7e514dd413e272e3942ef3b608666e91e5fa26b6bdc23f2d886e41ab1d1655085e36ca5f0b94b461448f
6
+ metadata.gz: 446a15c1a26e799b3d407ef0e1e2c02b441a559da38a327cda3d2110ea6013825beb6870c14a42531425bb6b83a8595d1298cfe70d9bbd87cc27ebff9e397985
7
+ data.tar.gz: 8b4df35779cd3b6c1129811a271788a303bf1c57fe271bebea135a48c06dafbb1ecead10a9e3da3ae36b4d17953848767a0a546b2a7de00fc24b3ff02ec71e04
@@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file.
3
3
 
4
4
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
5
5
 
6
+ ## [5.0.0.beta.2] - 2020-09-14
7
+ ### Added
8
+ - Added `Types::Type#describe` for simple text descriptions of types
9
+ - Added `Types::Self` for RBI's `T.self_type` or RBS' `self`
10
+
11
+ ### Fixed
12
+ - Fixed `RbiGenerator::Namespace#create_method`'s `returns:` kwarg only
13
+ accepting String types
14
+ - Fixed lack of spacing between argument lists and blocks in RBS
15
+ - Fixed RBS attributes not having comments
16
+
6
17
  ## [5.0.0.beta.1] - 2020-09-13
7
18
  ### Added
8
19
  - Added RBS generation support! This includes:
@@ -272,7 +272,7 @@ module Parlour
272
272
  name: String,
273
273
  parameters: T.nilable(T::Array[Parameter]),
274
274
  return_type: T.nilable(Types::TypeLike),
275
- returns: T.nilable(String),
275
+ returns: T.nilable(Types::TypeLike),
276
276
  abstract: T::Boolean,
277
277
  implementation: T::Boolean,
278
278
  override: T::Boolean,
@@ -60,7 +60,7 @@ module Parlour
60
60
  # @param options [Options] The formatting options to use.
61
61
  # @return [Array<String>] The RBS lines, formatted as specified.
62
62
  def generate_rbs(indent_level, options)
63
- [options.indented(
63
+ generate_comments(indent_level, options) + [options.indented(
64
64
  indent_level,
65
65
  "attr_#{kind} #{name}: #{String === @type ? @type : @type.generate_rbs}"
66
66
  )]
@@ -94,7 +94,7 @@ module Parlour
94
94
  }" + T.must(generated_params[0])
95
95
 
96
96
  generated_params[-1] = T.must(generated_params[-1]) + "#{
97
- (block_type && block_type != 'untyped') ? block_type.first : '' # TODO: doesn't support multi-line block types
97
+ (block_type && block_type.first != 'untyped') ? " #{block_type.first}" : '' # TODO: doesn't support multi-line block types
98
98
  } -> #{rbs_return_type || 'void'}"
99
99
 
100
100
  generated_params
@@ -32,6 +32,13 @@ module Parlour
32
32
  def to_type(type_like)
33
33
  Type.to_type(type_like)
34
34
  end
35
+
36
+ def hash
37
+ [self.class, *instance_variables.map { |x| instance_variable_get(x).hash }].hash
38
+ end
39
+
40
+ sig { abstract.returns(String) }
41
+ def describe; end
35
42
  end
36
43
 
37
44
  # A basic type as a raw string.
@@ -58,6 +65,11 @@ module Parlour
58
65
  def generate_rbs
59
66
  str
60
67
  end
68
+
69
+ sig { override.returns(String) }
70
+ def describe
71
+ str
72
+ end
61
73
  end
62
74
 
63
75
  # A type which can be either the wrapped type, or nil.
@@ -84,6 +96,11 @@ module Parlour
84
96
  def generate_rbs
85
97
  "#{type.generate_rbs}?"
86
98
  end
99
+
100
+ sig { override.returns(String) }
101
+ def describe
102
+ "Nilable<#{type.describe}>"
103
+ end
87
104
  end
88
105
 
89
106
  # A type which is (at least) one of the wrapped types.
@@ -110,6 +127,11 @@ module Parlour
110
127
  def generate_rbs
111
128
  "(#{types.map(&:generate_rbs).join(' | ')})"
112
129
  end
130
+
131
+ sig { override.returns(String) }
132
+ def describe
133
+ "Union<#{types.map(&:describe).join(', ')}>"
134
+ end
113
135
  end
114
136
 
115
137
  # A type which matches all of the wrapped types.
@@ -136,6 +158,11 @@ module Parlour
136
158
  def generate_rbs
137
159
  "(#{types.map(&:generate_rbs).join(' & ')})"
138
160
  end
161
+
162
+ sig { override.returns(String) }
163
+ def describe
164
+ "Intersection<#{types.map(&:describe).join(', ')}>"
165
+ end
139
166
  end
140
167
 
141
168
  # A fixed-length array of items, each with a known type.
@@ -162,6 +189,11 @@ module Parlour
162
189
  def generate_rbs
163
190
  "[#{types.map(&:generate_rbs).join(', ')}]"
164
191
  end
192
+
193
+ sig { override.returns(String) }
194
+ def describe
195
+ "[#{types.map(&:describe).join(', ')}]"
196
+ end
165
197
  end
166
198
 
167
199
  class SingleElementCollection < Type
@@ -187,6 +219,11 @@ module Parlour
187
219
  def generate_rbs
188
220
  "#{collection_name}[#{element.generate_rbs}]"
189
221
  end
222
+
223
+ sig { override.returns(String) }
224
+ def describe
225
+ "#{collection_name}<#{element.describe}>"
226
+ end
190
227
  end
191
228
 
192
229
  # An array with known element types.
@@ -282,6 +319,11 @@ module Parlour
282
319
  def generate_rbs
283
320
  "Hash[#{key.generate_rbs}, #{value.generate_rbs}]"
284
321
  end
322
+
323
+ sig { override.returns(String) }
324
+ def describe
325
+ "Hash<#{key.describe}, #{value.describe}>"
326
+ end
285
327
  end
286
328
 
287
329
  # A record/shape; a hash with a fixed set of keys with given types.
@@ -310,6 +352,11 @@ module Parlour
310
352
  def generate_rbs
311
353
  "{ #{keys_to_types.map { |k, v| "#{k}: #{v.generate_rbs}" }.join(', ')} }"
312
354
  end
355
+
356
+ sig { override.returns(String) }
357
+ def describe
358
+ "{ #{keys_to_types.map { |k, v| "#{k}: #{v.describe}" }.join(', ')} }"
359
+ end
313
360
  end
314
361
 
315
362
  # A type which represents the class of a type, rather than an instance.
@@ -338,9 +385,14 @@ module Parlour
338
385
  def generate_rbs
339
386
  "singleton(#{type.generate_rbs})"
340
387
  end
388
+
389
+ sig { override.returns(String) }
390
+ def describe
391
+ "Class<#{type.describe}>"
392
+ end
341
393
  end
342
394
 
343
- # Generic type for a boolean.
395
+ # Type for a boolean.
344
396
  class Boolean < Type
345
397
  sig { params(other: Object).returns(T::Boolean) }
346
398
  def ==(other)
@@ -356,8 +408,36 @@ module Parlour
356
408
  def generate_rbs
357
409
  "bool"
358
410
  end
411
+
412
+ sig { override.returns(String) }
413
+ def describe
414
+ "bool"
415
+ end
359
416
  end
360
417
 
418
+ # Type equivalent to the receiver.
419
+ class Self < Type
420
+ sig { params(other: Object).returns(T::Boolean) }
421
+ def ==(other)
422
+ Self === other
423
+ end
424
+
425
+ sig { override.returns(String) }
426
+ def generate_rbi
427
+ "T.self_type"
428
+ end
429
+
430
+ sig { override.returns(String) }
431
+ def generate_rbs
432
+ "self"
433
+ end
434
+
435
+ sig { override.returns(String) }
436
+ def describe
437
+ "self"
438
+ end
439
+ end
440
+
361
441
  # The explicit lack of a type.
362
442
  class Untyped < Type
363
443
  sig { params(other: Object).returns(T::Boolean) }
@@ -374,6 +454,11 @@ module Parlour
374
454
  def generate_rbs
375
455
  "untyped"
376
456
  end
457
+
458
+ sig { override.returns(String) }
459
+ def describe
460
+ "untyped"
461
+ end
377
462
  end
378
463
 
379
464
  # A type which can be called as a function.
@@ -439,6 +524,15 @@ module Parlour
439
524
  end
440
525
  "(#{rbs_params.map(&:to_rbs_param).join(', ')}) -> #{return_type&.generate_rbs || 'void'}"
441
526
  end
527
+
528
+ sig { override.returns(String) }
529
+ def describe
530
+ # For simplicity, use RBS with pre-described parameter types
531
+ rbs_params = parameters.map do |param|
532
+ RbsGenerator::Parameter.new(param.name, type: param.type.describe, required: param.default.nil?)
533
+ end
534
+ "(#{rbs_params.map(&:to_rbs_param).join(', ')}) -> #{return_type&.describe || 'void'}"
535
+ end
442
536
  end
443
537
  end
444
538
  end
@@ -1,5 +1,5 @@
1
1
  # typed: strong
2
2
  module Parlour
3
3
  # The library version.
4
- VERSION = '5.0.0.beta.1'
4
+ VERSION = '5.0.0.beta.2'
5
5
  end
@@ -3,7 +3,7 @@ module Kernel
3
3
  end
4
4
 
5
5
  module Parlour
6
- VERSION = '5.0.0.beta.1'
6
+ VERSION = '5.0.0.beta.2'
7
7
 
8
8
  class ConflictResolver
9
9
  extend T::Sig
@@ -319,6 +319,12 @@ module Parlour
319
319
 
320
320
  sig { params(type_like: TypeLike).returns(Type) }
321
321
  def to_type(type_like); end
322
+
323
+ sig { returns(T.untyped) }
324
+ def hash; end
325
+
326
+ sig { abstract.returns(String) }
327
+ def describe; end
322
328
  end
323
329
 
324
330
  class Raw < Type
@@ -336,6 +342,9 @@ module Parlour
336
342
 
337
343
  sig { override.returns(String) }
338
344
  def generate_rbs; end
345
+
346
+ sig { override.returns(String) }
347
+ def describe; end
339
348
  end
340
349
 
341
350
  class Nilable < Type
@@ -353,6 +362,9 @@ module Parlour
353
362
 
354
363
  sig { override.returns(String) }
355
364
  def generate_rbs; end
365
+
366
+ sig { override.returns(String) }
367
+ def describe; end
356
368
  end
357
369
 
358
370
  class Union < Type
@@ -370,6 +382,9 @@ module Parlour
370
382
 
371
383
  sig { override.returns(String) }
372
384
  def generate_rbs; end
385
+
386
+ sig { override.returns(String) }
387
+ def describe; end
373
388
  end
374
389
 
375
390
  class Intersection < Type
@@ -387,6 +402,9 @@ module Parlour
387
402
 
388
403
  sig { override.returns(String) }
389
404
  def generate_rbs; end
405
+
406
+ sig { override.returns(String) }
407
+ def describe; end
390
408
  end
391
409
 
392
410
  class Tuple < Type
@@ -404,6 +422,9 @@ module Parlour
404
422
 
405
423
  sig { override.returns(String) }
406
424
  def generate_rbs; end
425
+
426
+ sig { override.returns(String) }
427
+ def describe; end
407
428
  end
408
429
 
409
430
  class SingleElementCollection < Type
@@ -423,6 +444,9 @@ module Parlour
423
444
 
424
445
  sig { override.returns(String) }
425
446
  def generate_rbs; end
447
+
448
+ sig { override.returns(String) }
449
+ def describe; end
426
450
  end
427
451
 
428
452
  class Array < SingleElementCollection
@@ -483,6 +507,9 @@ module Parlour
483
507
 
484
508
  sig { override.returns(String) }
485
509
  def generate_rbs; end
510
+
511
+ sig { override.returns(String) }
512
+ def describe; end
486
513
  end
487
514
 
488
515
  class Record < Type
@@ -500,6 +527,9 @@ module Parlour
500
527
 
501
528
  sig { override.returns(String) }
502
529
  def generate_rbs; end
530
+
531
+ sig { override.returns(String) }
532
+ def describe; end
503
533
  end
504
534
 
505
535
  class Class < Type
@@ -517,6 +547,9 @@ module Parlour
517
547
 
518
548
  sig { override.returns(String) }
519
549
  def generate_rbs; end
550
+
551
+ sig { override.returns(String) }
552
+ def describe; end
520
553
  end
521
554
 
522
555
  class Boolean < Type
@@ -528,6 +561,23 @@ module Parlour
528
561
 
529
562
  sig { override.returns(String) }
530
563
  def generate_rbs; end
564
+
565
+ sig { override.returns(String) }
566
+ def describe; end
567
+ end
568
+
569
+ class Self < Type
570
+ sig { params(other: Object).returns(T::Boolean) }
571
+ def ==(other); end
572
+
573
+ sig { override.returns(String) }
574
+ def generate_rbi; end
575
+
576
+ sig { override.returns(String) }
577
+ def generate_rbs; end
578
+
579
+ sig { override.returns(String) }
580
+ def describe; end
531
581
  end
532
582
 
533
583
  class Untyped < Type
@@ -539,6 +589,9 @@ module Parlour
539
589
 
540
590
  sig { override.returns(String) }
541
591
  def generate_rbs; end
592
+
593
+ sig { override.returns(String) }
594
+ def describe; end
542
595
  end
543
596
 
544
597
  class Proc < Type
@@ -578,6 +631,9 @@ module Parlour
578
631
 
579
632
  sig { override.returns(String) }
580
633
  def generate_rbs; end
634
+
635
+ sig { override.returns(String) }
636
+ def describe; end
581
637
  end
582
638
  end
583
639
 
@@ -1030,7 +1086,7 @@ module Parlour
1030
1086
  name: String,
1031
1087
  parameters: T.nilable(T::Array[Parameter]),
1032
1088
  return_type: T.nilable(Types::TypeLike),
1033
- returns: T.nilable(String),
1089
+ returns: T.nilable(Types::TypeLike),
1034
1090
  abstract: T::Boolean,
1035
1091
  implementation: T::Boolean,
1036
1092
  override: T::Boolean,
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: parlour
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.0.beta.1
4
+ version: 5.0.0.beta.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Christiansen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-09-13 00:00:00.000000000 Z
11
+ date: 2020-09-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sorbet-runtime