parlour 0.2.2 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +14 -14
- data/lib/parlour/rbi_generator/attribute.rb +1 -1
- data/lib/parlour/rbi_generator/namespace.rb +33 -22
- data/lib/parlour/rbi_generator/parameter.rb +7 -6
- data/lib/parlour/rbi_generator/rbi_object.rb +2 -2
- data/lib/parlour/version.rb +1 -1
- data/plugin_examples/foobar_plugin.rb +3 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ded8584a233720f5a345d5bad9b91c344fc12f1dc38b0fbad1b3e0e797178cb9
|
4
|
+
data.tar.gz: c23b9bc0207031d207202d95e259521fa4b5826b739094c2f10cab5223392f9b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2f470194db52dd83dbb27df91f3f9044f921946471a800f7d2d42e7f6230496b326585847812c35d77a7cea1eb1a2f874dc1397b9fc4b96bd53f8c2b13d31b4a
|
7
|
+
data.tar.gz: 270d77587338e413141952ce06710774e468a91f7ec636cf2636f2856a1bae4a3e9d4852a643aad602f57d0cb30cac88b080b0c46b22395e1905e69a0c56d28c
|
data/CHANGELOG.md
CHANGED
@@ -3,6 +3,11 @@ 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
|
+
## [0.3.0] - 2019-07-09
|
7
|
+
### Changed
|
8
|
+
- Breaking change: all `Namespace#create_` methods, and the `Parameter` constructor, now take entirely keyword arguments.
|
9
|
+
For example, `create_method('A', [], 'String')` is now written as `create_method(name: 'A', returns: 'String')`.
|
10
|
+
|
6
11
|
## [0.2.2] - 2019-07-08
|
7
12
|
### Fixed
|
8
13
|
- Fixed a bug which occasionally caused includes and extends to generate incorrectly.
|
data/README.md
CHANGED
@@ -25,15 +25,15 @@ API is very likely to change:
|
|
25
25
|
require 'parlour'
|
26
26
|
|
27
27
|
generator = Parlour::RbiGenerator.new
|
28
|
-
generator.root.create_module('A') do |a|
|
29
|
-
a.create_class('Foo') do |foo|
|
30
|
-
foo.create_method('add_two_integers', [
|
31
|
-
Parlour::RbiGenerator::Parameter.new('a', type: 'Integer'),
|
32
|
-
Parlour::RbiGenerator::Parameter.new('b', type: 'Integer')
|
33
|
-
], 'Integer')
|
28
|
+
generator.root.create_module(name: 'A') do |a|
|
29
|
+
a.create_class(name: 'Foo') do |foo|
|
30
|
+
foo.create_method(name: 'add_two_integers', parameters: [
|
31
|
+
Parlour::RbiGenerator::Parameter.new(name: 'a', type: 'Integer'),
|
32
|
+
Parlour::RbiGenerator::Parameter.new(name: 'b', type: 'Integer')
|
33
|
+
], return_type: 'Integer')
|
34
34
|
end
|
35
35
|
|
36
|
-
a.create_class('Bar', superclass: 'Foo')
|
36
|
+
a.create_class(name: 'Bar', superclass: 'Foo')
|
37
37
|
end
|
38
38
|
|
39
39
|
generator.rbi # => Our RBI as a string
|
@@ -64,15 +64,15 @@ require 'parlour'
|
|
64
64
|
|
65
65
|
class MyPlugin < Parlour::Plugin
|
66
66
|
def generate(root)
|
67
|
-
root.create_module('A') do |a|
|
68
|
-
a.create_class('Foo') do |foo|
|
69
|
-
foo.create_method('add_two_integers', [
|
70
|
-
Parlour::RbiGenerator::Parameter.new('a', type: 'Integer'),
|
71
|
-
Parlour::RbiGenerator::Parameter.new('b', type: 'Integer')
|
72
|
-
], 'Integer')
|
67
|
+
root.create_module(name: 'A') do |a|
|
68
|
+
a.create_class(name: 'Foo') do |foo|
|
69
|
+
foo.create_method(name: 'add_two_integers', parameters: [
|
70
|
+
Parlour::RbiGenerator::Parameter.new(name: 'a', type: 'Integer'),
|
71
|
+
Parlour::RbiGenerator::Parameter.new(name: 'b', type: 'Integer')
|
72
|
+
], return_type: 'Integer')
|
73
73
|
end
|
74
74
|
|
75
|
-
a.create_class('Bar', superclass: 'Foo')
|
75
|
+
a.create_class(name: 'Bar', superclass: 'Foo')
|
76
76
|
end
|
77
77
|
end
|
78
78
|
end
|
@@ -75,11 +75,11 @@ module Parlour
|
|
75
75
|
#
|
76
76
|
# @example Creating a module with a comment.
|
77
77
|
# namespace.add_comment_to_next_child('This is a module')
|
78
|
-
# namespace.create_module('M')
|
78
|
+
# namespace.create_module(name: 'M')
|
79
79
|
#
|
80
80
|
# @example Creating a class with a multi-line comment.
|
81
81
|
# namespace.add_comment_to_next_child(['This is a multi-line comment!', 'It can be as long as you want!'])
|
82
|
-
# namespace.create_class('C')
|
82
|
+
# namespace.create_class(name: 'C')
|
83
83
|
#
|
84
84
|
# @param comment [String, Array<String>] The new comment(s).
|
85
85
|
# @return [void]
|
@@ -93,7 +93,7 @@ module Parlour
|
|
93
93
|
|
94
94
|
sig do
|
95
95
|
params(
|
96
|
-
name: String,
|
96
|
+
name: T.nilable(String),
|
97
97
|
superclass: T.nilable(String),
|
98
98
|
abstract: T::Boolean,
|
99
99
|
block: T.nilable(T.proc.params(x: ClassNamespace).void)
|
@@ -102,12 +102,12 @@ module Parlour
|
|
102
102
|
# Creates a new class definition as a child of this namespace.
|
103
103
|
#
|
104
104
|
# @example Create a class with a nested module.
|
105
|
-
# namespace.create_class('Foo') do |foo|
|
106
|
-
# foo.create_module('Bar')
|
105
|
+
# namespace.create_class(name: 'Foo') do |foo|
|
106
|
+
# foo.create_module(name: 'Bar')
|
107
107
|
# end
|
108
108
|
#
|
109
109
|
# @example Create a class that is the child of another class.
|
110
|
-
# namespace.create_class('Bar', superclass: 'Foo') #=> class Bar < Foo
|
110
|
+
# namespace.create_class(name: 'Bar', superclass: 'Foo') #=> class Bar < Foo
|
111
111
|
#
|
112
112
|
# @param name [String] The name of this class.
|
113
113
|
# @param superclass [String, nil] The superclass of this class, or nil if it doesn't
|
@@ -115,7 +115,8 @@ module Parlour
|
|
115
115
|
# @param abstract [Boolean] A boolean indicating whether this class is abstract.
|
116
116
|
# @param block A block which the new instance yields itself to.
|
117
117
|
# @return [ClassNamespace]
|
118
|
-
def create_class(name, superclass: nil, abstract: false, &block)
|
118
|
+
def create_class(name: nil, superclass: nil, abstract: false, &block)
|
119
|
+
name = T.must(name)
|
119
120
|
new_class = ClassNamespace.new(generator, name, superclass, abstract, &block)
|
120
121
|
move_next_comments(new_class)
|
121
122
|
children << new_class
|
@@ -124,7 +125,7 @@ module Parlour
|
|
124
125
|
|
125
126
|
sig do
|
126
127
|
params(
|
127
|
-
name: String,
|
128
|
+
name: T.nilable(String),
|
128
129
|
interface: T::Boolean,
|
129
130
|
block: T.nilable(T.proc.params(x: ClassNamespace).void)
|
130
131
|
).returns(ModuleNamespace)
|
@@ -132,11 +133,11 @@ module Parlour
|
|
132
133
|
# Creates a new module definition as a child of this namespace.
|
133
134
|
#
|
134
135
|
# @example Create a basic module.
|
135
|
-
# namespace.create_module('Foo')
|
136
|
+
# namespace.create_module(name: 'Foo')
|
136
137
|
#
|
137
138
|
# @example Create a module with a method.
|
138
|
-
# namespace.create_module('Foo') do |foo|
|
139
|
-
# foo.create_method('method_name', [], 'Integer')
|
139
|
+
# namespace.create_module(name: 'Foo') do |foo|
|
140
|
+
# foo.create_method(name: 'method_name', parameters: [], return_type: 'Integer')
|
140
141
|
# end
|
141
142
|
#
|
142
143
|
# @param name [String] The name of this module.
|
@@ -144,7 +145,8 @@ module Parlour
|
|
144
145
|
# interface.
|
145
146
|
# @param block A block which the new instance yields itself to.
|
146
147
|
# @return [ModuleNamespace]
|
147
|
-
def create_module(name, interface: false, &block)
|
148
|
+
def create_module(name: nil, interface: false, &block)
|
149
|
+
name = T.must(name)
|
148
150
|
new_module = ModuleNamespace.new(generator, name, interface, &block)
|
149
151
|
move_next_comments(new_module)
|
150
152
|
children << new_module
|
@@ -153,9 +155,10 @@ module Parlour
|
|
153
155
|
|
154
156
|
sig do
|
155
157
|
params(
|
156
|
-
name: String,
|
157
|
-
parameters: T::Array[Parameter],
|
158
|
+
name: T.nilable(String),
|
159
|
+
parameters: T.nilable(T::Array[Parameter]),
|
158
160
|
return_type: T.nilable(String),
|
161
|
+
returns: T.nilable(String),
|
159
162
|
abstract: T::Boolean,
|
160
163
|
implementation: T::Boolean,
|
161
164
|
override: T::Boolean,
|
@@ -172,6 +175,7 @@ module Parlour
|
|
172
175
|
# method's parameters.
|
173
176
|
# @param return_type [String, nil] A Sorbet string of what this method returns, such as
|
174
177
|
# +"String"+ or +"T.untyped"+. Passing nil denotes a void return.
|
178
|
+
# @param returns [String, nil] Same as return_type.
|
175
179
|
# @param abstract [Boolean] Whether this method is abstract.
|
176
180
|
# @param implementation [Boolean] Whether this method is an implementation of a
|
177
181
|
# parent abstract method.
|
@@ -182,7 +186,11 @@ module Parlour
|
|
182
186
|
# it is defined using +self.+.
|
183
187
|
# @param block A block which the new instance yields itself to.
|
184
188
|
# @return [Method]
|
185
|
-
def create_method(name, parameters, return_type
|
189
|
+
def create_method(name: nil, parameters: nil, return_type: nil, returns: nil, abstract: false, implementation: false, override: false, overridable: false, class_method: false, &block)
|
190
|
+
name = T.must(name)
|
191
|
+
parameters = parameters || []
|
192
|
+
raise 'cannot specify both return_type: and returns:' if return_type && returns
|
193
|
+
return_type ||= returns
|
186
194
|
new_method = RbiGenerator::Method.new(
|
187
195
|
generator,
|
188
196
|
name,
|
@@ -224,7 +232,10 @@ module Parlour
|
|
224
232
|
# +"String"+ or +"T.untyped"+.
|
225
233
|
# @param block A block which the new instance yields itself to.
|
226
234
|
# @return [RbiGenerator::Attribute]
|
227
|
-
def create_attribute(name, kind, type, &block)
|
235
|
+
def create_attribute(name: nil, kind: nil, type: nil, &block)
|
236
|
+
name = T.must(name)
|
237
|
+
kind = T.must(kind)
|
238
|
+
type = T.must(type)
|
228
239
|
new_attribute = RbiGenerator::Attribute.new(
|
229
240
|
generator,
|
230
241
|
name,
|
@@ -245,8 +256,8 @@ module Parlour
|
|
245
256
|
# +"String"+ or +"T.untyped"+.
|
246
257
|
# @param block A block which the new instance yields itself to.
|
247
258
|
# @return [RbiGenerator::Attribute]
|
248
|
-
def create_attr_reader(name, type, &block)
|
249
|
-
create_attribute(name, :reader, type, &block)
|
259
|
+
def create_attr_reader(name: nil, type: nil, &block)
|
260
|
+
create_attribute(name: name, kind: :reader, type: type, &block)
|
250
261
|
end
|
251
262
|
|
252
263
|
# Creates a new write-only attribute (+attr_writer+).
|
@@ -256,8 +267,8 @@ module Parlour
|
|
256
267
|
# +"String"+ or +"T.untyped"+.
|
257
268
|
# @param block A block which the new instance yields itself to.
|
258
269
|
# @return [RbiGenerator::Attribute]
|
259
|
-
def create_attr_writer(name, type, &block)
|
260
|
-
create_attribute(name, :writer, type, &block)
|
270
|
+
def create_attr_writer(name: nil, type: nil, &block)
|
271
|
+
create_attribute(name: name, kind: :writer, type: type, &block)
|
261
272
|
end
|
262
273
|
|
263
274
|
# Creates a new read and write attribute (+attr_accessor+).
|
@@ -267,8 +278,8 @@ module Parlour
|
|
267
278
|
# +"String"+ or +"T.untyped"+.
|
268
279
|
# @param block A block which the new instance yields itself to.
|
269
280
|
# @return [RbiGenerator::Attribute]
|
270
|
-
def create_attr_accessor(name, type, &block)
|
271
|
-
create_attribute(name, :accessor, type, &block)
|
281
|
+
def create_attr_accessor(name: nil, type: nil, &block)
|
282
|
+
create_attribute(name: name, kind: :accessor, type: type, &block)
|
272
283
|
end
|
273
284
|
|
274
285
|
sig { params(name: String).void }
|
@@ -7,7 +7,7 @@ module Parlour
|
|
7
7
|
|
8
8
|
sig do
|
9
9
|
params(
|
10
|
-
name: String,
|
10
|
+
name: T.nilable(String),
|
11
11
|
type: T.nilable(String),
|
12
12
|
default: T.nilable(String)
|
13
13
|
).void
|
@@ -15,13 +15,13 @@ module Parlour
|
|
15
15
|
# Create a new method parameter.
|
16
16
|
#
|
17
17
|
# @example Create a simple Integer parameter named +num+.
|
18
|
-
# Parlour::RbiGenerator::Parameter.new('num', type: 'Integer')
|
18
|
+
# Parlour::RbiGenerator::Parameter.new(name: 'num', type: 'Integer')
|
19
19
|
# @example Create a nilable array parameter.
|
20
|
-
# Parlour::RbiGenerator::Parameter.new('array_of_strings_or_symbols', type: 'T.nilable(T::Array(String, Symbol))')
|
20
|
+
# Parlour::RbiGenerator::Parameter.new(name: 'array_of_strings_or_symbols', type: 'T.nilable(T::Array(String, Symbol))')
|
21
21
|
# @example Create a block parameter.
|
22
|
-
# Parlour::RbiGenerator::Parameter.new('&blk', type: 'T.proc.void')
|
22
|
+
# Parlour::RbiGenerator::Parameter.new(name: '&blk', type: 'T.proc.void')
|
23
23
|
# @example Create a parameter with a default value.
|
24
|
-
# Parlour::RbiGenerator::Parameter.new('name', type: 'String', default: 'Parlour')
|
24
|
+
# Parlour::RbiGenerator::Parameter.new(name: 'name', type: 'String', default: 'Parlour')
|
25
25
|
#
|
26
26
|
# @param name [String] The name of this parameter. This may start with +*+, +**+,
|
27
27
|
# or +&+, or end with +:+, which will infer the {kind} of this
|
@@ -33,7 +33,8 @@ module Parlour
|
|
33
33
|
# as +"\"\""+ (or +'""'+). The default value of the decimal +3.14+
|
34
34
|
# would be +"3.14"+.
|
35
35
|
# @return [void]
|
36
|
-
def initialize(name, type: nil, default: nil)
|
36
|
+
def initialize(name: nil, type: nil, default: nil)
|
37
|
+
name = T.must(name)
|
37
38
|
@name = name
|
38
39
|
|
39
40
|
prefix = /^(\*\*|\*|\&)?/.match(name)&.captures&.first || ''
|
@@ -52,12 +52,12 @@ module Parlour
|
|
52
52
|
# the definition for this object, not in the definition's body.
|
53
53
|
#
|
54
54
|
# @example Creating a module with a comment.
|
55
|
-
# namespace.create_module('M') do |m|
|
55
|
+
# namespace.create_module(name: 'M') do |m|
|
56
56
|
# m.add_comment('This is a module')
|
57
57
|
# end
|
58
58
|
#
|
59
59
|
# @example Creating a class with a multi-line comment.
|
60
|
-
# namespace.create_class('C') do |c|
|
60
|
+
# namespace.create_class(name: 'C') do |c|
|
61
61
|
# c.add_comment(['This is a multi-line comment!', 'It can be as long as you want!'])
|
62
62
|
# end
|
63
63
|
#
|
data/lib/parlour/version.rb
CHANGED
@@ -3,10 +3,10 @@ require 'parlour'
|
|
3
3
|
module FooBar
|
4
4
|
class Plugin < Parlour::Plugin
|
5
5
|
def generate(root)
|
6
|
-
root.create_module('Foo') do |foo|
|
6
|
+
root.create_module(name: 'Foo') do |foo|
|
7
7
|
foo.add_comment('This is an example plugin!')
|
8
|
-
foo.create_module('Bar')
|
9
|
-
foo.create_module('Bar', interface: true)
|
8
|
+
foo.create_module(name: 'Bar')
|
9
|
+
foo.create_module(name: 'Bar', interface: true)
|
10
10
|
end
|
11
11
|
end
|
12
12
|
end
|
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: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aaron Christiansen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-07-
|
11
|
+
date: 2019-07-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sorbet-runtime
|