rbs 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +7 -1
- data/.gitignore +1 -1
- data/CHANGELOG.md +7 -0
- data/Gemfile +12 -0
- data/README.md +86 -47
- data/Rakefile +54 -21
- data/bin/rbs-prof +9 -0
- data/bin/run_in_md.rb +49 -0
- data/lib/rbs.rb +2 -0
- data/lib/rbs/ast/declarations.rb +62 -7
- data/lib/rbs/ast/members.rb +41 -17
- data/lib/rbs/cli.rb +299 -121
- data/lib/rbs/constant.rb +4 -4
- data/lib/rbs/constant_table.rb +50 -44
- data/lib/rbs/definition.rb +175 -59
- data/lib/rbs/definition_builder.rb +647 -603
- data/lib/rbs/environment.rb +338 -209
- data/lib/rbs/environment_walker.rb +14 -23
- data/lib/rbs/errors.rb +141 -3
- data/lib/rbs/parser.y +14 -9
- data/lib/rbs/prototype/rb.rb +100 -112
- data/lib/rbs/prototype/rbi.rb +4 -2
- data/lib/rbs/prototype/runtime.rb +10 -6
- data/lib/rbs/substitution.rb +8 -1
- data/lib/rbs/test/hook.rb +2 -2
- data/lib/rbs/test/setup.rb +3 -1
- data/lib/rbs/test/test_helper.rb +2 -5
- data/lib/rbs/test/type_check.rb +1 -2
- data/lib/rbs/type_name_resolver.rb +58 -0
- data/lib/rbs/types.rb +94 -2
- data/lib/rbs/validator.rb +51 -0
- data/lib/rbs/variance_calculator.rb +12 -2
- data/lib/rbs/version.rb +1 -1
- data/lib/rbs/writer.rb +125 -89
- data/rbs.gemspec +0 -10
- data/schema/decls.json +15 -0
- data/schema/members.json +3 -0
- data/stdlib/benchmark/benchmark.rbs +151 -151
- data/stdlib/builtin/enumerable.rbs +1 -1
- data/stdlib/builtin/file.rbs +0 -3
- data/stdlib/builtin/io.rbs +4 -4
- data/stdlib/builtin/thread.rbs +2 -2
- data/stdlib/csv/csv.rbs +4 -6
- data/stdlib/fiber/fiber.rbs +1 -1
- data/stdlib/json/json.rbs +1 -1
- data/stdlib/mutex_m/mutex_m.rbs +77 -0
- data/stdlib/pathname/pathname.rbs +6 -6
- data/stdlib/prime/integer-extension.rbs +1 -1
- data/stdlib/prime/prime.rbs +44 -44
- data/stdlib/tmpdir/tmpdir.rbs +1 -1
- metadata +8 -129
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a5318ae7911a3e7e4e1bed761e0c7b8d1fc248e698b0d53f8a39d388da5617f0
|
4
|
+
data.tar.gz: d90f20d41372bcc852f49b844aa6b6b5367d9d88ec686a13ab00841f1cf1e2ed
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 702ae082267eb6a087e19c5a37a83aaaeea0f76e83eba7cc984a15cca869745d1b934231bf6910dbbba972a06301948eca740aa2a8fc49c378487a030befe909
|
7
|
+
data.tar.gz: 8f467c52d50c25886965e1762f7c52f246cb90fa313c7d0a9400051f32c7f3603ada0142cf90ebfad4b56ccbaf57bacd5d1467cb8daf20247254c90937b9c599
|
data/.github/workflows/ruby.yml
CHANGED
@@ -24,5 +24,11 @@ jobs:
|
|
24
24
|
ruby -v
|
25
25
|
gem install bundler
|
26
26
|
bin/setup
|
27
|
-
bundle exec rake
|
27
|
+
bundle exec rake test
|
28
|
+
bundle exec rake stdlib_test
|
29
|
+
bundle exec rake rubocop
|
30
|
+
bundle exec rake validate
|
31
|
+
bundle exec rake test_doc
|
28
32
|
bundle exec rake build
|
33
|
+
RBS_GENERATE_TEST_PATH=/tmp/Array_test.rb bundle exec rake 'generate:stdlib_test[Array]'
|
34
|
+
ruby -c /tmp/Array_test.rb
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,13 @@
|
|
2
2
|
|
3
3
|
## master
|
4
4
|
|
5
|
+
## 0.5.0 (2020-07-04)
|
6
|
+
|
7
|
+
* Signature updates for `Mutex_m`, `IO`, and `Enumerable`.
|
8
|
+
* Syntax update. [#307](https://github.com/ruby/rbs/pull/307)
|
9
|
+
* AST command prints _absolute_ type names with file name filtering. [#312](https://github.com/ruby/rbs/pull/312)
|
10
|
+
* Improve CLI message. [#309](https://github.com/ruby/rbs/pull/309)
|
11
|
+
|
5
12
|
## 0.4.0 (2020-06-15)
|
6
13
|
|
7
14
|
* Signature update for `Fiber`, `Encoding`, and `Enumerator`.
|
data/Gemfile
CHANGED
@@ -3,4 +3,16 @@ source "https://rubygems.org"
|
|
3
3
|
# Specify your gem's dependencies in rbs.gemspec
|
4
4
|
gemspec
|
5
5
|
|
6
|
+
# Development dependencies
|
7
|
+
gem "rake"
|
8
|
+
gem "minitest"
|
9
|
+
gem "racc"
|
10
|
+
gem "rubocop"
|
11
|
+
gem "rubocop-rubycw"
|
12
|
+
gem "minitest-reporters"
|
13
|
+
gem "json"
|
14
|
+
gem "json-schema"
|
15
|
+
gem 'stackprof'
|
16
|
+
|
17
|
+
# Test gems
|
6
18
|
gem "rbs-amber", path: "test/assets/test-gem"
|
data/README.md
CHANGED
@@ -1,79 +1,118 @@
|
|
1
1
|
# RBS
|
2
2
|
|
3
|
-
RBS
|
4
|
-
|
3
|
+
RBS is a language to describe the structure of Ruby programs.
|
4
|
+
You can write down the definition of a class or module: methods defined in the class, instance variables and their types, and inheritance/mix-in relations.
|
5
|
+
It also allows declaring constants and global variables.
|
5
6
|
|
6
|
-
|
7
|
+
The following is a small example of RBS for a chat app.
|
7
8
|
|
8
|
-
|
9
|
-
|
9
|
+
<!-- run-start:a.rbs:bundle exec rbs -I a.rbs validate -->
|
10
|
+
```rbs
|
11
|
+
module ChatApp
|
12
|
+
VERSION: String
|
10
13
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
```
|
14
|
+
class User
|
15
|
+
attr_reader login: String
|
16
|
+
attr_reader email: String
|
15
17
|
|
16
|
-
|
18
|
+
def initialize: (login: String, email: String) -> void
|
19
|
+
end
|
17
20
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
$ rbs method ::Object tap
|
23
|
-
```
|
21
|
+
class Bot
|
22
|
+
attr_reader name: String
|
23
|
+
attr_reader email: String
|
24
|
+
attr_reader owner: User
|
24
25
|
|
25
|
-
|
26
|
+
def initialize: (name: String, owner: User) -> void
|
27
|
+
end
|
26
28
|
|
27
|
-
|
28
|
-
|
29
|
-
|
29
|
+
class Message
|
30
|
+
attr_reader id: String
|
31
|
+
attr_reader string: String
|
32
|
+
attr_reader from: User | Bot # `|` means union types: `#from` can be `User` or `Bot`
|
33
|
+
attr_reader reply_to: Message? # `?` means optional type: `#reply_to` can be `nil`
|
30
34
|
|
31
|
-
|
35
|
+
def initialize: (from: User | Bot, string: String) -> void
|
32
36
|
|
33
|
-
|
37
|
+
def reply: (from: User | Bot, string: String) -> Message
|
38
|
+
end
|
34
39
|
|
40
|
+
class Channel
|
41
|
+
attr_reader name: String
|
42
|
+
attr_reader messages: Array[Message]
|
43
|
+
attr_reader users: Array[User]
|
44
|
+
attr_reader bots: Array[Bot]
|
45
|
+
|
46
|
+
def initialize: (name: String) -> void
|
47
|
+
|
48
|
+
def each_member: () { (User | Bot) -> void } -> void # `{` and `}` means block.
|
49
|
+
| () -> Enumerable[User | Bot, void] # Method can be overloaded.
|
50
|
+
end
|
51
|
+
end
|
35
52
|
```
|
36
|
-
|
37
|
-
$ rbs ancestors --singleton Array # (Array.class.ancestors)
|
38
|
-
```
|
53
|
+
<!-- run-end -->
|
39
54
|
|
40
|
-
|
41
|
-
The name of the command is borrowed from `Class#ancestors`, but the semantics is a bit different.
|
42
|
-
The `ancestors` command is more precise (I believe).
|
55
|
+
## Installation
|
43
56
|
|
44
|
-
|
57
|
+
Install the `rbs` gem. `$ gem install rbs` from the command line, or add a line in your `Gemfile`.
|
45
58
|
|
46
|
-
```
|
47
|
-
|
48
|
-
$ rbs methods --singleton ::Object # Object.methods
|
59
|
+
```rb
|
60
|
+
gem "rbs"
|
49
61
|
```
|
50
62
|
|
51
|
-
|
63
|
+
## CLI
|
52
64
|
|
53
|
-
|
65
|
+
The gem ships with the `rbs` command line tool to demonstrate what it can do and help develop RBS.
|
54
66
|
|
55
|
-
```
|
56
|
-
$ rbs
|
57
|
-
$ rbs
|
67
|
+
```bash
|
68
|
+
$ rbs version
|
69
|
+
$ rbs list
|
70
|
+
$ rbs ancestors ::Object
|
71
|
+
$ rbs methods ::Object
|
72
|
+
$ rbs method Object then
|
58
73
|
```
|
59
74
|
|
60
|
-
|
75
|
+
## Library
|
61
76
|
|
62
|
-
|
77
|
+
There are two important concepts, _environment_ and _definition_.
|
63
78
|
|
64
|
-
|
79
|
+
An _environment_ is a dictionary that keeps track of all declarations. What is the declaration associated with `String` class? An _environment_ will give you the answer.
|
65
80
|
|
66
|
-
|
81
|
+
A _definition_ gives you the detail of the class. What is the type of the return value of `gsub` method of the `String` class? The _definition_ for `String` class knows the list of methods it provides and their types.
|
67
82
|
|
68
|
-
|
69
|
-
$ rbs -r set list
|
70
|
-
```
|
83
|
+
The following is a small code to retrieve the definition of the `String#gsub` method.
|
71
84
|
|
72
|
-
|
85
|
+
<!-- run-start:a.rb:bundle exec ruby a.rb -->
|
86
|
+
```rb
|
87
|
+
require "rbs"
|
73
88
|
|
89
|
+
loader = RBS::EnvironmentLoader.new()
|
90
|
+
|
91
|
+
# loader.add(path: Pathname("sig")) # Load .rbs files from `sig` directory
|
92
|
+
# loader.add(library: "pathname") # Load pathname library
|
93
|
+
|
94
|
+
environment = RBS::Environment.from_loader(loader).resolve_type_names
|
95
|
+
|
96
|
+
# ::String
|
97
|
+
string = RBS::TypeName.new(name: :String, namespace: RBS::Namespace.root)
|
98
|
+
|
99
|
+
# Class declaration for ::String
|
100
|
+
decl = environment.class_decls[string]
|
101
|
+
|
102
|
+
# Builder provides the translation from `declaration` to `definition`
|
103
|
+
builder = RBS::DefinitionBuilder.new(env: environment)
|
104
|
+
|
105
|
+
# Definition of instance of String
|
106
|
+
instance = builder.build_instance(string)
|
107
|
+
# Print the types of `gsub` method
|
108
|
+
puts instance.methods[:gsub].method_types.join("\n")
|
109
|
+
|
110
|
+
# Definition of singleton of String
|
111
|
+
singleton = builder.build_singleton(string)
|
112
|
+
# No `gsub` method for String singleton
|
113
|
+
puts singleton.methods[:gsub]
|
74
114
|
```
|
75
|
-
|
76
|
-
```
|
115
|
+
<!-- run-end -->
|
77
116
|
|
78
117
|
## Guides
|
79
118
|
|
data/Rakefile
CHANGED
@@ -9,10 +9,23 @@ Rake::TestTask.new(:test) do |t|
|
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
|
-
multitask :default => [:test, :stdlib_test, :rubocop, :validate]
|
12
|
+
multitask :default => [:test, :stdlib_test, :rubocop, :validate, :test_doc]
|
13
|
+
|
14
|
+
task :test_doc => :parser do
|
15
|
+
files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
16
|
+
`git ls-files -z`.split("\x0").select do |file| Pathname(file).extname == ".md" end
|
17
|
+
end
|
18
|
+
|
19
|
+
sh "ruby bin/run_in_md.rb #{files.join(" ")}"
|
20
|
+
end
|
13
21
|
|
14
22
|
task :validate => :parser do
|
15
23
|
sh "rbs validate"
|
24
|
+
|
25
|
+
FileList["stdlib/*"].each do |path|
|
26
|
+
next if path =~ %r{stdlib/builtin}
|
27
|
+
sh "rbs -r#{File.basename(path)} validate"
|
28
|
+
end
|
16
29
|
end
|
17
30
|
|
18
31
|
FileList["test/stdlib/**/*_test.rb"].each do |test|
|
@@ -41,7 +54,7 @@ namespace :generate do
|
|
41
54
|
raise "Class name is necessary. e.g. rake 'generate:stdlib_test[String]'"
|
42
55
|
end
|
43
56
|
|
44
|
-
path = Pathname("test/stdlib/#{klass}_test.rb")
|
57
|
+
path = Pathname(ENV["RBS_GENERATE_TEST_PATH"] || "test/stdlib/#{klass}_test.rb")
|
45
58
|
raise "#{path} already exists!" if path.exist?
|
46
59
|
|
47
60
|
require "erb"
|
@@ -53,35 +66,55 @@ namespace :generate do
|
|
53
66
|
def initialize(klass)
|
54
67
|
@klass = klass
|
55
68
|
|
56
|
-
|
57
|
-
|
69
|
+
loader = RBS::EnvironmentLoader.new
|
70
|
+
Dir['stdlib/*'].each do |lib|
|
71
|
+
next if lib.end_with?('builtin')
|
72
|
+
|
73
|
+
loader.add(library: File.basename(lib))
|
74
|
+
end
|
75
|
+
@env = RBS::Environment.from_loader(loader).resolve_type_names
|
58
76
|
end
|
59
77
|
|
60
78
|
def call
|
61
79
|
ERB.new(<<~ERB, trim_mode: "-").result(binding)
|
62
80
|
require_relative "test_helper"
|
81
|
+
require 'rbs/test/test_helper'
|
82
|
+
|
83
|
+
<%- unless class_methods.empty? -%>
|
84
|
+
class <%= klass %>SingletonTest < Minitest::Test
|
85
|
+
include RBS::Test::TypeAssertions
|
63
86
|
|
64
|
-
class <%= klass %>Test < StdlibTest
|
65
|
-
target <%= klass %>
|
66
87
|
# library "pathname", "set", "securerandom" # Declare library signatures to load
|
67
|
-
|
88
|
+
testing "singleton(::<%= klass %>)"
|
89
|
+
|
68
90
|
<%- class_methods.each do |method_name, definition| %>
|
69
|
-
def
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
91
|
+
def test_<%= test_name_for(method_name) %>
|
92
|
+
<%- definition.method_types.each do |method_type| -%>
|
93
|
+
assert_send_type "<%= method_type %>",
|
94
|
+
<%= klass %>, :<%= method_name %>
|
95
|
+
<%- end -%>
|
74
96
|
end
|
75
97
|
<%- end -%>
|
98
|
+
end
|
99
|
+
<%- end -%>
|
100
|
+
|
101
|
+
<%- unless instance_methods.empty? -%>
|
102
|
+
class <%= klass %>Test < Minitest::Test
|
103
|
+
include RBS::Test::TypeAssertions
|
104
|
+
|
105
|
+
# library "pathname", "set", "securerandom" # Declare library signatures to load
|
106
|
+
testing "::<%= klass %>"
|
107
|
+
|
76
108
|
<%- instance_methods.each do |method_name, definition| %>
|
77
109
|
def test_<%= test_name_for(method_name) %>
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
110
|
+
<%- definition.method_types.each do |method_type| -%>
|
111
|
+
assert_send_type "<%= method_type %>",
|
112
|
+
<%= klass %>.new, :<%= method_name %>
|
113
|
+
<%- end -%>
|
82
114
|
end
|
83
115
|
<%- end -%>
|
84
116
|
end
|
117
|
+
<%- end -%>
|
85
118
|
ERB
|
86
119
|
end
|
87
120
|
|
@@ -117,18 +150,18 @@ namespace :generate do
|
|
117
150
|
end
|
118
151
|
|
119
152
|
def type_name
|
120
|
-
@type_name ||=
|
153
|
+
@type_name ||= RBS::TypeName.new(name: klass.to_sym, namespace: RBS::Namespace.new(path: [], absolute: true))
|
121
154
|
end
|
122
155
|
|
123
156
|
def class_methods
|
124
|
-
@class_methods ||=
|
125
|
-
definition.implemented_in
|
157
|
+
@class_methods ||= RBS::DefinitionBuilder.new(env: env).build_singleton(type_name).methods.select {|_, definition|
|
158
|
+
definition.implemented_in == type_name
|
126
159
|
}
|
127
160
|
end
|
128
161
|
|
129
162
|
def instance_methods
|
130
|
-
@instance_methods ||=
|
131
|
-
definition.implemented_in
|
163
|
+
@instance_methods ||= RBS::DefinitionBuilder.new(env: env).build_instance(type_name).methods.select {|_, definition|
|
164
|
+
definition.implemented_in == type_name
|
132
165
|
}
|
133
166
|
end
|
134
167
|
end
|
data/bin/rbs-prof
ADDED
data/bin/run_in_md.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
require "tmpdir"
|
2
|
+
require "shellwords"
|
3
|
+
|
4
|
+
ARGV.each do |path|
|
5
|
+
puts "~~~~~~~ Checking #{path} ~~~~~~"
|
6
|
+
content = File.read(path)
|
7
|
+
|
8
|
+
snippets = []
|
9
|
+
lines = []
|
10
|
+
content.lines.each.with_index do |line, index|
|
11
|
+
case line
|
12
|
+
when /run-start:/
|
13
|
+
lines = [[line, index+1]]
|
14
|
+
when /run-end/
|
15
|
+
lines << [line, index+1]
|
16
|
+
snippets << lines
|
17
|
+
lines = []
|
18
|
+
else
|
19
|
+
lines << [line, index+1]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
snippets.each do |lines|
|
24
|
+
puts ">>> Code detected: "
|
25
|
+
hd, _, *code_lines, _, _ = lines
|
26
|
+
|
27
|
+
head = hd[0]
|
28
|
+
head.gsub!(/^<!-- +/, "").gsub!(/ +-->$/, "")
|
29
|
+
_,name,command = head.split(/:/)
|
30
|
+
|
31
|
+
puts "# command=#{Shellwords.split(command).inspect}"
|
32
|
+
puts "# name=#{name}"
|
33
|
+
puts code_lines.map {|line, i| "#{"%4d" % i} #{line}" }.join
|
34
|
+
|
35
|
+
code = code_lines.map(&:first).join
|
36
|
+
|
37
|
+
puts ">>> Running..."
|
38
|
+
Dir.mktmpdir do |dir|
|
39
|
+
File.write(File.join(dir, name), code)
|
40
|
+
pid = spawn({ "BUNDLE_GEMFILE" => File.join(__dir__, "../Gemfile") },
|
41
|
+
*Shellwords.split(command),
|
42
|
+
chdir: dir)
|
43
|
+
|
44
|
+
_, status = Process.waitpid2(pid)
|
45
|
+
|
46
|
+
status.success? or raise "Failed to execute code: #{code_lines.join}"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/rbs.rb
CHANGED
@@ -32,8 +32,10 @@ require "rbs/writer"
|
|
32
32
|
require "rbs/prototype/rbi"
|
33
33
|
require "rbs/prototype/rb"
|
34
34
|
require "rbs/prototype/runtime"
|
35
|
+
require "rbs/type_name_resolver"
|
35
36
|
require "rbs/environment_walker"
|
36
37
|
require "rbs/vendorer"
|
38
|
+
require "rbs/validator"
|
37
39
|
|
38
40
|
begin
|
39
41
|
require "rbs/parser"
|
data/lib/rbs/ast/declarations.rb
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
module RBS
|
2
2
|
module AST
|
3
3
|
module Declarations
|
4
|
+
class Base
|
5
|
+
end
|
6
|
+
|
4
7
|
class ModuleTypeParams
|
5
8
|
attr_reader :params
|
6
9
|
|
@@ -77,7 +80,53 @@ module RBS
|
|
77
80
|
end
|
78
81
|
end
|
79
82
|
|
80
|
-
|
83
|
+
module NestedDeclarationHelper
|
84
|
+
def each_member
|
85
|
+
if block_given?
|
86
|
+
members.each do |member|
|
87
|
+
if member.is_a?(Members::Base)
|
88
|
+
yield member
|
89
|
+
end
|
90
|
+
end
|
91
|
+
else
|
92
|
+
enum_for :each_member
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def each_decl
|
97
|
+
if block_given?
|
98
|
+
members.each do |member|
|
99
|
+
if member.is_a?(Declarations::Base)
|
100
|
+
yield member
|
101
|
+
end
|
102
|
+
end
|
103
|
+
else
|
104
|
+
enum_for :each_decl
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
module MixinHelper
|
110
|
+
def each_mixin(&block)
|
111
|
+
if block_given?
|
112
|
+
@mixins ||= begin
|
113
|
+
members.select do |member|
|
114
|
+
case member
|
115
|
+
when Members::Include, Members::Extend, Members::Prepend
|
116
|
+
true
|
117
|
+
else
|
118
|
+
false
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
@mixins.each(&block)
|
123
|
+
else
|
124
|
+
enum_for :each_mixin
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
class Class < Base
|
81
130
|
class Super
|
82
131
|
attr_reader :name
|
83
132
|
attr_reader :args
|
@@ -105,6 +154,9 @@ module RBS
|
|
105
154
|
end
|
106
155
|
end
|
107
156
|
|
157
|
+
include NestedDeclarationHelper
|
158
|
+
include MixinHelper
|
159
|
+
|
108
160
|
attr_reader :name
|
109
161
|
attr_reader :type_params
|
110
162
|
attr_reader :members
|
@@ -151,7 +203,10 @@ module RBS
|
|
151
203
|
end
|
152
204
|
end
|
153
205
|
|
154
|
-
class Module
|
206
|
+
class Module < Base
|
207
|
+
include NestedDeclarationHelper
|
208
|
+
include MixinHelper
|
209
|
+
|
155
210
|
attr_reader :name
|
156
211
|
attr_reader :type_params
|
157
212
|
attr_reader :members
|
@@ -198,7 +253,7 @@ module RBS
|
|
198
253
|
end
|
199
254
|
end
|
200
255
|
|
201
|
-
class Extension
|
256
|
+
class Extension < Base
|
202
257
|
attr_reader :name
|
203
258
|
attr_reader :type_params
|
204
259
|
attr_reader :extension_name
|
@@ -245,7 +300,7 @@ module RBS
|
|
245
300
|
end
|
246
301
|
end
|
247
302
|
|
248
|
-
class Interface
|
303
|
+
class Interface < Base
|
249
304
|
attr_reader :name
|
250
305
|
attr_reader :type_params
|
251
306
|
attr_reader :members
|
@@ -288,7 +343,7 @@ module RBS
|
|
288
343
|
end
|
289
344
|
end
|
290
345
|
|
291
|
-
class Alias
|
346
|
+
class Alias < Base
|
292
347
|
attr_reader :name
|
293
348
|
attr_reader :type
|
294
349
|
attr_reader :annotations
|
@@ -327,7 +382,7 @@ module RBS
|
|
327
382
|
end
|
328
383
|
end
|
329
384
|
|
330
|
-
class Constant
|
385
|
+
class Constant < Base
|
331
386
|
attr_reader :name
|
332
387
|
attr_reader :type
|
333
388
|
attr_reader :location
|
@@ -363,7 +418,7 @@ module RBS
|
|
363
418
|
end
|
364
419
|
end
|
365
420
|
|
366
|
-
class Global
|
421
|
+
class Global < Base
|
367
422
|
attr_reader :name
|
368
423
|
attr_reader :type
|
369
424
|
attr_reader :location
|