katakata_irb 0.1.8 → 0.1.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/katakata_irb.gemspec +1 -0
- data/lib/katakata_irb/completor.rb +10 -6
- data/lib/katakata_irb/type_simulator.rb +3 -1
- data/lib/katakata_irb/types.rb +9 -2
- data/lib/katakata_irb/version.rb +1 -1
- data/lib/katakata_irb.rb +9 -6
- metadata +16 -3
- data/Gemfile.lock +0 -29
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ce4d7b2e5ebfc546ddb501c43c13c62b166a55dc34a215a460d560b946ad4f02
|
4
|
+
data.tar.gz: f23396dc9804a798d109342d063943da759139fd849fd828f85d51f71089d5e7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5e44f1dbab26c56949e89053a0309ad9f3195a8f545ea95b546a541c547b55b86a69afb3944bdbfeb5e498a62105cb2f54630e559b32188b2532cfa4625ee765
|
7
|
+
data.tar.gz: 9beaaf9996eba51111cabc5a1ba4082f94657ecdeb06b3cf1c0859c346822d772134673d190639b874caacf3f220c19d8ac8ad150c2c98f85129e658a58a2b95
|
data/katakata_irb.gemspec
CHANGED
@@ -30,6 +30,7 @@ Gem::Specification.new do |spec|
|
|
30
30
|
|
31
31
|
# Uncomment to register a new dependency of your gem
|
32
32
|
spec.add_dependency 'irb', '>= 1.4.0'
|
33
|
+
spec.add_dependency 'reline', '>= 0.3.0'
|
33
34
|
spec.add_dependency 'rbs'
|
34
35
|
|
35
36
|
# For more information and examples about making a new gem, check out our
|
@@ -54,9 +54,9 @@ module KatakataIrb::Completor
|
|
54
54
|
IRB::InputCompletor::CompletionProc.define_singleton_method :call do |*args|
|
55
55
|
completion_proc.call(*args)
|
56
56
|
rescue => e
|
57
|
-
|
57
|
+
KatakataIrb.last_completion_error = e
|
58
58
|
KatakataIrb.log_puts
|
59
|
-
KatakataIrb.log_puts "#{e.inspect} stored to
|
59
|
+
KatakataIrb.log_puts "#{e.inspect} stored to KatakataIrb.last_completion_error"
|
60
60
|
KatakataIrb.log_puts
|
61
61
|
end
|
62
62
|
|
@@ -130,7 +130,8 @@ module KatakataIrb::Completor
|
|
130
130
|
width = contents.map { Reline::Unicode.calculate_width _1 }.max
|
131
131
|
x = cursor_pos_to_render.x + autocomplete_dialog.width
|
132
132
|
y = cursor_pos_to_render.y
|
133
|
-
|
133
|
+
info = { pos: Reline::CursorPos.new(x, y), contents: contents, width: width, bg_color: 44, fg_color: 37 }
|
134
|
+
Reline::DialogRenderInfo.new(**info.slice(*Reline::DialogRenderInfo.members))
|
134
135
|
}
|
135
136
|
Reline.add_dialog_proc(:show_type, type_dialog_proc, Reline::DEFAULT_DIALOG_CONTEXT)
|
136
137
|
end
|
@@ -233,7 +234,9 @@ module KatakataIrb::Completor
|
|
233
234
|
in_class_module = parents&.any? { _1 in [:class | :module,] }
|
234
235
|
icvar_available = !in_class_module
|
235
236
|
return unless target in [_type, String, [Integer, Integer]]
|
236
|
-
if target in [:@
|
237
|
+
if target in [:@gvar,]
|
238
|
+
return [:gvar, name]
|
239
|
+
elsif target in [:@ivar,]
|
237
240
|
return [:ivar, name] if icvar_available
|
238
241
|
elsif target in [:@cvar,]
|
239
242
|
return [:cvar, name] if icvar_available
|
@@ -275,12 +278,13 @@ module KatakataIrb::Completor
|
|
275
278
|
[:const, calculate_receiver.call(receiver), name]
|
276
279
|
in [:top_const_ref, [:@const,]]
|
277
280
|
[:const, KatakataIrb::Types::SingletonType.new(Object), name]
|
278
|
-
in [:def,] | [:string_content,] | [:var_field,] | [:defs,] | [:rest_param,] | [:kwrest_param,] | [:blockarg,] | [[:@ident,],]
|
281
|
+
in [:def,] | [:string_content,] | [:field | :var_field | :const_path_field,] | [:defs,] | [:rest_param,] | [:kwrest_param,] | [:blockarg,] | [[:@ident,],]
|
279
282
|
in [Array,] # `xstring`, /regexp/
|
280
283
|
else
|
281
284
|
KatakataIrb.log_puts
|
282
|
-
KatakataIrb.log_puts [:
|
285
|
+
KatakataIrb.log_puts [:UNIMPLEMENTED_EXPRESSION, expression].inspect
|
283
286
|
KatakataIrb.log_puts
|
287
|
+
nil
|
284
288
|
end
|
285
289
|
end
|
286
290
|
|
@@ -80,6 +80,7 @@ class KatakataIrb::TypeSimulator
|
|
80
80
|
end
|
81
81
|
if @dig_targets.dig? sexp
|
82
82
|
params in [:paren, params]
|
83
|
+
params ||= [:params, nil, nil, nil, nil, nil, nil, nil] # params might be nil in ruby 3.0
|
83
84
|
params_table = extract_param_names(params).to_h { [_1, KatakataIrb::Types::NIL] }
|
84
85
|
method_scope = KatakataIrb::Scope.new(
|
85
86
|
scope,
|
@@ -556,7 +557,7 @@ class KatakataIrb::TypeSimulator
|
|
556
557
|
scope.update pattern_scope
|
557
558
|
KatakataIrb::Types::UnionType[*results]
|
558
559
|
in [:case, target_exp, match_exp]
|
559
|
-
target = simulate_evaluate
|
560
|
+
target = target_exp ? simulate_evaluate(target_exp, scope) : KatakataIrb::Types::NIL
|
560
561
|
simulate_evaluate match_exp, scope, case_target: target
|
561
562
|
in [:void_stmt]
|
562
563
|
KatakataIrb::Types::NIL
|
@@ -894,6 +895,7 @@ class KatakataIrb::TypeSimulator
|
|
894
895
|
in [:field | :aref_field,]
|
895
896
|
# a.b, c[i] = value
|
896
897
|
in [:excessed_comma]
|
898
|
+
in [:args_forward]
|
897
899
|
end
|
898
900
|
end
|
899
901
|
[*pre_required, *post_required].each(&extract_mlhs)
|
data/lib/katakata_irb/types.rb
CHANGED
@@ -186,12 +186,19 @@ module KatakataIrb::Types
|
|
186
186
|
@params = params
|
187
187
|
end
|
188
188
|
def transform() = yield(self)
|
189
|
-
def methods() = @klass.instance_methods
|
190
|
-
def all_methods() = @klass.instance_methods | @klass.private_instance_methods
|
189
|
+
def methods() = rbs_methods.select { _2.public? }.keys | @klass.instance_methods
|
190
|
+
def all_methods() = rbs_methods.keys | @klass.instance_methods | @klass.private_instance_methods
|
191
191
|
def constants() = []
|
192
192
|
def types() = [self]
|
193
193
|
def nillable?() = (@klass == NilClass)
|
194
194
|
def nonnillable() = self
|
195
|
+
def rbs_methods
|
196
|
+
name = KatakataIrb::Types.class_name_of(@klass)
|
197
|
+
return {} unless name
|
198
|
+
|
199
|
+
type_name = RBS::TypeName(name).absolute!
|
200
|
+
KatakataIrb::Types.rbs_builder.build_instance(type_name).methods rescue {}
|
201
|
+
end
|
195
202
|
def inspect
|
196
203
|
if params.empty?
|
197
204
|
inspect_without_params
|
data/lib/katakata_irb/version.rb
CHANGED
data/lib/katakata_irb.rb
CHANGED
@@ -2,12 +2,15 @@ require 'katakata_irb/version'
|
|
2
2
|
require 'katakata_irb/completor'
|
3
3
|
|
4
4
|
module KatakataIrb
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
5
|
+
class << self
|
6
|
+
attr_accessor :log_output, :last_completion_error
|
7
|
+
def log_puts(...)
|
8
|
+
if STDOUT.tty?
|
9
|
+
STDOUT.cooked { log_output&.puts(...) }
|
10
|
+
else
|
11
|
+
log_output&.puts(...)
|
12
|
+
end
|
13
|
+
end
|
11
14
|
end
|
12
15
|
end
|
13
16
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: katakata_irb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- tompng
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-05-
|
11
|
+
date: 2023-05-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: irb
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 1.4.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: reline
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.3.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.3.0
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: rbs
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -46,7 +60,6 @@ extensions: []
|
|
46
60
|
extra_rdoc_files: []
|
47
61
|
files:
|
48
62
|
- Gemfile
|
49
|
-
- Gemfile.lock
|
50
63
|
- LICENSE.txt
|
51
64
|
- README.md
|
52
65
|
- Rakefile
|
data/Gemfile.lock
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
katakata_irb (0.1.8)
|
5
|
-
irb (>= 1.4.0)
|
6
|
-
rbs
|
7
|
-
|
8
|
-
GEM
|
9
|
-
remote: https://rubygems.org/
|
10
|
-
specs:
|
11
|
-
io-console (0.6.0)
|
12
|
-
irb (1.6.4)
|
13
|
-
reline (>= 0.3.0)
|
14
|
-
minitest (5.18.0)
|
15
|
-
rake (13.0.6)
|
16
|
-
rbs (3.1.0)
|
17
|
-
reline (0.3.3)
|
18
|
-
io-console (~> 0.5)
|
19
|
-
|
20
|
-
PLATFORMS
|
21
|
-
x86_64-darwin-20
|
22
|
-
|
23
|
-
DEPENDENCIES
|
24
|
-
katakata_irb!
|
25
|
-
minitest (~> 5.0)
|
26
|
-
rake (~> 13.0)
|
27
|
-
|
28
|
-
BUNDLED WITH
|
29
|
-
2.4.5
|