rbs 3.3.0 → 3.3.1

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: 8e63ecace589850a190944136198f3d66e4265d7a2d49909e705043687492698
4
- data.tar.gz: a6795431478b3d5300a8df0bd4168250c4b7124807a790e99788e05d280e7bdc
3
+ metadata.gz: 5578e86c15b544b7609720ca682e2d27015777e0a337b31cf2e5635ad8f055bc
4
+ data.tar.gz: e29e44859fca53e8698b4eeade30b7b9d9e0f4d17766d9d2195d24b53dc20ecb
5
5
  SHA512:
6
- metadata.gz: 8ed98b066766f8350bdcd71878120a054a53e9246cf4c7766b4f3b4121a554af6bd94e881e59f0ffc03155e55abcaa6f864a8c763fde1dfa2b9d1930b49d9075
7
- data.tar.gz: cc8391b0262bf39937f39f53e9e09e8acf860e32a4d1009e46870c9b9e674910aaf96fff2d9814e176f677fce7675a0d55c063969c8bd8c188512c1b6ef07735
6
+ metadata.gz: df94b11063185c3728d4590a6ca9bc46a5efd707956956f1a46cacb1c06f80e4fc4d1d92180700f6411b2a4903406f0ca328a726019895c1fdcd74deea3e3647
7
+ data.tar.gz: 534f7db84014b9c7030862248115cc6f263de3d7cd0d3e3349a416052c2ee0764b35925756362c0d0adc5da0330f2937c6ca0544be666b8dad8b86d5e117e36e
data/CHANGELOG.md CHANGED
@@ -2,6 +2,21 @@
2
2
 
3
3
  ## master
4
4
 
5
+ ## 3.3.1 (2023-11-21)
6
+
7
+ ### Library changes
8
+
9
+ * Allow to use RBS in symlinked tree ([#1624](https://github.com/ruby/rbs/pull/1624))
10
+ * Should escape if param name include not simple-word ([#1618](https://github.com/ruby/rbs/pull/1618))
11
+
12
+ #### rbs collection
13
+
14
+ * Load Bundler lazily ([#1612](https://github.com/ruby/rbs/pull/1612))
15
+
16
+ ### Miscellaneous
17
+
18
+ * Stop using `bundle` command ([#1619](https://github.com/ruby/rbs/pull/1619))
19
+
5
20
  ## 3.3.0 (2023-11-09)
6
21
 
7
22
  ### Library changes
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rbs (3.3.0)
4
+ rbs (3.3.1)
5
5
  abbrev
6
6
 
7
7
  PATH
data/README.md CHANGED
@@ -77,6 +77,53 @@ $ rbs methods ::Object
77
77
  $ rbs method Object then
78
78
  ```
79
79
 
80
+ An end user of `rbs` will probably find `rbs prototype` the most useful. This command generates boilerplate signature declarations for ruby files. For example, say you have written the below ruby script.
81
+
82
+ ```ruby
83
+ # person.rb
84
+ class Person
85
+ attr_reader :name
86
+ attr_reader :contacts
87
+
88
+ def initialize(name:)
89
+ @name = name
90
+ @contacts = []
91
+ end
92
+
93
+ def speak
94
+ "I'm #{@name} and I love Ruby!"
95
+ end
96
+ end
97
+ ```
98
+
99
+ Running prototype on the above will automatically generate
100
+
101
+ ```
102
+ $ rbs prototype rb person.rb
103
+ class Person
104
+ @name: untyped
105
+
106
+ @contacts: untyped
107
+
108
+ attr_reader name: untyped
109
+
110
+ attr_reader contacts: untyped
111
+
112
+ def initialize: (name: untyped) -> void
113
+
114
+ def speak: () -> ::String
115
+ end
116
+ ```
117
+
118
+ It prints signatures for all methods, classes, instance variables, and constants.
119
+ This is only a starting point, and you should edit the output to match your signature more accurately.
120
+
121
+ `rbs prototpe` offers three options.
122
+
123
+ - `rb` generates from just the available Ruby code
124
+ - `rbi` generates from Sorbet RBI
125
+ - `runtime` generates from runtime API
126
+
80
127
  ## Library
81
128
 
82
129
  There are two important concepts, _environment_ and _definition_.
data/Steepfile CHANGED
@@ -8,8 +8,7 @@ target :lib do
8
8
  "lib/rbs/test.rb"
9
9
  )
10
10
 
11
- library "pathname", "json", "logger", "monitor", "tsort", "uri", 'dbm', 'pstore', 'singleton', 'shellwords', 'fileutils', 'find', 'digest', 'abbrev', 'prettyprint'
12
- signature 'stdlib/yaml/0'
11
+ library "pathname", "json", "logger", "monitor", "tsort", "uri", 'dbm', 'pstore', 'singleton', 'shellwords', 'fileutils', 'find', 'digest', 'abbrev', 'prettyprint', 'yaml'
13
12
  signature "stdlib/strscan/0/"
14
13
  signature "stdlib/optparse/0/"
15
14
  signature "stdlib/rdoc/0/"
data/lib/rbs/cli.rb CHANGED
@@ -1246,6 +1246,8 @@ EOB
1246
1246
  end
1247
1247
 
1248
1248
  def run_collection(args, options)
1249
+ require 'bundler'
1250
+
1249
1251
  opts = collection_options(args)
1250
1252
  params = {}
1251
1253
  opts.order args.drop(1), into: params
@@ -83,7 +83,7 @@ module RBS
83
83
  private def validate_gemfile_lock_path!(lock:, gemfile_lock_path:)
84
84
  return unless lock
85
85
  return unless lock.gemfile_lock_fullpath
86
- unless lock.gemfile_lock_fullpath == gemfile_lock_path
86
+ unless File.realpath(lock.gemfile_lock_fullpath) == File.realpath(gemfile_lock_path)
87
87
  raise GemfileLockMismatchError.new(expected: lock.gemfile_lock_fullpath, actual: gemfile_lock_path)
88
88
  end
89
89
  end
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'yaml'
4
- require 'bundler'
5
4
 
6
5
  require_relative './collection/sources'
7
6
  require_relative './collection/config'
data/lib/rbs/diff.rb CHANGED
@@ -53,13 +53,13 @@ module RBS
53
53
  builder.build_instance(@type_name).methods
54
54
  rescue => e
55
55
  RBS.logger.warn("#{path}: (#{e.class}) #{e.message}")
56
- {}
56
+ {} #: Hash[Symbol, Definition::Method]
57
57
  end
58
58
  singleton_methods = begin
59
59
  builder.build_singleton(@type_name).methods
60
60
  rescue => e
61
61
  RBS.logger.warn("#{path}: (#{e.class}) #{e.message}")
62
- {}
62
+ {} #: Hash[Symbol, Definition::Method]
63
63
  end
64
64
 
65
65
  constant_children = begin
@@ -67,7 +67,7 @@ module RBS
67
67
  constant_resolver.children(@type_name)
68
68
  rescue => e
69
69
  RBS.logger.warn("#{path}: (#{e.class}) #{e.message}")
70
- {}
70
+ {} #: Hash[Symbol, Constant]
71
71
  end
72
72
 
73
73
  [ instance_methods, singleton_methods, constant_children ]
@@ -101,7 +101,8 @@ module RBS
101
101
  prefix = kind == :instance ? "" : "self."
102
102
 
103
103
  if definition_method.alias_of
104
- "alias #{prefix}#{key} #{prefix}#{definition_method.alias_of.defs.first.member.name}"
104
+ first_def = definition_method.alias_of.defs.first #: Definition::Method::TypeDef
105
+ "alias #{prefix}#{key} #{prefix}#{first_def.member.name}"
105
106
  else
106
107
  "def #{prefix}#{key}: #{definition_method.method_types.join(" | ")}"
107
108
  end
@@ -33,7 +33,9 @@ module RBS
33
33
  # def self.members: () -> [ :foo, :bar ]
34
34
  # def members: () -> [ :foo, :bar ]
35
35
  def build_s_members
36
- [:singleton, :instance].map do |kind|
36
+ (
37
+ [:singleton, :instance] #: Array[AST::Members::MethodDefinition::kind]
38
+ ).map do |kind|
37
39
  AST::Members::MethodDefinition.new(
38
40
  name: :members,
39
41
  overloads: [
data/lib/rbs/types.rb CHANGED
@@ -883,7 +883,11 @@ module RBS
883
883
 
884
884
  def to_s
885
885
  if name
886
- "#{type} #{name}"
886
+ if name.match?(/\A[a-zA-Z0-9_]+\z/)
887
+ "#{type} #{name}"
888
+ else
889
+ "#{type} `#{name}`"
890
+ end
887
891
  else
888
892
  "#{type}"
889
893
  end
data/lib/rbs/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RBS
4
- VERSION = "3.3.0"
4
+ VERSION = "3.3.1"
5
5
  end
data/sig/diff.rbs CHANGED
@@ -15,9 +15,12 @@ module RBS
15
15
  def each_diff: () { (String before, String after) -> void } -> void
16
16
 
17
17
  private def each_diff_by: (Symbol kind, Hash[::Symbol, Definition::Method] before_methods, Hash[::Symbol, Definition::Method] after_methods) { (String before, String after) -> void } -> void
18
- private def build_methods: (Array[String] path) -> [ Hash[::Symbol, Definition::Method], Hash[::Symbol, Definition::Method] ]
18
+ private def build_methods: (Array[String] path) -> [ Hash[::Symbol, Definition::Method], Hash[::Symbol, Definition::Method] , Hash[Symbol, Constant]]
19
19
  private def build_env: (Array[String] path) -> Environment
20
20
  private def build_builder: (Environment env) -> DefinitionBuilder
21
21
  private def definition_method_to_s: (Symbol key, Symbol kind, Definition::Method definition_method) -> String?
22
+ private def each_diff_methods: (Symbol kind, Hash[Symbol, Definition::Method], Hash[Symbol, Definition::Method]) { (String before, String after) -> void } -> void
23
+ private def each_diff_constants: (Hash[Symbol, Constant] before_constants, Hash[Symbol, Constant] after_constants) { (String before, String after) -> void } -> void
24
+ private def constant_to_s: (Constant?) -> String
22
25
  end
23
26
  end
@@ -2,12 +2,17 @@ module RBS
2
2
  module Prototype
3
3
  class Runtime
4
4
  module Reflection
5
+ self.@object_class: UnboundMethod
5
6
  def self.object_class: (Module value) -> Class
6
7
 
8
+ self.@constants_of: UnboundMethod
7
9
  def self.constants_of: (Module mod, ?bool inherit) -> Array[Symbol]
8
10
  end
9
11
 
10
12
  module Helpers
13
+ @module_name_method: UnboundMethod
14
+ @untyped: Types::Bases::Any
15
+
11
16
  private
12
17
 
13
18
  def const_name: (Module const) -> String?
@@ -19,12 +24,15 @@ module RBS
19
24
 
20
25
  def to_type_name: (String name, ?full_name: bool) -> TypeName
21
26
 
22
- def untyped: () -> untyped
27
+ def untyped: () -> Types::Bases::Any
23
28
  end
24
29
 
25
30
  class ValueObjectBase
26
31
  include Helpers
27
32
 
33
+ # @target_class stores the singleton object of `Data` or `Struct` subclass
34
+ @target_class: untyped
35
+
28
36
  def build_decl: () -> AST::Declarations::Class
29
37
 
30
38
  private
@@ -33,6 +41,10 @@ module RBS
33
41
 
34
42
  def build_s_members: () -> Array[AST::Members::MethodDefinition]
35
43
 
44
+ def build_super_class: () -> AST::Declarations::Class::Super
45
+
46
+ def add_decl_members: (AST::Declarations::Class) -> void
47
+
36
48
  def initialize: (Class target_class) -> void
37
49
  end
38
50
 
@@ -77,9 +89,9 @@ module RBS
77
89
 
78
90
  def skip_mixin?: (type_name: TypeName, module_name: TypeName, mixin_class: mixin_class) -> bool
79
91
 
80
- def skip_singleton_method?: (module_name: TypeName, name: Symbol) -> bool
92
+ def skip_singleton_method?: (module_name: TypeName, method: UnboundMethod, accessibility: Definition::accessibility) -> bool
81
93
 
82
- def skip_instance_method?: (module_name: TypeName, name: Symbol) -> bool
94
+ def skip_instance_method?: (module_name: TypeName, method: UnboundMethod, accessibility: Definition::accessibility) -> bool
83
95
 
84
96
  def skip_constant?: (module_name: String, name: Symbol) -> bool
85
97
 
@@ -147,6 +159,8 @@ module RBS
147
159
 
148
160
  def generate_module: (Module mod) -> void
149
161
 
162
+ def generate_mixin: (Module mod, AST::Declarations::Class | AST::Declarations::Module, TypeName, TypeName) -> void
163
+
150
164
  # Generate/find outer module declarations
151
165
  # This is broken down into another method to comply with `DRY`
152
166
  # This generates/finds declarations in nested form & returns the last array of declarations
@@ -158,6 +172,8 @@ module RBS
158
172
 
159
173
  def block_from_ast_of: (UnboundMethod method) -> Types::Block?
160
174
 
175
+ def block_from_body: (RubyVM::AbstractSyntaxTree::Node) -> Types::Block?
176
+
161
177
  def can_alias?: (Module, UnboundMethod) -> bool
162
178
 
163
179
  def type_params: (Module) -> Array[AST::TypeParam]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbs
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.0
4
+ version: 3.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Soutaro Matsumoto
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-11-09 00:00:00.000000000 Z
11
+ date: 2023-11-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: abbrev