steep 1.4.0.dev.2 → 1.4.0.dev.4
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 +1 -2
- data/Gemfile +1 -1
- data/Gemfile.lock +9 -11
- data/Gemfile.steep +1 -2
- data/Gemfile.steep.lock +11 -14
- data/README.md +7 -1
- data/Steepfile +0 -3
- data/bin/rbs +0 -1
- data/guides/README.md +5 -0
- data/guides/src/gem-rbs-collection/gem-rbs-collection.md +143 -0
- data/guides/src/getting-started/getting-started.md +164 -0
- data/guides/src/nil-optional/nil-optional.md +195 -0
- data/lib/steep/diagnostic/ruby.rb +80 -6
- data/lib/steep/drivers/check.rb +4 -4
- data/lib/steep/interface/block.rb +10 -0
- data/lib/steep/interface/builder.rb +3 -3
- data/lib/steep/method_name.rb +8 -0
- data/lib/steep/module_helper.rb +13 -11
- data/lib/steep/path_helper.rb +4 -0
- data/lib/steep/server/interaction_worker.rb +197 -230
- data/lib/steep/server/lsp_formatter.rb +308 -154
- data/lib/steep/server/master.rb +4 -1
- data/lib/steep/services/completion_provider.rb +140 -103
- data/lib/steep/services/hover_provider/rbs.rb +37 -32
- data/lib/steep/services/signature_help_provider.rb +108 -0
- data/lib/steep/services/type_name_completion.rb +165 -0
- data/lib/steep/source.rb +1 -0
- data/lib/steep/type_construction.rb +460 -266
- data/lib/steep/type_inference/block_params.rb +13 -0
- data/lib/steep/type_inference/context.rb +3 -3
- data/lib/steep/type_inference/method_call.rb +1 -1
- data/lib/steep/type_inference/method_params.rb +42 -16
- data/lib/steep/type_inference/send_args.rb +80 -51
- data/lib/steep/type_inference/type_env.rb +12 -4
- data/lib/steep/version.rb +1 -1
- data/lib/steep.rb +2 -0
- data/rbs_collection.steep.lock.yaml +0 -28
- data/rbs_collection.steep.yaml +10 -9
- data/sample/Steepfile +2 -0
- data/sample/lib/conference.rb +12 -0
- data/sample/sig/conference.rbs +5 -0
- data/sig/shims/language-server_protocol.rbs +277 -0
- data/sig/shims/parser/nodes.rbs +37 -0
- data/sig/shims/parser.rbs +4 -0
- data/sig/shims/string.rbs +4 -0
- data/sig/steep/ast/types/factory.rbs +10 -8
- data/sig/steep/diagnostic/lsp_formatter.rbs +1 -1
- data/sig/steep/diagnostic/ruby.rbs +38 -2
- data/sig/steep/drivers/check.rbs +1 -1
- data/sig/steep/drivers/checkfile.rbs +1 -1
- data/sig/steep/drivers/diagnostic_printer.rbs +1 -1
- data/sig/steep/drivers/watch.rbs +1 -1
- data/sig/steep/index/signature_symbol_provider.rbs +1 -1
- data/sig/steep/interface/block.rbs +2 -0
- data/sig/steep/interface/builder.rbs +5 -3
- data/sig/steep/interface/method_type.rbs +5 -3
- data/sig/steep/method_name.rbs +5 -1
- data/sig/steep/module_helper.rbs +9 -0
- data/sig/steep/path_helper.rbs +3 -1
- data/sig/steep/server/base_worker.rbs +1 -1
- data/sig/steep/server/interaction_worker.rbs +52 -17
- data/sig/steep/server/lsp_formatter.rbs +43 -18
- data/sig/steep/server/master.rbs +1 -1
- data/sig/steep/server/type_check_worker.rbs +7 -5
- data/sig/steep/server/worker_process.rbs +6 -4
- data/sig/steep/services/completion_provider.rbs +106 -28
- data/sig/steep/services/hover_provider/rbs.rbs +13 -9
- data/sig/steep/services/signature_help_provider.rbs +39 -0
- data/sig/steep/services/type_name_completion.rbs +122 -0
- data/sig/steep/type_construction.rbs +99 -30
- data/sig/steep/type_inference/block_params.rbs +4 -0
- data/sig/steep/type_inference/context.rbs +70 -22
- data/sig/steep/type_inference/method_call.rbs +1 -1
- data/sig/steep/type_inference/method_params.rbs +43 -24
- data/sig/steep/type_inference/multiple_assignment.rbs +1 -1
- data/sig/steep/type_inference/send_args.rbs +19 -5
- data/sig/steep/typing.rbs +8 -3
- data/smoke/diagnostics/test_expectations.yml +1 -0
- data/steep.gemspec +0 -1
- metadata +12 -16
@@ -1,41 +1,76 @@
|
|
1
|
+
use LanguageServer::Protocol::Transport::Io::*, Thread::Queue, RBS::AST::Comment
|
2
|
+
use Steep::Services::CompletionProvider, Steep::Services::TypeNameCompletion
|
3
|
+
use RBS::TypeName, RBS::Namespace
|
4
|
+
|
1
5
|
module Steep
|
2
6
|
module Server
|
3
7
|
class InteractionWorker < BaseWorker
|
4
8
|
include ChangeBuffer
|
5
9
|
|
6
|
-
ApplyChangeJob
|
10
|
+
class ApplyChangeJob
|
11
|
+
end
|
12
|
+
|
13
|
+
class HoverJob
|
14
|
+
attr_reader id: String
|
15
|
+
|
16
|
+
attr_reader path: Pathname
|
17
|
+
|
18
|
+
attr_reader line: Integer
|
19
|
+
|
20
|
+
attr_reader column: Integer
|
21
|
+
|
22
|
+
def initialize: (id: String, path: Pathname, line: Integer, column: Integer) -> void
|
23
|
+
end
|
24
|
+
|
25
|
+
class CompletionJob
|
26
|
+
attr_reader id: String
|
27
|
+
|
28
|
+
attr_reader path: Pathname
|
29
|
+
|
30
|
+
attr_reader line: Integer
|
31
|
+
|
32
|
+
attr_reader column: Integer
|
33
|
+
|
34
|
+
attr_reader trigger: String
|
35
|
+
|
36
|
+
def initialize: (id: String, path: Pathname, line: Integer, column: Integer, trigger: String) -> void
|
37
|
+
end
|
38
|
+
|
39
|
+
class SignatureHelpJob
|
40
|
+
attr_reader id: String
|
7
41
|
|
8
|
-
|
42
|
+
attr_reader path: Pathname
|
9
43
|
|
10
|
-
|
44
|
+
attr_reader line: Integer
|
11
45
|
|
12
|
-
|
46
|
+
attr_reader column: Integer
|
13
47
|
|
14
|
-
|
48
|
+
def initialize: (id: String, path: Pathname, line: Integer, column: Integer) -> void
|
49
|
+
end
|
15
50
|
|
16
|
-
|
51
|
+
type job = ApplyChangeJob | HoverJob | CompletionJob | SignatureHelpJob
|
17
52
|
|
18
|
-
|
53
|
+
module LSP = LanguageServer::Protocol
|
19
54
|
|
20
|
-
|
55
|
+
attr_reader service: Services::TypeCheckService
|
21
56
|
|
22
|
-
def
|
57
|
+
def initialize: (project: Project, reader: Reader, writer: Writer, ?queue: Queue) -> void
|
23
58
|
|
24
|
-
def
|
59
|
+
def handle_job: (job) -> void
|
25
60
|
|
26
|
-
|
61
|
+
type lsp_request = { id: String, method: String, params: untyped }
|
27
62
|
|
28
|
-
def
|
63
|
+
def handle_request: (lsp_request) -> void
|
29
64
|
|
30
|
-
def
|
65
|
+
def process_hover: (HoverJob job) -> LanguageServer::Protocol::Interface::Hover?
|
31
66
|
|
32
|
-
def
|
67
|
+
def process_completion: (CompletionJob job) -> LanguageServer::Protocol::Interface::CompletionList?
|
33
68
|
|
34
|
-
def
|
69
|
+
def process_signature_help: (SignatureHelpJob) -> LanguageServer::Protocol::Interface::SignatureHelp?
|
35
70
|
|
36
|
-
def
|
71
|
+
def format_completion_item_for_rbs: (Services::SignatureService, RBS::TypeName, CompletionJob job, String complete_text, Integer prefix_size) -> LanguageServer::Protocol::Interface::CompletionItem
|
37
72
|
|
38
|
-
def
|
73
|
+
def format_completion_item: (CompletionProvider::item item) -> LanguageServer::Protocol::Interface::CompletionItem
|
39
74
|
end
|
40
75
|
end
|
41
76
|
end
|
@@ -1,38 +1,63 @@
|
|
1
|
+
use RBS::TypeName
|
2
|
+
|
1
3
|
module Steep
|
2
4
|
module Server
|
5
|
+
# LSPFormatter translates hover content and completion item to markdown string
|
6
|
+
#
|
7
|
+
# The class has four main methods:
|
8
|
+
#
|
9
|
+
# * `markup_content` translates a string to `MarkupContent` object
|
10
|
+
# * `format_hover_content` translates a hover content to Markdown string
|
11
|
+
# * `format_completion_docs` translates a completion item to a documentation
|
12
|
+
# * `format_rbs_competion_docs` generates docs for completion item of RBS
|
13
|
+
#
|
3
14
|
module LSPFormatter
|
4
15
|
include Services
|
5
16
|
|
6
|
-
|
7
|
-
|
17
|
+
module LSP = LanguageServer::Protocol
|
18
|
+
|
19
|
+
# Translate given String to MarkupContent
|
20
|
+
#
|
21
|
+
def self?.markup_content: (String?) -> LanguageServer::Protocol::Interface::MarkupContent?
|
22
|
+
| () { () -> String? } -> LanguageServer::Protocol::Interface::MarkupContent?
|
8
23
|
|
9
|
-
|
24
|
+
# Translates a hover content to String
|
25
|
+
#
|
26
|
+
def self?.format_hover_content: (Services::HoverProvider::Ruby::content | Services::HoverProvider::RBS::content) -> String
|
10
27
|
|
11
|
-
|
28
|
+
# Translates a completion item to String
|
29
|
+
def self?.format_completion_docs: (Services::CompletionProvider::item) -> String
|
12
30
|
|
13
|
-
|
31
|
+
# Translates a completion item for RBS to String
|
32
|
+
def self?.format_rbs_completion_docs: (TypeName, summarizable_decl, Array[RBS::AST::Comment]) -> String
|
14
33
|
|
15
|
-
|
34
|
+
def self?.format_comment: (RBS::AST::Comment?, ?header: String?) -> String?
|
35
|
+
| (RBS::AST::Comment?, ?header: String?) { (String) -> void } -> void
|
16
36
|
|
17
|
-
|
18
|
-
end
|
37
|
+
def self?.format_comments: (Array[[String, RBS::AST::Comment?]]) -> String
|
19
38
|
|
20
|
-
def self?.
|
39
|
+
def self?.local_variable: (Symbol, AST::Types::t) -> String
|
21
40
|
|
22
|
-
def self?.
|
41
|
+
def self?.instance_variable: (Symbol, AST::Types::t) -> String
|
23
42
|
|
24
|
-
|
43
|
+
# Renders type application
|
44
|
+
def self?.name_and_args: (TypeName name, Array[RBS::Types::t] args) -> String
|
25
45
|
|
26
|
-
|
46
|
+
# Renders generic type definition
|
47
|
+
def self?.name_and_params: (TypeName name, Array[RBS::AST::TypeParam] params) -> String
|
27
48
|
|
28
|
-
type summarizable_decl =
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
49
|
+
type summarizable_decl = RBS::AST::Declarations::Class
|
50
|
+
| RBS::AST::Declarations::Module
|
51
|
+
| RBS::AST::Declarations::Interface
|
52
|
+
| RBS::AST::Declarations::TypeAlias
|
53
|
+
| RBS::AST::Declarations::ClassAlias
|
54
|
+
| RBS::AST::Declarations::ModuleAlias
|
55
|
+
| RBS::AST::Declarations::Global
|
56
|
+
| RBS::AST::Declarations::Constant
|
34
57
|
|
35
58
|
def self?.declaration_summary: (summarizable_decl) -> String
|
59
|
+
|
60
|
+
def self?.format_method_item_doc: (Array[_ToS], Array[method_name], Hash[method_name, RBS::AST::Comment?], ?String footer) -> String
|
36
61
|
end
|
37
62
|
end
|
38
63
|
end
|
data/sig/steep/server/master.rbs
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
use Steep::Services::*, LanguageServer::Protocol as LSP
|
2
|
+
|
1
3
|
module Steep
|
2
4
|
module Server
|
3
5
|
# TypeCheckWorker provides two features:
|
@@ -15,9 +17,9 @@ module Steep
|
|
15
17
|
class TypeCheckWorker < BaseWorker
|
16
18
|
attr_reader project: Project
|
17
19
|
|
18
|
-
attr_reader assignment:
|
20
|
+
attr_reader assignment: PathAssignment
|
19
21
|
|
20
|
-
attr_reader service:
|
22
|
+
attr_reader service: TypeCheckService
|
21
23
|
|
22
24
|
attr_reader commandline_args: Array[String]
|
23
25
|
|
@@ -95,9 +97,9 @@ module Steep
|
|
95
97
|
|
96
98
|
def initialize: (
|
97
99
|
project: Project,
|
98
|
-
reader:
|
99
|
-
writer:
|
100
|
-
assignment:
|
100
|
+
reader: LSP::Transport::Io::Reader,
|
101
|
+
writer: LSP::Transport::Io::Writer,
|
102
|
+
assignment: PathAssignment,
|
101
103
|
commandline_args: Array[String]
|
102
104
|
) -> void
|
103
105
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
use LanguageServer::Protocol as LSP
|
2
|
+
|
1
3
|
module Steep
|
2
4
|
module Server
|
3
5
|
# WorkerProcess class represents a worker process
|
@@ -21,9 +23,9 @@ module Steep
|
|
21
23
|
def pid: () -> Integer
|
22
24
|
end
|
23
25
|
|
24
|
-
attr_reader reader:
|
26
|
+
attr_reader reader: LSP::Transport::Io::Reader
|
25
27
|
|
26
|
-
attr_reader writer:
|
28
|
+
attr_reader writer: LSP::Transport::Io::Writer
|
27
29
|
|
28
30
|
attr_reader stderr: IO?
|
29
31
|
|
@@ -34,8 +36,8 @@ module Steep
|
|
34
36
|
attr_reader index: Integer?
|
35
37
|
|
36
38
|
def initialize: (
|
37
|
-
reader:
|
38
|
-
writer:
|
39
|
+
reader: LSP::Transport::Io::Reader,
|
40
|
+
writer: LSP::Transport::Io::Writer,
|
39
41
|
stderr: IO?,
|
40
42
|
wait_thread: Thread & _ProcessWaitThread,
|
41
43
|
name: String,
|
@@ -1,6 +1,10 @@
|
|
1
|
+
use RBS::Environment, RBS::TypeName
|
2
|
+
use Steep::TypeInference::MethodCall
|
3
|
+
|
1
4
|
module Steep
|
2
5
|
module Services
|
3
6
|
class CompletionProvider
|
7
|
+
# Cursor position
|
4
8
|
class Position
|
5
9
|
attr_reader line: Integer
|
6
10
|
|
@@ -40,7 +44,7 @@ module Steep
|
|
40
44
|
end
|
41
45
|
|
42
46
|
class ConstantItem
|
43
|
-
attr_reader env:
|
47
|
+
attr_reader env: Environment
|
44
48
|
|
45
49
|
attr_reader identifier: Symbol
|
46
50
|
|
@@ -48,35 +52,108 @@ module Steep
|
|
48
52
|
|
49
53
|
attr_reader type: AST::Types::t
|
50
54
|
|
51
|
-
attr_reader full_name:
|
55
|
+
attr_reader full_name: TypeName
|
52
56
|
|
53
|
-
def initialize: (env:
|
57
|
+
def initialize: (env: Environment, identifier: Symbol, range: Range, type: AST::Types::t, full_name: TypeName) -> void
|
54
58
|
|
55
59
|
def class?: () -> bool
|
56
60
|
|
57
61
|
def module?: () -> bool
|
58
62
|
|
59
|
-
def comments: () -> Array[RBS::AST::Comment]
|
63
|
+
def comments: () -> Array[RBS::AST::Comment?]
|
64
|
+
|
65
|
+
type const_decl = RBS::AST::Declarations::Constant
|
66
|
+
| RBS::AST::Declarations::Class
|
67
|
+
| RBS::AST::Declarations::Module
|
68
|
+
| RBS::AST::Declarations::ClassAlias
|
69
|
+
| RBS::AST::Declarations::ModuleAlias
|
70
|
+
|
71
|
+
def decl: () -> const_decl
|
60
72
|
end
|
61
73
|
|
62
|
-
|
74
|
+
# Method name completion item with *simple* receiver type
|
75
|
+
#
|
76
|
+
# Instance type, Singleton type, Interface type is simple.
|
77
|
+
# The item may have multiple overloads, but must have single method definition source.
|
78
|
+
#
|
79
|
+
class SimpleMethodNameItem
|
63
80
|
attr_reader identifier: Symbol
|
64
81
|
|
65
82
|
attr_reader range: Range
|
66
83
|
|
67
|
-
attr_reader receiver_type: AST::Types::
|
84
|
+
attr_reader receiver_type: AST::Types::Name::Instance | AST::Types::Name::Interface | AST::Types::Name::Singleton
|
68
85
|
|
69
|
-
attr_reader
|
86
|
+
attr_reader method_types: Array[RBS::MethodType]
|
70
87
|
|
71
|
-
attr_reader
|
88
|
+
attr_reader method_name: method_name
|
72
89
|
|
73
|
-
|
90
|
+
attr_reader method_member: RBS::Definition::Method::method_member
|
74
91
|
|
75
|
-
def
|
92
|
+
def initialize: (
|
93
|
+
identifier: Symbol,
|
94
|
+
range: Range,
|
95
|
+
receiver_type: AST::Types::Name::Instance | AST::Types::Name::Interface | AST::Types::Name::Singleton,
|
96
|
+
method_name: method_name,
|
97
|
+
method_types: Array[RBS::MethodType],
|
98
|
+
method_member: RBS::Definition::Method::method_member
|
99
|
+
) -> void
|
76
100
|
|
77
|
-
def
|
101
|
+
%a{pure} def comment: () -> RBS::AST::Comment?
|
78
102
|
end
|
79
103
|
|
104
|
+
# Method name completion item with *complex* receiver type
|
105
|
+
#
|
106
|
+
# The item may have multiple overloads and multiple method declarations.
|
107
|
+
#
|
108
|
+
class ComplexMethodNameItem
|
109
|
+
attr_reader identifier: Symbol
|
110
|
+
|
111
|
+
attr_reader range: Range
|
112
|
+
|
113
|
+
attr_reader reeiver_type: AST::Types::t
|
114
|
+
|
115
|
+
attr_reader method_types: Array[RBS::MethodType]
|
116
|
+
|
117
|
+
attr_reader method_decls: Array[MethodCall::MethodDecl]
|
118
|
+
|
119
|
+
def initialize: (
|
120
|
+
identifier: Symbol,
|
121
|
+
range: Range,
|
122
|
+
method_types: Array[RBS::MethodType],
|
123
|
+
method_decls: Array[MethodCall::MethodDecl],
|
124
|
+
receiver_type: AST::Types::t
|
125
|
+
) -> void
|
126
|
+
|
127
|
+
def method_names: () -> Array[method_name]
|
128
|
+
|
129
|
+
def method_definitions: () -> Hash[method_name, RBS::Definition::Method::method_member]
|
130
|
+
|
131
|
+
def defining_method_name: (TypeName, Symbol name, RBS::Definition::Method::method_member) -> method_name
|
132
|
+
end
|
133
|
+
|
134
|
+
# Method name completion item for generated methods, like `#first` in tuple types
|
135
|
+
#
|
136
|
+
# The generated methods doesn't have associated `MethodDecl`.
|
137
|
+
#
|
138
|
+
class GeneratedMethodNameItem
|
139
|
+
attr_reader identifier: Symbol
|
140
|
+
|
141
|
+
attr_reader range: Range
|
142
|
+
|
143
|
+
attr_reader reeiver_type: AST::Types::t
|
144
|
+
|
145
|
+
attr_reader method_types: Array[RBS::MethodType]
|
146
|
+
|
147
|
+
def initialize: (
|
148
|
+
identifier: Symbol,
|
149
|
+
range: Range,
|
150
|
+
receiver_type: AST::Types::t,
|
151
|
+
method_types: Array[RBS::MethodType]
|
152
|
+
) -> void
|
153
|
+
end
|
154
|
+
|
155
|
+
type item = InstanceVariableItem | LocalVariableItem | ConstantItem | SimpleMethodNameItem | ComplexMethodNameItem | GeneratedMethodNameItem
|
156
|
+
|
80
157
|
attr_reader source_text: String
|
81
158
|
|
82
159
|
attr_reader path: Pathname
|
@@ -89,41 +166,42 @@ module Steep
|
|
89
166
|
|
90
167
|
attr_reader typing: Typing
|
91
168
|
|
92
|
-
def initialize: (source_text:
|
169
|
+
def initialize: (source_text: String, path: Pathname, subtyping: Subtyping::Check) -> void
|
93
170
|
|
94
|
-
def type_check!: (
|
171
|
+
def type_check!: (String text, line: Integer, column: Integer) -> void
|
95
172
|
|
96
|
-
def env: () ->
|
173
|
+
def env: () -> Environment
|
97
174
|
|
98
|
-
def run: (line:
|
175
|
+
def run: (line: Integer, column: Integer) -> Array[item]
|
99
176
|
|
100
|
-
def range_from_loc: (
|
177
|
+
def range_from_loc: (Parser::Source::Range loc) -> Range
|
101
178
|
|
102
|
-
def at_end?: (
|
179
|
+
def at_end?: (Position pos, of: Parser::Source::Map | Parser::Source::Range | nil) -> boolish
|
103
180
|
|
104
|
-
def range_for: (
|
181
|
+
def range_for: (Position position, ?prefix: ::String) -> Range
|
105
182
|
|
106
|
-
def items_for_trigger: (position:
|
183
|
+
def items_for_trigger: (position: Position) -> Array[item]
|
107
184
|
|
108
|
-
def items_for_dot: (position: Position) ->
|
185
|
+
def items_for_dot: (position: Position) -> Array[item]
|
109
186
|
|
110
|
-
def items_for_colon2: (position:
|
187
|
+
def items_for_colon2: (position: Position) -> Array[item]
|
111
188
|
|
112
|
-
def items_for_atmark: (position:
|
189
|
+
def items_for_atmark: (position: Position) -> Array[item]
|
113
190
|
|
114
|
-
def method_items_for_receiver_type: (
|
191
|
+
def method_items_for_receiver_type: (AST::Types::t, include_private: bool, prefix: String, position: Position, items: Array[item]) -> void
|
115
192
|
|
116
|
-
def word_name?: (String name) ->
|
193
|
+
def word_name?: (String name) -> bool
|
117
194
|
|
118
|
-
def local_variable_items_for_context: (TypeInference::Context context, position: Position, prefix: String, items: Array[
|
195
|
+
def local_variable_items_for_context: (TypeInference::Context context, position: Position, prefix: String, items: Array[item]) -> void
|
119
196
|
|
120
|
-
def constant_items_for_context: (TypeInference::Context context, position: Position, prefix: String, items: Array[
|
197
|
+
def constant_items_for_context: (TypeInference::Context context, position: Position, prefix: String, items: Array[item], ?parent: Parser::AST::Node?) -> void
|
121
198
|
|
122
|
-
def instance_variable_items_for_context: (TypeInference::Context context, position: Position, prefix: String, items: Array[
|
199
|
+
def instance_variable_items_for_context: (TypeInference::Context context, position: Position, prefix: String, items: Array[item]) -> void
|
123
200
|
|
124
|
-
def index_for: (
|
201
|
+
def index_for: (String, line: Integer, column: Integer) -> Integer
|
125
202
|
|
126
203
|
def disallowed_method?: (Symbol name) -> bool
|
204
|
+
|
127
205
|
end
|
128
206
|
end
|
129
207
|
end
|
@@ -1,31 +1,33 @@
|
|
1
|
+
use RBS::Location, RBS::AST::Declarations, RBS::AST::Directives, RBS::TypeName, RBS::Environment
|
2
|
+
|
1
3
|
module Steep
|
2
4
|
module Services
|
3
5
|
module HoverProvider
|
4
6
|
class RBS
|
5
7
|
class TypeAliasContent
|
6
|
-
attr_reader location:
|
8
|
+
attr_reader location: Location[untyped, untyped]
|
7
9
|
|
8
|
-
attr_reader decl:
|
10
|
+
attr_reader decl: Declarations::TypeAlias
|
9
11
|
|
10
|
-
def initialize: (location:
|
12
|
+
def initialize: (location: Location[untyped, untyped], decl: Declarations::TypeAlias) -> void
|
11
13
|
end
|
12
14
|
|
13
15
|
class ClassContent
|
14
|
-
attr_reader location:
|
16
|
+
attr_reader location: Location[untyped, untyped]
|
15
17
|
|
16
|
-
type decl =
|
18
|
+
type decl = Declarations::Class | Declarations::Module | Declarations::ClassAlias | Declarations::ModuleAlias
|
17
19
|
|
18
20
|
attr_reader decl: decl
|
19
21
|
|
20
|
-
def initialize: (location:
|
22
|
+
def initialize: (location: Location[untyped, untyped], decl: decl) -> void
|
21
23
|
end
|
22
24
|
|
23
25
|
class InterfaceContent
|
24
|
-
attr_reader location:
|
26
|
+
attr_reader location: Location[untyped, untyped]
|
25
27
|
|
26
|
-
attr_reader decl:
|
28
|
+
attr_reader decl: Declarations::Interface
|
27
29
|
|
28
|
-
def initialize: (location:
|
30
|
+
def initialize: (location: Location[untyped, untyped], decl: Declarations::Interface) -> void
|
29
31
|
end
|
30
32
|
|
31
33
|
type content = TypeAliasContent | ClassContent | InterfaceContent
|
@@ -37,6 +39,8 @@ module Steep
|
|
37
39
|
def project: () -> Project
|
38
40
|
|
39
41
|
def content_for: (target: Project::Target, path: Pathname, line: Integer, column: Integer) -> content?
|
42
|
+
|
43
|
+
def content_for_type_name: (TypeName, env: Environment, location: Location[untyped, untyped]) -> content?
|
40
44
|
end
|
41
45
|
end
|
42
46
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
use RBS::Environment
|
2
|
+
|
3
|
+
module Steep
|
4
|
+
module Services
|
5
|
+
class SignatureHelpProvider
|
6
|
+
module MethodCall = TypeInference::MethodCall
|
7
|
+
|
8
|
+
class Item
|
9
|
+
attr_reader method_type: RBS::MethodType
|
10
|
+
|
11
|
+
attr_reader comment: RBS::AST::Comment?
|
12
|
+
|
13
|
+
def initialize: (RBS::MethodType, RBS::AST::Comment?) -> void
|
14
|
+
end
|
15
|
+
|
16
|
+
attr_reader source: Source
|
17
|
+
|
18
|
+
attr_reader path: Pathname
|
19
|
+
|
20
|
+
attr_reader subtyping: Subtyping::Check
|
21
|
+
|
22
|
+
attr_reader buffer: RBS::Buffer
|
23
|
+
|
24
|
+
def env: () -> Environment
|
25
|
+
|
26
|
+
def initialize: (source: Source, subtyping: Subtyping::Check) -> void
|
27
|
+
|
28
|
+
# 1-origin line, 0-origin column
|
29
|
+
#
|
30
|
+
def run: (line: Integer, column: Integer) -> [Array[Item], Integer?]?
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def signature_help_for: (Parser::AST::Node, Typing) -> [Array[Item], Integer?]?
|
35
|
+
|
36
|
+
def type_check!: (line: Integer, column: Integer) -> Typing
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,122 @@
|
|
1
|
+
use RBS::TypeName, RBS::Namespace, RBS::Environment, RBS::Resolver, RBS::AST::Directives
|
2
|
+
|
3
|
+
module Steep
|
4
|
+
module Services
|
5
|
+
class TypeNameCompletion
|
6
|
+
module Prefix
|
7
|
+
type t = nil # no prefix
|
8
|
+
| RawIdentPrefix
|
9
|
+
| NamespacedIdentPrefix
|
10
|
+
| NamespacePrefix
|
11
|
+
|
12
|
+
# Uident or Lident is given, but no `::` (==namespace)
|
13
|
+
#
|
14
|
+
# ```
|
15
|
+
# Str← Uident
|
16
|
+
# c← Lident
|
17
|
+
# ```
|
18
|
+
#
|
19
|
+
class RawIdentPrefix
|
20
|
+
attr_reader ident: String
|
21
|
+
|
22
|
+
# Returns true if the `ident` is a Ruby class name
|
23
|
+
#
|
24
|
+
def const_name?: () -> bool
|
25
|
+
|
26
|
+
def initialize: (String ident) -> void
|
27
|
+
|
28
|
+
def size: () -> Integer
|
29
|
+
end
|
30
|
+
|
31
|
+
# Uident or Lident following a namespace
|
32
|
+
#
|
33
|
+
# ```
|
34
|
+
# ::L← Uident
|
35
|
+
# RBS::Enviro← Uident
|
36
|
+
# ```
|
37
|
+
#
|
38
|
+
class NamespacedIdentPrefix
|
39
|
+
attr_reader namespace: Namespace
|
40
|
+
|
41
|
+
attr_reader ident: String
|
42
|
+
|
43
|
+
def const_name?: () -> bool
|
44
|
+
|
45
|
+
def initialize: (Namespace, String ident, Integer size) -> void
|
46
|
+
|
47
|
+
def size: () -> Integer
|
48
|
+
end
|
49
|
+
|
50
|
+
# Namespace is given
|
51
|
+
#
|
52
|
+
# ```
|
53
|
+
# RBS::←
|
54
|
+
# ::←
|
55
|
+
# ```
|
56
|
+
class NamespacePrefix
|
57
|
+
attr_reader namespace: Namespace
|
58
|
+
|
59
|
+
def initialize: (Namespace, Integer size) -> void
|
60
|
+
|
61
|
+
def size: () -> Integer
|
62
|
+
end
|
63
|
+
|
64
|
+
# line number is 1 origin (Rubyish)
|
65
|
+
#
|
66
|
+
def self.parse: (RBS::Buffer input, line: Integer, column: Integer) -> t
|
67
|
+
end
|
68
|
+
|
69
|
+
class Item
|
70
|
+
# The text to be completed
|
71
|
+
#
|
72
|
+
attr_reader complete_text: String
|
73
|
+
|
74
|
+
# The prefix
|
75
|
+
attr_reader prefix: Prefix::t?
|
76
|
+
|
77
|
+
# Name of the type or constant
|
78
|
+
#
|
79
|
+
attr_reader full_name: TypeName
|
80
|
+
|
81
|
+
# The text to be inserted after the prefix
|
82
|
+
#
|
83
|
+
def insert_text: () -> String
|
84
|
+
|
85
|
+
def initialize: (prefix: Prefix::t?, full_name: TypeName, complete_text: String) -> void
|
86
|
+
end
|
87
|
+
|
88
|
+
attr_reader env: Environment
|
89
|
+
|
90
|
+
attr_reader context: Resolver::context
|
91
|
+
|
92
|
+
attr_reader type_name_resolver: Resolver::TypeNameResolver
|
93
|
+
|
94
|
+
attr_reader map: Environment::UseMap
|
95
|
+
|
96
|
+
def initialize: (env: Environment, context: Resolver::context, dirs: Array[Directives::t]) -> void
|
97
|
+
|
98
|
+
def complete_class_name: (RBS::Buffer input, line: Integer, column: Integer) -> Array[Item]
|
99
|
+
|
100
|
+
# Find type names from the context for RBS
|
101
|
+
#
|
102
|
+
# Doesn't take account of ancestors of the context.
|
103
|
+
#
|
104
|
+
def find_type_names: (Prefix::t) -> Array[TypeName]
|
105
|
+
|
106
|
+
# Returns a pair of
|
107
|
+
#
|
108
|
+
# * Absolute type name
|
109
|
+
# * Relative type name in given context if possible (or absolute name)
|
110
|
+
#
|
111
|
+
def resolve_name_in_context: (TypeName) -> [TypeName, TypeName]
|
112
|
+
|
113
|
+
def format_constant_name: (TypeName) -> String
|
114
|
+
|
115
|
+
def each_type_name: () { (TypeName) -> void } -> void
|
116
|
+
| () -> Enumerator[TypeName, void]
|
117
|
+
|
118
|
+
def each_outer_module: (?Resolver::context) { (Namespace) -> void } -> Namespace
|
119
|
+
| () -> Enumerator[Namespace, void]
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|