steep-relaxed 1.9.3.3
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 +7 -0
- data/.gitignore +13 -0
- data/.gitmodules +0 -0
- data/CHANGELOG.md +1032 -0
- data/LICENSE +21 -0
- data/README.md +260 -0
- data/Rakefile +227 -0
- data/STDGEM_DEPENDENCIES.txt +59 -0
- data/Steepfile +68 -0
- data/bin/console +14 -0
- data/bin/generate-diagnostics-docs.rb +112 -0
- data/bin/mem_graph.rb +67 -0
- data/bin/mem_prof.rb +102 -0
- data/bin/output_rebaseline.rb +34 -0
- data/bin/output_test.rb +60 -0
- data/bin/rbs +20 -0
- data/bin/rbs-inline +19 -0
- data/bin/setup +9 -0
- data/bin/stackprof_test.rb +19 -0
- data/bin/steep +19 -0
- data/bin/steep-check.rb +251 -0
- data/bin/steep-prof +16 -0
- data/doc/narrowing.md +195 -0
- data/doc/shape.md +194 -0
- data/exe/steep +18 -0
- data/guides/README.md +5 -0
- data/guides/src/gem-rbs-collection/gem-rbs-collection.md +126 -0
- data/guides/src/getting-started/getting-started.md +163 -0
- data/guides/src/nil-optional/nil-optional.md +195 -0
- data/lib/steep/annotation_parser.rb +199 -0
- data/lib/steep/ast/annotation/collection.rb +172 -0
- data/lib/steep/ast/annotation.rb +137 -0
- data/lib/steep/ast/builtin.rb +104 -0
- data/lib/steep/ast/ignore.rb +148 -0
- data/lib/steep/ast/node/type_application.rb +88 -0
- data/lib/steep/ast/node/type_assertion.rb +81 -0
- data/lib/steep/ast/types/any.rb +35 -0
- data/lib/steep/ast/types/boolean.rb +45 -0
- data/lib/steep/ast/types/bot.rb +35 -0
- data/lib/steep/ast/types/class.rb +43 -0
- data/lib/steep/ast/types/factory.rb +557 -0
- data/lib/steep/ast/types/helper.rb +40 -0
- data/lib/steep/ast/types/instance.rb +42 -0
- data/lib/steep/ast/types/intersection.rb +93 -0
- data/lib/steep/ast/types/literal.rb +59 -0
- data/lib/steep/ast/types/logic.rb +84 -0
- data/lib/steep/ast/types/name.rb +128 -0
- data/lib/steep/ast/types/nil.rb +41 -0
- data/lib/steep/ast/types/proc.rb +117 -0
- data/lib/steep/ast/types/record.rb +79 -0
- data/lib/steep/ast/types/self.rb +43 -0
- data/lib/steep/ast/types/shared_instance.rb +11 -0
- data/lib/steep/ast/types/top.rb +35 -0
- data/lib/steep/ast/types/tuple.rb +60 -0
- data/lib/steep/ast/types/union.rb +97 -0
- data/lib/steep/ast/types/var.rb +65 -0
- data/lib/steep/ast/types/void.rb +35 -0
- data/lib/steep/cli.rb +401 -0
- data/lib/steep/diagnostic/deprecated/else_on_exhaustive_case.rb +20 -0
- data/lib/steep/diagnostic/deprecated/unknown_constant_assigned.rb +28 -0
- data/lib/steep/diagnostic/helper.rb +18 -0
- data/lib/steep/diagnostic/lsp_formatter.rb +78 -0
- data/lib/steep/diagnostic/result_printer2.rb +48 -0
- data/lib/steep/diagnostic/ruby.rb +1221 -0
- data/lib/steep/diagnostic/signature.rb +570 -0
- data/lib/steep/drivers/annotations.rb +52 -0
- data/lib/steep/drivers/check.rb +339 -0
- data/lib/steep/drivers/checkfile.rb +210 -0
- data/lib/steep/drivers/diagnostic_printer.rb +105 -0
- data/lib/steep/drivers/init.rb +66 -0
- data/lib/steep/drivers/langserver.rb +56 -0
- data/lib/steep/drivers/print_project.rb +113 -0
- data/lib/steep/drivers/stats.rb +203 -0
- data/lib/steep/drivers/utils/driver_helper.rb +143 -0
- data/lib/steep/drivers/utils/jobs_option.rb +26 -0
- data/lib/steep/drivers/vendor.rb +27 -0
- data/lib/steep/drivers/watch.rb +194 -0
- data/lib/steep/drivers/worker.rb +58 -0
- data/lib/steep/equatable.rb +23 -0
- data/lib/steep/expectations.rb +228 -0
- data/lib/steep/index/rbs_index.rb +350 -0
- data/lib/steep/index/signature_symbol_provider.rb +185 -0
- data/lib/steep/index/source_index.rb +167 -0
- data/lib/steep/interface/block.rb +103 -0
- data/lib/steep/interface/builder.rb +843 -0
- data/lib/steep/interface/function.rb +1090 -0
- data/lib/steep/interface/method_type.rb +330 -0
- data/lib/steep/interface/shape.rb +239 -0
- data/lib/steep/interface/substitution.rb +159 -0
- data/lib/steep/interface/type_param.rb +115 -0
- data/lib/steep/located_value.rb +20 -0
- data/lib/steep/method_name.rb +42 -0
- data/lib/steep/module_helper.rb +24 -0
- data/lib/steep/node_helper.rb +273 -0
- data/lib/steep/path_helper.rb +30 -0
- data/lib/steep/project/dsl.rb +268 -0
- data/lib/steep/project/group.rb +31 -0
- data/lib/steep/project/options.rb +63 -0
- data/lib/steep/project/pattern.rb +59 -0
- data/lib/steep/project/target.rb +92 -0
- data/lib/steep/project.rb +78 -0
- data/lib/steep/rake_task.rb +132 -0
- data/lib/steep/range_extension.rb +29 -0
- data/lib/steep/server/base_worker.rb +97 -0
- data/lib/steep/server/change_buffer.rb +73 -0
- data/lib/steep/server/custom_methods.rb +77 -0
- data/lib/steep/server/delay_queue.rb +45 -0
- data/lib/steep/server/interaction_worker.rb +492 -0
- data/lib/steep/server/lsp_formatter.rb +455 -0
- data/lib/steep/server/master.rb +922 -0
- data/lib/steep/server/target_group_files.rb +205 -0
- data/lib/steep/server/type_check_controller.rb +366 -0
- data/lib/steep/server/type_check_worker.rb +303 -0
- data/lib/steep/server/work_done_progress.rb +64 -0
- data/lib/steep/server/worker_process.rb +176 -0
- data/lib/steep/services/completion_provider.rb +802 -0
- data/lib/steep/services/content_change.rb +61 -0
- data/lib/steep/services/file_loader.rb +74 -0
- data/lib/steep/services/goto_service.rb +441 -0
- data/lib/steep/services/hover_provider/rbs.rb +88 -0
- data/lib/steep/services/hover_provider/ruby.rb +221 -0
- data/lib/steep/services/hover_provider/singleton_methods.rb +20 -0
- data/lib/steep/services/path_assignment.rb +46 -0
- data/lib/steep/services/signature_help_provider.rb +202 -0
- data/lib/steep/services/signature_service.rb +428 -0
- data/lib/steep/services/stats_calculator.rb +68 -0
- data/lib/steep/services/type_check_service.rb +394 -0
- data/lib/steep/services/type_name_completion.rb +236 -0
- data/lib/steep/signature/validator.rb +651 -0
- data/lib/steep/source/ignore_ranges.rb +69 -0
- data/lib/steep/source.rb +691 -0
- data/lib/steep/subtyping/cache.rb +30 -0
- data/lib/steep/subtyping/check.rb +1113 -0
- data/lib/steep/subtyping/constraints.rb +341 -0
- data/lib/steep/subtyping/relation.rb +101 -0
- data/lib/steep/subtyping/result.rb +324 -0
- data/lib/steep/subtyping/variable_variance.rb +89 -0
- data/lib/steep/test.rb +9 -0
- data/lib/steep/thread_waiter.rb +43 -0
- data/lib/steep/type_construction.rb +5183 -0
- data/lib/steep/type_inference/block_params.rb +416 -0
- data/lib/steep/type_inference/case_when.rb +303 -0
- data/lib/steep/type_inference/constant_env.rb +56 -0
- data/lib/steep/type_inference/context.rb +195 -0
- data/lib/steep/type_inference/logic_type_interpreter.rb +613 -0
- data/lib/steep/type_inference/method_call.rb +193 -0
- data/lib/steep/type_inference/method_params.rb +531 -0
- data/lib/steep/type_inference/multiple_assignment.rb +194 -0
- data/lib/steep/type_inference/send_args.rb +712 -0
- data/lib/steep/type_inference/type_env.rb +341 -0
- data/lib/steep/type_inference/type_env_builder.rb +138 -0
- data/lib/steep/typing.rb +321 -0
- data/lib/steep/version.rb +3 -0
- data/lib/steep.rb +369 -0
- data/manual/annotations.md +181 -0
- data/manual/ignore.md +20 -0
- data/manual/ruby-diagnostics.md +1879 -0
- data/sample/Steepfile +22 -0
- data/sample/lib/conference.rb +49 -0
- data/sample/lib/length.rb +35 -0
- data/sample/sig/conference.rbs +42 -0
- data/sample/sig/generics.rbs +15 -0
- data/sample/sig/length.rbs +34 -0
- data/steep-relaxed.gemspec +56 -0
- metadata +340 -0
@@ -0,0 +1,181 @@
|
|
1
|
+
# Annotations
|
2
|
+
|
3
|
+
## Core Annotations
|
4
|
+
|
5
|
+
### Variable type
|
6
|
+
|
7
|
+
Variable type annotation tells type of local variable.
|
8
|
+
|
9
|
+
#### Example
|
10
|
+
|
11
|
+
```
|
12
|
+
# @type var x: String
|
13
|
+
# @type var klass: Class
|
14
|
+
```
|
15
|
+
|
16
|
+
#### Syntax
|
17
|
+
|
18
|
+
* `@type` `var` *x* `:` *type*
|
19
|
+
|
20
|
+
### Self type
|
21
|
+
|
22
|
+
Self type annotation tells type of `self`.
|
23
|
+
|
24
|
+
#### Example
|
25
|
+
|
26
|
+
```
|
27
|
+
# @type self: Object
|
28
|
+
```
|
29
|
+
|
30
|
+
#### Syntax
|
31
|
+
|
32
|
+
* `@type` `self` `:` *type*
|
33
|
+
|
34
|
+
### Instance variable type
|
35
|
+
|
36
|
+
Instance variable type annotation tells type of instance variable.
|
37
|
+
This annotation applies to instance variable of current context.
|
38
|
+
If it's written in `module` declaration, it applies to instance variable of the module, not its instance.
|
39
|
+
|
40
|
+
#### Example
|
41
|
+
|
42
|
+
```
|
43
|
+
# @type ivar @owner: Person
|
44
|
+
```
|
45
|
+
|
46
|
+
#### Syntax
|
47
|
+
|
48
|
+
* `@type` `ivar` *ivar* `:` *type*
|
49
|
+
|
50
|
+
### Global variable type
|
51
|
+
|
52
|
+
Global variable type annotation tells type of global variable.
|
53
|
+
|
54
|
+
#### Example
|
55
|
+
|
56
|
+
```
|
57
|
+
# @type gvar $LOAD_PATH: Array<String>
|
58
|
+
```
|
59
|
+
|
60
|
+
#### Syntax
|
61
|
+
|
62
|
+
* `@type` `gvar` *gvar* `:` *type*
|
63
|
+
|
64
|
+
### Constant type
|
65
|
+
|
66
|
+
Constant type annotation tells type of constant.
|
67
|
+
Note that constant resolution is done syntactically.
|
68
|
+
Annotation on `File::Append` does not apply to `::File::Append`.
|
69
|
+
|
70
|
+
#### Example
|
71
|
+
|
72
|
+
```
|
73
|
+
# @type const File::Append : Integer
|
74
|
+
```
|
75
|
+
|
76
|
+
#### Syntax
|
77
|
+
|
78
|
+
* `@type` `const` *const* `:` *type*
|
79
|
+
|
80
|
+
### Method type annotation
|
81
|
+
|
82
|
+
Method type annotation tells type of method being implemented in current scope.
|
83
|
+
|
84
|
+
This annotation is used to tell types of method parameters and its body.
|
85
|
+
Union method type cannot be written.
|
86
|
+
|
87
|
+
#### Example
|
88
|
+
|
89
|
+
```
|
90
|
+
# @type method foo: (String) -> any
|
91
|
+
```
|
92
|
+
|
93
|
+
#### Syntax
|
94
|
+
|
95
|
+
* `@type` `method` *method* `:` *single method type*
|
96
|
+
|
97
|
+
## Module Annotations
|
98
|
+
|
99
|
+
Module annotations is about defining modules and classes in Ruby.
|
100
|
+
This kind of annotations should be written in module context.
|
101
|
+
|
102
|
+
### Instance type annotation
|
103
|
+
|
104
|
+
Instance type annotation tells type of instance of class or module which is being defined.
|
105
|
+
|
106
|
+
#### Example
|
107
|
+
|
108
|
+
```
|
109
|
+
# @type instance: Foo
|
110
|
+
```
|
111
|
+
|
112
|
+
#### Syntax
|
113
|
+
|
114
|
+
* `@type` `instance` `:` *type*
|
115
|
+
|
116
|
+
### Module type annotation
|
117
|
+
|
118
|
+
Module type annotation tells type of module of class or module which is being defined.
|
119
|
+
|
120
|
+
#### Example
|
121
|
+
|
122
|
+
```
|
123
|
+
# @type module: Foo.class
|
124
|
+
```
|
125
|
+
|
126
|
+
#### Syntax
|
127
|
+
|
128
|
+
* `@type` `module` `:` *type*
|
129
|
+
|
130
|
+
### Instance/module ivar type annotation
|
131
|
+
|
132
|
+
This annotation tells instance variable of instance.
|
133
|
+
|
134
|
+
#### Example
|
135
|
+
|
136
|
+
```
|
137
|
+
# @type instance ivar @x: String
|
138
|
+
# @type module ivar @klass: String.class
|
139
|
+
```
|
140
|
+
|
141
|
+
#### Syntax
|
142
|
+
|
143
|
+
* `@type` `instance` `ivar` *ivar* `:` *type*
|
144
|
+
* `@type` `module` `ivar` *ivar* `:` *type*
|
145
|
+
|
146
|
+
## Type assertion
|
147
|
+
|
148
|
+
Type assertion allows declaring type of an expression inline, without introducing new local variable with variable type annotation.
|
149
|
+
|
150
|
+
### Example
|
151
|
+
|
152
|
+
```
|
153
|
+
array = [] #: Array[String]
|
154
|
+
|
155
|
+
path = nil #: Pathname?
|
156
|
+
```
|
157
|
+
|
158
|
+
##### Syntax
|
159
|
+
|
160
|
+
* `#:` *type*
|
161
|
+
|
162
|
+
## Type application
|
163
|
+
|
164
|
+
Type application is for generic method calls.
|
165
|
+
|
166
|
+
### Example
|
167
|
+
|
168
|
+
```
|
169
|
+
table = accounts.each_with_object({}) do |account, table| #$ Hash[String, Account]
|
170
|
+
table[account.email] = account
|
171
|
+
end
|
172
|
+
```
|
173
|
+
|
174
|
+
The `each_with_object` method has `[T] (T) { (Account, T) -> void } -> T`,
|
175
|
+
and the type application syntax directly specifies the type of `T`.
|
176
|
+
|
177
|
+
So the resulting type is `(Hash[String, Account]) { (Account, Hash[String, Account]) -> void } -> Hash[String, Account]`.
|
178
|
+
|
179
|
+
#### Syntax
|
180
|
+
|
181
|
+
* `#$` *type*
|
data/manual/ignore.md
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# Ignore diagnostics
|
2
|
+
|
3
|
+
Steep allows you to ignore diagnostics by adding comments to your code.
|
4
|
+
|
5
|
+
```ruby
|
6
|
+
# Ignoring a range of lines
|
7
|
+
|
8
|
+
# steep:ignore:start
|
9
|
+
|
10
|
+
foo() # NoMethod is detected, but ignored
|
11
|
+
|
12
|
+
# steep:ignore:end
|
13
|
+
```
|
14
|
+
|
15
|
+
```ruby
|
16
|
+
# Ignoring a specific line
|
17
|
+
|
18
|
+
foo() # steep:ignore
|
19
|
+
foo() # steep:ignore NoMethod
|
20
|
+
```
|