steep 1.6.0 → 1.7.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +0 -1
- data/CHANGELOG.md +49 -0
- data/README.md +18 -0
- data/Rakefile +5 -0
- data/bin/output_test.rb +1 -0
- data/doc/narrowing.md +195 -0
- data/doc/shape.md +194 -0
- data/guides/src/gem-rbs-collection/gem-rbs-collection.md +7 -24
- data/guides/src/getting-started/getting-started.md +10 -11
- data/lib/steep/ast/ignore.rb +148 -0
- data/lib/steep/ast/types/factory.rb +27 -18
- data/lib/steep/ast/types/helper.rb +4 -0
- data/lib/steep/ast/types/intersection.rb +7 -0
- data/lib/steep/ast/types/proc.rb +14 -9
- data/lib/steep/ast/types/record.rb +7 -0
- data/lib/steep/ast/types/tuple.rb +7 -0
- data/lib/steep/ast/types/union.rb +7 -0
- data/lib/steep/cli.rb +6 -1
- data/lib/steep/diagnostic/ruby.rb +16 -0
- data/lib/steep/drivers/stats.rb +2 -2
- data/lib/steep/drivers/utils/driver_helper.rb +22 -11
- data/lib/steep/drivers/validate.rb +4 -2
- data/lib/steep/expectations.rb +2 -2
- data/lib/steep/interface/block.rb +1 -1
- data/lib/steep/interface/builder.rb +342 -358
- data/lib/steep/interface/function.rb +82 -11
- data/lib/steep/interface/method_type.rb +18 -10
- data/lib/steep/interface/shape.rb +69 -18
- data/lib/steep/interface/substitution.rb +4 -0
- data/lib/steep/node_helper.rb +30 -1
- data/lib/steep/project/dsl.rb +18 -21
- data/lib/steep/project/options.rb +39 -2
- data/lib/steep/project/pattern.rb +1 -2
- data/lib/steep/project.rb +11 -7
- data/lib/steep/rake_task.rb +132 -0
- data/lib/steep/server/change_buffer.rb +2 -2
- data/lib/steep/server/interaction_worker.rb +67 -11
- data/lib/steep/server/lsp_formatter.rb +2 -0
- data/lib/steep/server/worker_process.rb +3 -1
- data/lib/steep/services/completion_provider.rb +59 -26
- data/lib/steep/services/file_loader.rb +15 -19
- data/lib/steep/services/signature_help_provider.rb +37 -35
- data/lib/steep/services/type_check_service.rb +36 -8
- data/lib/steep/signature/validator.rb +185 -133
- data/lib/steep/source/ignore_ranges.rb +69 -0
- data/lib/steep/source.rb +10 -4
- data/lib/steep/subtyping/check.rb +50 -43
- data/lib/steep/subtyping/result.rb +6 -0
- data/lib/steep/subtyping/variable_variance.rb +3 -3
- data/lib/steep/test.rb +9 -0
- data/lib/steep/type_construction.rb +205 -309
- data/lib/steep/type_inference/block_params.rb +12 -4
- data/lib/steep/type_inference/case_when.rb +301 -0
- data/lib/steep/type_inference/context.rb +1 -1
- data/lib/steep/type_inference/logic_type_interpreter.rb +3 -2
- 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/lib/steep.rb +25 -8
- data/steep.gemspec +5 -2
- metadata +12 -396
- data/.github/dependabot.yml +0 -22
- data/.github/workflows/ruby-windows.yml +0 -34
- data/.github/workflows/ruby.yml +0 -33
- 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 -64
- data/rbs_collection.steep.lock.yaml +0 -106
- 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 -59
- data/sig/shims/string.rbs +0 -4
- data/sig/shims/tagged_logging.rbs +0 -6
- 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/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 -22
- data/sig/steep/ast/types/instance.rbs +0 -33
- data/sig/steep/ast/types/intersection.rbs +0 -38
- 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 -80
- 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 -37
- 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 -35
- data/sig/steep/ast/types/union.rbs +0 -38
- 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 -695
- 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 -166
- data/sig/steep/interface/function.rbs +0 -265
- data/sig/steep/interface/method_type.rbs +0 -105
- data/sig/steep/interface/shape.rbs +0 -61
- data/sig/steep/interface/substitution.rbs +0 -49
- 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 -78
- data/sig/steep/path_helper.rbs +0 -15
- data/sig/steep/project/dsl.rbs +0 -104
- data/sig/steep/project/options.rbs +0 -27
- 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 -36
- data/sig/steep/server/delay_queue.rbs +0 -37
- data/sig/steep/server/interaction_worker.rbs +0 -80
- 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 -251
- 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 -49
- 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 -107
- data/sig/steep/services/type_name_completion.rbs +0 -135
- data/sig/steep/signature/validator.rbs +0 -85
- data/sig/steep/source.rbs +0 -102
- data/sig/steep/subtyping/cache.rbs +0 -17
- data/sig/steep/subtyping/check.rbs +0 -129
- data/sig/steep/subtyping/constraints.rbs +0 -111
- data/sig/steep/subtyping/relation.rbs +0 -63
- data/sig/steep/subtyping/result.rbs +0 -175
- data/sig/steep/subtyping/variable_variance.rbs +0 -25
- data/sig/steep/thread_waiter.rbs +0 -13
- data/sig/steep/type_construction.rbs +0 -567
- data/sig/steep/type_inference/block_params.rbs +0 -170
- data/sig/steep/type_inference/constant_env.rbs +0 -29
- data/sig/steep/type_inference/context.rbs +0 -214
- 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 -36
- data/smoke/alias/Steepfile +0 -6
- data/smoke/alias/a.rb +0 -16
- data/smoke/alias/a.rbs +0 -10
- data/smoke/alias/b.rb +0 -6
- data/smoke/alias/c.rb +0 -8
- data/smoke/alias/test_expectations.yml +0 -96
- data/smoke/and/Steepfile +0 -6
- data/smoke/and/a.rb +0 -8
- data/smoke/and/test_expectations.yml +0 -29
- data/smoke/array/Steepfile +0 -6
- data/smoke/array/a.rb +0 -18
- data/smoke/array/b.rb +0 -12
- data/smoke/array/c.rb +0 -6
- data/smoke/array/test_expectations.yml +0 -103
- data/smoke/block/Steepfile +0 -6
- data/smoke/block/a.rb +0 -10
- data/smoke/block/a.rbs +0 -6
- data/smoke/block/b.rb +0 -13
- data/smoke/block/c.rb +0 -9
- data/smoke/block/c.rbs +0 -3
- data/smoke/block/d.rb +0 -11
- data/smoke/block/e.rb +0 -12
- data/smoke/block/e.rbs +0 -4
- data/smoke/block/test_expectations.yml +0 -133
- data/smoke/case/Steepfile +0 -6
- data/smoke/case/a.rb +0 -18
- data/smoke/case/test_expectations.yml +0 -47
- data/smoke/class/Steepfile +0 -6
- data/smoke/class/a.rb +0 -25
- data/smoke/class/a.rbs +0 -23
- data/smoke/class/b.rb +0 -5
- data/smoke/class/c.rb +0 -9
- data/smoke/class/f.rb +0 -10
- data/smoke/class/g.rb +0 -6
- data/smoke/class/h.rb +0 -19
- data/smoke/class/h.rbs +0 -6
- data/smoke/class/i.rb +0 -14
- data/smoke/class/i.rbs +0 -9
- data/smoke/class/test_expectations.yml +0 -117
- data/smoke/compact/Steepfile +0 -6
- data/smoke/compact/a.rb +0 -2
- data/smoke/compact/a.rbs +0 -5
- data/smoke/compact/b.rb +0 -2
- data/smoke/compact/test_expectations.yml +0 -18
- data/smoke/const/Steepfile +0 -6
- data/smoke/const/a.rb +0 -27
- data/smoke/const/b.rb +0 -7
- data/smoke/const/b.rbs +0 -5
- data/smoke/const/test_expectations.yml +0 -134
- data/smoke/diagnostics/Steepfile +0 -6
- data/smoke/diagnostics/a.rbs +0 -22
- data/smoke/diagnostics/argument_type_mismatch.rb +0 -1
- data/smoke/diagnostics/block_body_type_mismatch.rb +0 -1
- data/smoke/diagnostics/block_type_mismatch.rb +0 -3
- data/smoke/diagnostics/break_type_mismatch.rb +0 -1
- data/smoke/diagnostics/different_method_parameter_kind.rb +0 -9
- data/smoke/diagnostics/else_on_exhaustive_case.rb +0 -12
- data/smoke/diagnostics/incompatible_annotation.rb +0 -6
- data/smoke/diagnostics/incompatible_argument.rb +0 -1
- data/smoke/diagnostics/incompatible_assignment.rb +0 -8
- data/smoke/diagnostics/method_arity_mismatch.rb +0 -11
- data/smoke/diagnostics/method_body_type_mismatch.rb +0 -6
- data/smoke/diagnostics/method_definition_missing.rb +0 -2
- data/smoke/diagnostics/method_parameter_mismatch.rb +0 -10
- data/smoke/diagnostics/method_return_type_annotation_mismatch.rb +0 -7
- data/smoke/diagnostics/missing_keyword.rb +0 -1
- data/smoke/diagnostics/no_method.rb +0 -1
- data/smoke/diagnostics/proc_type_expected.rb +0 -3
- data/smoke/diagnostics/required_block_missing.rb +0 -1
- data/smoke/diagnostics/return_type_mismatch.rb +0 -6
- data/smoke/diagnostics/test_expectations.yml +0 -591
- data/smoke/diagnostics/unexpected_block_given.rb +0 -1
- data/smoke/diagnostics/unexpected_dynamic_method.rb +0 -3
- data/smoke/diagnostics/unexpected_jump.rb +0 -4
- data/smoke/diagnostics/unexpected_jump_value.rb +0 -3
- data/smoke/diagnostics/unexpected_keyword.rb +0 -1
- data/smoke/diagnostics/unexpected_splat.rb +0 -1
- data/smoke/diagnostics/unexpected_yield.rb +0 -6
- data/smoke/diagnostics/unknown_constant_assigned.rb +0 -7
- data/smoke/diagnostics/unresolved_overloading.rb +0 -1
- data/smoke/diagnostics/unsupported_syntax.rb +0 -2
- data/smoke/diagnostics-rbs/Steepfile +0 -8
- data/smoke/diagnostics-rbs/duplicated-method-definition.rbs +0 -20
- data/smoke/diagnostics-rbs/generic-parameter-mismatch.rbs +0 -7
- data/smoke/diagnostics-rbs/inherit-module.rbs +0 -2
- data/smoke/diagnostics-rbs/invalid-method-overload.rbs +0 -3
- data/smoke/diagnostics-rbs/invalid-type-application.rbs +0 -7
- data/smoke/diagnostics-rbs/invalid_variance_annotation.rbs +0 -3
- data/smoke/diagnostics-rbs/mixin-class-error.rbs +0 -6
- data/smoke/diagnostics-rbs/nonregular-type-alias.rbs +0 -3
- data/smoke/diagnostics-rbs/recursive-alias.rbs +0 -5
- data/smoke/diagnostics-rbs/recursive-class.rbs +0 -8
- data/smoke/diagnostics-rbs/recursive-type-alias.rbs +0 -3
- data/smoke/diagnostics-rbs/superclass-mismatch.rbs +0 -7
- data/smoke/diagnostics-rbs/test_expectations.yml +0 -300
- data/smoke/diagnostics-rbs/unknown-method-alias.rbs +0 -3
- data/smoke/diagnostics-rbs/unknown-type-name-2.rbs +0 -5
- data/smoke/diagnostics-rbs/unknown-type-name.rbs +0 -13
- data/smoke/diagnostics-rbs-duplicated/Steepfile +0 -6
- data/smoke/diagnostics-rbs-duplicated/a.rbs +0 -5
- data/smoke/diagnostics-rbs-duplicated/test_expectations.yml +0 -13
- data/smoke/diagnostics-ruby-unsat/Steepfile +0 -6
- data/smoke/diagnostics-ruby-unsat/a.rbs +0 -3
- data/smoke/diagnostics-ruby-unsat/test_expectations.yml +0 -27
- data/smoke/diagnostics-ruby-unsat/unsatisfiable_constraint.rb +0 -6
- data/smoke/dstr/Steepfile +0 -6
- data/smoke/dstr/a.rb +0 -5
- data/smoke/dstr/test_expectations.yml +0 -13
- data/smoke/ensure/Steepfile +0 -6
- data/smoke/ensure/a.rb +0 -18
- data/smoke/ensure/test_expectations.yml +0 -62
- data/smoke/enumerator/Steepfile +0 -6
- data/smoke/enumerator/a.rb +0 -6
- data/smoke/enumerator/b.rb +0 -17
- data/smoke/enumerator/test_expectations.yml +0 -47
- data/smoke/extension/Steepfile +0 -6
- data/smoke/extension/a.rb +0 -10
- data/smoke/extension/a.rbs +0 -13
- data/smoke/extension/b.rb +0 -10
- data/smoke/extension/c.rb +0 -9
- data/smoke/extension/d.rb +0 -2
- data/smoke/extension/e.rb +0 -2
- data/smoke/extension/e.rbs +0 -7
- data/smoke/extension/f.rb +0 -2
- data/smoke/extension/f.rbs +0 -3
- data/smoke/extension/test_expectations.yml +0 -73
- data/smoke/hash/Steepfile +0 -6
- data/smoke/hash/a.rb +0 -17
- data/smoke/hash/a.rbs +0 -8
- data/smoke/hash/b.rb +0 -6
- data/smoke/hash/c.rb +0 -15
- data/smoke/hash/d.rb +0 -5
- data/smoke/hash/e.rb +0 -1
- data/smoke/hash/e.rbs +0 -3
- data/smoke/hash/f.rb +0 -11
- data/smoke/hash/test_expectations.yml +0 -81
- data/smoke/hello/Steepfile +0 -6
- data/smoke/hello/hello.rb +0 -11
- data/smoke/hello/hello.rbs +0 -7
- data/smoke/hello/test_expectations.yml +0 -25
- data/smoke/if/Steepfile +0 -6
- data/smoke/if/a.rb +0 -20
- data/smoke/if/test_expectations.yml +0 -34
- data/smoke/implements/Steepfile +0 -6
- data/smoke/implements/a.rb +0 -12
- data/smoke/implements/a.rbs +0 -6
- data/smoke/implements/b.rb +0 -13
- data/smoke/implements/b.rbs +0 -12
- data/smoke/implements/test_expectations.yml +0 -23
- data/smoke/initialize/Steepfile +0 -6
- data/smoke/initialize/a.rb +0 -12
- data/smoke/initialize/a.rbs +0 -3
- data/smoke/initialize/test_expectations.yml +0 -1
- data/smoke/integer/Steepfile +0 -6
- data/smoke/integer/a.rb +0 -26
- data/smoke/integer/test_expectations.yml +0 -110
- data/smoke/interface/Steepfile +0 -6
- data/smoke/interface/a.rb +0 -12
- data/smoke/interface/a.rbs +0 -12
- data/smoke/interface/test_expectations.yml +0 -23
- data/smoke/kwbegin/Steepfile +0 -6
- data/smoke/kwbegin/a.rb +0 -7
- data/smoke/kwbegin/test_expectations.yml +0 -17
- data/smoke/lambda/Steepfile +0 -6
- data/smoke/lambda/a.rb +0 -10
- data/smoke/lambda/test_expectations.yml +0 -17
- data/smoke/literal/Steepfile +0 -6
- data/smoke/literal/a.rb +0 -11
- data/smoke/literal/b.rb +0 -7
- data/smoke/literal/literal_methods.rbs +0 -4
- data/smoke/literal/test_expectations.yml +0 -106
- data/smoke/map/Steepfile +0 -6
- data/smoke/map/a.rb +0 -5
- data/smoke/map/test_expectations.yml +0 -1
- data/smoke/method/Steepfile +0 -6
- data/smoke/method/a.rb +0 -21
- data/smoke/method/a.rbs +0 -4
- data/smoke/method/b.rb +0 -25
- data/smoke/method/c.rb +0 -5
- data/smoke/method/d.rb +0 -1
- data/smoke/method/d.rbs +0 -3
- data/smoke/method/test_expectations.yml +0 -121
- data/smoke/module/Steepfile +0 -6
- data/smoke/module/a.rb +0 -19
- data/smoke/module/a.rbs +0 -16
- data/smoke/module/b.rb +0 -6
- data/smoke/module/c.rb +0 -22
- data/smoke/module/d.rb +0 -4
- data/smoke/module/e.rb +0 -13
- data/smoke/module/f.rb +0 -11
- data/smoke/module/test_expectations.yml +0 -75
- data/smoke/regexp/Steepfile +0 -6
- data/smoke/regexp/a.rb +0 -109
- data/smoke/regexp/b.rb +0 -79
- data/smoke/regexp/test_expectations.yml +0 -615
- data/smoke/regression/Steepfile +0 -6
- data/smoke/regression/array.rb +0 -7
- data/smoke/regression/block_param_split.rb +0 -7
- data/smoke/regression/block_param_split.rbs +0 -3
- data/smoke/regression/empty_yield.rb +0 -5
- data/smoke/regression/empty_yield.rbs +0 -3
- data/smoke/regression/enumerator_product.rb +0 -1
- data/smoke/regression/fun.rb +0 -8
- data/smoke/regression/fun.rbs +0 -4
- data/smoke/regression/hash.rb +0 -7
- data/smoke/regression/hello world.rb +0 -1
- data/smoke/regression/issue_328.rb +0 -1
- data/smoke/regression/issue_328.rbs +0 -0
- data/smoke/regression/issue_332.rb +0 -11
- data/smoke/regression/issue_332.rbs +0 -19
- data/smoke/regression/issue_372.rb +0 -8
- data/smoke/regression/issue_372.rbs +0 -4
- data/smoke/regression/lambda.rb +0 -3
- data/smoke/regression/masgn.rb +0 -4
- data/smoke/regression/poly_new.rb +0 -2
- data/smoke/regression/poly_new.rbs +0 -4
- data/smoke/regression/range.rb +0 -5
- data/smoke/regression/set_divide.rb +0 -12
- data/smoke/regression/test_expectations.yml +0 -120
- data/smoke/regression/thread.rb +0 -7
- data/smoke/rescue/Steepfile +0 -6
- data/smoke/rescue/a.rb +0 -48
- data/smoke/rescue/test_expectations.yml +0 -79
- data/smoke/self/Steepfile +0 -6
- data/smoke/self/a.rb +0 -21
- data/smoke/self/a.rbs +0 -4
- data/smoke/self/test_expectations.yml +0 -23
- data/smoke/skip/Steepfile +0 -6
- data/smoke/skip/skip.rb +0 -13
- data/smoke/skip/test_expectations.yml +0 -23
- data/smoke/stdout/Steepfile +0 -6
- data/smoke/stdout/a.rb +0 -8
- data/smoke/stdout/a.rbs +0 -7
- data/smoke/stdout/test_expectations.yml +0 -1
- data/smoke/super/Steepfile +0 -6
- data/smoke/super/a.rb +0 -30
- data/smoke/super/a.rbs +0 -10
- data/smoke/super/test_expectations.yml +0 -69
- data/smoke/toplevel/Steepfile +0 -6
- data/smoke/toplevel/a.rb +0 -3
- data/smoke/toplevel/a.rbs +0 -3
- data/smoke/toplevel/test_expectations.yml +0 -15
- data/smoke/tsort/Steepfile +0 -7
- data/smoke/tsort/a.rb +0 -12
- data/smoke/tsort/test_expectations.yml +0 -1
- data/smoke/type_case/Steepfile +0 -6
- data/smoke/type_case/a.rb +0 -24
- data/smoke/type_case/test_expectations.yml +0 -58
- data/smoke/unexpected/Steepfile +0 -6
- data/smoke/unexpected/test_expectations.yml +0 -13
- data/smoke/unexpected/unexpected.rbs +0 -3
- data/smoke/yield/Steepfile +0 -6
- data/smoke/yield/a.rb +0 -15
- data/smoke/yield/b.rb +0 -6
- data/smoke/yield/test_expectations.yml +0 -88
@@ -163,71 +163,93 @@ module Steep
|
|
163
163
|
|
164
164
|
case
|
165
165
|
when x.is_a?(Required) && y.is_a?(Required)
|
166
|
+
xs or raise
|
167
|
+
ys or raise
|
166
168
|
required(
|
167
169
|
union(x.type, y.type),
|
168
170
|
merge_for_overload(xs.tail, ys.tail)
|
169
171
|
)
|
170
172
|
when x.is_a?(Required) && y.is_a?(Optional)
|
173
|
+
xs or raise
|
174
|
+
ys or raise
|
171
175
|
optional(
|
172
176
|
union(x.type, y.type, null: true),
|
173
177
|
merge_for_overload(xs.tail, ys.tail)
|
174
178
|
)
|
175
179
|
when x.is_a?(Required) && y.is_a?(Rest)
|
180
|
+
xs or raise
|
181
|
+
ys or raise
|
176
182
|
optional(
|
177
183
|
union(x.type, y.type, null: true),
|
178
184
|
merge_for_overload(xs.tail, ys)
|
179
185
|
)
|
180
186
|
when x.is_a?(Required) && !y
|
187
|
+
xs or raise
|
181
188
|
optional(
|
182
189
|
union(x.type, null: true),
|
183
190
|
merge_for_overload(xs.tail, nil)
|
184
191
|
)
|
185
192
|
when x.is_a?(Optional) && y.is_a?(Required)
|
193
|
+
xs or raise
|
194
|
+
ys or raise
|
186
195
|
optional(
|
187
196
|
union(x.type, y.type, null: true),
|
188
197
|
merge_for_overload(xs.tail, ys.tail)
|
189
198
|
)
|
190
199
|
when x.is_a?(Optional) && y.is_a?(Optional)
|
200
|
+
xs or raise
|
201
|
+
ys or raise
|
191
202
|
optional(
|
192
203
|
union(x.type, y.type),
|
193
204
|
merge_for_overload(xs.tail, ys.tail)
|
194
205
|
)
|
195
206
|
when x.is_a?(Optional) && y.is_a?(Rest)
|
207
|
+
xs or raise
|
208
|
+
ys or raise
|
196
209
|
optional(
|
197
210
|
union(x.type, y.type),
|
198
211
|
merge_for_overload(xs.tail, ys)
|
199
212
|
)
|
200
213
|
when x.is_a?(Optional) && !y
|
214
|
+
xs or raise
|
201
215
|
optional(
|
202
216
|
x.type,
|
203
217
|
merge_for_overload(xs.tail, nil)
|
204
218
|
) # == xs
|
205
219
|
when x.is_a?(Rest) && y.is_a?(Required)
|
220
|
+
xs or raise
|
221
|
+
ys or raise
|
206
222
|
optional(
|
207
223
|
union(x.type, y.type, null: true),
|
208
224
|
merge_for_overload(xs, ys.tail)
|
209
225
|
)
|
210
226
|
when x.is_a?(Rest) && y.is_a?(Optional)
|
227
|
+
xs or raise
|
228
|
+
ys or raise
|
211
229
|
optional(
|
212
230
|
union(x.type, y.type),
|
213
231
|
merge_for_overload(xs, ys.tail)
|
214
232
|
)
|
215
233
|
when x.is_a?(Rest) && y.is_a?(Rest)
|
234
|
+
xs or raise
|
235
|
+
ys or raise
|
216
236
|
rest(union(x.type, y.type))
|
217
237
|
when x.is_a?(Rest) && !y
|
218
|
-
xs
|
238
|
+
xs or raise
|
219
239
|
when !x && y.is_a?(Required)
|
240
|
+
ys or raise
|
220
241
|
optional(
|
221
242
|
union(y.type, null: true),
|
222
243
|
merge_for_overload(nil, ys.tail)
|
223
244
|
)
|
224
245
|
when !x && y.is_a?(Optional)
|
246
|
+
ys or raise
|
225
247
|
optional(
|
226
248
|
y.type,
|
227
249
|
merge_for_overload(nil, ys.tail)
|
228
250
|
) # == ys
|
229
251
|
when !x && y.is_a?(Rest)
|
230
|
-
ys
|
252
|
+
ys or raise
|
231
253
|
when !x && !y
|
232
254
|
nil
|
233
255
|
end
|
@@ -240,26 +262,34 @@ module Steep
|
|
240
262
|
|
241
263
|
case
|
242
264
|
when x.is_a?(Required) && y.is_a?(Required)
|
265
|
+
xs or raise
|
266
|
+
ys or raise
|
243
267
|
required(
|
244
268
|
union(x.type, y.type),
|
245
269
|
merge_for_union(xs.tail, ys.tail)
|
246
270
|
)
|
247
271
|
when x.is_a?(Required) && !y
|
272
|
+
xs or raise
|
248
273
|
optional(
|
249
274
|
x.type,
|
250
275
|
merge_for_union(xs.tail, nil)
|
251
276
|
)
|
252
277
|
when x.is_a?(Required) && y.is_a?(Optional)
|
278
|
+
xs or raise
|
279
|
+
ys or raise
|
253
280
|
optional(
|
254
281
|
union(x.type, y.type),
|
255
282
|
merge_for_union(xs.tail, ys.tail)
|
256
283
|
)
|
257
284
|
when x.is_a?(Required) && y.is_a?(Rest)
|
285
|
+
xs or raise
|
286
|
+
ys or raise
|
258
287
|
optional(
|
259
288
|
union(x.type, y.type),
|
260
289
|
merge_for_union(xs.tail, ys)
|
261
290
|
)
|
262
291
|
when !x && y.is_a?(Required)
|
292
|
+
ys or raise
|
263
293
|
optional(
|
264
294
|
y.type,
|
265
295
|
merge_for_union(nil, ys.tail)
|
@@ -267,39 +297,53 @@ module Steep
|
|
267
297
|
when !x && !y
|
268
298
|
nil
|
269
299
|
when !x && y.is_a?(Optional)
|
300
|
+
ys or raise
|
270
301
|
PositionalParams.new(head: y, tail: merge_for_union(nil, ys.tail))
|
271
302
|
when !x && y.is_a?(Rest)
|
272
|
-
ys
|
303
|
+
ys or raise
|
273
304
|
when x.is_a?(Optional) && y.is_a?(Required)
|
305
|
+
xs or raise
|
306
|
+
ys or raise
|
274
307
|
optional(
|
275
308
|
union(x.type, y.type),
|
276
309
|
merge_for_union(xs.tail, ys.tail)
|
277
310
|
)
|
278
311
|
when x.is_a?(Optional) && !y
|
312
|
+
xs or raise
|
279
313
|
PositionalParams.new(head: x, tail: merge_for_union(xs.tail, nil)) # == xs
|
280
314
|
when x.is_a?(Optional) && y.is_a?(Optional)
|
315
|
+
xs or raise
|
316
|
+
ys or raise
|
281
317
|
optional(
|
282
318
|
union(x.type, y.type),
|
283
319
|
merge_for_union(xs.tail, ys.tail)
|
284
320
|
)
|
285
321
|
when x.is_a?(Optional) && y.is_a?(Rest)
|
322
|
+
xs or raise
|
323
|
+
ys or raise
|
286
324
|
optional(
|
287
325
|
union(x.type, y.type),
|
288
326
|
merge_for_union(xs.tail, ys.tail)
|
289
327
|
)
|
290
328
|
when x.is_a?(Rest) && y.is_a?(Required)
|
329
|
+
xs or raise
|
330
|
+
ys or raise
|
291
331
|
optional(
|
292
332
|
union(x.type, y.type),
|
293
333
|
merge_for_union(xs, ys.tail)
|
294
334
|
)
|
295
335
|
when x.is_a?(Rest) && !y
|
296
|
-
xs
|
336
|
+
xs or raise
|
297
337
|
when x.is_a?(Rest) && y.is_a?(Optional)
|
338
|
+
xs or raise
|
339
|
+
ys or raise
|
298
340
|
optional(
|
299
341
|
union(x.type, y.type),
|
300
342
|
merge_for_union(xs, ys.tail)
|
301
343
|
)
|
302
344
|
when x.is_a?(Rest) && y.is_a?(Rest)
|
345
|
+
xs or raise
|
346
|
+
ys or raise
|
303
347
|
rest(
|
304
348
|
union(x.type, y.type)
|
305
349
|
)
|
@@ -315,6 +359,8 @@ module Steep
|
|
315
359
|
|
316
360
|
case
|
317
361
|
when x.is_a?(Required) && y.is_a?(Required)
|
362
|
+
xs or raise
|
363
|
+
ys or raise
|
318
364
|
required(
|
319
365
|
intersection(x.type, y.type),
|
320
366
|
merge_for_intersection(xs.tail, ys.tail)
|
@@ -322,11 +368,15 @@ module Steep
|
|
322
368
|
when x.is_a?(Required) && !y
|
323
369
|
raise
|
324
370
|
when x.is_a?(Required) && y.is_a?(Optional)
|
371
|
+
xs or raise
|
372
|
+
ys or raise
|
325
373
|
required(
|
326
374
|
intersection(x.type, y.type),
|
327
375
|
merge_for_intersection(xs.tail, ys.tail)
|
328
376
|
)
|
329
377
|
when x.is_a?(Required) && y.is_a?(Rest)
|
378
|
+
xs or raise
|
379
|
+
ys or raise
|
330
380
|
required(
|
331
381
|
intersection(x.type, y.type),
|
332
382
|
merge_for_intersection(xs.tail, ys)
|
@@ -340,6 +390,8 @@ module Steep
|
|
340
390
|
when !x && y.is_a?(Rest)
|
341
391
|
nil
|
342
392
|
when x.is_a?(Optional) && y.is_a?(Required)
|
393
|
+
xs or raise
|
394
|
+
ys or raise
|
343
395
|
required(
|
344
396
|
intersection(x.type, y.type),
|
345
397
|
merge_for_intersection(xs.tail, ys.tail)
|
@@ -347,16 +399,22 @@ module Steep
|
|
347
399
|
when x.is_a?(Optional) && !y
|
348
400
|
nil
|
349
401
|
when x.is_a?(Optional) && y.is_a?(Optional)
|
402
|
+
xs or raise
|
403
|
+
ys or raise
|
350
404
|
optional(
|
351
405
|
intersection(x.type, y.type),
|
352
406
|
merge_for_intersection(xs.tail, ys.tail)
|
353
407
|
)
|
354
408
|
when x.is_a?(Optional) && y.is_a?(Rest)
|
409
|
+
xs or raise
|
410
|
+
ys or raise
|
355
411
|
optional(
|
356
412
|
intersection(x.type, y.type),
|
357
413
|
merge_for_intersection(xs.tail, ys)
|
358
414
|
)
|
359
415
|
when x.is_a?(Rest) && y.is_a?(Required)
|
416
|
+
xs or raise
|
417
|
+
ys or raise
|
360
418
|
required(
|
361
419
|
intersection(x.type, y.type),
|
362
420
|
merge_for_intersection(xs, ys.tail)
|
@@ -364,6 +422,8 @@ module Steep
|
|
364
422
|
when x.is_a?(Rest) && !y
|
365
423
|
nil
|
366
424
|
when x.is_a?(Rest) && y.is_a?(Optional)
|
425
|
+
xs or raise
|
426
|
+
ys or raise
|
367
427
|
optional(
|
368
428
|
intersection(x.type, y.type),
|
369
429
|
merge_for_intersection(xs, ys.tail)
|
@@ -705,6 +765,8 @@ module Steep
|
|
705
765
|
return param.type
|
706
766
|
end
|
707
767
|
end
|
768
|
+
|
769
|
+
nil
|
708
770
|
end
|
709
771
|
|
710
772
|
attr_reader :positional_params
|
@@ -836,7 +898,7 @@ module Steep
|
|
836
898
|
end
|
837
899
|
|
838
900
|
def closed?
|
839
|
-
each_type.all?
|
901
|
+
each_type.all? { _1.free_variables.empty? }
|
840
902
|
end
|
841
903
|
|
842
904
|
def subst(s)
|
@@ -945,7 +1007,8 @@ module Steep
|
|
945
1007
|
|
946
1008
|
def free_variables
|
947
1009
|
@fvs ||= Set[].tap do |fvs|
|
948
|
-
fvs
|
1010
|
+
# @type var fvs: Set[AST::Types::variable]
|
1011
|
+
fvs.merge(params.free_variables) if params
|
949
1012
|
fvs.merge(return_type.free_variables)
|
950
1013
|
end
|
951
1014
|
end
|
@@ -953,7 +1016,7 @@ module Steep
|
|
953
1016
|
def subst(s)
|
954
1017
|
return self if s.empty?
|
955
1018
|
|
956
|
-
ps = params.subst(s)
|
1019
|
+
ps = params.subst(s) if params
|
957
1020
|
ret = return_type.subst(s)
|
958
1021
|
|
959
1022
|
if ps == params && ret == return_type
|
@@ -969,7 +1032,7 @@ module Steep
|
|
969
1032
|
|
970
1033
|
def each_type(&block)
|
971
1034
|
if block
|
972
|
-
params
|
1035
|
+
params&.each_type(&block)
|
973
1036
|
yield return_type
|
974
1037
|
else
|
975
1038
|
enum_for :each_type
|
@@ -980,7 +1043,7 @@ module Steep
|
|
980
1043
|
|
981
1044
|
def map_type(&block)
|
982
1045
|
Function.new(
|
983
|
-
params: params
|
1046
|
+
params: params&.map_type(&block),
|
984
1047
|
return_type: yield(return_type),
|
985
1048
|
location: location
|
986
1049
|
)
|
@@ -995,11 +1058,19 @@ module Steep
|
|
995
1058
|
end
|
996
1059
|
|
997
1060
|
def to_s
|
998
|
-
|
1061
|
+
if params
|
1062
|
+
"#{params} -> #{return_type}"
|
1063
|
+
else
|
1064
|
+
"(?) -> #{return_type}"
|
1065
|
+
end
|
999
1066
|
end
|
1000
1067
|
|
1001
1068
|
def closed?
|
1002
|
-
params
|
1069
|
+
if params
|
1070
|
+
params.closed? && return_type.free_variables.empty?
|
1071
|
+
else
|
1072
|
+
return_type.free_variables.empty?
|
1073
|
+
end
|
1003
1074
|
end
|
1004
1075
|
end
|
1005
1076
|
end
|
@@ -61,7 +61,7 @@ module Steep
|
|
61
61
|
type.each_type(&block)
|
62
62
|
if block()
|
63
63
|
yield(block().self_type) if block().self_type
|
64
|
-
block().type.params
|
64
|
+
block().type.params&.each_type(&block)
|
65
65
|
yield(block().type.return_type)
|
66
66
|
end
|
67
67
|
else
|
@@ -119,7 +119,7 @@ module Steep
|
|
119
119
|
self.class.new(
|
120
120
|
type_params: type_params,
|
121
121
|
type: Function.new(
|
122
|
-
params: type.params.subst(s1) + other.type.params.subst(s2),
|
122
|
+
params: type.params && other.type.params ? type.params.subst(s1) + other.type.params.subst(s2) : nil,
|
123
123
|
return_type: AST::Types::Union.build(
|
124
124
|
types: [type.return_type.subst(s1), other.type.return_type.subst(s2)]
|
125
125
|
),
|
@@ -192,10 +192,10 @@ module Steep
|
|
192
192
|
type2_ = type2.instantiate(s2)
|
193
193
|
if mt = generate[type1_, type2_]
|
194
194
|
check.push_variable_bounds(params1 + params2) do
|
195
|
-
|
196
|
-
|
195
|
+
variables = type1.type_params.map(&:name) + type2.type_params.map(&:name)
|
196
|
+
constraints = Subtyping::Constraints.new(unknowns: variables)
|
197
197
|
|
198
|
-
|
198
|
+
check.with_context(self_type: AST::Builtin.any_type, instance_type: AST::Builtin.any_type, class_type: AST::Builtin.any_type, constraints: constraints) do
|
199
199
|
result1 = check.check_method_type(:__method_on_type1, relation[type1.with(type_params: []), mt])
|
200
200
|
result2 = check.check_method_type(:__method_on_type2, relation[type2.with(type_params: []), mt])
|
201
201
|
|
@@ -250,10 +250,13 @@ module Steep
|
|
250
250
|
nil
|
251
251
|
end
|
252
252
|
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
253
|
+
if b.type.params && ob.type.params
|
254
|
+
# Return when the two block parameters are imcompatible.
|
255
|
+
return unless b.type.params & ob.type.params
|
256
|
+
block_params = b.type.params | ob.type.params or return
|
257
|
+
else
|
258
|
+
block_params = b.type.params || ob.type.params
|
259
|
+
end
|
257
260
|
|
258
261
|
block_return_type = AST::Types::Intersection.build(types: [b.type.return_type, ob.type.return_type])
|
259
262
|
block_type = Function.new(params: block_params, return_type: block_return_type, location: nil)
|
@@ -285,7 +288,12 @@ module Steep
|
|
285
288
|
def &(other)
|
286
289
|
return self if self == other
|
287
290
|
|
288
|
-
|
291
|
+
if self.type.params && other.type.params
|
292
|
+
params = self.type.params | other.type.params or return
|
293
|
+
else
|
294
|
+
params = self.type.params || other.type.params
|
295
|
+
end
|
296
|
+
|
289
297
|
block =
|
290
298
|
case
|
291
299
|
when (b = self.block) && (ob = other.block)
|
@@ -2,14 +2,43 @@ module Steep
|
|
2
2
|
module Interface
|
3
3
|
class Shape
|
4
4
|
class Entry
|
5
|
-
|
6
|
-
|
7
|
-
def initialize(method_types:)
|
5
|
+
def initialize(method_types: nil, private_method:, &block)
|
8
6
|
@method_types = method_types
|
7
|
+
@generator = block
|
8
|
+
@private_method = private_method
|
9
|
+
end
|
10
|
+
|
11
|
+
def force
|
12
|
+
unless @method_types
|
13
|
+
@method_types = @generator&.call
|
14
|
+
@generator = nil
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def method_types
|
19
|
+
force
|
20
|
+
@method_types or raise
|
21
|
+
end
|
22
|
+
|
23
|
+
def has_method_type?
|
24
|
+
force
|
25
|
+
@method_types ? true : false
|
9
26
|
end
|
10
27
|
|
11
28
|
def to_s
|
12
|
-
|
29
|
+
if @generator
|
30
|
+
"<< Lazy entry >>"
|
31
|
+
else
|
32
|
+
"{ #{method_types.join(" || ")} }"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def private_method?
|
37
|
+
@private_method
|
38
|
+
end
|
39
|
+
|
40
|
+
def public_method?
|
41
|
+
!private_method?
|
13
42
|
end
|
14
43
|
end
|
15
44
|
|
@@ -25,7 +54,11 @@ module Steep
|
|
25
54
|
end
|
26
55
|
|
27
56
|
def key?(name)
|
28
|
-
methods.
|
57
|
+
if entry = methods.fetch(name, nil)
|
58
|
+
entry.has_method_type?
|
59
|
+
else
|
60
|
+
false
|
61
|
+
end
|
29
62
|
end
|
30
63
|
|
31
64
|
def []=(name, entry)
|
@@ -37,10 +70,12 @@ module Steep
|
|
37
70
|
return nil unless key?(name)
|
38
71
|
|
39
72
|
resolved_methods[name] ||= begin
|
73
|
+
entry = methods[name]
|
40
74
|
Entry.new(
|
41
|
-
method_types:
|
75
|
+
method_types: entry.method_types.map do |method_type|
|
42
76
|
method_type.subst(subst)
|
43
|
-
end
|
77
|
+
end,
|
78
|
+
private_method: entry.private_method?
|
44
79
|
)
|
45
80
|
end
|
46
81
|
end
|
@@ -48,7 +83,7 @@ module Steep
|
|
48
83
|
def each(&block)
|
49
84
|
if block
|
50
85
|
methods.each_key do |name|
|
51
|
-
entry = self[name] or
|
86
|
+
entry = self[name] or next
|
52
87
|
yield [name, entry]
|
53
88
|
end
|
54
89
|
else
|
@@ -58,7 +93,9 @@ module Steep
|
|
58
93
|
|
59
94
|
def each_name(&block)
|
60
95
|
if block
|
61
|
-
|
96
|
+
each do |name, _|
|
97
|
+
yield name
|
98
|
+
end
|
62
99
|
else
|
63
100
|
enum_for :each_name
|
64
101
|
end
|
@@ -76,19 +113,21 @@ module Steep
|
|
76
113
|
Methods.new(substs: [*substs, subst], methods: methods)
|
77
114
|
end
|
78
115
|
|
79
|
-
def merge!(other)
|
116
|
+
def merge!(other, &block)
|
80
117
|
other.each do |name, entry|
|
81
|
-
methods[name]
|
118
|
+
if block && (old_entry = methods[name])
|
119
|
+
methods[name] = yield(name, old_entry, entry)
|
120
|
+
else
|
121
|
+
methods[name] = entry
|
122
|
+
end
|
82
123
|
end
|
83
124
|
end
|
84
125
|
|
85
|
-
def
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
methods
|
126
|
+
def public_methods
|
127
|
+
Methods.new(
|
128
|
+
substs: substs,
|
129
|
+
methods: methods.reject {|_, entry| entry.private_method? }
|
130
|
+
)
|
92
131
|
end
|
93
132
|
end
|
94
133
|
|
@@ -127,6 +166,18 @@ module Steep
|
|
127
166
|
def public?
|
128
167
|
!private?
|
129
168
|
end
|
169
|
+
|
170
|
+
def public_shape
|
171
|
+
if public?
|
172
|
+
self
|
173
|
+
else
|
174
|
+
@public_shape ||= Shape.new(
|
175
|
+
type: type,
|
176
|
+
private: false,
|
177
|
+
methods: methods.public_methods
|
178
|
+
)
|
179
|
+
end
|
180
|
+
end
|
130
181
|
end
|
131
182
|
end
|
132
183
|
end
|
@@ -138,6 +138,10 @@ module Steep
|
|
138
138
|
self
|
139
139
|
end
|
140
140
|
|
141
|
+
def update(self_type: self_type(), instance_type: instance_type(), module_type: module_type())
|
142
|
+
Substitution.new(dictionary: dictionary.dup, instance_type: instance_type, self_type: self_type, module_type: module_type)
|
143
|
+
end
|
144
|
+
|
141
145
|
def merge(s)
|
142
146
|
Substitution.new(dictionary: dictionary.dup,
|
143
147
|
instance_type: instance_type,
|
data/lib/steep/node_helper.rb
CHANGED
@@ -207,7 +207,7 @@ module Steep
|
|
207
207
|
end
|
208
208
|
|
209
209
|
def deconstruct_send_node!(node)
|
210
|
-
deconstruct_send_node(node) or raise
|
210
|
+
deconstruct_send_node(node) or raise(node.inspect)
|
211
211
|
end
|
212
212
|
|
213
213
|
def test_send_node(node)
|
@@ -218,6 +218,23 @@ module Steep
|
|
218
218
|
end
|
219
219
|
end
|
220
220
|
|
221
|
+
def private_send?(node)
|
222
|
+
case node.type
|
223
|
+
when :block, :numblock
|
224
|
+
private_send?(node.children[0])
|
225
|
+
when :send, :csend
|
226
|
+
receiver, = deconstruct_send_node!(node)
|
227
|
+
|
228
|
+
if receiver && receiver.type != :self
|
229
|
+
return false
|
230
|
+
end
|
231
|
+
|
232
|
+
true
|
233
|
+
else
|
234
|
+
raise "Unexpected node is given: #{node.inspect}"
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
221
238
|
def deconstruct_sendish_and_block_nodes(*nodes)
|
222
239
|
send_node, block_node = nodes.take(2)
|
223
240
|
|
@@ -240,5 +257,17 @@ module Steep
|
|
240
257
|
end
|
241
258
|
end
|
242
259
|
end
|
260
|
+
|
261
|
+
def clone_node(node)
|
262
|
+
children = node.children.map do |child|
|
263
|
+
if child.is_a?(Parser::AST::Node)
|
264
|
+
clone_node(child)
|
265
|
+
else
|
266
|
+
child.dup
|
267
|
+
end
|
268
|
+
end
|
269
|
+
|
270
|
+
node.updated(nil, children)
|
271
|
+
end
|
243
272
|
end
|
244
273
|
end
|
data/lib/steep/project/dsl.rb
CHANGED
@@ -14,9 +14,7 @@ module Steep
|
|
14
14
|
attr_reader :project
|
15
15
|
attr_reader :collection_config_path
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
def initialize(name, sources: [], libraries: [], signatures: [], ignored_sources: [], repo_paths: [], code_diagnostics_config: {}, project: nil, collection_config_path: NONE)
|
17
|
+
def initialize(name, sources: [], libraries: [], signatures: [], ignored_sources: [], repo_paths: [], code_diagnostics_config: {}, project: nil, collection_config_path: nil)
|
20
18
|
@name = name
|
21
19
|
@sources = sources
|
22
20
|
@libraries = libraries
|
@@ -27,14 +25,7 @@ module Steep
|
|
27
25
|
@repo_paths = []
|
28
26
|
@code_diagnostics_config = code_diagnostics_config
|
29
27
|
@project = project
|
30
|
-
@collection_config_path =
|
31
|
-
case collection_config_path
|
32
|
-
when NONE
|
33
|
-
path = project&.absolute_path(RBS::Collection::Config::PATH)
|
34
|
-
path&.exist? ? path : nil
|
35
|
-
else
|
36
|
-
collection_config_path
|
37
|
-
end
|
28
|
+
@collection_config_path = collection_config_path
|
38
29
|
end
|
39
30
|
|
40
31
|
def initialize_copy(other)
|
@@ -135,8 +126,8 @@ module Steep
|
|
135
126
|
end
|
136
127
|
|
137
128
|
def stdlib_path(core_root:, stdlib_root:)
|
138
|
-
@core_root =
|
139
|
-
@stdlib_root =
|
129
|
+
@core_root = Pathname(core_root)
|
130
|
+
@stdlib_root = Pathname(stdlib_root)
|
140
131
|
end
|
141
132
|
|
142
133
|
def repo_path(*paths)
|
@@ -160,7 +151,7 @@ module Steep
|
|
160
151
|
end
|
161
152
|
|
162
153
|
def disable_collection
|
163
|
-
@collection_config_path =
|
154
|
+
@collection_config_path = false
|
164
155
|
end
|
165
156
|
end
|
166
157
|
|
@@ -206,12 +197,18 @@ module Steep
|
|
206
197
|
source_pattern = Pattern.new(patterns: target.sources, ignores: target.ignored_sources, ext: ".rb")
|
207
198
|
signature_pattern = Pattern.new(patterns: target.signatures, ext: ".rbs")
|
208
199
|
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
200
|
+
config_path =
|
201
|
+
case target.collection_config_path
|
202
|
+
when Pathname
|
203
|
+
target.collection_config_path
|
204
|
+
when nil
|
205
|
+
default = project.absolute_path(RBS::Collection::Config::PATH)
|
206
|
+
if default.file?
|
207
|
+
default
|
208
|
+
end
|
209
|
+
when false
|
210
|
+
nil
|
211
|
+
end
|
215
212
|
|
216
213
|
Project::Target.new(
|
217
214
|
name: target.name,
|
@@ -224,7 +221,7 @@ module Steep
|
|
224
221
|
stdlib_root: target.stdlib_root,
|
225
222
|
repo_paths: target.repo_paths
|
226
223
|
)
|
227
|
-
options.
|
224
|
+
options.collection_config_path = config_path
|
228
225
|
end,
|
229
226
|
code_diagnostics_config: target.code_diagnostics_config
|
230
227
|
).tap do |target|
|