typeprof 0.30.0 → 0.30.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4faf061f0c69941bd42ce81df939d3204319da2891d175ac64b0165d4d660c18
4
- data.tar.gz: 4cd3d5666361cfa335f2acc398e8571b8fc38c9ff2911fb55ce394f3df8d1fc9
3
+ metadata.gz: 5f42086b6df655b0df5ea0e11633500c15735fc81713833c477536138de6cd70
4
+ data.tar.gz: 8e2c1bbd37db3e87fea65136cdbb78c31853ed0db434aeee76e9066cb15c125a
5
5
  SHA512:
6
- metadata.gz: af755e8f52cc2c315cb245083b2cef95741c5ccb8dfe98f47ef41e40fd087b6e641746f797d8bfaa68097bcb5aa6f52364e5e69651e7c368da4cd951a34a068c
7
- data.tar.gz: ced1fc8642f7020340caac9de194d83c0cffc01515e020f126f081a9f9262ccb6bd522927ce90583415bdfdde5e167a84783c71b907cfaff1c3fac2cd74ed7f2
6
+ metadata.gz: 89feb1071cf88fb006b7c04312d2ef576e940023e096b0fed10178b1b89f70301cf50f8d53343983e33760f258d96e2c9244de44bec55e1437bf0857951d4b91
7
+ data.tar.gz: 4f63149902b7b926df8159a1d2dc18a7472d15e07df9a441483b1e401a313c9b0ddf201ffdaa8eaccda4115bf3ae88d1ec282e8c66a11230b342275842809ba4
data/doc/doc.ja.md CHANGED
@@ -131,4 +131,4 @@ Procオブジェクトは、ラムダ式(`-> { ... }`)やブロック仮引
131
131
  これらは抽象化されず、コード片と結びついた具体的な値として扱われます。
132
132
  これらに渡された引数や返された値によってRBS出力されます。
133
133
 
134
- TBD
134
+ TODO: write more
@@ -1,5 +1,3 @@
1
- require "io/console"
2
-
3
1
  module TypeProf::CLI
4
2
  class CLI
5
3
  def initialize(argv)
@@ -49,7 +47,7 @@ module TypeProf::CLI
49
47
 
50
48
  opt.parse!(argv)
51
49
 
52
- if cli_options[:lsp] && !lsp_options.empty?
50
+ if !cli_options[:lsp] && !lsp_options.empty?
53
51
  raise OptionParser::InvalidOption.new("lsp options with non-lsp mode")
54
52
  end
55
53
 
data/lib/typeprof/cli.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require "optparse"
2
2
  require "pathname"
3
+ require "io/console"
3
4
 
4
5
  require_relative "cli/cli"
@@ -124,7 +124,15 @@ module TypeProf::Core
124
124
 
125
125
  a_args = ActualArguments.new(positional_args, @splat_flags, keyword_args, blk_ty)
126
126
  box = @changes.add_method_call_box(genv, recv, @mid, a_args, !@recv)
127
- box.ret
127
+
128
+ if @block_body && @block_body.lenv.break_vtx
129
+ ret = Vertex.new(self)
130
+ @changes.add_edge(genv, box.ret, ret)
131
+ @changes.add_edge(genv, @block_body.lenv.break_vtx, ret)
132
+ ret
133
+ else
134
+ box.ret
135
+ end
128
136
  end
129
137
 
130
138
  def block_last_stmt_code_range
@@ -176,7 +176,7 @@ module TypeProf::Core
176
176
  class BreakNode < Node
177
177
  def initialize(raw_node, lenv)
178
178
  super(raw_node, lenv)
179
- @arg = raw_node.arguments ? AST.create_node(raw_node.arguments.arguments.first, lenv) : nil
179
+ @arg = AST.parse_return_arguments(raw_node, lenv, code_range)
180
180
  end
181
181
 
182
182
  attr_reader :arg
@@ -184,8 +184,9 @@ module TypeProf::Core
184
184
  def subnodes = { arg: }
185
185
 
186
186
  def install0(genv)
187
- _arg = @arg ? @arg.install(genv) : Source.new(genv.nil_type)
188
- # TODO: implement!
187
+ arg = @arg.install(genv)
188
+ @changes.add_edge(genv, arg, @lenv.get_break_vtx)
189
+ Source.new()
189
190
  end
190
191
  end
191
192
 
@@ -365,8 +366,8 @@ module TypeProf::Core
365
366
  end
366
367
  raw_res = raw_res.subsequent
367
368
  end
368
- @else_clause = raw_node.else_clause ? AST.create_node(raw_node.else_clause.statements, lenv) : DummyNilNode.new(code_range, lenv)
369
- @ensure_clause = raw_node.ensure_clause ? AST.create_node(raw_node.ensure_clause.statements, lenv) : DummyNilNode.new(code_range, lenv)
369
+ @else_clause = raw_node.else_clause&.statements ? AST.create_node(raw_node.else_clause.statements, lenv) : DummyNilNode.new(code_range, lenv)
370
+ @ensure_clause = raw_node.ensure_clause&.statements ? AST.create_node(raw_node.ensure_clause.statements, lenv) : DummyNilNode.new(code_range, lenv)
370
371
  end
371
372
 
372
373
  attr_reader :body, :rescue_conds, :rescue_clauses, :else_clause, :ensure_clause
@@ -220,6 +220,10 @@ module TypeProf::Core
220
220
  rest_keywords = @rest_keywords ? @body.lenv.new_var(@rest_keywords, self) : nil
221
221
  block = @block ? @body.lenv.new_var(@block, self) : nil
222
222
 
223
+ if rest_positionals
224
+ @changes.add_edge(genv, Source.new(genv.gen_ary_type(Vertex.new(self))), rest_positionals)
225
+ end
226
+
223
227
  @opt_positional_defaults.zip(opt_positionals) do |expr, vtx|
224
228
  @changes.add_edge(genv, expr.install(genv), vtx)
225
229
  end
@@ -5,7 +5,7 @@ module TypeProf::Core
5
5
  when :string_node
6
6
  AST.create_node(raw_part, lenv)
7
7
  when :embedded_statements_node
8
- AST.create_node(raw_part.statements, lenv)
8
+ raw_part.statements ? AST.create_node(raw_part.statements, lenv) : DummyNilNode.new(TypeProf::CodeRange.from_node(raw_part), lenv)
9
9
  when :embedded_variable_node
10
10
  AST.create_node(raw_part.variable, lenv)
11
11
  else
@@ -282,11 +282,12 @@ module TypeProf::Core
282
282
  @cref = cref
283
283
  @locals = locals
284
284
  @return_boxes = return_boxes
285
+ @break_vtx = nil
285
286
  @next_boxes = []
286
287
  @filters = {}
287
288
  end
288
289
 
289
- attr_reader :path, :cref, :locals, :return_boxes, :next_boxes
290
+ attr_reader :path, :cref, :locals, :return_boxes, :break_vtx, :next_boxes
290
291
 
291
292
  def new_var(name, node)
292
293
  @locals[name] = Vertex.new(node)
@@ -312,6 +313,11 @@ module TypeProf::Core
312
313
  @next_boxes << box
313
314
  end
314
315
 
316
+ def get_break_vtx
317
+ @break_vtx ||= Vertex.new(:break_vtx)
318
+ end
319
+
320
+
315
321
  def push_read_filter(name, type)
316
322
  (@filters[name] ||= []) << type
317
323
  end
@@ -485,7 +485,11 @@ module TypeProf::Core
485
485
 
486
486
  if @f_args.rest_positionals
487
487
  rest_vtxs.each do |vtx|
488
- changes.add_edge(genv, vtx, @f_args.rest_positionals)
488
+ @f_args.rest_positionals.each_type do |ty|
489
+ if ty.is_a?(Type::Instance) && ty.mod == genv.mod_ary && ty.args[0]
490
+ changes.add_edge(genv, vtx, ty.args[0])
491
+ end
492
+ end
489
493
  end
490
494
  end
491
495
  else
@@ -519,9 +523,12 @@ module TypeProf::Core
519
523
 
520
524
  if start_rest < end_rest
521
525
  if @f_args.rest_positionals
522
- f_arg = @f_args.rest_positionals
523
526
  (start_rest..end_rest-1).each do |i|
524
- changes.add_edge(genv, a_args.positionals[i], f_arg)
527
+ @f_args.rest_positionals.each_type do |ty|
528
+ if ty.is_a?(Type::Instance) && ty.mod == genv.mod_ary && ty.args[0]
529
+ changes.add_edge(genv, a_args.positionals[i], ty.args[0])
530
+ end
531
+ end
525
532
  end
526
533
  end
527
534
  end
@@ -569,7 +576,7 @@ module TypeProf::Core
569
576
  args << ("?" + Type.strip_parens(f_vtx.show))
570
577
  end
571
578
  if @f_args.rest_positionals
572
- args << ("*" + Type.strip_parens(@f_args.rest_positionals.show))
579
+ args << ("*" + Type.strip_array(Type.strip_parens(@f_args.rest_positionals.show)))
573
580
  end
574
581
  @f_args.post_positionals.each do |var|
575
582
  args << Type.strip_parens(var.show)
@@ -42,6 +42,7 @@ module TypeProf::Core
42
42
  end
43
43
 
44
44
  def show
45
+ Fiber[:show_rec] ||= Set[]
45
46
  if Fiber[:show_rec].include?(self)
46
47
  "untyped"
47
48
  else
@@ -117,6 +118,7 @@ module TypeProf::Core
117
118
  end
118
119
 
119
120
  def show
121
+ Fiber[:show_rec] ||= Set[]
120
122
  if Fiber[:show_rec].include?(self)
121
123
  "...(recursive)..."
122
124
  else
@@ -146,6 +148,7 @@ module TypeProf::Core
146
148
  when ValueEntity
147
149
  when ActualArguments
148
150
  when Array
151
+ when Symbol
149
152
  else
150
153
  raise "unknown class: #{ origin.class }"
151
154
  end
@@ -3,7 +3,8 @@ module TypeProf::Core
3
3
  def initialize(options)
4
4
  @options = options
5
5
 
6
- @text_nodes = {}
6
+ @rb_text_nodes = {}
7
+ @rbs_text_nodes = {}
7
8
 
8
9
  @genv = GlobalEnv.new
9
10
  @genv.load_core_rbs(load_rbs_declarations(@options[:rbs_collection]).declarations)
@@ -26,43 +27,39 @@ module TypeProf::Core
26
27
  attr_reader :genv
27
28
 
28
29
  def reset!
29
- @text_nodes.each_value do |node|
30
- if node.is_a?(Array)
31
- node.each {|n| n.undefine(@genv) }
32
- else
33
- node.undefine(@genv)
34
- end
35
- end
30
+ @rb_text_nodes.each_value {|node| node.undefine(@genv) }
31
+ @rbs_text_nodes.each_value {|nodes| nodes.each {|n| n.undefine(@genv) } }
36
32
  @genv.define_all
37
- @text_nodes.each_value do |node|
38
- if node.is_a?(Array)
39
- node.each {|n| n.uninstall(@genv) }
40
- else
41
- node.uninstall(@genv)
42
- end
43
- end
33
+ @rb_text_nodes.each_value {|node| node.uninstall(@genv) }
34
+ @rbs_text_nodes.each_value {|nodes| nodes.each {|n| n.uninstall(@genv) } }
44
35
  @genv.run_all
45
- @text_nodes.clear
36
+ @rb_text_nodes.clear
37
+ @rbs_text_nodes.clear
46
38
  end
47
39
 
48
40
  def add_workspace(rb_folder, rbs_folder)
49
- Dir.glob(File.expand_path(rb_folder + "/**/*.rb")) do |path|
50
- update_rb_file(path, nil)
41
+ Dir.glob(File.expand_path(rb_folder + "/**/*.{rb,rbs}")) do |path|
42
+ update_file(path, nil)
51
43
  end
52
- Dir.glob(File.expand_path(rbs_folder + "/**/*.rbs")) do |path|
53
- update_rbs_file(path, nil)
44
+ end
45
+
46
+ def update_file(path, code)
47
+ if File.extname(path) == ".rbs"
48
+ update_rbs_file(path, code)
49
+ else
50
+ update_rb_file(path, code)
54
51
  end
55
52
  end
56
53
 
57
54
  def update_rb_file(path, code)
58
- prev_node = @text_nodes[path]
55
+ prev_node = @rb_text_nodes[path]
59
56
 
60
57
  code = File.read(path) unless code
61
58
  node = AST.parse_rb(path, code)
62
59
  return false unless node
63
60
 
64
- node.diff(@text_nodes[path]) if prev_node
65
- @text_nodes[path] = node
61
+ node.diff(@rb_text_nodes[path]) if prev_node
62
+ @rb_text_nodes[path] = node
66
63
 
67
64
  node.define(@genv)
68
65
  prev_node.undefine(@genv) if prev_node
@@ -115,7 +112,7 @@ module TypeProf::Core
115
112
  end
116
113
 
117
114
  def update_rbs_file(path, code)
118
- prev_decls = @text_nodes[path]
115
+ prev_decls = @rbs_text_nodes[path]
119
116
 
120
117
  code = File.read(path) unless code
121
118
  begin
@@ -125,7 +122,7 @@ module TypeProf::Core
125
122
  end
126
123
 
127
124
  # TODO: diff
128
- @text_nodes[path] = decls
125
+ @rbs_text_nodes[path] = decls
129
126
 
130
127
  decls.each {|decl| decl.define(@genv) }
131
128
  prev_decls.each {|decl| decl.undefine(@genv) } if prev_decls
@@ -139,13 +136,12 @@ module TypeProf::Core
139
136
  end
140
137
 
141
138
  def diagnostics(path, &blk)
142
- node = @text_nodes[path]
143
- node.diagnostics(@genv, &blk) if node
139
+ @rb_text_nodes[path]&.diagnostics(@genv, &blk)
144
140
  end
145
141
 
146
142
  def definitions(path, pos)
147
143
  defs = []
148
- @text_nodes[path].retrieve_at(pos) do |node|
144
+ @rb_text_nodes[path]&.retrieve_at(pos) do |node|
149
145
  node.boxes(:cread) do |box|
150
146
  if box.const_read && box.const_read.cdef
151
147
  box.const_read.cdef.defs.each do |cdef_node|
@@ -184,7 +180,7 @@ module TypeProf::Core
184
180
  end
185
181
 
186
182
  def type_definitions(path, pos)
187
- @text_nodes[path].retrieve_at(pos) do |node|
183
+ @rb_text_nodes[path]&.retrieve_at(pos) do |node|
188
184
  if node.ret
189
185
  ty_defs = []
190
186
  node.ret.types.map do |ty, _source|
@@ -206,7 +202,7 @@ module TypeProf::Core
206
202
  #: (String, TypeProf::CodePosition) -> Array[[String?, TypeProf::CodeRange]]?
207
203
  def references(path, pos)
208
204
  refs = []
209
- @text_nodes[path].retrieve_at(pos) do |node|
205
+ @rb_text_nodes[path]&.retrieve_at(pos) do |node|
210
206
  case node
211
207
  when AST::DefNode
212
208
  if node.mid_code_range.include?(pos)
@@ -246,7 +242,7 @@ module TypeProf::Core
246
242
  def rename(path, pos)
247
243
  mdefs = []
248
244
  cdefs = []
249
- @text_nodes[path].retrieve_at(pos) do |node|
245
+ @rb_text_nodes[path]&.retrieve_at(pos) do |node|
250
246
  node.boxes(:mcall) do |box|
251
247
  box.resolve(genv, nil) do |me, _ty, _mid, _orig_ty|
252
248
  next unless me
@@ -298,7 +294,7 @@ module TypeProf::Core
298
294
  end
299
295
 
300
296
  def hover(path, pos)
301
- @text_nodes[path].retrieve_at(pos) do |node|
297
+ @rb_text_nodes[path]&.retrieve_at(pos) do |node|
302
298
  node.boxes(:mcall) do |box|
303
299
  boxes = []
304
300
  box.changes.boxes.each do |key, box|
@@ -332,7 +328,7 @@ module TypeProf::Core
332
328
 
333
329
  def code_lens(path)
334
330
  cpaths = []
335
- @text_nodes[path].traverse do |event, node|
331
+ @rb_text_nodes[path]&.traverse do |event, node|
336
332
  if node.is_a?(AST::ModuleBaseNode)
337
333
  if node.static_cpath
338
334
  if event == :enter
@@ -356,7 +352,7 @@ module TypeProf::Core
356
352
  end
357
353
 
358
354
  def completion(path, trigger, pos)
359
- @text_nodes[path].retrieve_at(pos) do |node|
355
+ @rb_text_nodes[path]&.retrieve_at(pos) do |node|
360
356
  if node.code_range.last == pos.right
361
357
  node.ret.types.map do |ty, _source|
362
358
  base_ty = ty.base_type(genv)
@@ -386,7 +382,7 @@ module TypeProf::Core
386
382
  def dump_declarations(path)
387
383
  stack = []
388
384
  out = []
389
- @text_nodes[path].traverse do |event, node|
385
+ @rb_text_nodes[path]&.traverse do |event, node|
390
386
  case node
391
387
  when AST::ModuleNode
392
388
  if node.static_cpath
@@ -481,11 +477,7 @@ module TypeProf::Core
481
477
  i += 1
482
478
  end
483
479
 
484
- if File.extname(file) == ".rbs"
485
- res = update_rbs_file(file, File.read(file))
486
- else
487
- res = update_rb_file(file, File.read(file))
488
- end
480
+ res = update_file(file, File.read(file))
489
481
 
490
482
  if res
491
483
  true
@@ -11,6 +11,10 @@ module TypeProf::Core
11
11
  s.start_with?("(") && s.end_with?(")") ? s[1..-2] || raise : s
12
12
  end
13
13
 
14
+ def self.strip_array(s)
15
+ s.start_with?("Array[") && s.end_with?("]") ? s[6..-2] || raise : s
16
+ end
17
+
14
18
  def self.default_param_map(genv, ty)
15
19
  ty = ty.base_type(genv)
16
20
  instance_ty = ty.is_a?(Type::Instance) ? ty : Type::Instance.new(genv, ty.mod, []) # TODO: type params
data/lib/typeprof/core.rb CHANGED
@@ -23,7 +23,6 @@ require_relative "core/env/type_alias_entity"
23
23
  require_relative "core/env/value_entity"
24
24
  require_relative "core/env/method"
25
25
  require_relative "core/env/static_read"
26
- require_relative "core/graph"
27
26
  require_relative "core/graph/change_set"
28
27
  require_relative "core/graph/vertex"
29
28
  require_relative "core/graph/filter"
@@ -28,21 +28,6 @@ module TypeProf::LSP
28
28
  @server.send_notification(method, **params)
29
29
  end
30
30
 
31
- def publish_diagnostics(uri)
32
- text = @server.open_texts[uri]
33
- diags = []
34
- if text
35
- @server.core.diagnostics(text.path) do |diag|
36
- diags << diag.to_lsp
37
- end
38
- end
39
- notify(
40
- "textDocument/publishDiagnostics",
41
- uri: uri,
42
- diagnostics: diags
43
- )
44
- end
45
-
46
31
  Classes = []
47
32
  def self.inherited(klass)
48
33
  Classes << klass
@@ -72,7 +57,7 @@ module TypeProf::LSP
72
57
  def run
73
58
  folders = @params[:workspaceFolders].map do |folder|
74
59
  folder => { uri:, }
75
- TypeProf::LSP.file_uri_to_path(uri)
60
+ @server.uri_to_path(uri)
76
61
  end
77
62
 
78
63
  @server.add_workspaces(folders)
@@ -146,14 +131,14 @@ module TypeProf::LSP
146
131
  def run
147
132
  @params => { textDocument: { uri:, version:, text: } }
148
133
 
149
- path = TypeProf::LSP.file_uri_to_path(uri)
134
+ path = @server.uri_to_path(uri)
150
135
  return unless @server.target_path?(path)
151
136
 
152
137
  text = Text.new(path, text, version)
153
138
  @server.open_texts[uri] = text
154
- @server.core.update_rb_file(text.path, text.string)
139
+ @server.core.update_file(text.path, text.string)
155
140
  @server.send_request("workspace/codeLens/refresh")
156
- publish_diagnostics(uri)
141
+ @server.publish_diagnostics(uri)
157
142
  end
158
143
  end
159
144
 
@@ -164,9 +149,9 @@ module TypeProf::LSP
164
149
  text = @server.open_texts[uri]
165
150
  return unless text
166
151
  text.apply_changes(changes, version)
167
- @server.core.update_rb_file(text.path, text.string)
152
+ @server.core.update_file(text.path, text.string)
168
153
  @server.send_request("workspace/codeLens/refresh")
169
- publish_diagnostics(uri)
154
+ @server.publish_diagnostics(uri)
170
155
  end
171
156
  end
172
157
 
@@ -180,7 +165,7 @@ module TypeProf::LSP
180
165
  @params => { textDocument: { uri: } }
181
166
  text = @server.open_texts.delete(uri)
182
167
  return unless text
183
- @server.core.update_rb_file(text.path, nil)
168
+ @server.core.update_file(text.path, nil)
184
169
  end
185
170
  end
186
171
 
@@ -204,7 +189,7 @@ module TypeProf::LSP
204
189
  else
205
190
  respond(defs.map do |path, code_range|
206
191
  {
207
- uri: "file://" + path,
192
+ uri: @server.path_to_uri(path),
208
193
  range: code_range.to_lsp,
209
194
  }
210
195
  end)
@@ -230,7 +215,7 @@ module TypeProf::LSP
230
215
  else
231
216
  respond(defs.map do |path, code_range|
232
217
  {
233
- uri: "file://" + path,
218
+ uri: @server.path_to_uri(path),
234
219
  range: code_range.to_lsp,
235
220
  }
236
221
  end)
@@ -254,7 +239,7 @@ module TypeProf::LSP
254
239
  if callsites
255
240
  respond(callsites.map do |path, code_range|
256
241
  {
257
- uri: "file://" + path,
242
+ uri: @server.path_to_uri(path),
258
243
  range: code_range.to_lsp,
259
244
  }
260
245
  end)
@@ -332,7 +317,7 @@ module TypeProf::LSP
332
317
  items = []
333
318
  sort = "aaaa"
334
319
  text.modify_for_completion(text, pos) do |string, trigger, pos|
335
- @server.core.update_rb_file(text.path, string)
320
+ @server.core.update_file(text.path, string)
336
321
  pos = TypeProf::CodePosition.from_lsp(pos)
337
322
  @server.core.completion(text.path, trigger, pos) do |mid, hint|
338
323
  items << {
@@ -348,7 +333,7 @@ module TypeProf::LSP
348
333
  isIncomplete: false,
349
334
  items: items,
350
335
  )
351
- @server.core.update_rb_file(text.path, text.string)
336
+ @server.core.update_file(text.path, text.string)
352
337
  end
353
338
  end
354
339
 
@@ -373,7 +358,7 @@ module TypeProf::LSP
373
358
  if renames
374
359
  changes = {}
375
360
  renames.each do |path, cr|
376
- (changes["file://" + path] ||= []) << {
361
+ (changes[@server.path_to_uri(path)] ||= []) << {
377
362
  range: cr.to_lsp,
378
363
  newText: newName,
379
364
  }
@@ -44,7 +44,7 @@ module TypeProf::LSP
44
44
  end
45
45
  end
46
46
 
47
- def initialize(core, reader, writer)
47
+ def initialize(core, reader, writer, url_schema: nil, publish_all_diagnostics: false)
48
48
  @core = core
49
49
  @workspaces = {}
50
50
  @reader = reader
@@ -55,11 +55,21 @@ module TypeProf::LSP
55
55
  @open_texts = {}
56
56
  @exit = false
57
57
  @signature_enabled = true
58
+ @url_schema = url_schema || (File::ALT_SEPARATOR != "\\" ? "file://" : "file:///")
59
+ @publish_all_diagnostics = publish_all_diagnostics # TODO: implement more dedicated publish feature
58
60
  end
59
61
 
60
62
  attr_reader :core, :open_texts
61
63
  attr_accessor :signature_enabled
62
64
 
65
+ def path_to_uri(path)
66
+ @url_schema + File.expand_path(path)
67
+ end
68
+
69
+ def uri_to_path(url)
70
+ url.delete_prefix(@url_schema)
71
+ end
72
+
63
73
  def add_workspaces(folders)
64
74
  folders.each do |path|
65
75
  conf_path = File.join(path, "typeprof.conf.json")
@@ -136,6 +146,22 @@ module TypeProf::LSP
136
146
  def exit
137
147
  @exit = true
138
148
  end
149
+
150
+ def publish_diagnostics(uri)
151
+ (@publish_all_diagnostics ? @open_texts : [[uri, @open_texts[uri]]]).each do |uri, text|
152
+ diags = []
153
+ if text
154
+ @core.diagnostics(text.path) do |diag|
155
+ diags << diag.to_lsp
156
+ end
157
+ end
158
+ send_notification(
159
+ "textDocument/publishDiagnostics",
160
+ uri: uri,
161
+ diagnostics: diags
162
+ )
163
+ end
164
+ end
139
165
  end
140
166
 
141
167
  class Reader
@@ -48,14 +48,4 @@ module TypeProf::LSP
48
48
 
49
49
  JSON.parse(json, **opts)
50
50
  end
51
-
52
- FILE_URL_PREFIX = File::ALT_SEPARATOR != "\\" ? "file://" : "file:///"
53
-
54
- def self.file_path_to_uri(path)
55
- FILE_URL_PREFIX + File.expand_path(path)
56
- end
57
-
58
- def self.file_uri_to_path(url)
59
- url.delete_prefix(FILE_URL_PREFIX)
60
- end
61
51
  end
@@ -1,3 +1,3 @@
1
1
  module TypeProf
2
- VERSION = "0.30.0"
2
+ VERSION = "0.30.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: typeprof
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.30.0
4
+ version: 0.30.1
5
5
  platform: ruby
6
- original_platform: ''
7
6
  authors:
8
7
  - Yusuke Endoh
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-12-13 00:00:00.000000000 Z
11
+ date: 2024-12-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rbs
@@ -67,7 +67,6 @@ files:
67
67
  - lib/typeprof/core/env/static_read.rb
68
68
  - lib/typeprof/core/env/type_alias_entity.rb
69
69
  - lib/typeprof/core/env/value_entity.rb
70
- - lib/typeprof/core/graph.rb
71
70
  - lib/typeprof/core/graph/box.rb
72
71
  - lib/typeprof/core/graph/change_set.rb
73
72
  - lib/typeprof/core/graph/filter.rb
@@ -89,6 +88,7 @@ licenses:
89
88
  metadata:
90
89
  homepage_uri: https://github.com/ruby/typeprof
91
90
  source_code_uri: https://github.com/ruby/typeprof
91
+ post_install_message:
92
92
  rdoc_options: []
93
93
  require_paths:
94
94
  - lib
@@ -103,7 +103,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
103
103
  - !ruby/object:Gem::Version
104
104
  version: '0'
105
105
  requirements: []
106
- rubygems_version: 3.6.0.dev
106
+ rubygems_version: 3.5.22
107
+ signing_key:
107
108
  specification_version: 4
108
109
  summary: TypeProf is a type analysis tool for Ruby code based on abstract interpretation
109
110
  test_files: []
@@ -1,3 +0,0 @@
1
- module TypeProf::Core
2
- Fiber[:show_rec] = Set[]
3
- end