steep 1.7.0.dev.3 → 1.7.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/CHANGELOG.md +43 -0
- data/README.md +18 -0
- data/doc/narrowing.md +1 -1
- data/doc/shape.md +176 -0
- data/guides/src/gem-rbs-collection/gem-rbs-collection.md +7 -24
- data/lib/steep/ast/types/factory.rb +27 -18
- data/lib/steep/ast/types/proc.rb +14 -9
- data/lib/steep/interface/block.rb +1 -1
- data/lib/steep/interface/builder.rb +1 -0
- data/lib/steep/interface/function.rb +14 -6
- data/lib/steep/interface/method_type.rb +15 -7
- data/lib/steep/project/pattern.rb +1 -2
- data/lib/steep/rake_task.rb +132 -0
- data/lib/steep/server/interaction_worker.rb +6 -0
- data/lib/steep/server/lsp_formatter.rb +2 -0
- data/lib/steep/services/completion_provider.rb +1 -1
- data/lib/steep/services/file_loader.rb +15 -20
- data/lib/steep/services/signature_help_provider.rb +11 -9
- data/lib/steep/signature/validator.rb +1 -1
- data/lib/steep/subtyping/check.rb +15 -6
- data/lib/steep/subtyping/variable_variance.rb +3 -3
- data/lib/steep/type_construction.rb +186 -149
- data/lib/steep/type_inference/block_params.rb +1 -1
- data/lib/steep/type_inference/logic_type_interpreter.rb +2 -1
- data/lib/steep/type_inference/method_params.rb +16 -0
- data/lib/steep/type_inference/send_args.rb +5 -2
- data/lib/steep/version.rb +1 -1
- data/steep.gemspec +5 -2
- metadata +7 -145
- data/.github/dependabot.yml +0 -28
- data/.github/workflows/ruby-windows.yml +0 -35
- data/.github/workflows/ruby.yml +0 -32
- data/.vscode/steep-shared.code-snippets +0 -41
- data/Gemfile +0 -14
- data/Gemfile.lock +0 -104
- data/Gemfile.steep +0 -0
- data/gemfile_steep/Gemfile +0 -3
- data/gemfile_steep/Gemfile.lock +0 -77
- data/rbs_collection.steep.lock.yaml +0 -108
- data/rbs_collection.steep.yaml +0 -23
- data/sig/shims/bundler.rbs +0 -3
- data/sig/shims/concurrent-ruby.rbs +0 -39
- data/sig/shims/exception.rbs +0 -4
- data/sig/shims/language-server_protocol.rbs +0 -450
- data/sig/shims/parser/comment.rbs +0 -33
- data/sig/shims/parser/nodes.rbs +0 -252
- data/sig/shims/parser/source/map.rbs +0 -146
- data/sig/shims/parser/source/range.rbs +0 -237
- data/sig/shims/parser.rbs +0 -69
- data/sig/shims/string.rbs +0 -4
- data/sig/shims/tagged_logging.rbs +0 -6
- data/sig/shims/yaml.rbs +0 -4
- data/sig/steep/annotation_parser.rbs +0 -60
- data/sig/steep/ast/annotation/collection.rbs +0 -78
- data/sig/steep/ast/annotation.rbs +0 -121
- data/sig/steep/ast/builtin.rbs +0 -69
- data/sig/steep/ast/ignore.rbs +0 -66
- data/sig/steep/ast/node/type_application.rbs +0 -31
- data/sig/steep/ast/node/type_assertion.rbs +0 -32
- data/sig/steep/ast/types/any.rbs +0 -29
- data/sig/steep/ast/types/boolean.rbs +0 -31
- data/sig/steep/ast/types/bot.rbs +0 -29
- data/sig/steep/ast/types/class.rbs +0 -33
- data/sig/steep/ast/types/factory.rbs +0 -110
- data/sig/steep/ast/types/helper.rbs +0 -24
- data/sig/steep/ast/types/instance.rbs +0 -33
- data/sig/steep/ast/types/intersection.rbs +0 -40
- data/sig/steep/ast/types/literal.rbs +0 -35
- data/sig/steep/ast/types/logic.rbs +0 -83
- data/sig/steep/ast/types/name.rbs +0 -84
- data/sig/steep/ast/types/nil.rbs +0 -31
- data/sig/steep/ast/types/proc.rbs +0 -53
- data/sig/steep/ast/types/record.rbs +0 -39
- data/sig/steep/ast/types/self.rbs +0 -33
- data/sig/steep/ast/types/top.rbs +0 -29
- data/sig/steep/ast/types/tuple.rbs +0 -37
- data/sig/steep/ast/types/union.rbs +0 -40
- data/sig/steep/ast/types/var.rbs +0 -42
- data/sig/steep/ast/types/void.rbs +0 -29
- data/sig/steep/ast/types.rbs +0 -16
- data/sig/steep/cli.rbs +0 -55
- data/sig/steep/diagnostic/deprecated/else_on_exhaustive_case.rbs +0 -13
- data/sig/steep/diagnostic/deprecated/unknown_constant_assigned.rbs +0 -15
- data/sig/steep/diagnostic/helper.rbs +0 -15
- data/sig/steep/diagnostic/lsp_formatter.rbs +0 -36
- data/sig/steep/diagnostic/ruby.rbs +0 -703
- data/sig/steep/diagnostic/signature.rbs +0 -252
- data/sig/steep/drivers/annotations.rbs +0 -17
- data/sig/steep/drivers/check.rbs +0 -33
- data/sig/steep/drivers/checkfile.rbs +0 -27
- data/sig/steep/drivers/diagnostic_printer.rbs +0 -25
- data/sig/steep/drivers/init.rbs +0 -19
- data/sig/steep/drivers/langserver.rbs +0 -36
- data/sig/steep/drivers/print_project.rbs +0 -15
- data/sig/steep/drivers/stats.rbs +0 -47
- data/sig/steep/drivers/utils/driver_helper.rbs +0 -25
- data/sig/steep/drivers/utils/jobs_option.rbs +0 -19
- data/sig/steep/drivers/validate.rbs +0 -15
- data/sig/steep/drivers/vendor.rbs +0 -19
- data/sig/steep/drivers/watch.rbs +0 -27
- data/sig/steep/drivers/worker.rbs +0 -29
- data/sig/steep/equatable.rbs +0 -11
- data/sig/steep/expectations.rbs +0 -72
- data/sig/steep/index/rbs_index.rbs +0 -141
- data/sig/steep/index/signature_symbol_provider.rbs +0 -41
- data/sig/steep/index/source_index.rbs +0 -63
- data/sig/steep/interface/block.rbs +0 -41
- data/sig/steep/interface/builder.rbs +0 -152
- data/sig/steep/interface/function.rbs +0 -270
- data/sig/steep/interface/method_type.rbs +0 -105
- data/sig/steep/interface/shape.rbs +0 -80
- data/sig/steep/interface/substitution.rbs +0 -51
- data/sig/steep/interface/type_param.rbs +0 -43
- data/sig/steep/method_name.rbs +0 -30
- data/sig/steep/module_helper.rbs +0 -16
- data/sig/steep/node_helper.rbs +0 -91
- data/sig/steep/path_helper.rbs +0 -15
- data/sig/steep/project/dsl.rbs +0 -108
- data/sig/steep/project/options.rbs +0 -47
- data/sig/steep/project/pattern.rbs +0 -47
- data/sig/steep/project/target.rbs +0 -25
- data/sig/steep/project.rbs +0 -26
- data/sig/steep/range_extension.rbs +0 -7
- data/sig/steep/server/base_worker.rbs +0 -49
- data/sig/steep/server/change_buffer.rbs +0 -38
- data/sig/steep/server/delay_queue.rbs +0 -37
- data/sig/steep/server/interaction_worker.rbs +0 -90
- data/sig/steep/server/lsp_formatter.rbs +0 -63
- data/sig/steep/server/master.rbs +0 -299
- data/sig/steep/server/type_check_worker.rbs +0 -141
- data/sig/steep/server/worker_process.rbs +0 -97
- data/sig/steep/services/completion_provider.rbs +0 -264
- data/sig/steep/services/content_change.rbs +0 -37
- data/sig/steep/services/file_loader.rbs +0 -21
- data/sig/steep/services/goto_service.rbs +0 -106
- data/sig/steep/services/hover_provider/rbs.rbs +0 -47
- data/sig/steep/services/hover_provider/ruby.rbs +0 -127
- data/sig/steep/services/hover_provider/singleton_methods.rbs +0 -11
- data/sig/steep/services/path_assignment.rbs +0 -21
- data/sig/steep/services/signature_help_provider.rbs +0 -51
- data/sig/steep/services/signature_service.rbs +0 -156
- data/sig/steep/services/stats_calculator.rbs +0 -41
- data/sig/steep/services/type_check_service.rbs +0 -112
- data/sig/steep/services/type_name_completion.rbs +0 -135
- data/sig/steep/signature/validator.rbs +0 -85
- data/sig/steep/source/ignore_ranges.rbs +0 -38
- data/sig/steep/source.rbs +0 -105
- data/sig/steep/subtyping/cache.rbs +0 -17
- data/sig/steep/subtyping/check.rbs +0 -131
- data/sig/steep/subtyping/constraints.rbs +0 -111
- data/sig/steep/subtyping/relation.rbs +0 -63
- data/sig/steep/subtyping/result.rbs +0 -179
- data/sig/steep/subtyping/variable_variance.rbs +0 -25
- data/sig/steep/thread_waiter.rbs +0 -13
- data/sig/steep/type_construction.rbs +0 -542
- data/sig/steep/type_inference/block_params.rbs +0 -170
- data/sig/steep/type_inference/case_when.rbs +0 -130
- data/sig/steep/type_inference/constant_env.rbs +0 -29
- data/sig/steep/type_inference/context.rbs +0 -216
- data/sig/steep/type_inference/context_array.rbs +0 -38
- data/sig/steep/type_inference/logic_type_interpreter.rbs +0 -108
- data/sig/steep/type_inference/method_call.rbs +0 -124
- data/sig/steep/type_inference/method_params.rbs +0 -127
- data/sig/steep/type_inference/multiple_assignment.rbs +0 -76
- data/sig/steep/type_inference/send_args.rbs +0 -243
- data/sig/steep/type_inference/type_env.rbs +0 -160
- data/sig/steep/type_inference/type_env_builder.rbs +0 -81
- data/sig/steep/typing.rbs +0 -75
- data/sig/steep.rbs +0 -45
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
module Steep
|
|
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
|
-
#
|
|
10
|
-
class SignatureService
|
|
11
|
-
type status = SyntaxErrorStatus | AncestorErrorStatus | LoadedStatus
|
|
12
|
-
|
|
13
|
-
attr_reader status: status
|
|
14
|
-
|
|
15
|
-
class SyntaxErrorStatus
|
|
16
|
-
attr_reader files: Hash[Pathname, FileStatus]
|
|
17
|
-
|
|
18
|
-
attr_reader changed_paths: Set[Pathname]
|
|
19
|
-
|
|
20
|
-
attr_reader diagnostics: Array[Diagnostic::Signature::Base]
|
|
21
|
-
|
|
22
|
-
attr_reader last_builder: RBS::DefinitionBuilder
|
|
23
|
-
|
|
24
|
-
@rbs_index: Index::RBSIndex?
|
|
25
|
-
|
|
26
|
-
@constant_resolver: RBS::Resolver::ConstantResolver?
|
|
27
|
-
|
|
28
|
-
def initialize: (files: Hash[Pathname, FileStatus], changed_paths: Set[Pathname], diagnostics: Array[Diagnostic::Signature::Base], last_builder: RBS::DefinitionBuilder) -> void
|
|
29
|
-
|
|
30
|
-
def rbs_index: () -> Index::RBSIndex
|
|
31
|
-
|
|
32
|
-
def constant_resolver: () -> RBS::Resolver::ConstantResolver
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
class AncestorErrorStatus
|
|
36
|
-
attr_reader files: Hash[Pathname, FileStatus]
|
|
37
|
-
|
|
38
|
-
attr_reader changed_paths: Set[Pathname]
|
|
39
|
-
|
|
40
|
-
attr_reader diagnostics: Array[Diagnostic::Signature::Base]
|
|
41
|
-
|
|
42
|
-
attr_reader last_builder: RBS::DefinitionBuilder
|
|
43
|
-
|
|
44
|
-
@rbs_index: Index::RBSIndex?
|
|
45
|
-
|
|
46
|
-
@constant_resolver: RBS::Resolver::ConstantResolver?
|
|
47
|
-
|
|
48
|
-
def initialize: (files: Hash[Pathname, FileStatus], changed_paths: Set[Pathname], diagnostics: Array[Diagnostic::Signature::Base], last_builder: RBS::DefinitionBuilder) -> void
|
|
49
|
-
|
|
50
|
-
def rbs_index: () -> Index::RBSIndex
|
|
51
|
-
|
|
52
|
-
def constant_resolver: () -> RBS::Resolver::ConstantResolver
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
class LoadedStatus
|
|
56
|
-
attr_reader files: Hash[Pathname, FileStatus]
|
|
57
|
-
|
|
58
|
-
attr_reader builder: RBS::DefinitionBuilder
|
|
59
|
-
|
|
60
|
-
@rbs_index: Index::RBSIndex?
|
|
61
|
-
|
|
62
|
-
@subtyping: Subtyping::Check?
|
|
63
|
-
|
|
64
|
-
@constant_resolver: RBS::Resolver::ConstantResolver?
|
|
65
|
-
|
|
66
|
-
def initialize: (files: Hash[Pathname, FileStatus], builder: RBS::DefinitionBuilder) -> void
|
|
67
|
-
|
|
68
|
-
def subtyping: () -> Subtyping::Check
|
|
69
|
-
|
|
70
|
-
def rbs_index: () -> Index::RBSIndex
|
|
71
|
-
|
|
72
|
-
def constant_resolver: () -> RBS::Resolver::ConstantResolver
|
|
73
|
-
end
|
|
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
|
-
#
|
|
81
|
-
class FileStatus
|
|
82
|
-
attr_reader path: Pathname
|
|
83
|
-
|
|
84
|
-
attr_reader content: String
|
|
85
|
-
|
|
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
|
|
89
|
-
|
|
90
|
-
def initialize: (
|
|
91
|
-
path: Pathname,
|
|
92
|
-
content: String,
|
|
93
|
-
signature: signature | Diagnostic::Signature::UnexpectedError | RBS::ParsingError
|
|
94
|
-
) -> void
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
def initialize: (env: RBS::Environment) -> void
|
|
98
|
-
|
|
99
|
-
def self.load_from: (RBS::EnvironmentLoader loader) -> SignatureService
|
|
100
|
-
|
|
101
|
-
@env_rbs_paths: Set[Pathname]?
|
|
102
|
-
|
|
103
|
-
# All RBS paths in environment, both dependency RBS and target RBS
|
|
104
|
-
#
|
|
105
|
-
def env_rbs_paths: () -> Set[Pathname]
|
|
106
|
-
|
|
107
|
-
# Yield all RBS paths in the environment, both dependency RBS and target RBS
|
|
108
|
-
#
|
|
109
|
-
def each_rbs_path: () { (Pathname) -> void } -> void
|
|
110
|
-
| () -> Enumerator[Pathname, void]
|
|
111
|
-
|
|
112
|
-
# The Target files
|
|
113
|
-
#
|
|
114
|
-
def files: () -> Hash[Pathname, FileStatus]
|
|
115
|
-
|
|
116
|
-
def pending_changed_paths: () -> Set[Pathname]
|
|
117
|
-
|
|
118
|
-
def latest_env: () -> RBS::Environment
|
|
119
|
-
|
|
120
|
-
def latest_builder: () -> RBS::DefinitionBuilder
|
|
121
|
-
|
|
122
|
-
def latest_rbs_index: () -> Index::RBSIndex
|
|
123
|
-
|
|
124
|
-
def latest_constant_resolver: () -> RBS::Resolver::ConstantResolver
|
|
125
|
-
|
|
126
|
-
def current_subtyping: () -> Subtyping::Check?
|
|
127
|
-
|
|
128
|
-
def apply_changes: (Hash[Pathname, FileStatus] files, Server::ChangeBuffer::changes changes) -> Hash[Pathname, FileStatus]
|
|
129
|
-
|
|
130
|
-
# The entry point to apply the edit to the signatures
|
|
131
|
-
#
|
|
132
|
-
def update: (Server::ChangeBuffer::changes changes) -> void
|
|
133
|
-
|
|
134
|
-
def update_env: (
|
|
135
|
-
Hash[Pathname, FileStatus] updated_files,
|
|
136
|
-
paths: Set[Pathname]
|
|
137
|
-
) -> (RBS::DefinitionBuilder::AncestorBuilder | Array[Diagnostic::Signature::Base])
|
|
138
|
-
|
|
139
|
-
def rescue_rbs_error: (Array[RBS::BaseError] errors) { () -> void } -> void
|
|
140
|
-
|
|
141
|
-
def update_builder: (ancestor_builder: RBS::DefinitionBuilder::AncestorBuilder, paths: Set[Pathname]) -> RBS::DefinitionBuilder
|
|
142
|
-
|
|
143
|
-
def type_names: (paths: Set[Pathname], env: RBS::Environment) -> Set[RBS::TypeName]
|
|
144
|
-
|
|
145
|
-
def const_decls: (paths: Set[Pathname], env: RBS::Environment) -> Hash[RBS::TypeName, RBS::Environment::SingleEntry[RBS::TypeName, RBS::AST::Declarations::Constant]]
|
|
146
|
-
|
|
147
|
-
def global_decls: (paths: Set[Pathname], ?env: RBS::Environment) -> Hash[Symbol, RBS::Environment::SingleEntry[Symbol, RBS::AST::Declarations::Global]]
|
|
148
|
-
|
|
149
|
-
def type_name_from_decl: (RBS::AST::Declarations::t decl, set: Set[RBS::TypeName]) -> void
|
|
150
|
-
|
|
151
|
-
def add_descendants: (graph: RBS::AncestorGraph, names: Set[RBS::TypeName], set: Set[RBS::TypeName]) -> void
|
|
152
|
-
|
|
153
|
-
def add_nested_decls: (env: RBS::Environment, names: Set[RBS::TypeName], set: Set[RBS::TypeName]) -> void
|
|
154
|
-
end
|
|
155
|
-
end
|
|
156
|
-
end
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
module Steep
|
|
2
|
-
module Services
|
|
3
|
-
class StatsCalculator
|
|
4
|
-
class SuccessStats
|
|
5
|
-
attr_reader target: Project::Target
|
|
6
|
-
|
|
7
|
-
attr_reader path: Pathname
|
|
8
|
-
|
|
9
|
-
attr_reader typed_calls_count: Integer
|
|
10
|
-
|
|
11
|
-
attr_reader untyped_calls_count: Integer
|
|
12
|
-
|
|
13
|
-
attr_reader error_calls_count: Integer
|
|
14
|
-
|
|
15
|
-
def initialize: (target: Project::Target, path: Pathname, typed_calls_count: Integer, untyped_calls_count: Integer, error_calls_count: Integer) -> void
|
|
16
|
-
|
|
17
|
-
def as_json: () -> Hash[Symbol, untyped]
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
class ErrorStats
|
|
21
|
-
attr_reader target: Project::Target
|
|
22
|
-
|
|
23
|
-
attr_reader path: Pathname
|
|
24
|
-
|
|
25
|
-
def initialize: (target: Project::Target, path: Pathname) -> void
|
|
26
|
-
|
|
27
|
-
def as_json: () -> Hash[Symbol, untyped]
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
type stats = SuccessStats | ErrorStats
|
|
31
|
-
|
|
32
|
-
attr_reader service: TypeCheckService
|
|
33
|
-
|
|
34
|
-
def initialize: (service: TypeCheckService) -> void
|
|
35
|
-
|
|
36
|
-
def project: () -> Project
|
|
37
|
-
|
|
38
|
-
def calc_stats: (Project::Target target, file: TypeCheckService::SourceFile) -> stats
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
module Steep
|
|
2
|
-
module Services
|
|
3
|
-
class TypeCheckService
|
|
4
|
-
attr_reader project: Project
|
|
5
|
-
|
|
6
|
-
attr_reader signature_validation_diagnostics: Hash[Symbol, Hash[Pathname, Array[Diagnostic::Signature::Base]]]
|
|
7
|
-
|
|
8
|
-
attr_reader source_files: Hash[Pathname, SourceFile]
|
|
9
|
-
|
|
10
|
-
attr_reader signature_services: Hash[Symbol, SignatureService]
|
|
11
|
-
|
|
12
|
-
class SourceFile
|
|
13
|
-
attr_reader path: Pathname
|
|
14
|
-
|
|
15
|
-
attr_reader target: Project::Target
|
|
16
|
-
|
|
17
|
-
attr_reader content: String
|
|
18
|
-
|
|
19
|
-
attr_reader node: Parser::AST::Node | nil | false
|
|
20
|
-
|
|
21
|
-
attr_reader typing: Typing?
|
|
22
|
-
|
|
23
|
-
attr_reader ignores: Source::IgnoreRanges?
|
|
24
|
-
|
|
25
|
-
attr_reader errors: Array[Diagnostic::Ruby::Base]?
|
|
26
|
-
|
|
27
|
-
def initialize: (
|
|
28
|
-
path: Pathname,
|
|
29
|
-
node: Parser::AST::Node | nil | false,
|
|
30
|
-
content: String,
|
|
31
|
-
typing: Typing?,
|
|
32
|
-
ignores: Source::IgnoreRanges?,
|
|
33
|
-
errors: Array[Diagnostic::Ruby::Base]?
|
|
34
|
-
) -> void
|
|
35
|
-
|
|
36
|
-
def self.with_syntax_error: (path: Pathname, content: String, error: Diagnostic::Ruby::SyntaxError) -> SourceFile
|
|
37
|
-
|
|
38
|
-
def self.with_typing: (path: Pathname, content: String, typing: Typing, ignores: Source::IgnoreRanges, node: Parser::AST::Node?) -> SourceFile
|
|
39
|
-
|
|
40
|
-
def self.no_data: (path: Pathname, content: String) -> SourceFile
|
|
41
|
-
|
|
42
|
-
def update_content: (String content) -> SourceFile
|
|
43
|
-
|
|
44
|
-
# Diagnostics filgered by `ignores`
|
|
45
|
-
#
|
|
46
|
-
def diagnostics: () -> Array[Diagnostic::Ruby::Base]
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
class TargetRequest
|
|
50
|
-
attr_reader target: Project::Target
|
|
51
|
-
|
|
52
|
-
attr_reader source_paths: Set[Pathname]
|
|
53
|
-
|
|
54
|
-
@signature_updated: bool
|
|
55
|
-
|
|
56
|
-
def initialize: (target: Project::Target) -> void
|
|
57
|
-
|
|
58
|
-
def signature_updated!: (?bool value) -> self
|
|
59
|
-
|
|
60
|
-
def signature_updated?: () -> bool
|
|
61
|
-
|
|
62
|
-
def empty?: () -> bool
|
|
63
|
-
|
|
64
|
-
def ==: (untyped other) -> bool
|
|
65
|
-
|
|
66
|
-
alias eql? ==
|
|
67
|
-
|
|
68
|
-
def hash: () -> Integer
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
def initialize: (project: Project) -> void
|
|
72
|
-
|
|
73
|
-
def signature_diagnostics: () -> Hash[Pathname, Array[Diagnostic::Signature::Base]]
|
|
74
|
-
|
|
75
|
-
def has_diagnostics?: () -> bool
|
|
76
|
-
|
|
77
|
-
def diagnostics: () -> Hash[Pathname, Array[Diagnostic::Ruby::Base | Diagnostic::Signature::Base]]
|
|
78
|
-
|
|
79
|
-
def each_diagnostics: () { ([Pathname, Array[Diagnostic::Ruby::Base] | Array[Diagnostic::Signature::Base]]) -> void } -> void
|
|
80
|
-
| () -> Enumerator[[Pathname, Array[Diagnostic::Ruby::Base] | Array[Diagnostic::Signature::Base]], void]
|
|
81
|
-
|
|
82
|
-
def update: (changes: Server::ChangeBuffer::changes) -> Hash[Project::Target, TargetRequest]
|
|
83
|
-
|
|
84
|
-
def update_and_check: (
|
|
85
|
-
changes: Server::ChangeBuffer::changes,
|
|
86
|
-
assignment: PathAssignment
|
|
87
|
-
) {
|
|
88
|
-
([Pathname, Array[Diagnostic::Signature::Base] | Array[Diagnostic::Ruby::Base]]) -> void
|
|
89
|
-
} -> void
|
|
90
|
-
|
|
91
|
-
def validate_signature: (path: Pathname) { ([Pathname, Array[Diagnostic::Signature::Base]]) -> void } -> void
|
|
92
|
-
|
|
93
|
-
def typecheck_source: (path: Pathname, ?target: Project::Target?) { ([Pathname, Array[Diagnostic::Ruby::Base]]) -> void } -> void
|
|
94
|
-
|
|
95
|
-
def update_signature: (changes: Server::ChangeBuffer::changes, requests: Hash[Project::Target, TargetRequest]) -> void
|
|
96
|
-
|
|
97
|
-
def update_sources: (changes: Server::ChangeBuffer::changes, requests: Hash[Project::Target, TargetRequest]) -> void
|
|
98
|
-
|
|
99
|
-
def type_check_file: (target: Project::Target, subtyping: Subtyping::Check, path: Pathname, text: String) { () -> RBS::Resolver::ConstantResolver } -> SourceFile
|
|
100
|
-
|
|
101
|
-
def self.type_check: (source: Source, subtyping: Subtyping::Check, constant_resolver: RBS::Resolver::ConstantResolver) -> Typing
|
|
102
|
-
|
|
103
|
-
def source_file?: (Pathname path) -> Project::Target?
|
|
104
|
-
|
|
105
|
-
def signature_file?: (Pathname path) -> Array[Symbol]?
|
|
106
|
-
|
|
107
|
-
def app_signature_file?: (Pathname path) -> Array[Symbol]?
|
|
108
|
-
|
|
109
|
-
def lib_signature_file?: (Pathname path) -> bool
|
|
110
|
-
end
|
|
111
|
-
end
|
|
112
|
-
end
|
|
@@ -1,135 +0,0 @@
|
|
|
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 resolve_used_name: (TypeName) -> TypeName?
|
|
116
|
-
|
|
117
|
-
private
|
|
118
|
-
|
|
119
|
-
# Yield type names defined in the environment
|
|
120
|
-
#
|
|
121
|
-
# * Yields an absolute type name if it is defined in the environment
|
|
122
|
-
# * Yields an relative type name if it is imported with `use` declerative
|
|
123
|
-
#
|
|
124
|
-
# Alias classes/modules and types under them are yielded.
|
|
125
|
-
#
|
|
126
|
-
def each_type_name: () { (TypeName) -> void } -> void
|
|
127
|
-
| () -> Enumerator[TypeName, void]
|
|
128
|
-
|
|
129
|
-
def each_type_name_under: (TypeName module_name, TypeName normalized_name, table: Hash[Namespace, Array[TypeName]]) { (TypeName) -> void } -> void
|
|
130
|
-
|
|
131
|
-
def each_outer_module: (?Resolver::context) { (Namespace) -> void } -> Namespace
|
|
132
|
-
| () -> Enumerator[Namespace, void]
|
|
133
|
-
end
|
|
134
|
-
end
|
|
135
|
-
end
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
module Steep
|
|
2
|
-
module Signature
|
|
3
|
-
class Validator
|
|
4
|
-
Location: singleton(RBS::Location)
|
|
5
|
-
|
|
6
|
-
Declarations: singleton(RBS::AST::Declarations)
|
|
7
|
-
|
|
8
|
-
attr_reader checker: Subtyping::Check
|
|
9
|
-
|
|
10
|
-
@errors: Array[Diagnostic::Signature::Base]
|
|
11
|
-
|
|
12
|
-
@type_name_resolver: RBS::Resolver::TypeNameResolver?
|
|
13
|
-
|
|
14
|
-
@validator: RBS::Validator?
|
|
15
|
-
|
|
16
|
-
def initialize: (checker: Subtyping::Check) -> void
|
|
17
|
-
|
|
18
|
-
def has_error?: () -> bool
|
|
19
|
-
|
|
20
|
-
def no_error?: () -> bool
|
|
21
|
-
|
|
22
|
-
def each_error: () { (Diagnostic::Signature::Base) -> void } -> void
|
|
23
|
-
| () -> Enumerator[Diagnostic::Signature::Base, void]
|
|
24
|
-
|
|
25
|
-
def env: () -> RBS::Environment
|
|
26
|
-
|
|
27
|
-
def builder: () -> RBS::DefinitionBuilder
|
|
28
|
-
|
|
29
|
-
def type_name_resolver: () -> RBS::Resolver::TypeNameResolver
|
|
30
|
-
|
|
31
|
-
def validator: () -> RBS::Validator
|
|
32
|
-
|
|
33
|
-
def factory: () -> AST::Types::Factory
|
|
34
|
-
|
|
35
|
-
def validate: () -> void
|
|
36
|
-
|
|
37
|
-
def validate_type_application_constraints: (RBS::TypeName type_name, Array[RBS::AST::TypeParam] type_params, Array[RBS::Types::t] type_args, location: RBS::Location[untyped, untyped]?) -> void
|
|
38
|
-
|
|
39
|
-
def validate_type_application: (RBS::Types::t) -> void
|
|
40
|
-
|
|
41
|
-
def validate_type: (RBS::Types::t `type`) -> void
|
|
42
|
-
|
|
43
|
-
def ancestor_to_type: (RBS::Definition::Ancestor::t ancestor) -> (AST::Types::Name::Interface | AST::Types::Name::Instance)
|
|
44
|
-
|
|
45
|
-
def mixin_constraints: (RBS::Definition definition, Array[RBS::Definition::Ancestor::Instance] mixin_ancestors, immediate_self_types: Array[RBS::Definition::Ancestor::t]?) -> Array[[Subtyping::Relation[AST::Types::t], RBS::Definition::Ancestor::Instance]]
|
|
46
|
-
|
|
47
|
-
def each_method_type: (RBS::Definition) { (RBS::MethodType) -> void } -> void
|
|
48
|
-
|
|
49
|
-
def each_variable_type: (RBS::Definition) { (RBS::Types::t) -> void } -> void
|
|
50
|
-
|
|
51
|
-
def validate_definition_type: (RBS::Definition) -> void
|
|
52
|
-
|
|
53
|
-
def validate_one_class: (RBS::TypeName) -> void
|
|
54
|
-
|
|
55
|
-
def validate_ancestor_application: (RBS::TypeName, RBS::Definition::Ancestor::Instance ancestor) -> void
|
|
56
|
-
|
|
57
|
-
def validate_one_interface: (RBS::TypeName) -> void
|
|
58
|
-
|
|
59
|
-
def validate_decl: () -> void
|
|
60
|
-
|
|
61
|
-
def validate_const: () -> void
|
|
62
|
-
|
|
63
|
-
def validate_one_constant: (RBS::TypeName name, RBS::Environment::ConstantEntry entry) -> void
|
|
64
|
-
|
|
65
|
-
def validate_global: () -> void
|
|
66
|
-
|
|
67
|
-
def validate_one_global: (Symbol name, RBS::Environment::GlobalEntry) -> void
|
|
68
|
-
|
|
69
|
-
# Validate type alias
|
|
70
|
-
#
|
|
71
|
-
# 1. Make sure the outer namespace of given `name` exists
|
|
72
|
-
# 2. Make sure the type alias is valid with respect to `RBS::Validator`
|
|
73
|
-
#
|
|
74
|
-
def validate_one_alias: (RBS::TypeName name, ?RBS::Environment::TypeAliasEntry entry) -> void
|
|
75
|
-
|
|
76
|
-
def validate_one_class_decl: (RBS::TypeName) -> void
|
|
77
|
-
|
|
78
|
-
def validate_one_class_alias: (RBS::TypeName, RBS::Environment::ClassAliasEntry | RBS::Environment::ModuleAliasEntry) -> void
|
|
79
|
-
|
|
80
|
-
def validate_alias: () -> void
|
|
81
|
-
|
|
82
|
-
def rescue_validation_errors: (?RBS::TypeName? type_name) { () -> void } -> void
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
end
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
use Steep::AST::Ignore, RBS::Location
|
|
2
|
-
|
|
3
|
-
module Steep
|
|
4
|
-
class Source
|
|
5
|
-
class IgnoreRanges
|
|
6
|
-
attr_reader all_ignores: Array[Ignore::t]
|
|
7
|
-
|
|
8
|
-
attr_reader error_ignores: Array[Ignore::t]
|
|
9
|
-
|
|
10
|
-
attr_reader ignored_ranges: Array[Range[Integer]]
|
|
11
|
-
|
|
12
|
-
attr_reader ignored_lines: Hash[Integer, Ignore::IgnoreLine]
|
|
13
|
-
|
|
14
|
-
def initialize: (ignores: Array[Ignore::t]) -> void
|
|
15
|
-
|
|
16
|
-
# If given diagnostic code at the location is ignored or not
|
|
17
|
-
#
|
|
18
|
-
# Ignore ranges work for location that is completely inside the range.
|
|
19
|
-
# Both the starting point and ending point should be in one range.
|
|
20
|
-
# Only diagnostic (1) is ignored in the following example.
|
|
21
|
-
#
|
|
22
|
-
# ```ruby
|
|
23
|
-
# + <2
|
|
24
|
-
# # steep:ignore:start |
|
|
25
|
-
# 1> + +
|
|
26
|
-
# + +
|
|
27
|
-
# # steep:ignore:end |
|
|
28
|
-
# + <3
|
|
29
|
-
# ```
|
|
30
|
-
#
|
|
31
|
-
# Ignore lines work for location that has starting line or ending line.
|
|
32
|
-
#
|
|
33
|
-
def ignore?: (Integer start_line, Integer end_line, String code) -> bool
|
|
34
|
-
|
|
35
|
-
def ignore_code?: (Ignore::IgnoreLine, String code) -> bool
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
data/sig/steep/source.rbs
DELETED
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
module Steep
|
|
2
|
-
class Source
|
|
3
|
-
extend NodeHelper
|
|
4
|
-
|
|
5
|
-
attr_reader buffer: RBS::Buffer
|
|
6
|
-
|
|
7
|
-
attr_reader path: Pathname
|
|
8
|
-
|
|
9
|
-
attr_reader node: Parser::AST::Node?
|
|
10
|
-
|
|
11
|
-
attr_reader mapping: Hash[Parser::AST::Node, Array[AST::Annotation::t]]
|
|
12
|
-
|
|
13
|
-
attr_reader comments: Array[Parser::Source::Comment]
|
|
14
|
-
|
|
15
|
-
attr_reader ignores: Array[AST::Ignore::t]
|
|
16
|
-
|
|
17
|
-
def initialize: (
|
|
18
|
-
buffer: RBS::Buffer,
|
|
19
|
-
path: Pathname,
|
|
20
|
-
node: Parser::AST::Node?,
|
|
21
|
-
mapping: Hash[Parser::AST::Node, Array[AST::Annotation::t]],
|
|
22
|
-
comments: Array[Parser::Source::Comment],
|
|
23
|
-
ignores: Array[AST::Ignore::t]
|
|
24
|
-
) -> void
|
|
25
|
-
|
|
26
|
-
class Builder < ::Parser::Builders::Default
|
|
27
|
-
def string_value: (untyped token) -> untyped
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def self.new_parser: () -> Parser::Ruby33
|
|
31
|
-
|
|
32
|
-
def self.parse: (String source_code, path: Pathname, factory: AST::Types::Factory) -> Source
|
|
33
|
-
|
|
34
|
-
def self.construct_mapping: (
|
|
35
|
-
node: Parser::AST::Node,
|
|
36
|
-
annotations: Array[AST::Annotation::t],
|
|
37
|
-
mapping: Hash[Parser::AST::Node, Array[AST::Annotation::t]],
|
|
38
|
-
?line_range: Range[Integer]?
|
|
39
|
-
) -> void
|
|
40
|
-
|
|
41
|
-
def self.map_child_node: (Parser::AST::Node node, ?Symbol? type, ?skip: Set[Parser::AST::Node]?) { (Parser::AST::Node) -> Parser::AST::Node } -> Parser::AST::Node
|
|
42
|
-
|
|
43
|
-
def annotations: (block: Parser::AST::Node, factory: AST::Types::Factory, context: RBS::Resolver::context) -> AST::Annotation::Collection
|
|
44
|
-
|
|
45
|
-
def each_annotation: () { ([Parser::AST::Node, Array[AST::Annotation::t]]) -> void } -> void
|
|
46
|
-
| () -> Enumerator[[Parser::AST::Node, Array[AST::Annotation::t]], void]
|
|
47
|
-
|
|
48
|
-
# Yields all heredoc node and its parents under `node` (or `self.node`)
|
|
49
|
-
#
|
|
50
|
-
# Yields arrays, inner node first, outer node last -- `[heredoc_node, *outer_node, node]`.
|
|
51
|
-
#
|
|
52
|
-
def each_heredoc_node: (?Parser::AST::Node? node, ?Array[Parser::AST::Node] parents) { ([Array[Parser::AST::Node], Parser::Source::Map & Parser::AST::_Heredoc]) -> void } -> void
|
|
53
|
-
| (?Parser::AST::Node? node, ?Array[Parser::AST::Node] parents) -> Enumerator[[Array[Parser::AST::Node], Parser::Source::Map & Parser::AST::_Heredoc], void]
|
|
54
|
-
|
|
55
|
-
# Returns array of nodes that is located inside heredoc
|
|
56
|
-
#
|
|
57
|
-
# ```ruby
|
|
58
|
-
# content = <<TEXT
|
|
59
|
-
# #{this or this}
|
|
60
|
-
# TEXT
|
|
61
|
-
# ```
|
|
62
|
-
#
|
|
63
|
-
# Returns arrays, inner node first, outer node last -- `[*nodes, heredoc_node]`.
|
|
64
|
-
#
|
|
65
|
-
def find_heredoc_nodes: (Integer line, Integer column, Integer position) -> Array[Parser::AST::Node]?
|
|
66
|
-
|
|
67
|
-
# Returns a node and it's outer nodes
|
|
68
|
-
#
|
|
69
|
-
def find_nodes_loc: (Parser::AST::Node node, Integer position, Array[Parser::AST::Node] parents) -> Array[Parser::AST::Node]?
|
|
70
|
-
|
|
71
|
-
# Returns a node and it's outer nodes
|
|
72
|
-
def find_nodes: (line: Integer, column: Integer) -> ::Array[Parser::AST::Node]?
|
|
73
|
-
|
|
74
|
-
# Returns comment at the given position
|
|
75
|
-
#
|
|
76
|
-
# Note that a cursor position that is at the beginning of a comment returns `nil`.
|
|
77
|
-
#
|
|
78
|
-
# ```ruby
|
|
79
|
-
# .#. .H.e.l.l.o.
|
|
80
|
-
# ^ => Returns nil
|
|
81
|
-
# ^ => Returns the comment
|
|
82
|
-
# ^ => Returns the comment
|
|
83
|
-
# ```
|
|
84
|
-
#
|
|
85
|
-
def find_comment: (line: Integer, column: Integer) -> Parser::Source::Comment?
|
|
86
|
-
|
|
87
|
-
def self.delete_defs: (Parser::AST::Node node, Set[Parser::AST::Node] allow_list) -> Parser::AST::Node
|
|
88
|
-
|
|
89
|
-
def without_unrelated_defs: (line: Integer, column: Integer) -> Source
|
|
90
|
-
|
|
91
|
-
type type_comment = AST::Node::TypeAssertion | AST::Node::TypeApplication
|
|
92
|
-
|
|
93
|
-
def self.insert_type_node: (Parser::AST::Node node, Hash[Integer, type_comment]) -> Parser::AST::Node
|
|
94
|
-
|
|
95
|
-
def self.adjust_location: (Parser::AST::Node) -> Parser::AST::Node
|
|
96
|
-
|
|
97
|
-
def self.assertion_node: (Parser::AST::Node, AST::Node::TypeAssertion) -> Parser::AST::Node
|
|
98
|
-
|
|
99
|
-
def self.type_application_node: (Parser::AST::Node, AST::Node::TypeApplication) -> Parser::AST::Node
|
|
100
|
-
|
|
101
|
-
# Returns a line of `selector` of `send` node, that can be used to look up a TypeApplication comment
|
|
102
|
-
#
|
|
103
|
-
def self.sendish_node?: (Parser::AST::Node) -> Integer?
|
|
104
|
-
end
|
|
105
|
-
end
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
module Steep
|
|
2
|
-
module Subtyping
|
|
3
|
-
class Cache
|
|
4
|
-
attr_reader subtypes: untyped
|
|
5
|
-
|
|
6
|
-
def initialize: () -> void
|
|
7
|
-
|
|
8
|
-
def subtype: (untyped relation, untyped self_type, untyped instance_type, untyped class_type, untyped bounds) -> untyped
|
|
9
|
-
|
|
10
|
-
def []: (untyped relation, untyped self_type, untyped instance_type, untyped class_type, untyped bounds) -> untyped
|
|
11
|
-
|
|
12
|
-
def []=: (untyped relation, untyped self_type, untyped instance_type, untyped class_type, untyped bounds, untyped value) -> untyped
|
|
13
|
-
|
|
14
|
-
def no_subtype_cache?: () -> untyped
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
end
|