rbs 1.0.0.pre → 1.0.0.pre2

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.
@@ -50,7 +50,6 @@ rule
50
50
  | interface_decl
51
51
  | module_decl
52
52
  | class_decl
53
- | extension_decl
54
53
 
55
54
  start_new_scope: { start_new_variables_scope }
56
55
  start_merged_scope: { start_merged_variables_scope }
@@ -61,24 +60,6 @@ rule
61
60
  result = val[1].unshift(Annotation.new(string: val[0].value, location: val[0].location))
62
61
  }
63
62
 
64
- extension_decl:
65
- annotations kEXTENSION start_new_scope class_name type_params kLPAREN extension_name kRPAREN class_members kEND {
66
- reset_variable_scope
67
-
68
- location = val[1].location + val[9].location
69
- result = Declarations::Extension.new(
70
- name: val[3].value,
71
- type_params: val[4]&.value || [],
72
- extension_name: val[6].value.to_sym,
73
- members: val[8],
74
- annotations: val[0],
75
- location: location,
76
- comment: leading_comment(val[0].first&.location || location)
77
- )
78
- }
79
-
80
- extension_name: tUIDENT | tLIDENT
81
-
82
63
  class_decl:
83
64
  annotations kCLASS start_new_scope class_name module_type_params super_class class_members kEND {
84
65
  reset_variable_scope
@@ -129,9 +129,13 @@ module RBS
129
129
  RBS.logger.warn "`class <<` syntax with not-self may be compiled to incorrect code: #{this}"
130
130
  end
131
131
 
132
+ accessibility = current_accessibility(decls)
133
+
132
134
  ctx = Context.initial.tap { |ctx| ctx.singleton = true }
133
135
  process_children(body, decls: decls, comments: comments, context: ctx)
134
136
 
137
+ decls << accessibility
138
+
135
139
  when :DEFN, :DEFS
136
140
  if node.type == :DEFN
137
141
  def_name, def_body = node.children
@@ -80,12 +80,12 @@ module RBS
80
80
  unless const_name(mix)
81
81
  RBS.logger.warn("Skipping anonymous module #{mix} included in #{mod}")
82
82
  else
83
- module_name = to_type_name(const_name(mix))
84
- if module_name.namespace == type_name.namespace
85
- module_name = TypeName.new(name: module_name.name, namespace: Namespace.empty)
83
+ module_name = module_full_name = to_type_name(const_name(mix))
84
+ if module_full_name.namespace == type_name.namespace
85
+ module_name = TypeName.new(name: module_full_name.name, namespace: Namespace.empty)
86
86
  end
87
87
 
88
- yield module_name, mix
88
+ yield module_name, module_full_name, mix
89
89
  end
90
90
  end
91
91
  end
@@ -319,7 +319,9 @@ module RBS
319
319
  location: nil
320
320
  )
321
321
  else
322
- Types::ClassInstance.new(name: to_type_name(const_name(value.class)), args: [], location: nil)
322
+ value_type_name = to_type_name(const_name(value.class))
323
+ args = type_args(value_type_name)
324
+ Types::ClassInstance.new(name: value_type_name, args: args, location: nil)
323
325
  end
324
326
 
325
327
  @decls << AST::Declarations::Constant.new(
@@ -339,7 +341,9 @@ module RBS
339
341
  RBS.logger.warn("Skipping anonymous superclass #{mod.superclass} of #{mod}")
340
342
  nil
341
343
  else
342
- AST::Declarations::Class::Super.new(name: to_type_name(const_name(mod.superclass)), args: [], location: nil)
344
+ super_name = to_type_name(const_name(mod.superclass))
345
+ super_args = type_args(super_name)
346
+ AST::Declarations::Class::Super.new(name: super_name, args: super_args, location: nil)
343
347
  end
344
348
 
345
349
  decl = AST::Declarations::Class.new(
@@ -352,20 +356,22 @@ module RBS
352
356
  comment: nil
353
357
  )
354
358
 
355
- each_included_module(type_name, mod) do |module_name, _|
359
+ each_included_module(type_name, mod) do |module_name, module_full_name, _|
360
+ args = type_args(module_full_name)
356
361
  decl.members << AST::Members::Include.new(
357
362
  name: module_name,
358
- args: [],
363
+ args: args,
359
364
  location: nil,
360
365
  comment: nil,
361
366
  annotations: []
362
367
  )
363
368
  end
364
369
 
365
- each_included_module(type_name, mod.singleton_class) do |module_name, _|
370
+ each_included_module(type_name, mod.singleton_class) do |module_name, module_full_name ,_|
371
+ args = type_args(module_full_name)
366
372
  decl.members << AST::Members::Extend.new(
367
373
  name: module_name,
368
- args: [],
374
+ args: args,
369
375
  location: nil,
370
376
  comment: nil,
371
377
  annotations: []
@@ -399,20 +405,22 @@ module RBS
399
405
  comment: nil
400
406
  )
401
407
 
402
- each_included_module(type_name, mod) do |module_name, _|
408
+ each_included_module(type_name, mod) do |module_name, module_full_name, _|
409
+ args = type_args(module_full_name)
403
410
  decl.members << AST::Members::Include.new(
404
411
  name: module_name,
405
- args: [],
412
+ args: args,
406
413
  location: nil,
407
414
  comment: nil,
408
415
  annotations: []
409
416
  )
410
417
  end
411
418
 
412
- each_included_module(type_name, mod.singleton_class) do |module_name, _|
419
+ each_included_module(type_name, mod.singleton_class) do |module_name, module_full_name, _|
420
+ args = type_args(module_full_name)
413
421
  decl.members << AST::Members::Extend.new(
414
422
  name: module_name,
415
- args: [],
423
+ args: args,
416
424
  location: nil,
417
425
  comment: nil,
418
426
  annotations: []
@@ -430,6 +438,14 @@ module RBS
430
438
  @module_name_method ||= Module.instance_method(:name)
431
439
  @module_name_method.bind(const).call
432
440
  end
441
+
442
+ def type_args(type_name)
443
+ if class_decl = env.class_decls[type_name.absolute!]
444
+ class_decl.type_params.size.times.map { :untyped }
445
+ else
446
+ []
447
+ end
448
+ end
433
449
  end
434
450
  end
435
451
  end
@@ -71,14 +71,15 @@ module RBS
71
71
  with_name, without_name = alias_names(method_name, random)
72
72
  full_method_name = "#{prefix}#{method_name}"
73
73
 
74
- param_source = params.take_while {|param| param[0] == :req }.map(&:last) + ["*rest_args_#{random}"]
74
+ param_source = params.take_while {|param| param[0] == :req }.map(&:last) + ["*rest_args__#{random}"]
75
+ block_param = "block__#{random}"
75
76
 
76
77
  RBS.logger.debug {
77
- "Generating method definition: def #{with_name}(#{param_source.join(", ")}, &block) ..."
78
+ "Generating method definition: def #{with_name}(#{param_source.join(", ")}, &#{block_param}) ..."
78
79
  }
79
80
 
80
81
  [__LINE__ + 1, <<RUBY]
81
- def #{with_name}(#{param_source.join(", ")}, &block)
82
+ def #{with_name}(#{param_source.join(", ")}, &#{block_param})
82
83
  args = [#{param_source.join(", ")}]
83
84
  ::RBS.logger.debug { "#{full_method_name} with arguments: [" + args.map(&:inspect).join(", ") + "]" }
84
85
 
@@ -88,7 +89,7 @@ def #{with_name}(#{param_source.join(", ")}, &block)
88
89
 
89
90
  if block_given?
90
91
  receiver = self
91
- block_receives_block = block.parameters.last&.yield_self {|type, _| type == :block }
92
+ block_receives_block = #{block_param}.parameters.last&.yield_self {|type, _| type == :block }
92
93
 
93
94
  wrapped_block = proc do |*block_args, &block2|
94
95
  return_from_block = false
@@ -96,12 +97,12 @@ def #{with_name}(#{param_source.join(", ")}, &block)
96
97
  begin
97
98
  block_result = if receiver.equal?(self)
98
99
  if block_receives_block
99
- block.call(*block_args, &block2)
100
+ #{block_param}.call(*block_args, &block2)
100
101
  else
101
102
  yield(*block_args)
102
103
  end
103
104
  else
104
- instance_exec(*block_args, &block)
105
+ instance_exec(*block_args, &#{block_param})
105
106
  end
106
107
 
107
108
  return_from_block = true
@@ -943,7 +943,11 @@ module RBS
943
943
  end
944
944
 
945
945
  def has_keyword?
946
- !required_keywords.empty? || !optional_keywords.empty? || rest_keywords
946
+ if !required_keywords.empty? || !optional_keywords.empty? || rest_keywords
947
+ true
948
+ else
949
+ false
950
+ end
947
951
  end
948
952
  end
949
953
 
@@ -953,7 +957,7 @@ module RBS
953
957
 
954
958
  def initialize(type:, required:)
955
959
  @type = type
956
- @required = required
960
+ @required = required ? true : false
957
961
  end
958
962
 
959
963
  def ==(other)
@@ -1,3 +1,3 @@
1
1
  module RBS
2
- VERSION = "1.0.0.pre"
2
+ VERSION = "1.0.0.pre2"
3
3
  end
@@ -232,10 +232,11 @@ module RBS
232
232
  def method_name(name)
233
233
  s = name.to_s
234
234
 
235
- if /\A#{Parser::KEYWORDS_RE}\z/.match?(s)
236
- "`#{s}`"
237
- else
235
+ if [:tOPERATOR, :kAMP, :kHAT, :kSTAR, :kLT, :kEXCLAMATION, :kSTAR2, :kBAR].include?(Parser::PUNCTS[s]) ||
236
+ (/\A[a-zA-Z_]\w*[?!=]?\z/.match?(s) && !/\Aself\??\z/.match?(s))
238
237
  s
238
+ else
239
+ "`#{s}`"
239
240
  end
240
241
  end
241
242
 
@@ -0,0 +1,98 @@
1
+ module RBS
2
+ class DefinitionBuilder
3
+ class AncestorBuilder
4
+ class OneAncestors
5
+ attr_reader type_name: TypeName
6
+ attr_reader params: Array[Symbol]?
7
+ attr_reader super_class: Definition::Ancestor::t?
8
+ attr_reader self_types: Array[Definition::Ancestor::Instance]?
9
+ attr_reader included_modules: Array[Definition::Ancestor::Instance]?
10
+ attr_reader included_interfaces: Array[Definition::Ancestor::Instance]?
11
+ attr_reader prepended_modules: Array[Definition::Ancestor::Instance]?
12
+ attr_reader extended_modules: Array[Definition::Ancestor::Instance]?
13
+ attr_reader extended_interfaces: Array[Definition::Ancestor::Instance]?
14
+
15
+ def initialize: (type_name: TypeName,
16
+ params: Array[Symbol]?,
17
+ super_class: Definition::Ancestor::t?,
18
+ self_types: Array[Definition::Ancestor::Instance]?,
19
+ included_modules: Array[Definition::Ancestor::Instance]?,
20
+ included_interfaces: Array[Definition::Ancestor::Instance]?,
21
+ prepended_modules: Array[Definition::Ancestor::Instance]?,
22
+ extended_modules: Array[Definition::Ancestor::Instance]?,
23
+ extended_interfaces: Array[Definition::Ancestor::Instance]?) -> void
24
+
25
+ def each_ancestor: { (Definition::Ancestor::t) -> void } -> void
26
+ | -> Enumerator[Definition::Ancestor::t, void]
27
+
28
+ def self.class_instance: (type_name: TypeName, params: Array[Symbol], super_class: Definition::Ancestor::t?) -> instance
29
+
30
+ def self.singleton: (type_name: TypeName, super_class: Definition::Ancestor::t?) -> instance
31
+
32
+ def self.module_instance: (type_name: TypeName, params: Array[Symbol]) -> instance
33
+
34
+ def self.interface: (type_name: TypeName, params: Array[Symbol]) -> instance
35
+
36
+ def each_included_module: () { (Definition::Ancestor::Instance) -> void } -> void
37
+ | () -> Enumerator[Definition::Ancestor::Instance, void]
38
+
39
+ def each_included_interface: () { (Definition::Ancestor::Instance) -> void } -> void
40
+ | () -> Enumerator[Definition::Ancestor::Instance, void]
41
+
42
+ def each_prepended_module: () { (Definition::Ancestor::Instance) -> void } -> void
43
+ | () -> Enumerator[Definition::Ancestor::Instance, void]
44
+
45
+ def each_extended_module: () { (Definition::Ancestor::Instance) -> void } -> void
46
+ | () -> Enumerator[Definition::Ancestor::Instance, void]
47
+
48
+ def each_extended_interface: () { (Definition::Ancestor::Instance) -> void } -> void
49
+ | () -> Enumerator[Definition::Ancestor::Instance, void]
50
+
51
+ def each_self_type: () { (Definition::Ancestor::Instance) -> void } -> void
52
+ | () -> Enumerator[Definition::Ancestor::Instance, void]
53
+ end
54
+
55
+ attr_reader env: Environment
56
+
57
+ attr_reader one_instance_ancestors_cache: Hash[TypeName, OneAncestors]
58
+ attr_reader instance_ancestors_cache: Hash[TypeName, Definition::InstanceAncestors]
59
+
60
+ attr_reader one_singleton_ancestors_cache: Hash[TypeName, OneAncestors]
61
+ attr_reader singleton_ancestors_cache: Hash[TypeName, Definition::SingletonAncestors]
62
+
63
+ attr_reader one_interface_ancestors_cache: Hash[TypeName, OneAncestors]
64
+ attr_reader interface_ancestors_cache: Hash[TypeName, Definition::InstanceAncestors]
65
+
66
+ def initialize: (env: Environment) -> void
67
+
68
+ def validate_super_class!: (TypeName, Environment::ClassEntry) -> void
69
+
70
+ def one_instance_ancestors: (TypeName) -> OneAncestors
71
+
72
+ def one_singleton_ancestors: (TypeName) -> OneAncestors
73
+
74
+ def one_interface_ancestors: (TypeName) -> OneAncestors
75
+
76
+ def instance_ancestors: (TypeName, ?building_ancestors: Array[Definition::Ancestor::t]) -> Definition::InstanceAncestors
77
+
78
+ def singleton_ancestors: (TypeName, ?building_ancestors: Array[Definition::Ancestor::t]) -> Definition::SingletonAncestors
79
+
80
+ def interface_ancestors: (TypeName, ?building_ancestors: Array[Definition::Ancestor::t]) -> Definition::InstanceAncestors
81
+
82
+ def mixin_ancestors: (Environment::ClassEntry | Environment::ModuleEntry,
83
+ included_modules: Array[Definition::Ancestor::Instance]?,
84
+ included_interfaces:Array[Definition::Ancestor::Instance]?,
85
+ prepended_modules: Array[Definition::Ancestor::Instance]?,
86
+ extended_modules: Array[Definition::Ancestor::Instance]?,
87
+ extended_interfaces: Array[Definition::Ancestor::Instance]?) -> void
88
+
89
+ def mixin_ancestors0: (AST::Declarations::Class | AST::Declarations::Module | AST::Declarations::Interface,
90
+ align_params: Substitution?,
91
+ included_modules: Array[Definition::Ancestor::Instance]?,
92
+ included_interfaces:Array[Definition::Ancestor::Instance]?,
93
+ prepended_modules: Array[Definition::Ancestor::Instance]?,
94
+ extended_modules: Array[Definition::Ancestor::Instance]?,
95
+ extended_interfaces: Array[Definition::Ancestor::Instance]?) -> void
96
+ end
97
+ end
98
+ end
@@ -73,8 +73,9 @@ module RBS
73
73
  class Super
74
74
  attr_reader name: TypeName
75
75
  attr_reader args: Array[Types::t]
76
+ attr_reader location: Location?
76
77
 
77
- def initialize: (name: TypeName, args: Array[Types::t]) -> void
78
+ def initialize: (name: TypeName, args: Array[Types::t], location: Location?) -> void
78
79
 
79
80
  include _HashEqual
80
81
  include _ToJson
@@ -130,21 +131,6 @@ module RBS
130
131
  include _ToJson
131
132
  end
132
133
 
133
- class Extension < Base
134
- attr_reader name: TypeName
135
- attr_reader type_params: ModuleTypeParams
136
- attr_reader extension_name: Symbol
137
- attr_reader members: Array[Members::t]
138
- attr_reader annotations: Array[Annotation]
139
- attr_reader location: Location?
140
- attr_reader comment: Comment?
141
-
142
- def initialize: (name: TypeName, type_params: ModuleTypeParams, extension_name: Symbol, members: Array[Members::t], annotations: Array[Annotation], location: Location?, comment: Comment?) -> void
143
-
144
- include _HashEqual
145
- include _ToJson
146
- end
147
-
148
134
  class Interface
149
135
  type member = Members::t
150
136
 
@@ -157,6 +143,8 @@ module RBS
157
143
 
158
144
  def initialize: (name: TypeName, type_params: ModuleTypeParams, members: Array[member], annotations: Array[Annotation], location: Location?, comment: Comment?) -> void
159
145
 
146
+ include MixinHelper
147
+
160
148
  include _HashEqual
161
149
  include _ToJson
162
150
  end
@@ -1,100 +1,45 @@
1
1
  module RBS
2
2
  class DefinitionBuilder
3
- class OneAncestors
4
- attr_reader type_name: TypeName
5
- attr_reader params: Array[Symbol]?
6
- attr_reader super_class: Definition::Ancestor::t?
7
- attr_reader self_types: Array[Definition::Ancestor::Instance]?
8
- attr_reader included_modules: Array[Definition::Ancestor::Instance]?
9
- attr_reader prepended_modules: Array[Definition::Ancestor::Instance]?
10
- attr_reader extended_modules: Array[Definition::Ancestor::Instance]?
11
-
12
- def initialize: (type_name: TypeName,
13
- params: Array[Symbol]?,
14
- super_class: Definition::Ancestor::t?,
15
- self_types: Array[Definition::Ancestor::Instance]?,
16
- included_modules: Array[Definition::Ancestor::Instance]?,
17
- prepended_modules: Array[Definition::Ancestor::Instance]?,
18
- extended_modules: Array[Definition::Ancestor::Instance]?) -> void
19
-
20
- def each_ancestor: { (Definition::Ancestor::t) -> void } -> void
21
- | -> Enumerator[Definition::Ancestor::t, void]
22
-
23
- def self.class_instance: (type_name: TypeName, params: Array[Symbol], super_class: Definition::Ancestor::t?) -> instance
24
-
25
- def self.singleton: (type_name: TypeName, super_class: Definition::Ancestor::t?) -> instance
26
-
27
- def self.module_instance: (type_name: TypeName, params: Array[Symbol]) -> instance
28
- end
29
-
30
3
  attr_reader env: Environment
31
4
  attr_reader type_name_resolver: TypeNameResolver
5
+ attr_reader ancestor_builder: AncestorBuilder
6
+ attr_reader method_builder: MethodBuilder
32
7
 
33
8
  attr_reader instance_cache: Hash[TypeName, Definition | false | nil]
34
9
  attr_reader singleton_cache: Hash[TypeName, Definition | false | nil]
10
+ attr_reader singleton0_cache: Hash[TypeName, Definition | false | nil]
35
11
  attr_reader interface_cache: Hash[TypeName, Definition | false | nil]
36
12
 
37
- attr_reader one_instance_cache: Hash[TypeName, Definition]
38
- attr_reader one_singleton_cache: Hash[TypeName, Definition]
39
-
40
- attr_reader instance_ancestors_cache: Hash[TypeName, Definition::InstanceAncestors]
41
- attr_reader singleton_ancestor_cache: Hash[TypeName, Definition::SingletonAncestors]
42
-
43
- attr_reader one_instance_ancestors_cache: Hash[TypeName, OneAncestors]
44
- attr_reader one_singleton_ancestors_cache: Hash[TypeName, OneAncestors]
45
-
46
13
  def initialize: (env: Environment) -> void
47
14
 
48
15
  def validate_super_class!: (TypeName, Environment::ClassEntry) -> void
49
16
 
50
- def one_instance_ancestors: (TypeName) -> OneAncestors
51
-
52
- def one_singleton_ancestors: (TypeName) -> OneAncestors
53
-
54
- def instance_ancestors: (TypeName, ?building_ancestors: Array[Definition::Ancestor::t]) -> Definition::InstanceAncestors
55
-
56
- def singleton_ancestors: (TypeName, ?building_ancestors: Array[Definition::Ancestor::t]) -> Definition::SingletonAncestors
57
-
58
- def mixin_ancestors: (Environment::ClassEntry | Environment::ModuleEntry, included_modules: Array[Definition::Ancestor::Instance]?, prepended_modules: Array[Definition::Ancestor::Instance]?, extended_modules: Array[Definition::Ancestor::Instance]?) -> void
59
-
60
- def each_member_with_accessibility: (Array[AST::Members::t | AST::Declarations::t], ?accessibility: Definition::accessibility) { (AST::Members::t | AST::Declarations::t, Definition::accessibility) -> void } -> void
61
-
62
17
  def ensure_namespace!: (Namespace, location: Location?) -> void
63
18
 
64
- def build_singleton: (TypeName) -> Definition
19
+ def build_interface: (TypeName) -> Definition
65
20
 
66
21
  def build_instance: (TypeName) -> Definition
67
22
 
68
- def build_interface: (TypeName) -> Definition
69
-
70
- def build_one_instance: (TypeName) -> Definition
23
+ def build_singleton0: (TypeName) -> Definition
71
24
 
72
- def build_one_singleton: (TypeName) -> Definition
25
+ def build_singleton: (TypeName) -> Definition
73
26
 
74
- type ancestors = Definition::InstanceAncestors | Definition::SingletonAncestors | nil
75
- def merge_definitions: (TypeName,
76
- Array[[Definition::Ancestor::t, Definition]],
77
- entry: Environment::ModuleEntry | Environment::ClassEntry,
78
- self_type: Definition::self_type,
79
- ancestors: ancestors) -> Definition
27
+ def merge_definition: (src: Definition, dest: Definition, subst: Substitution, ?implemented_in: :keep | TypeName | nil, ?keep_super: bool) -> void
80
28
 
81
- type method_kind = :instance | :singleton
82
- def merge_method: (TypeName, Hash[Symbol, Definition::Method], Symbol, Definition::Method, Substitution, kind: method_kind) -> void
29
+ def merge_method: (TypeName, Hash[Symbol, Definition::Method], Symbol, Definition::Method, Substitution, ?implemented_in: :keep | TypeName | nil, ?keep_super: bool) -> void
83
30
 
84
- def merge_variable: (Hash[Symbol, Definition::Variable], Symbol, Definition::Variable) -> void
31
+ def merge_variable: (Hash[Symbol, Definition::Variable], Symbol, Definition::Variable, Substitution, ?keep_super: bool) -> void
85
32
 
86
33
  def try_cache: (TypeName, cache: Hash[TypeName, Definition | false | nil]) { () -> Definition } -> Definition
87
34
 
88
- type member_detail = [Definition::accessibility, Definition::Method?, AST::Members::MethodDefinition?, Array[AST::Members::MethodDefinition]]
89
- def method_definition_members: (TypeName, Environment::ClassEntry | Environment::ModuleEntry, kind: :singleton | :instance) -> Hash[Symbol, member_detail]
90
-
91
35
  def validate_params_with: (AST::Declarations::ModuleTypeParams, result: VarianceCalculator::Result) { (AST::Declarations::ModuleTypeParams::TypeParam) -> void } -> void
92
36
 
93
- def validate_parameter_variance: (decl: AST::Declarations::Class | AST::Declarations::Module | AST::Declarations::Interface, methods: Hash[Symbol, Definition::Method]) -> void
37
+ def validate_type_params: (Definition, ancestors: AncestorBuilder::OneAncestors, methods: MethodBuilder::Methods) -> void
38
+
39
+ def source_location: (Definition::Ancestor::Instance::source, AST::Declarations::t) -> Location?
94
40
 
95
- def expand_alias: (TypeName) -> Types::t
41
+ def insert_variable: (TypeName, Hash[Symbol, Definition::Variable], name: Symbol, type: Types::t) -> void
96
42
 
97
- type attributes = AST::Members::AttrReader | AST::Members::AttrWriter | AST::Members::AttrAccessor
98
- def build_attribute: (type_name: TypeName, definition: Definition, member: attributes, accessibility: Definition::accessibility) -> void
43
+ def define_methods: (Definition, interface_methods: Hash[Symbol, Definition::Method], methods: MethodBuilder::Methods, super_interface_method: bool) -> void
99
44
  end
100
45
  end