steep 1.3.0 → 1.4.0.dev.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.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby-windows.yml +1 -0
  3. data/.github/workflows/ruby.yml +1 -5
  4. data/Gemfile +3 -1
  5. data/Gemfile.lock +22 -19
  6. data/Gemfile.steep +2 -1
  7. data/Gemfile.steep.lock +18 -14
  8. data/Steepfile +16 -0
  9. data/bin/rbs +21 -0
  10. data/bin/setup +1 -1
  11. data/lib/steep/annotation_parser.rb +40 -20
  12. data/lib/steep/ast/types/factory.rb +56 -10
  13. data/lib/steep/ast/types/name.rb +10 -0
  14. data/lib/steep/diagnostic/ruby.rb +1 -1
  15. data/lib/steep/diagnostic/signature.rb +40 -0
  16. data/lib/steep/index/rbs_index.rb +25 -9
  17. data/lib/steep/index/signature_symbol_provider.rb +1 -1
  18. data/lib/steep/project/dsl.rb +12 -4
  19. data/lib/steep/project/options.rb +3 -1
  20. data/lib/steep/project/target.rb +1 -3
  21. data/lib/steep/server/interaction_worker.rb +37 -20
  22. data/lib/steep/server/lsp_formatter.rb +14 -5
  23. data/lib/steep/services/completion_provider.rb +10 -12
  24. data/lib/steep/services/goto_service.rb +15 -14
  25. data/lib/steep/services/hover_provider/rbs.rb +29 -9
  26. data/lib/steep/services/hover_provider/ruby.rb +16 -10
  27. data/lib/steep/services/signature_service.rb +36 -39
  28. data/lib/steep/signature/validator.rb +28 -6
  29. data/lib/steep/subtyping/check.rb +1 -1
  30. data/lib/steep/type_construction.rb +16 -14
  31. data/lib/steep/type_inference/constant_env.rb +7 -3
  32. data/lib/steep/version.rb +1 -1
  33. data/rbs_collection.steep.lock.yaml +48 -51
  34. data/rbs_collection.steep.yaml +3 -1
  35. data/sample/lib/conference.rb +10 -0
  36. data/sample/sig/conference.rbs +23 -0
  37. data/sig/steep/annotation_parser.rbs +3 -2
  38. data/sig/steep/ast/annotation/collection.rbs +1 -1
  39. data/sig/steep/ast/types/factory.rbs +2 -0
  40. data/sig/steep/ast/types/name.rbs +4 -0
  41. data/sig/steep/diagnostic/signature.rbs +18 -14
  42. data/sig/steep/index/rbs_index.rbs +92 -42
  43. data/sig/steep/project/dsl.rbs +35 -30
  44. data/sig/steep/project/options.rbs +16 -4
  45. data/sig/steep/project/target.rbs +7 -7
  46. data/sig/steep/server/interaction_worker.rbs +2 -2
  47. data/sig/steep/server/lsp_formatter.rbs +4 -2
  48. data/sig/steep/services/completion_provider.rbs +6 -0
  49. data/sig/steep/services/hover_provider/rbs.rbs +6 -4
  50. data/sig/steep/services/hover_provider/ruby.rbs +8 -4
  51. data/sig/steep/services/signature_service.rbs +27 -3
  52. data/sig/steep/signature/validator.rbs +9 -5
  53. data/sig/steep/type_construction.rbs +1 -1
  54. data/sig/steep/type_inference/constant_env.rbs +2 -0
  55. data/smoke/diagnostics-rbs/test_expectations.yml +1 -1
  56. data/smoke/regexp/a.rb +2 -2
  57. data/steep.gemspec +2 -1
  58. metadata +21 -6
@@ -146,23 +146,11 @@ module Steep
146
146
  class ModuleSelfTypeError < Base
147
147
  attr_reader name: RBS::TypeName
148
148
 
149
- attr_reader ancestor: RBS::DefinitionBuilder::AncestorBuilder::OneAncestors
149
+ attr_reader ancestor: RBS::Definition::Ancestor::Instance
150
150
 
151
151
  attr_reader relation: Subtyping::Relation[AST::Types::t]
152
152
 
153
- def initialize: (name: RBS::TypeName, ancestor: RBS::DefinitionBuilder::AncestorBuilder::OneAncestors, relation: Subtyping::Relation[AST::Types::t], location: location?) -> void
154
-
155
- def header_line: () -> String
156
- end
157
-
158
- class ClassVariableDuplicationError < Base
159
- attr_reader class_name: RBS::TypeName
160
-
161
- attr_reader other_class_name: RBS::TypeName
162
-
163
- attr_reader variable_name: Symbol
164
-
165
- def initialize: (class_name: RBS::TypeName, other_class_name: RBS::TypeName, variable_name: Symbol, location: RBS::Location[untyped, untyped]) -> void
153
+ def initialize: (name: RBS::TypeName, ancestor: RBS::Definition::Ancestor::Instance, relation: Subtyping::Relation[AST::Types::t], location: location?) -> void
166
154
 
167
155
  def header_line: () -> String
168
156
  end
@@ -242,6 +230,22 @@ module Steep
242
230
  def header_line: () -> String
243
231
  end
244
232
 
233
+ class InconsistentClassModuleAliasError < Base
234
+ attr_reader decl: RBS::AST::Declarations::ModuleAlias | RBS::AST::Declarations::ClassAlias
235
+
236
+ def initialize: (decl: RBS::AST::Declarations::ModuleAlias | RBS::AST::Declarations::ClassAlias) -> void
237
+
238
+ def header_line: () -> String
239
+ end
240
+
241
+ class CyclicClassAliasDefinitionError < Base
242
+ attr_reader decl: RBS::AST::Declarations::ModuleAlias | RBS::AST::Declarations::ClassAlias
243
+
244
+ def initialize: (decl: RBS::AST::Declarations::ModuleAlias | RBS::AST::Declarations::ClassAlias) -> void
245
+
246
+ def header_line: () -> String
247
+ end
248
+
245
249
  def self.from_rbs_error: (RBS::BaseError error, factory: AST::Types::Factory) -> Base
246
250
  end
247
251
  end
@@ -2,89 +2,139 @@ module Steep
2
2
  module Index
3
3
  class RBSIndex
4
4
  class TypeEntry
5
- attr_reader type_name: untyped
6
-
7
- attr_reader declarations: untyped
8
-
9
- attr_reader references: untyped
10
-
11
- def initialize: (type_name: untyped) -> void
12
-
13
- def add_declaration: (untyped decl) -> untyped
14
-
15
- def add_reference: (untyped ref) -> untyped
5
+ attr_reader type_name: RBS::TypeName
6
+
7
+ type decl = RBS::AST::Declarations::Class
8
+ | RBS::AST::Declarations::Module
9
+ | RBS::AST::Declarations::Interface
10
+ | RBS::AST::Declarations::TypeAlias
11
+ | RBS::AST::Declarations::ClassAlias
12
+ | RBS::AST::Declarations::ModuleAlias
13
+
14
+ type ref = RBS::AST::Members::MethodDefinition
15
+ | RBS::AST::Members::AttrWriter
16
+ | RBS::AST::Members::AttrReader
17
+ | RBS::AST::Members::AttrAccessor
18
+ | RBS::AST::Members::Include
19
+ | RBS::AST::Members::Extend
20
+ | RBS::AST::Members::InstanceVariable
21
+ | RBS::AST::Members::ClassVariable
22
+ | RBS::AST::Members::ClassInstanceVariable
23
+ | RBS::AST::Declarations::Module
24
+ | RBS::AST::Declarations::Class
25
+ | RBS::AST::Declarations::Constant
26
+ | RBS::AST::Declarations::Global
27
+ | RBS::AST::Declarations::TypeAlias
28
+ | RBS::AST::Declarations::ClassAlias
29
+ | RBS::AST::Declarations::ModuleAlias
30
+
31
+ attr_reader declarations: Set[decl]
32
+
33
+ attr_reader references: Set[ref]
34
+
35
+ def initialize: (type_name: RBS::TypeName) -> void
36
+
37
+ def add_declaration: (decl decl) -> self
38
+
39
+ def add_reference: (ref) -> self
16
40
  end
17
41
 
18
42
  class MethodEntry
19
- attr_reader method_name: untyped
43
+ attr_reader method_name: method_name
20
44
 
21
- attr_reader declarations: untyped
45
+ type decl = RBS::AST::Members::MethodDefinition
46
+ | RBS::AST::Members::Alias
47
+ | RBS::AST::Members::AttrWriter
48
+ | RBS::AST::Members::AttrReader
49
+ | RBS::AST::Members::AttrAccessor
22
50
 
23
- attr_reader references: untyped
51
+ type ref = RBS::AST::Members::Alias
24
52
 
25
- def initialize: (method_name: untyped) -> void
53
+ attr_reader declarations: Set[decl]
26
54
 
27
- def add_declaration: (untyped decl) -> untyped
55
+ attr_reader references: Set[ref]
56
+
57
+ def initialize: (method_name: method_name) -> void
58
+
59
+ def add_declaration: (decl) -> self
28
60
  end
29
61
 
30
62
  class ConstantEntry
31
- attr_reader const_name: untyped
63
+ attr_reader const_name: RBS::TypeName
32
64
 
33
- attr_reader declarations: untyped
65
+ type decl = RBS::AST::Declarations::Constant
34
66
 
35
- def initialize: (const_name: untyped) -> void
67
+ attr_reader declarations: Set[decl]
36
68
 
37
- def add_declaration: (untyped decl) -> untyped
69
+ def initialize: (const_name: RBS::TypeName) -> void
70
+
71
+ def add_declaration: (decl) -> self
38
72
  end
39
73
 
40
74
  class GlobalEntry
41
- attr_reader global_name: untyped
75
+ attr_reader global_name: Symbol
76
+
77
+ type decl = RBS::AST::Declarations::Global
42
78
 
43
- attr_reader declarations: untyped
79
+ attr_reader declarations: Set[decl]
44
80
 
45
- def initialize: (global_name: untyped) -> void
81
+ def initialize: (global_name: Symbol) -> void
46
82
 
47
- def add_declaration: (untyped decl) -> untyped
83
+ def add_declaration: (decl) -> self
48
84
  end
49
85
 
50
- attr_reader type_index: untyped
86
+ attr_reader type_index: Hash[RBS::TypeName, TypeEntry]
51
87
 
52
- attr_reader method_index: untyped
88
+ attr_reader method_index: Hash[method_name, MethodEntry]
53
89
 
54
- attr_reader const_index: untyped
90
+ attr_reader const_index: Hash[RBS::TypeName, ConstantEntry]
55
91
 
56
- attr_reader global_index: untyped
92
+ attr_reader global_index: Hash[Symbol, GlobalEntry]
57
93
 
58
94
  def initialize: () -> void
59
95
 
60
- def entry: (?type_name: untyped?, ?method_name: untyped?, ?const_name: untyped?, ?global_name: untyped?) -> untyped
96
+ def entry: (type_name: RBS::TypeName) -> TypeEntry
97
+ | (method_name: method_name) -> MethodEntry
98
+ | (const_name: RBS::TypeName) -> ConstantEntry
99
+ | (global_name: Symbol) -> GlobalEntry
61
100
 
62
- def each_entry: () { () -> untyped } -> untyped
101
+ def each_entry: () { (TypeEntry | MethodEntry | ConstantEntry | GlobalEntry) -> void } -> void
102
+ | () -> Enumerator[TypeEntry | MethodEntry | ConstantEntry | GlobalEntry, void]
63
103
 
64
- def add_type_declaration: (untyped type_name, untyped declaration) -> untyped
104
+ def add_type_declaration: (RBS::TypeName type_name, TypeEntry::decl declaration) -> TypeEntry
65
105
 
66
- def add_method_declaration: (untyped method_name, untyped member) -> untyped
106
+ def add_method_declaration: (method_name, MethodEntry::decl member) -> MethodEntry
67
107
 
68
- def add_constant_declaration: (untyped const_name, untyped decl) -> untyped
108
+ def add_constant_declaration: (RBS::TypeName const_name, ConstantEntry::decl decl) -> ConstantEntry
69
109
 
70
- def add_global_declaration: (untyped global_name, untyped decl) -> untyped
110
+ def add_global_declaration: (Symbol global_name, GlobalEntry::decl decl) -> GlobalEntry
71
111
 
72
- def each_declaration: (?type_name: untyped?, ?method_name: untyped?, ?const_name: untyped?, ?global_name: untyped?) { () -> untyped } -> untyped
112
+ def each_declaration: (type_name: RBS::TypeName) { (TypeEntry) -> void } -> void
113
+ | (type_name: RBS::TypeName) -> Enumerator[TypeEntry, void]
114
+ | (method_name: method_name) { (MethodEntry) -> void } -> void
115
+ | (method_name: method_name) -> Enumerator[MethodEntry, void]
116
+ | (const_name: RBS::TypeName) { (ConstantEntry) -> void } -> void
117
+ | (const_name: RBS::TypeName) -> Enumerator[ConstantEntry, void]
118
+ | (global_name: Symbol) { (GlobalEntry) -> void } -> void
119
+ | (global_name: Symbol) -> Enumerator[GlobalEntry, void]
73
120
 
74
- def add_type_reference: (untyped type_name, untyped ref) -> untyped
121
+ # `type_name` is referred from `ref`
122
+ #
123
+ def add_type_reference: (RBS::TypeName type_name, TypeEntry::ref ref) -> TypeEntry
75
124
 
76
- def each_reference: (?type_name: untyped?) { () -> untyped } -> untyped
125
+ def each_reference: (type_name: RBS::TypeName) { (TypeEntry::ref) -> void } -> void
126
+ | (type_name: RBS::TypeName) -> Enumerator[TypeEntry::ref, void]
77
127
 
78
128
  class Builder
79
- attr_reader index: untyped
129
+ attr_reader index: RBSIndex
80
130
 
81
- def initialize: (index: untyped) -> void
131
+ def initialize: (index: RBSIndex) -> void
82
132
 
83
- def member: (untyped type_name, untyped member) -> untyped
133
+ def member: (RBS::TypeName type_name, RBS::AST::Members::t | RBS::AST::Declarations::t member) -> void
84
134
 
85
- def type_reference: (untyped `type`, from: untyped) -> untyped
135
+ def type_reference: (RBS::Types::t, from: TypeEntry::ref) -> void
86
136
 
87
- def env: (untyped env) -> untyped
137
+ def env: (RBS::Environment env) -> void
88
138
  end
89
139
  end
90
140
  end
@@ -2,53 +2,55 @@ module Steep
2
2
  class Project
3
3
  class DSL
4
4
  class TargetDSL
5
- attr_reader name: untyped
5
+ attr_reader name: Symbol
6
6
 
7
- attr_reader sources: untyped
7
+ attr_reader sources: Array[String]
8
8
 
9
- attr_reader libraries: untyped
9
+ attr_reader libraries: Array[String]
10
10
 
11
- attr_reader signatures: untyped
11
+ attr_reader signatures: Array[String]
12
12
 
13
- attr_reader ignored_sources: untyped
13
+ attr_reader ignored_sources: Array[String]
14
14
 
15
- attr_reader stdlib_root: untyped
15
+ attr_reader stdlib_root: Pathname?
16
16
 
17
- attr_reader core_root: untyped
17
+ attr_reader core_root: Pathname?
18
18
 
19
- attr_reader repo_paths: untyped
19
+ attr_reader repo_paths: Array[Pathname]
20
20
 
21
21
  attr_reader code_diagnostics_config: untyped
22
22
 
23
- attr_reader project: untyped
23
+ attr_reader project: Project?
24
24
 
25
- attr_reader collection_config_path: untyped
25
+ attr_reader collection_config_path: Pathname?
26
26
 
27
27
  NONE: untyped
28
28
 
29
- def initialize: (untyped name, ?sources: untyped, ?libraries: untyped, ?signatures: untyped, ?ignored_sources: untyped, ?repo_paths: untyped, ?code_diagnostics_config: ::Hash[untyped, untyped], ?project: untyped?, ?collection_config_path: untyped) -> void
29
+ def project!: () -> Project
30
30
 
31
- def initialize_copy: (untyped other) -> untyped
31
+ def initialize: (Symbol name, ?sources: Array[String], ?libraries: Array[String], ?signatures: Array[String], ?ignored_sources: Array[String], ?repo_paths: Array[Pathname], ?code_diagnostics_config: ::Hash[untyped, untyped], ?project: Project?, ?collection_config_path: Pathname?) -> void
32
32
 
33
- def check: (*untyped args) -> untyped
33
+ def initialize_copy: (instance other) -> void
34
34
 
35
- def ignore: (*untyped args) -> untyped
35
+ def check: (*String args) -> void
36
36
 
37
- def library: (*untyped args) -> untyped
37
+ def ignore: (*String args) -> void
38
38
 
39
- def typing_options: (?untyped? level, **untyped hash) -> untyped
39
+ def library: (*String args) -> void
40
40
 
41
- def signature: (*untyped args) -> untyped
41
+ def typing_options: (?untyped level, **untyped hash) -> void
42
42
 
43
- def update: (?name: untyped, ?sources: untyped, ?libraries: untyped, ?ignored_sources: untyped, ?signatures: untyped, ?project: untyped) -> untyped
43
+ def signature: (*String args) -> void
44
44
 
45
- def no_builtin!: (?bool value) -> untyped
45
+ def update: (?name: Symbol, ?sources: Array[String], ?libraries: Array[String], ?signatures: Array[String], ?ignored_sources: Array[String], ?project: Project?) -> TargetDSL
46
46
 
47
- def vendor: (?::String dir, ?stdlib: untyped?, ?gems: untyped?) -> untyped
47
+ def no_builtin!: (?bool value) -> void
48
48
 
49
- def stdlib_path: (core_root: untyped, stdlib_root: untyped) -> untyped
49
+ def vendor: (?::String dir, ?stdlib: untyped?, ?gems: untyped?) -> void
50
50
 
51
- def repo_path: (*untyped paths) -> untyped
51
+ def stdlib_path: (core_root: String, stdlib_root: String) -> void
52
+
53
+ def repo_path: (*String paths) -> void
52
54
 
53
55
  # Configure the code diagnostics printing setup.
54
56
  #
@@ -71,24 +73,27 @@ module Steep
71
73
  # configure_code_diagnostics(D::Ruby.lenient)
72
74
  # ```
73
75
  #
74
- def configure_code_diagnostics: (?untyped? hash) { (untyped) -> untyped } -> untyped
76
+ def configure_code_diagnostics: (Hash[untyped, untyped] hash) -> void
77
+ | () { (Hash[untyped, untyped]) -> void } -> void
75
78
 
76
- def collection_config: (untyped path) -> untyped
79
+ def collection_config: (Pathname path) -> void
77
80
 
78
- def disable_collection: () -> untyped
81
+ def disable_collection: () -> void
79
82
  end
80
83
 
81
84
  attr_reader project: untyped
82
85
 
83
- def self.templates: () -> untyped
86
+ @@templates: Hash[Symbol, TargetDSL]
87
+
88
+ def self.templates: () -> Hash[Symbol, TargetDSL]
84
89
 
85
- def initialize: (project: untyped) -> void
90
+ def initialize: (project: Project) -> void
86
91
 
87
- def self.register_template: (untyped name, untyped target) -> untyped
92
+ def self.register_template: (Symbol name, TargetDSL target) -> void
88
93
 
89
- def self.parse: (untyped project, untyped code, ?filename: ::String) -> untyped
94
+ def self.parse: (Project project, String code, ?filename: String) -> void
90
95
 
91
- def target: (untyped name, ?template: untyped?) ?{ () -> untyped } -> untyped
96
+ def target: (Symbol name, ?template: Symbol?) ?{ (TargetDSL) [self: TargetDSL] -> void } -> void
92
97
  end
93
98
  end
94
99
  end
@@ -1,13 +1,25 @@
1
1
  module Steep
2
2
  class Project
3
3
  class Options
4
- PathOptions: untyped
4
+ class PathOptions
5
+ attr_reader core_root: Pathname?
5
6
 
6
- attr_reader libraries: untyped
7
+ attr_reader stdlib_root: Pathname?
7
8
 
8
- attr_accessor paths: untyped
9
+ attr_reader repo_paths: Array[Pathname]
9
10
 
10
- attr_accessor collection_lock: untyped
11
+ def initialize: (?core_root: Pathname?, ?stdlib_root: Pathname?, ?repo_paths: Array[Pathname]) -> void
12
+
13
+ def customized_stdlib?: () -> bool
14
+
15
+ def customized_core?: () -> bool
16
+ end
17
+
18
+ attr_reader libraries: Array[String]
19
+
20
+ attr_accessor paths: PathOptions
21
+
22
+ attr_accessor collection_lock: RBS::Collection::Config::Lockfile
11
23
 
12
24
  def initialize: () -> void
13
25
  end
@@ -1,9 +1,9 @@
1
1
  module Steep
2
2
  class Project
3
3
  class Target
4
- attr_reader name: untyped
4
+ attr_reader name: Symbol
5
5
 
6
- attr_reader options: untyped
6
+ attr_reader options: Options
7
7
 
8
8
  attr_reader source_pattern: Pattern
9
9
 
@@ -11,15 +11,15 @@ module Steep
11
11
 
12
12
  attr_reader code_diagnostics_config: untyped
13
13
 
14
- def initialize: (name: untyped, options: untyped, source_pattern: untyped, signature_pattern: untyped, code_diagnostics_config: untyped) -> void
14
+ def initialize: (name: Symbol, options: Options, source_pattern: Pattern, signature_pattern: Pattern, code_diagnostics_config: untyped) -> void
15
15
 
16
- def possible_source_file?: (untyped path) -> untyped
16
+ def possible_source_file?: (Pathname path) -> bool
17
17
 
18
- def possible_signature_file?: (untyped path) -> untyped
18
+ def possible_signature_file?: (Pathname path) -> bool
19
19
 
20
- def new_env_loader: (project: untyped) -> untyped
20
+ def new_env_loader: (project: Project) -> RBS::EnvironmentLoader
21
21
 
22
- def self.construct_env_loader: (options: untyped, project: untyped) -> untyped
22
+ def self.construct_env_loader: (options: Options, project: Project) -> RBS::EnvironmentLoader
23
23
  end
24
24
  end
25
25
  end
@@ -23,11 +23,11 @@ module Steep
23
23
 
24
24
  def process_completion: (untyped job) -> untyped
25
25
 
26
- def format_completion_item_for_rbs: (untyped sig_service, untyped type_name, untyped context, untyped job, untyped prefix) -> (nil | untyped)
26
+ def format_completion_item_for_rbs: (Services::SignatureService sig_service, untyped type_name, untyped context, untyped job, untyped prefix) -> (nil | untyped)
27
27
 
28
28
  def format_comment: (untyped comment) -> (untyped | nil)
29
29
 
30
- def format_comments: (untyped comments) -> (untyped | nil)
30
+ def format_comments: (Array[RBS::AST::Comment] comments) -> untyped?
31
31
 
32
32
  def format_completion_item: (untyped item) -> untyped
33
33
 
@@ -28,8 +28,10 @@ module Steep
28
28
  type summarizable_decl = ::RBS::AST::Declarations::Class
29
29
  | ::RBS::AST::Declarations::Module
30
30
  | ::RBS::AST::Declarations::Interface
31
- | ::RBS::AST::Declarations::Alias
32
-
31
+ | ::RBS::AST::Declarations::TypeAlias
32
+ | ::RBS::AST::Declarations::ClassAlias
33
+ | ::RBS::AST::Declarations::ModuleAlias
34
+
33
35
  def self?.declaration_summary: (summarizable_decl) -> String
34
36
  end
35
37
  end
@@ -51,6 +51,12 @@ module Steep
51
51
  attr_reader full_name: RBS::TypeName
52
52
 
53
53
  def initialize: (env: RBS::Environment, identifier: Symbol, range: Range, type: AST::Types::t, full_name: RBS::TypeName) -> void
54
+
55
+ def class?: () -> bool
56
+
57
+ def module?: () -> bool
58
+
59
+ def comments: () -> Array[RBS::AST::Comment]
54
60
  end
55
61
 
56
62
  class MethodNameItem
@@ -5,17 +5,19 @@ module Steep
5
5
  class TypeAliasContent
6
6
  attr_reader location: ::RBS::Location[untyped, untyped]
7
7
 
8
- attr_reader decl: ::RBS::AST::Declarations::Alias
8
+ attr_reader decl: ::RBS::AST::Declarations::TypeAlias
9
9
 
10
- def initialize: (location: ::RBS::Location[untyped, untyped], decl: ::RBS::AST::Declarations::Alias) -> void
10
+ def initialize: (location: ::RBS::Location[untyped, untyped], decl: ::RBS::AST::Declarations::TypeAlias) -> void
11
11
  end
12
12
 
13
13
  class ClassContent
14
14
  attr_reader location: ::RBS::Location[untyped, untyped]
15
15
 
16
- attr_reader decl: ::RBS::AST::Declarations::Class | ::RBS::AST::Declarations::Module
16
+ type decl = ::RBS::AST::Declarations::Class | ::RBS::AST::Declarations::Module | ::RBS::AST::Declarations::ClassAlias | ::RBS::AST::Declarations::ModuleAlias
17
17
 
18
- def initialize: (location: ::RBS::Location[untyped, untyped], decl: ::RBS::AST::Declarations::Class | ::RBS::AST::Declarations::Module) -> void
18
+ attr_reader decl: decl
19
+
20
+ def initialize: (location: ::RBS::Location[untyped, untyped], decl: decl) -> void
19
21
  end
20
22
 
21
23
  class InterfaceContent
@@ -82,23 +82,27 @@ module Steep
82
82
 
83
83
  type decl = ::RBS::Environment::ClassEntry
84
84
  | ::RBS::Environment::ModuleEntry
85
- | ::RBS::Environment::SingleEntry[::RBS::TypeName, ::RBS::AST::Declarations::Constant]
85
+ | ::RBS::Environment::ClassAliasEntry
86
+ | ::RBS::Environment::ModuleAliasEntry
87
+ | ::RBS::Environment::ConstantEntry
86
88
 
87
89
  attr_reader decl: decl
88
90
 
89
91
  attr_reader class_decl(): ::RBS::Environment::ClassEntry | ::RBS::Environment::ModuleEntry | nil
90
92
 
91
- attr_reader constant_decl(): ::RBS::Environment::SingleEntry[::RBS::TypeName, ::RBS::AST::Declarations::Constant]?
93
+ attr_reader class_alias(): ::RBS::Environment::ClassAliasEntry | ::RBS::Environment::ModuleAliasEntry | nil
94
+
95
+ attr_reader constant_decl(): ::RBS::Environment::ConstantEntry?
92
96
 
93
97
  def initialize: (location: Parser::Source::Range, full_name: ::RBS::TypeName, type: AST::Types::t, decl: decl) -> void
94
98
 
95
99
  def comments: () -> Array[::RBS::AST::Comment]
96
100
 
97
101
  # Returns true if `decl` is a class/module definition
98
- def class_or_module?: () -> (::RBS::Environment::ClassEntry | ::RBS::Environment::ModuleEntry | nil)
102
+ def class_or_module?: () -> bool
99
103
 
100
104
  # Returns true if `decl` is a constant definition
101
- def constant?: () -> ::RBS::Environment::SingleEntry[::RBS::TypeName, ::RBS::AST::Declarations::Constant]?
105
+ def constant?: () -> bool
102
106
  end
103
107
 
104
108
  type content = TypeContent | VariableContent | MethodCallContent | DefinitionContent | ConstantContent | TypeAssertionContent
@@ -1,5 +1,12 @@
1
1
  module Steep
2
2
  module Services
3
+ # SignatureService takes care of two sets of RBS files.
4
+ #
5
+ # 1. RBS files loaded from `EnvironmentLoader` -- usually type signatures of libraries
6
+ # 2. RBS files managed in editors -- usually type signatures of the development target (app or gem)
7
+ #
8
+ # The files in #2 are managed throuth `#status` and the changes are tracked.
9
+ #
3
10
  class SignatureService
4
11
  type status = SyntaxErrorStatus | AncestorErrorStatus | LoadedStatus
5
12
 
@@ -65,17 +72,25 @@ module Steep
65
72
  def constant_resolver: () -> RBS::Resolver::ConstantResolver
66
73
  end
67
74
 
75
+ # A file has one of the three states:
76
+ #
77
+ # 1. The parsing succeeded and loaded a list of declarations
78
+ # 2. The content has a syntax error and parsing failed
79
+ # 3. Other unexpected error
80
+ #
68
81
  class FileStatus
69
82
  attr_reader path: Pathname
70
83
 
71
84
  attr_reader content: String
72
85
 
73
- attr_reader decls: Array[RBS::AST::Declarations::t] | Diagnostic::Signature::UnexpectedError | RBS::ParsingError
86
+ type signature = [RBS::Buffer, Array[RBS::AST::Directives::t], Array[RBS::AST::Declarations::t]]
87
+
88
+ attr_reader signature: signature | Diagnostic::Signature::UnexpectedError | RBS::ParsingError
74
89
 
75
90
  def initialize: (
76
91
  path: Pathname,
77
92
  content: String,
78
- decls: Array[RBS::AST::Declarations::t] | Diagnostic::Signature::UnexpectedError | RBS::ParsingError
93
+ signature: signature | Diagnostic::Signature::UnexpectedError | RBS::ParsingError
79
94
  ) -> void
80
95
  end
81
96
 
@@ -85,11 +100,17 @@ module Steep
85
100
 
86
101
  @env_rbs_paths: Set[Pathname]?
87
102
 
103
+ # All RBS paths in environment, both dependency RBS and target RBS
104
+ #
88
105
  def env_rbs_paths: () -> Set[Pathname]
89
106
 
107
+ # Yield all RBS paths in the environment, both dependency RBS and target RBS
108
+ #
90
109
  def each_rbs_path: () { (Pathname) -> void } -> void
91
110
  | () -> Enumerator[Pathname, void]
92
111
 
112
+ # The Target files
113
+ #
93
114
  def files: () -> Hash[Pathname, FileStatus]
94
115
 
95
116
  def pending_changed_paths: () -> Set[Pathname]
@@ -106,10 +127,13 @@ module Steep
106
127
 
107
128
  def apply_changes: (Hash[Pathname, FileStatus] files, Server::ChangeBuffer::changes changes) -> Hash[Pathname, FileStatus]
108
129
 
130
+ # The entry point to apply the edit to the signatures
131
+ #
109
132
  def update: (Server::ChangeBuffer::changes changes) -> void
110
133
 
111
134
  def update_env: (
112
- Hash[Pathname, FileStatus] updated_files, paths: Set[Pathname]
135
+ Hash[Pathname, FileStatus] updated_files,
136
+ paths: Set[Pathname]
113
137
  ) -> (RBS::DefinitionBuilder::AncestorBuilder | Array[Diagnostic::Signature::Base])
114
138
 
115
139
  def rescue_rbs_error: (Array[RBS::BaseError] errors) { () -> void } -> void
@@ -9,7 +9,7 @@ module Steep
9
9
 
10
10
  @errors: Array[Diagnostic::Signature::Base]
11
11
 
12
- @type_name_resolver: RBS::TypeNameResolver?
12
+ @type_name_resolver: RBS::Resolver::TypeNameResolver?
13
13
 
14
14
  @validator: RBS::Validator?
15
15
 
@@ -26,7 +26,7 @@ module Steep
26
26
 
27
27
  def builder: () -> RBS::DefinitionBuilder
28
28
 
29
- def type_name_resolver: () -> RBS::TypeNameResolver
29
+ def type_name_resolver: () -> RBS::Resolver::TypeNameResolver
30
30
 
31
31
  def validator: () -> RBS::Validator
32
32
 
@@ -60,13 +60,17 @@ module Steep
60
60
 
61
61
  def validate_const: () -> void
62
62
 
63
- def validate_one_constant: (RBS::TypeName name, RBS::Environment::SingleEntry[RBS::TypeName, RBS::AST::Declarations::Constant] entry) -> void
63
+ def validate_one_constant: (RBS::TypeName name, RBS::Environment::ConstantEntry entry) -> void
64
64
 
65
65
  def validate_global: () -> void
66
66
 
67
- def validate_one_global: (Symbol name, RBS::Environment::SingleEntry[Symbol, RBS::AST::Declarations::Global]) -> void
67
+ def validate_one_global: (Symbol name, RBS::Environment::GlobalEntry) -> void
68
68
 
69
- def validate_one_alias: (RBS::TypeName name, ?RBS::Environment::SingleEntry[RBS::TypeName, RBS::AST::Declarations::Alias] entry) -> void
69
+ def validate_one_alias: (RBS::TypeName name, ?RBS::Environment::TypeAliasEntry entry) -> void
70
+
71
+ def validate_one_class_decl: (RBS::TypeName) -> void
72
+
73
+ def validate_one_class_alias: (RBS::TypeName, RBS::Environment::ClassAliasEntry | RBS::Environment::ModuleAliasEntry) -> void
70
74
 
71
75
  def validate_alias: () -> void
72
76
 
@@ -80,7 +80,7 @@ module Steep
80
80
 
81
81
  def with_method_constr: (untyped method_name, untyped node, args: untyped, self_type: untyped, definition: untyped) { (untyped) -> untyped } -> untyped
82
82
 
83
- def implement_module: (module_name: untyped, annotations: untyped, ?super_name: untyped?) -> untyped
83
+ def implement_module: (module_name: RBS::TypeName, annotations: AST::Annotation::Collection, ?super_name: RBS::TypeName?) -> AST::Annotation::Implements::Module?
84
84
 
85
85
  def default_module_context: (untyped implement_module_name, nesting: untyped) -> untyped
86
86
 
@@ -21,6 +21,8 @@ module Steep
21
21
 
22
22
  def children: (RBS::TypeName module_name) -> Hash[Symbol, constant_tuple]
23
23
 
24
+ def decompose_constant!: (RBS::Constant? constant) -> constant_tuple
25
+
24
26
  def decompose_constant: (RBS::Constant? constant) -> constant_tuple?
25
27
  end
26
28
  end
@@ -54,7 +54,7 @@
54
54
  character: 22
55
55
  end:
56
56
  line: 1
57
- character: -1
57
+ character: 28
58
58
  severity: ERROR
59
59
  message: Cannot inherit from a module `::Kernel`
60
60
  code: RBS::InheritModuleError