steep 0.16.0 → 0.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. checksums.yaml +4 -4
  2. data/.gitmodules +0 -3
  3. data/CHANGELOG.md +24 -0
  4. data/Rakefile +0 -13
  5. data/bin/setup +0 -2
  6. data/bin/smoke_runner.rb +0 -1
  7. data/exe/steep +0 -1
  8. data/lib/steep.rb +1 -1
  9. data/lib/steep/drivers/check.rb +1 -12
  10. data/lib/steep/drivers/watch.rb +2 -2
  11. data/lib/steep/project/file.rb +1 -1
  12. data/lib/steep/project/hover_content.rb +1 -1
  13. data/lib/steep/project/options.rb +15 -0
  14. data/lib/steep/server/code_worker.rb +4 -4
  15. data/lib/steep/server/signature_worker.rb +4 -4
  16. data/lib/steep/type_construction.rb +13 -19
  17. data/lib/steep/type_inference/constant_env.rb +2 -10
  18. data/lib/steep/type_inference/context.rb +1 -0
  19. data/lib/steep/version.rb +1 -1
  20. data/steep.gemspec +6 -7
  21. metadata +23 -146
  22. data/exe/rbs +0 -3
  23. data/vendor/ruby-signature/.github/workflows/ruby.yml +0 -27
  24. data/vendor/ruby-signature/.gitignore +0 -12
  25. data/vendor/ruby-signature/.rubocop.yml +0 -15
  26. data/vendor/ruby-signature/BSDL +0 -22
  27. data/vendor/ruby-signature/COPYING +0 -56
  28. data/vendor/ruby-signature/Gemfile +0 -6
  29. data/vendor/ruby-signature/README.md +0 -93
  30. data/vendor/ruby-signature/Rakefile +0 -142
  31. data/vendor/ruby-signature/bin/annotate-with-rdoc +0 -157
  32. data/vendor/ruby-signature/bin/console +0 -14
  33. data/vendor/ruby-signature/bin/query-rdoc +0 -103
  34. data/vendor/ruby-signature/bin/setup +0 -10
  35. data/vendor/ruby-signature/bin/sort +0 -89
  36. data/vendor/ruby-signature/bin/test_runner.rb +0 -16
  37. data/vendor/ruby-signature/docs/CONTRIBUTING.md +0 -97
  38. data/vendor/ruby-signature/docs/sigs.md +0 -148
  39. data/vendor/ruby-signature/docs/stdlib.md +0 -152
  40. data/vendor/ruby-signature/docs/syntax.md +0 -528
  41. data/vendor/ruby-signature/exe/rbs +0 -7
  42. data/vendor/ruby-signature/lib/rbs.rb +0 -64
  43. data/vendor/ruby-signature/lib/rbs/ast/annotation.rb +0 -27
  44. data/vendor/ruby-signature/lib/rbs/ast/comment.rb +0 -27
  45. data/vendor/ruby-signature/lib/rbs/ast/declarations.rb +0 -395
  46. data/vendor/ruby-signature/lib/rbs/ast/members.rb +0 -362
  47. data/vendor/ruby-signature/lib/rbs/buffer.rb +0 -50
  48. data/vendor/ruby-signature/lib/rbs/builtin_names.rb +0 -55
  49. data/vendor/ruby-signature/lib/rbs/cli.rb +0 -558
  50. data/vendor/ruby-signature/lib/rbs/constant.rb +0 -26
  51. data/vendor/ruby-signature/lib/rbs/constant_table.rb +0 -150
  52. data/vendor/ruby-signature/lib/rbs/definition.rb +0 -170
  53. data/vendor/ruby-signature/lib/rbs/definition_builder.rb +0 -919
  54. data/vendor/ruby-signature/lib/rbs/environment.rb +0 -281
  55. data/vendor/ruby-signature/lib/rbs/environment_loader.rb +0 -136
  56. data/vendor/ruby-signature/lib/rbs/environment_walker.rb +0 -124
  57. data/vendor/ruby-signature/lib/rbs/errors.rb +0 -187
  58. data/vendor/ruby-signature/lib/rbs/location.rb +0 -102
  59. data/vendor/ruby-signature/lib/rbs/method_type.rb +0 -123
  60. data/vendor/ruby-signature/lib/rbs/namespace.rb +0 -91
  61. data/vendor/ruby-signature/lib/rbs/parser.y +0 -1344
  62. data/vendor/ruby-signature/lib/rbs/prototype/rb.rb +0 -553
  63. data/vendor/ruby-signature/lib/rbs/prototype/rbi.rb +0 -587
  64. data/vendor/ruby-signature/lib/rbs/prototype/runtime.rb +0 -381
  65. data/vendor/ruby-signature/lib/rbs/substitution.rb +0 -46
  66. data/vendor/ruby-signature/lib/rbs/test.rb +0 -26
  67. data/vendor/ruby-signature/lib/rbs/test/errors.rb +0 -61
  68. data/vendor/ruby-signature/lib/rbs/test/hook.rb +0 -294
  69. data/vendor/ruby-signature/lib/rbs/test/setup.rb +0 -58
  70. data/vendor/ruby-signature/lib/rbs/test/spy.rb +0 -325
  71. data/vendor/ruby-signature/lib/rbs/test/test_helper.rb +0 -183
  72. data/vendor/ruby-signature/lib/rbs/test/type_check.rb +0 -254
  73. data/vendor/ruby-signature/lib/rbs/type_name.rb +0 -70
  74. data/vendor/ruby-signature/lib/rbs/types.rb +0 -936
  75. data/vendor/ruby-signature/lib/rbs/variance_calculator.rb +0 -138
  76. data/vendor/ruby-signature/lib/rbs/vendorer.rb +0 -47
  77. data/vendor/ruby-signature/lib/rbs/version.rb +0 -3
  78. data/vendor/ruby-signature/lib/rbs/writer.rb +0 -269
  79. data/vendor/ruby-signature/lib/ruby/signature.rb +0 -7
  80. data/vendor/ruby-signature/rbs.gemspec +0 -46
  81. data/vendor/ruby-signature/stdlib/abbrev/abbrev.rbs +0 -60
  82. data/vendor/ruby-signature/stdlib/base64/base64.rbs +0 -71
  83. data/vendor/ruby-signature/stdlib/benchmark/benchmark.rbs +0 -372
  84. data/vendor/ruby-signature/stdlib/builtin/array.rbs +0 -1997
  85. data/vendor/ruby-signature/stdlib/builtin/basic_object.rbs +0 -280
  86. data/vendor/ruby-signature/stdlib/builtin/binding.rbs +0 -177
  87. data/vendor/ruby-signature/stdlib/builtin/builtin.rbs +0 -45
  88. data/vendor/ruby-signature/stdlib/builtin/class.rbs +0 -145
  89. data/vendor/ruby-signature/stdlib/builtin/comparable.rbs +0 -116
  90. data/vendor/ruby-signature/stdlib/builtin/complex.rbs +0 -400
  91. data/vendor/ruby-signature/stdlib/builtin/constants.rbs +0 -37
  92. data/vendor/ruby-signature/stdlib/builtin/data.rbs +0 -5
  93. data/vendor/ruby-signature/stdlib/builtin/deprecated.rbs +0 -2
  94. data/vendor/ruby-signature/stdlib/builtin/dir.rbs +0 -413
  95. data/vendor/ruby-signature/stdlib/builtin/encoding.rbs +0 -607
  96. data/vendor/ruby-signature/stdlib/builtin/enumerable.rbs +0 -404
  97. data/vendor/ruby-signature/stdlib/builtin/enumerator.rbs +0 -260
  98. data/vendor/ruby-signature/stdlib/builtin/errno.rbs +0 -781
  99. data/vendor/ruby-signature/stdlib/builtin/errors.rbs +0 -582
  100. data/vendor/ruby-signature/stdlib/builtin/exception.rbs +0 -194
  101. data/vendor/ruby-signature/stdlib/builtin/false_class.rbs +0 -40
  102. data/vendor/ruby-signature/stdlib/builtin/fiber.rbs +0 -68
  103. data/vendor/ruby-signature/stdlib/builtin/fiber_error.rbs +0 -12
  104. data/vendor/ruby-signature/stdlib/builtin/file.rbs +0 -1076
  105. data/vendor/ruby-signature/stdlib/builtin/file_test.rbs +0 -59
  106. data/vendor/ruby-signature/stdlib/builtin/float.rbs +0 -696
  107. data/vendor/ruby-signature/stdlib/builtin/gc.rbs +0 -243
  108. data/vendor/ruby-signature/stdlib/builtin/hash.rbs +0 -1029
  109. data/vendor/ruby-signature/stdlib/builtin/integer.rbs +0 -707
  110. data/vendor/ruby-signature/stdlib/builtin/io.rbs +0 -683
  111. data/vendor/ruby-signature/stdlib/builtin/kernel.rbs +0 -576
  112. data/vendor/ruby-signature/stdlib/builtin/marshal.rbs +0 -161
  113. data/vendor/ruby-signature/stdlib/builtin/match_data.rbs +0 -271
  114. data/vendor/ruby-signature/stdlib/builtin/math.rbs +0 -369
  115. data/vendor/ruby-signature/stdlib/builtin/method.rbs +0 -185
  116. data/vendor/ruby-signature/stdlib/builtin/module.rbs +0 -1104
  117. data/vendor/ruby-signature/stdlib/builtin/nil_class.rbs +0 -82
  118. data/vendor/ruby-signature/stdlib/builtin/numeric.rbs +0 -409
  119. data/vendor/ruby-signature/stdlib/builtin/object.rbs +0 -824
  120. data/vendor/ruby-signature/stdlib/builtin/proc.rbs +0 -429
  121. data/vendor/ruby-signature/stdlib/builtin/process.rbs +0 -1227
  122. data/vendor/ruby-signature/stdlib/builtin/random.rbs +0 -267
  123. data/vendor/ruby-signature/stdlib/builtin/range.rbs +0 -226
  124. data/vendor/ruby-signature/stdlib/builtin/rational.rbs +0 -424
  125. data/vendor/ruby-signature/stdlib/builtin/rb_config.rbs +0 -57
  126. data/vendor/ruby-signature/stdlib/builtin/regexp.rbs +0 -1083
  127. data/vendor/ruby-signature/stdlib/builtin/ruby_vm.rbs +0 -14
  128. data/vendor/ruby-signature/stdlib/builtin/signal.rbs +0 -55
  129. data/vendor/ruby-signature/stdlib/builtin/string.rbs +0 -1901
  130. data/vendor/ruby-signature/stdlib/builtin/string_io.rbs +0 -284
  131. data/vendor/ruby-signature/stdlib/builtin/struct.rbs +0 -40
  132. data/vendor/ruby-signature/stdlib/builtin/symbol.rbs +0 -228
  133. data/vendor/ruby-signature/stdlib/builtin/thread.rbs +0 -1108
  134. data/vendor/ruby-signature/stdlib/builtin/thread_group.rbs +0 -23
  135. data/vendor/ruby-signature/stdlib/builtin/time.rbs +0 -1047
  136. data/vendor/ruby-signature/stdlib/builtin/trace_point.rbs +0 -290
  137. data/vendor/ruby-signature/stdlib/builtin/true_class.rbs +0 -46
  138. data/vendor/ruby-signature/stdlib/builtin/unbound_method.rbs +0 -153
  139. data/vendor/ruby-signature/stdlib/builtin/warning.rbs +0 -17
  140. data/vendor/ruby-signature/stdlib/coverage/coverage.rbs +0 -62
  141. data/vendor/ruby-signature/stdlib/csv/csv.rbs +0 -773
  142. data/vendor/ruby-signature/stdlib/erb/erb.rbs +0 -392
  143. data/vendor/ruby-signature/stdlib/find/find.rbs +0 -40
  144. data/vendor/ruby-signature/stdlib/ipaddr/ipaddr.rbs +0 -247
  145. data/vendor/ruby-signature/stdlib/json/json.rbs +0 -335
  146. data/vendor/ruby-signature/stdlib/pathname/pathname.rbs +0 -1093
  147. data/vendor/ruby-signature/stdlib/prime/integer-extension.rbs +0 -23
  148. data/vendor/ruby-signature/stdlib/prime/prime.rbs +0 -188
  149. data/vendor/ruby-signature/stdlib/securerandom/securerandom.rbs +0 -9
  150. data/vendor/ruby-signature/stdlib/set/set.rbs +0 -301
  151. data/vendor/ruby-signature/stdlib/tmpdir/tmpdir.rbs +0 -53
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b4dda8122216dc9af384ceba2c84f7cb1076df5be7060d2aa32dbaff32140ed6
4
- data.tar.gz: d4ce7351acc02b06cd608a10639c00bc8bb1bed8ca81596bb1ed718112392a68
3
+ metadata.gz: a1ad7c49806193ddc567206eff7d74ad184bf6e339f15f5a06b54eac2a44798d
4
+ data.tar.gz: 7738b5ccd9339e7de6643e8d87b8e3eaf7a0f36a42a4667848ea29cc3637d34a
5
5
  SHA512:
6
- metadata.gz: 0bc09bf14d4fbfe8cea15d8f939efd2f9b75672a25fdfbbd19011461001786d15e7d84fadfa37cf67a0303f742c6b2a718855095603119276d1154c4b97cc673
7
- data.tar.gz: 7d3d1d4f8acb18de067228fe38d52a7cb62dbd5049555fa748d96226c6ce1906fc49e034f3e19ae346c215ee89a715e04e0138b985cbedcc89b922499adc0a08
6
+ metadata.gz: 68c6694af012124101dbf7d345fd4cab56582968a58cb462c4336558547089a403604606991585d12c5165b2955002f5905fe6b75788e7bab677cb9b6229f1ec
7
+ data.tar.gz: 25437e503f4630e92b9fa7cdb31701ae809209f8e300812736a6acacdd181882fd380d277dd672334ae88698198c5ea4a2e0d7d83761614d75db86cf49d9d49e
@@ -1,3 +0,0 @@
1
- [submodule "vendor/ruby-signature"]
2
- path = vendor/ruby-signature
3
- url = https://github.com/ruby/rbs.git
@@ -2,6 +2,30 @@
2
2
 
3
3
  ## master
4
4
 
5
+ ## 0.17.1 (2020-06-15)
6
+
7
+ * Allow RBS gem to be 0.4 ([#153](https://github.com/soutaro/steep/pull/153))
8
+
9
+ ## 0.17.0 (2020-06-13)
10
+
11
+ * Fix `steep watch` and `steep langserver` to correctly handle error message filterings based on options ([#152](https://github.com/soutaro/steep/pull/152))
12
+ * Fix typing of collections ([#151](https://github.com/soutaro/steep/pull/151))
13
+
14
+ ## 0.16.3
15
+
16
+ * Fix `steep watch` ([#147](https://github.com/soutaro/steep/pull/147))
17
+ * Stop using pry ([#148](https://github.com/soutaro/steep/pull/148))
18
+
19
+ ## 0.16.2 (2020-05-27)
20
+
21
+ * Update gems ([#144](https://github.com/soutaro/steep/pull/144), [#145](https://github.com/soutaro/steep/pull/145))
22
+
23
+ ## 0.16.1 (2020-05-22)
24
+
25
+ * Fix constant resolution ([#143](https://github.com/soutaro/steep/pull/143))
26
+ * Fix RBS diagnostics line number in LSP ([#142](https://github.com/soutaro/steep/pull/142))
27
+ * Fix crash caused by hover on `def` in LSP ([#140](https://github.com/soutaro/steep/pull/140))
28
+
5
29
  ## 0.16.0 (2020-05-19)
6
30
 
7
31
  * Spawn workers for type check performance ([#137](https://github.com/soutaro/steep/pull/137))
data/Rakefile CHANGED
@@ -8,19 +8,6 @@ Rake::TestTask.new(:test) do |t|
8
8
  end
9
9
 
10
10
  task :default => :test
11
- task :build => :parser
12
- task :test => :parser
13
- task :install => [:reset, :parser]
14
-
15
- task :parser do
16
- Dir.chdir "vendor/ruby-signature" do
17
- sh "bundle exec rake parser"
18
- end
19
- end
20
-
21
- task :reset do
22
- sh "git submodule update -f --init"
23
- end
24
11
 
25
12
  task :smoke do
26
13
  sh "bundle", "exec", "bin/smoke_runner.rb", *Dir.glob("smoke/*")
data/bin/setup CHANGED
@@ -5,5 +5,3 @@ set -vx
5
5
 
6
6
  bundle install
7
7
 
8
- # Do any other automated setup that you need to do here
9
- bundle exec rake reset parser
@@ -2,7 +2,6 @@
2
2
 
3
3
  require "pathname"
4
4
 
5
- $LOAD_PATH << Pathname(__dir__) + '../vendor/ruby-signature/lib'
6
5
  $LOAD_PATH << Pathname(__dir__) + "../lib"
7
6
 
8
7
  require "steep"
data/exe/steep CHANGED
@@ -2,7 +2,6 @@
2
2
 
3
3
  require 'pathname'
4
4
 
5
- $LOAD_PATH << Pathname(__dir__) + "../vendor/ruby-signature/lib"
6
5
  $LOAD_PATH << Pathname(__dir__) + "../lib"
7
6
 
8
7
  require 'steep'
@@ -8,10 +8,10 @@ require "logger"
8
8
  require "active_support/tagged_logging"
9
9
  require "rainbow"
10
10
  require "listen"
11
- require 'pry'
12
11
  require 'language_server-protocol'
13
12
  require "etc"
14
13
  require "open3"
14
+ require "stringio"
15
15
 
16
16
  require "rbs"
17
17
 
@@ -53,18 +53,7 @@ module Steep
53
53
  status.type_check_sources.each do |source_file|
54
54
  case source_file.status
55
55
  when Project::SourceFile::TypeCheckStatus
56
- source_file.errors.reject do |error|
57
- case
58
- when error.is_a?(Errors::FallbackAny)
59
- target.options.allow_fallback_any
60
- when error.is_a?(Errors::MethodDefinitionMissing)
61
- target.options.allow_missing_definitions
62
- when error.is_a?(Errors::NoMethod)
63
- target.options.allow_unknown_method_calls
64
- when error.is_a?(Errors::UnknownConstantAssigned)
65
- target.options.allow_unknown_constant_assignment
66
- end
67
- end.each do |error|
56
+ source_file.errors.select {|error| target.options.error_to_report?(error) }.each do |error|
68
57
  error.print_to stdout
69
58
  end
70
59
  when Project::SourceFile::TypeCheckErrorStatus
@@ -24,7 +24,7 @@ module Steep
24
24
  project = load_config()
25
25
 
26
26
  loader = Project::FileLoader.new(project: project)
27
- loader.load_sources([])
27
+ loader.load_sources(dirs)
28
28
  loader.load_signatures()
29
29
 
30
30
  client_read, server_write = IO.pipe
@@ -36,7 +36,7 @@ module Steep
36
36
  server_reader = LanguageServer::Protocol::Transport::Io::Reader.new(server_read)
37
37
  server_writer = LanguageServer::Protocol::Transport::Io::Writer.new(server_write)
38
38
 
39
- interaction_worker = Server::InteractionWorker.spawn_worker(:interaction, name: "interaction", steepfile: project.steepfile_path)
39
+ interaction_worker = Server::WorkerProcess.spawn_worker(:interaction, name: "interaction", steepfile: project.steepfile_path)
40
40
  signature_worker = Server::WorkerProcess.spawn_worker(:signature, name: "signature", steepfile: project.steepfile_path)
41
41
  code_workers = Server::WorkerProcess.spawn_code_workers(steepfile: project.steepfile_path)
42
42
 
@@ -42,7 +42,7 @@ module Steep
42
42
 
43
43
  def self.type_check(source, subtyping:)
44
44
  annotations = source.annotations(block: source.node, factory: subtyping.factory, current_module: AST::Namespace.root)
45
- const_env = TypeInference::ConstantEnv.new(factory: subtyping.factory, context: nil)
45
+ const_env = TypeInference::ConstantEnv.new(factory: subtyping.factory, context: [AST::Namespace.root])
46
46
  type_env = TypeInference::TypeEnv.build(annotations: annotations,
47
47
  subtyping: subtyping,
48
48
  const_env: const_env,
@@ -110,7 +110,7 @@ module Steep
110
110
  context = status.typing.context_at(line: line, column: column)
111
111
  method_context = context.method_context
112
112
 
113
- if method_context
113
+ if method_context && method_context.method
114
114
  DefinitionContent.new(
115
115
  node: node,
116
116
  method_name: method_context.name,
@@ -37,6 +37,21 @@ module Steep
37
37
  self.allow_unknown_constant_assignment = true
38
38
  self.allow_unknown_method_calls = true
39
39
  end
40
+
41
+ def error_to_report?(error)
42
+ case
43
+ when error.is_a?(Errors::FallbackAny)
44
+ !allow_fallback_any
45
+ when error.is_a?(Errors::MethodDefinitionMissing)
46
+ !allow_missing_definitions
47
+ when error.is_a?(Errors::NoMethod)
48
+ !allow_unknown_method_calls
49
+ when error.is_a?(Errors::UnknownConstantAssigned)
50
+ !allow_unknown_constant_assignment
51
+ else
52
+ true
53
+ end
54
+ end
40
55
  end
41
56
  end
42
57
  end
@@ -47,7 +47,7 @@ module Steep
47
47
 
48
48
  Steep.logger.info "Finished type checking: #{path}@#{target.name}"
49
49
 
50
- diagnostics = source_diagnostics(source)
50
+ diagnostics = source_diagnostics(source, target.options)
51
51
 
52
52
  writer.write(
53
53
  method: :"textDocument/publishDiagnostics",
@@ -58,7 +58,7 @@ module Steep
58
58
  )
59
59
  end
60
60
 
61
- def source_diagnostics(source)
61
+ def source_diagnostics(source, options)
62
62
  case status = source.status
63
63
  when Project::SourceFile::ParseErrorStatus
64
64
  []
@@ -80,11 +80,11 @@ module Steep
80
80
  )
81
81
  ]
82
82
  when Project::SourceFile::TypeCheckStatus
83
- status.typing.errors.map do |error|
83
+ status.typing.errors.select {|error| options.error_to_report?(error) }.map do |error|
84
84
  loc = error.location_to_str
85
85
 
86
86
  LSP::Interface::Diagnostic.new(
87
- message: StringIO.new.tap {|io| error.print_to(io) }.string.gsub(/\A#{loc}: /, "").chomp,
87
+ message: StringIO.new.tap {|io| error.print_to(io) }.string.gsub(/\A#{Regexp.escape(loc)}: /, "").chomp,
88
88
  severity: LSP::Constant::DiagnosticSeverity::ERROR,
89
89
  range: LSP::Interface::Range.new(
90
90
  start: LSP::Interface::Position.new(
@@ -72,11 +72,11 @@ module Steep
72
72
  severity: LSP::Constant::DiagnosticSeverity::ERROR,
73
73
  range: LSP::Interface::Range.new(
74
74
  start: LSP::Interface::Position.new(
75
- line: location.start_line,
75
+ line: location.start_line - 1,
76
76
  character: location.start_column,
77
77
  ),
78
78
  end: LSP::Interface::Position.new(
79
- line: location.end_line,
79
+ line: location.end_line - 1,
80
80
  character: location.end_column
81
81
  )
82
82
  )
@@ -97,11 +97,11 @@ module Steep
97
97
  severity: LSP::Constant::DiagnosticSeverity::ERROR,
98
98
  range: LSP::Interface::Range.new(
99
99
  start: LSP::Interface::Position.new(
100
- line: error.location.start_line,
100
+ line: error.location.start_line - 1,
101
101
  character: error.location.start_column,
102
102
  ),
103
103
  end: LSP::Interface::Position.new(
104
- line: error.location.end_line,
104
+ line: error.location.end_line - 1,
105
105
  character: error.location.end_column
106
106
  )
107
107
  )
@@ -235,6 +235,9 @@ module Steep
235
235
  new_module_name = Names::Module.from_node(node.children.first) or raise "Unexpected module name: #{node.children.first}"
236
236
  new_namespace = nested_namespace_for_module(new_module_name)
237
237
 
238
+ const_context = [new_namespace] + self.module_context.const_env.context
239
+ module_const_env = TypeInference::ConstantEnv.new(factory: checker.factory, context: const_context)
240
+
238
241
  annots = source.annotations(block: node, factory: checker.factory, current_module: new_namespace)
239
242
  module_type = AST::Builtin::Module.instance_type
240
243
 
@@ -292,13 +295,6 @@ module Steep
292
295
  module_type = annots.module_type
293
296
  end
294
297
 
295
- const_context = if new_namespace.empty?
296
- nil
297
- else
298
- Names::Module.new(name: new_namespace.path.last, namespace: new_namespace.parent)
299
- end
300
- module_const_env = TypeInference::ConstantEnv.new(factory: checker.factory, context: const_context)
301
-
302
298
  module_context_ = TypeInference::Context::ModuleContext.new(
303
299
  instance_type: instance_type,
304
300
  module_type: annots.self_type || module_type,
@@ -397,11 +393,7 @@ module Steep
397
393
  module_type = annots.module_type
398
394
  end
399
395
 
400
- const_context = if new_namespace.empty?
401
- nil
402
- else
403
- Names::Module.new(name: new_namespace.path.last, namespace: new_namespace.parent)
404
- end
396
+ const_context = [new_namespace] + self.module_context.const_env.context
405
397
  class_const_env = TypeInference::ConstantEnv.new(factory: checker.factory, context: const_context)
406
398
 
407
399
  module_context = TypeInference::Context::ModuleContext.new(
@@ -1045,10 +1037,10 @@ module Steep
1045
1037
  case child.type
1046
1038
  when :pair
1047
1039
  key, value = child.children
1048
- key_types << synthesize(key).type.yield_self do |type|
1040
+ key_types << synthesize(key, hint: key_hint).type.yield_self do |type|
1049
1041
  select_super_type(type, key_hint)
1050
1042
  end
1051
- value_types << synthesize(value).type.yield_self do |type|
1043
+ value_types << synthesize(value, hint: value_hint).type.yield_self do |type|
1052
1044
  select_super_type(type, value_hint)
1053
1045
  end
1054
1046
  when :kwsplat
@@ -1128,6 +1120,7 @@ module Steep
1128
1120
 
1129
1121
  when :const
1130
1122
  const_name = Names::Module.from_node(node)
1123
+
1131
1124
  if const_name
1132
1125
  type = type_env.get(const: const_name) do
1133
1126
  fallback_to_any node
@@ -1141,7 +1134,8 @@ module Steep
1141
1134
  yield_self do
1142
1135
  const_name = Names::Module.from_node(node)
1143
1136
  if const_name
1144
- value_type = synthesize(node.children.last).type
1137
+ const_type = type_env.get(const: const_name) {}
1138
+ value_type = synthesize(node.children.last, hint: const_type).type
1145
1139
  type = type_env.assign(const: const_name, type: value_type, self_type: self_type) do |error|
1146
1140
  case error
1147
1141
  when Subtyping::Result::Failure
@@ -1262,7 +1256,7 @@ module Steep
1262
1256
  end
1263
1257
  end
1264
1258
  else
1265
- [select_super_type(synthesize(e).type, element_hint)]
1259
+ [select_super_type(synthesize(e, hint: element_hint).type, element_hint)]
1266
1260
  end
1267
1261
  end
1268
1262
  array_type = AST::Builtin::Array.instance_type(AST::Types::Union.build(types: element_types))
@@ -2729,10 +2723,10 @@ module Steep
2729
2723
  end
2730
2724
 
2731
2725
  def nested_namespace_for_module(module_name)
2732
- if module_name.relative? && module_name.namespace.empty?
2733
- current_namespace.append(module_name.name)
2726
+ if module_name.relative?
2727
+ (current_namespace + module_name.namespace).append(module_name.name)
2734
2728
  else
2735
- current_namespace
2729
+ module_name
2736
2730
  end
2737
2731
  end
2738
2732
 
@@ -15,26 +15,18 @@ module Steep
15
15
  @table = RBS::ConstantTable.new(builder: factory.definition_builder)
16
16
  end
17
17
 
18
- def namespace
19
- @namespace ||= if context
20
- context.namespace.append(context.name)
21
- else
22
- AST::Namespace.root
23
- end
24
- end
25
-
26
18
  def lookup(name)
27
19
  cache[name] ||= begin
28
20
  constant = table.resolve_constant_reference(
29
21
  factory.type_name_1(name),
30
- context: factory.namespace_1(namespace)
22
+ context: context.map {|namespace| factory.namespace_1(namespace) }
31
23
  )
32
24
 
33
25
  if constant
34
26
  factory.type(constant.type)
35
27
  end
36
28
  rescue => exn
37
- Steep.logger.error "Looking up a constant failed: name=#{name}, context=#{context}, error=#{exn.inspect}"
29
+ Steep.logger.error "Looking up a constant failed: name=#{name}, context=[#{context.join(", ")}], error=#{exn.inspect}"
38
30
  nil
39
31
  end
40
32
  end
@@ -48,6 +48,7 @@ module Steep
48
48
  attr_reader :defined_module_methods
49
49
  attr_reader :const_env
50
50
  attr_reader :implement_name
51
+ attr_reader :namespaces
51
52
  attr_reader :current_namespace
52
53
  attr_reader :class_name
53
54
  attr_reader :instance_definition
@@ -1,3 +1,3 @@
1
1
  module Steep
2
- VERSION = "0.16.0"
2
+ VERSION = "0.17.1"
3
3
  end
@@ -14,14 +14,13 @@ Gem::Specification.new do |spec|
14
14
  spec.homepage = "https://github.com/soutaro/steep"
15
15
  spec.license = 'MIT'
16
16
 
17
+ spec.metadata["homepage_uri"] = spec.homepage
18
+ spec.metadata["source_code_uri"] = "https://github.com/soutaro/steep"
19
+ spec.metadata["changelog_uri"] = "https://github.com/soutaro/steep/blob/master/CHANGELOG.md"
20
+
17
21
  spec.files = `git ls-files -z`.split("\x0").reject {|f|
18
22
  f.match(%r{^(test|spec|features)/})
19
- } + Dir.chdir("vendor/ruby-signature") {
20
- `git ls-files -z`.split("\x0")
21
- .reject {|f| f.match(%r{^(test|spec|features)/}) }
22
- .map {|f| File.join("vendor/ruby-signature", f) }
23
23
  }
24
- spec.files << "vendor/ruby-signature/lib/rbs/parser.rb"
25
24
 
26
25
  spec.bindir = "exe"
27
26
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
@@ -33,7 +32,7 @@ Gem::Specification.new do |spec|
33
32
  spec.add_development_dependency "rake", "~> 13.0"
34
33
  spec.add_development_dependency "minitest", "~> 5.0"
35
34
  spec.add_development_dependency "racc", "~> 1.4"
36
- spec.add_development_dependency "minitest-reporters", "~> 1.3.6"
35
+ spec.add_development_dependency "minitest-reporters", "~> 1.4.2"
37
36
  spec.add_development_dependency "minitest-hooks", "~> 1.5.0"
38
37
 
39
38
  spec.add_runtime_dependency "parser", "~> 2.7.0"
@@ -41,6 +40,6 @@ Gem::Specification.new do |spec|
41
40
  spec.add_runtime_dependency "activesupport", ">= 5.1"
42
41
  spec.add_runtime_dependency "rainbow", ">= 2.2.2", "< 4.0"
43
42
  spec.add_runtime_dependency "listen", "~> 3.1"
44
- spec.add_runtime_dependency "pry", "~> 0.12.2"
45
43
  spec.add_runtime_dependency "language_server-protocol", "~> 3.14.0.2"
44
+ spec.add_runtime_dependency "rbs", ">= 0.3.1", '< 0.5.0'
46
45
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: steep
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.16.0
4
+ version: 0.17.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Soutaro Matsumoto
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-05-18 00:00:00.000000000 Z
11
+ date: 2020-06-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 1.3.6
75
+ version: 1.4.2
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 1.3.6
82
+ version: 1.4.2
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: minitest-hooks
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -171,38 +171,43 @@ dependencies:
171
171
  - !ruby/object:Gem::Version
172
172
  version: '3.1'
173
173
  - !ruby/object:Gem::Dependency
174
- name: pry
174
+ name: language_server-protocol
175
175
  requirement: !ruby/object:Gem::Requirement
176
176
  requirements:
177
177
  - - "~>"
178
178
  - !ruby/object:Gem::Version
179
- version: 0.12.2
179
+ version: 3.14.0.2
180
180
  type: :runtime
181
181
  prerelease: false
182
182
  version_requirements: !ruby/object:Gem::Requirement
183
183
  requirements:
184
184
  - - "~>"
185
185
  - !ruby/object:Gem::Version
186
- version: 0.12.2
186
+ version: 3.14.0.2
187
187
  - !ruby/object:Gem::Dependency
188
- name: language_server-protocol
188
+ name: rbs
189
189
  requirement: !ruby/object:Gem::Requirement
190
190
  requirements:
191
- - - "~>"
191
+ - - ">="
192
192
  - !ruby/object:Gem::Version
193
- version: 3.14.0.2
193
+ version: 0.3.1
194
+ - - "<"
195
+ - !ruby/object:Gem::Version
196
+ version: 0.5.0
194
197
  type: :runtime
195
198
  prerelease: false
196
199
  version_requirements: !ruby/object:Gem::Requirement
197
200
  requirements:
198
- - - "~>"
201
+ - - ">="
199
202
  - !ruby/object:Gem::Version
200
- version: 3.14.0.2
203
+ version: 0.3.1
204
+ - - "<"
205
+ - !ruby/object:Gem::Version
206
+ version: 0.5.0
201
207
  description: Gradual Typing for Ruby
202
208
  email:
203
209
  - matsumoto@soutaro.com
204
210
  executables:
205
- - rbs
206
211
  - steep
207
212
  extensions: []
208
213
  extra_rdoc_files: []
@@ -219,7 +224,6 @@ files:
219
224
  - bin/console
220
225
  - bin/setup
221
226
  - bin/smoke_runner.rb
222
- - exe/rbs
223
227
  - exe/steep
224
228
  - lib/steep.rb
225
229
  - lib/steep/annotation_parser.rb
@@ -437,140 +441,13 @@ files:
437
441
  - smoke/yield/Steepfile
438
442
  - smoke/yield/a.rb
439
443
  - steep.gemspec
440
- - vendor/ruby-signature/.github/workflows/ruby.yml
441
- - vendor/ruby-signature/.gitignore
442
- - vendor/ruby-signature/.rubocop.yml
443
- - vendor/ruby-signature/BSDL
444
- - vendor/ruby-signature/COPYING
445
- - vendor/ruby-signature/Gemfile
446
- - vendor/ruby-signature/README.md
447
- - vendor/ruby-signature/Rakefile
448
- - vendor/ruby-signature/bin/annotate-with-rdoc
449
- - vendor/ruby-signature/bin/console
450
- - vendor/ruby-signature/bin/query-rdoc
451
- - vendor/ruby-signature/bin/setup
452
- - vendor/ruby-signature/bin/sort
453
- - vendor/ruby-signature/bin/test_runner.rb
454
- - vendor/ruby-signature/docs/CONTRIBUTING.md
455
- - vendor/ruby-signature/docs/sigs.md
456
- - vendor/ruby-signature/docs/stdlib.md
457
- - vendor/ruby-signature/docs/syntax.md
458
- - vendor/ruby-signature/exe/rbs
459
- - vendor/ruby-signature/lib/rbs.rb
460
- - vendor/ruby-signature/lib/rbs/ast/annotation.rb
461
- - vendor/ruby-signature/lib/rbs/ast/comment.rb
462
- - vendor/ruby-signature/lib/rbs/ast/declarations.rb
463
- - vendor/ruby-signature/lib/rbs/ast/members.rb
464
- - vendor/ruby-signature/lib/rbs/buffer.rb
465
- - vendor/ruby-signature/lib/rbs/builtin_names.rb
466
- - vendor/ruby-signature/lib/rbs/cli.rb
467
- - vendor/ruby-signature/lib/rbs/constant.rb
468
- - vendor/ruby-signature/lib/rbs/constant_table.rb
469
- - vendor/ruby-signature/lib/rbs/definition.rb
470
- - vendor/ruby-signature/lib/rbs/definition_builder.rb
471
- - vendor/ruby-signature/lib/rbs/environment.rb
472
- - vendor/ruby-signature/lib/rbs/environment_loader.rb
473
- - vendor/ruby-signature/lib/rbs/environment_walker.rb
474
- - vendor/ruby-signature/lib/rbs/errors.rb
475
- - vendor/ruby-signature/lib/rbs/location.rb
476
- - vendor/ruby-signature/lib/rbs/method_type.rb
477
- - vendor/ruby-signature/lib/rbs/namespace.rb
478
- - vendor/ruby-signature/lib/rbs/parser.rb
479
- - vendor/ruby-signature/lib/rbs/parser.y
480
- - vendor/ruby-signature/lib/rbs/prototype/rb.rb
481
- - vendor/ruby-signature/lib/rbs/prototype/rbi.rb
482
- - vendor/ruby-signature/lib/rbs/prototype/runtime.rb
483
- - vendor/ruby-signature/lib/rbs/substitution.rb
484
- - vendor/ruby-signature/lib/rbs/test.rb
485
- - vendor/ruby-signature/lib/rbs/test/errors.rb
486
- - vendor/ruby-signature/lib/rbs/test/hook.rb
487
- - vendor/ruby-signature/lib/rbs/test/setup.rb
488
- - vendor/ruby-signature/lib/rbs/test/spy.rb
489
- - vendor/ruby-signature/lib/rbs/test/test_helper.rb
490
- - vendor/ruby-signature/lib/rbs/test/type_check.rb
491
- - vendor/ruby-signature/lib/rbs/type_name.rb
492
- - vendor/ruby-signature/lib/rbs/types.rb
493
- - vendor/ruby-signature/lib/rbs/variance_calculator.rb
494
- - vendor/ruby-signature/lib/rbs/vendorer.rb
495
- - vendor/ruby-signature/lib/rbs/version.rb
496
- - vendor/ruby-signature/lib/rbs/writer.rb
497
- - vendor/ruby-signature/lib/ruby/signature.rb
498
- - vendor/ruby-signature/rbs.gemspec
499
- - vendor/ruby-signature/stdlib/abbrev/abbrev.rbs
500
- - vendor/ruby-signature/stdlib/base64/base64.rbs
501
- - vendor/ruby-signature/stdlib/benchmark/benchmark.rbs
502
- - vendor/ruby-signature/stdlib/builtin/array.rbs
503
- - vendor/ruby-signature/stdlib/builtin/basic_object.rbs
504
- - vendor/ruby-signature/stdlib/builtin/binding.rbs
505
- - vendor/ruby-signature/stdlib/builtin/builtin.rbs
506
- - vendor/ruby-signature/stdlib/builtin/class.rbs
507
- - vendor/ruby-signature/stdlib/builtin/comparable.rbs
508
- - vendor/ruby-signature/stdlib/builtin/complex.rbs
509
- - vendor/ruby-signature/stdlib/builtin/constants.rbs
510
- - vendor/ruby-signature/stdlib/builtin/data.rbs
511
- - vendor/ruby-signature/stdlib/builtin/deprecated.rbs
512
- - vendor/ruby-signature/stdlib/builtin/dir.rbs
513
- - vendor/ruby-signature/stdlib/builtin/encoding.rbs
514
- - vendor/ruby-signature/stdlib/builtin/enumerable.rbs
515
- - vendor/ruby-signature/stdlib/builtin/enumerator.rbs
516
- - vendor/ruby-signature/stdlib/builtin/errno.rbs
517
- - vendor/ruby-signature/stdlib/builtin/errors.rbs
518
- - vendor/ruby-signature/stdlib/builtin/exception.rbs
519
- - vendor/ruby-signature/stdlib/builtin/false_class.rbs
520
- - vendor/ruby-signature/stdlib/builtin/fiber.rbs
521
- - vendor/ruby-signature/stdlib/builtin/fiber_error.rbs
522
- - vendor/ruby-signature/stdlib/builtin/file.rbs
523
- - vendor/ruby-signature/stdlib/builtin/file_test.rbs
524
- - vendor/ruby-signature/stdlib/builtin/float.rbs
525
- - vendor/ruby-signature/stdlib/builtin/gc.rbs
526
- - vendor/ruby-signature/stdlib/builtin/hash.rbs
527
- - vendor/ruby-signature/stdlib/builtin/integer.rbs
528
- - vendor/ruby-signature/stdlib/builtin/io.rbs
529
- - vendor/ruby-signature/stdlib/builtin/kernel.rbs
530
- - vendor/ruby-signature/stdlib/builtin/marshal.rbs
531
- - vendor/ruby-signature/stdlib/builtin/match_data.rbs
532
- - vendor/ruby-signature/stdlib/builtin/math.rbs
533
- - vendor/ruby-signature/stdlib/builtin/method.rbs
534
- - vendor/ruby-signature/stdlib/builtin/module.rbs
535
- - vendor/ruby-signature/stdlib/builtin/nil_class.rbs
536
- - vendor/ruby-signature/stdlib/builtin/numeric.rbs
537
- - vendor/ruby-signature/stdlib/builtin/object.rbs
538
- - vendor/ruby-signature/stdlib/builtin/proc.rbs
539
- - vendor/ruby-signature/stdlib/builtin/process.rbs
540
- - vendor/ruby-signature/stdlib/builtin/random.rbs
541
- - vendor/ruby-signature/stdlib/builtin/range.rbs
542
- - vendor/ruby-signature/stdlib/builtin/rational.rbs
543
- - vendor/ruby-signature/stdlib/builtin/rb_config.rbs
544
- - vendor/ruby-signature/stdlib/builtin/regexp.rbs
545
- - vendor/ruby-signature/stdlib/builtin/ruby_vm.rbs
546
- - vendor/ruby-signature/stdlib/builtin/signal.rbs
547
- - vendor/ruby-signature/stdlib/builtin/string.rbs
548
- - vendor/ruby-signature/stdlib/builtin/string_io.rbs
549
- - vendor/ruby-signature/stdlib/builtin/struct.rbs
550
- - vendor/ruby-signature/stdlib/builtin/symbol.rbs
551
- - vendor/ruby-signature/stdlib/builtin/thread.rbs
552
- - vendor/ruby-signature/stdlib/builtin/thread_group.rbs
553
- - vendor/ruby-signature/stdlib/builtin/time.rbs
554
- - vendor/ruby-signature/stdlib/builtin/trace_point.rbs
555
- - vendor/ruby-signature/stdlib/builtin/true_class.rbs
556
- - vendor/ruby-signature/stdlib/builtin/unbound_method.rbs
557
- - vendor/ruby-signature/stdlib/builtin/warning.rbs
558
- - vendor/ruby-signature/stdlib/coverage/coverage.rbs
559
- - vendor/ruby-signature/stdlib/csv/csv.rbs
560
- - vendor/ruby-signature/stdlib/erb/erb.rbs
561
- - vendor/ruby-signature/stdlib/find/find.rbs
562
- - vendor/ruby-signature/stdlib/ipaddr/ipaddr.rbs
563
- - vendor/ruby-signature/stdlib/json/json.rbs
564
- - vendor/ruby-signature/stdlib/pathname/pathname.rbs
565
- - vendor/ruby-signature/stdlib/prime/integer-extension.rbs
566
- - vendor/ruby-signature/stdlib/prime/prime.rbs
567
- - vendor/ruby-signature/stdlib/securerandom/securerandom.rbs
568
- - vendor/ruby-signature/stdlib/set/set.rbs
569
- - vendor/ruby-signature/stdlib/tmpdir/tmpdir.rbs
570
444
  homepage: https://github.com/soutaro/steep
571
445
  licenses:
572
446
  - MIT
573
- metadata: {}
447
+ metadata:
448
+ homepage_uri: https://github.com/soutaro/steep
449
+ source_code_uri: https://github.com/soutaro/steep
450
+ changelog_uri: https://github.com/soutaro/steep/blob/master/CHANGELOG.md
574
451
  post_install_message:
575
452
  rdoc_options: []
576
453
  require_paths:
@@ -586,7 +463,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
586
463
  - !ruby/object:Gem::Version
587
464
  version: '0'
588
465
  requirements: []
589
- rubygems_version: 3.0.6
466
+ rubygems_version: 3.0.3
590
467
  signing_key:
591
468
  specification_version: 4
592
469
  summary: Gradual Typing for Ruby