rsense-core 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +22 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +1 -0
- data/README.md +35 -0
- data/Rakefile +84 -0
- data/TypeAnnotation.tokens +41 -0
- data/build.xml +84 -0
- data/build_lib/antlr-3.2.jar +0 -0
- data/lib/jars/ant-1.7.0.jar +0 -0
- data/lib/jars/ant-launcher-1.7.0.jar +0 -0
- data/lib/jars/antlr-runtime-3.2.jar +0 -0
- data/lib/jars/bsf-2.3.0.jar +0 -0
- data/lib/rsense-core.rb +28 -0
- data/lib/rsense.jar +0 -0
- data/lib/rsense/core.rb +5 -0
- data/lib/rsense/core/version.rb +5 -0
- data/lib/rsense/parser.rb +6 -0
- data/lib/rsense/ruby.rb +19 -0
- data/lib/rsense/typing.rb +13 -0
- data/lib/rsense/typing/annotation.rb +20 -0
- data/lib/rsense/typing/runtime.rb +23 -0
- data/lib/rsense/typing/vertex.rb +15 -0
- data/lib/rsense/util.rb +9 -0
- data/rsense-core.gemspec +30 -0
- data/src/org/cx4a/rsense/CodeAssist.java +744 -0
- data/src/org/cx4a/rsense/CodeAssistError.java +31 -0
- data/src/org/cx4a/rsense/CodeAssistResult.java +42 -0
- data/src/org/cx4a/rsense/CodeCompletionResult.java +65 -0
- data/src/org/cx4a/rsense/FindDefinitionResult.java +24 -0
- data/src/org/cx4a/rsense/LoadResult.java +19 -0
- data/src/org/cx4a/rsense/Main.java +916 -0
- data/src/org/cx4a/rsense/Options.java +353 -0
- data/src/org/cx4a/rsense/Project.java +103 -0
- data/src/org/cx4a/rsense/TypeInferenceResult.java +25 -0
- data/src/org/cx4a/rsense/WhereResult.java +19 -0
- data/src/org/cx4a/rsense/parser/TypeAnnotation.g +221 -0
- data/src/org/cx4a/rsense/parser/TypeAnnotationLexer.java +1759 -0
- data/src/org/cx4a/rsense/parser/TypeAnnotationParser.java +2025 -0
- data/src/org/cx4a/rsense/ruby/Block.java +10 -0
- data/src/org/cx4a/rsense/ruby/Context.java +75 -0
- data/src/org/cx4a/rsense/ruby/DynamicMethod.java +10 -0
- data/src/org/cx4a/rsense/ruby/DynamicScope.java +51 -0
- data/src/org/cx4a/rsense/ruby/Frame.java +95 -0
- data/src/org/cx4a/rsense/ruby/IRubyObject.java +17 -0
- data/src/org/cx4a/rsense/ruby/LocalScope.java +43 -0
- data/src/org/cx4a/rsense/ruby/MetaClass.java +50 -0
- data/src/org/cx4a/rsense/ruby/Ruby.java +242 -0
- data/src/org/cx4a/rsense/ruby/RubyClass.java +146 -0
- data/src/org/cx4a/rsense/ruby/RubyModule.java +255 -0
- data/src/org/cx4a/rsense/ruby/RubyObject.java +94 -0
- data/src/org/cx4a/rsense/ruby/Scope.java +7 -0
- data/src/org/cx4a/rsense/ruby/SpecialObject.java +15 -0
- data/src/org/cx4a/rsense/ruby/Visibility.java +17 -0
- data/src/org/cx4a/rsense/typing/Graph.java +1690 -0
- data/src/org/cx4a/rsense/typing/Propagation.java +73 -0
- data/src/org/cx4a/rsense/typing/Template.java +84 -0
- data/src/org/cx4a/rsense/typing/TemplateAttribute.java +158 -0
- data/src/org/cx4a/rsense/typing/TypeSet.java +48 -0
- data/src/org/cx4a/rsense/typing/annotation/ClassType.java +57 -0
- data/src/org/cx4a/rsense/typing/annotation/MethodType.java +79 -0
- data/src/org/cx4a/rsense/typing/annotation/TypeAnnotation.java +4 -0
- data/src/org/cx4a/rsense/typing/annotation/TypeAny.java +7 -0
- data/src/org/cx4a/rsense/typing/annotation/TypeApplication.java +37 -0
- data/src/org/cx4a/rsense/typing/annotation/TypeConstraint.java +29 -0
- data/src/org/cx4a/rsense/typing/annotation/TypeExpression.java +11 -0
- data/src/org/cx4a/rsense/typing/annotation/TypeIdentity.java +59 -0
- data/src/org/cx4a/rsense/typing/annotation/TypeOptional.java +22 -0
- data/src/org/cx4a/rsense/typing/annotation/TypePragma.java +22 -0
- data/src/org/cx4a/rsense/typing/annotation/TypeSplat.java +22 -0
- data/src/org/cx4a/rsense/typing/annotation/TypeTuple.java +35 -0
- data/src/org/cx4a/rsense/typing/annotation/TypeUnion.java +23 -0
- data/src/org/cx4a/rsense/typing/annotation/TypeVariable.java +44 -0
- data/src/org/cx4a/rsense/typing/runtime/AliasMethod.java +94 -0
- data/src/org/cx4a/rsense/typing/runtime/AnnotationHelper.java +69 -0
- data/src/org/cx4a/rsense/typing/runtime/AnnotationResolver.java +523 -0
- data/src/org/cx4a/rsense/typing/runtime/Array.java +84 -0
- data/src/org/cx4a/rsense/typing/runtime/ClassTag.java +27 -0
- data/src/org/cx4a/rsense/typing/runtime/DefaultMethod.java +115 -0
- data/src/org/cx4a/rsense/typing/runtime/Hash.java +131 -0
- data/src/org/cx4a/rsense/typing/runtime/LoopTag.java +21 -0
- data/src/org/cx4a/rsense/typing/runtime/Method.java +32 -0
- data/src/org/cx4a/rsense/typing/runtime/MonomorphicObject.java +77 -0
- data/src/org/cx4a/rsense/typing/runtime/ObjectAllocator.java +40 -0
- data/src/org/cx4a/rsense/typing/runtime/PolymorphicObject.java +90 -0
- data/src/org/cx4a/rsense/typing/runtime/Proc.java +100 -0
- data/src/org/cx4a/rsense/typing/runtime/RuntimeHelper.java +1339 -0
- data/src/org/cx4a/rsense/typing/runtime/SpecialMethod.java +119 -0
- data/src/org/cx4a/rsense/typing/runtime/TypeVarMap.java +112 -0
- data/src/org/cx4a/rsense/typing/runtime/VertexHolder.java +48 -0
- data/src/org/cx4a/rsense/typing/vertex/CallVertex.java +122 -0
- data/src/org/cx4a/rsense/typing/vertex/MultipleAsgnVertex.java +23 -0
- data/src/org/cx4a/rsense/typing/vertex/PassThroughVertex.java +20 -0
- data/src/org/cx4a/rsense/typing/vertex/SValueVertex.java +24 -0
- data/src/org/cx4a/rsense/typing/vertex/SplatVertex.java +24 -0
- data/src/org/cx4a/rsense/typing/vertex/ToAryVertex.java +24 -0
- data/src/org/cx4a/rsense/typing/vertex/TypeVarVertex.java +22 -0
- data/src/org/cx4a/rsense/typing/vertex/Vertex.java +221 -0
- data/src/org/cx4a/rsense/typing/vertex/YieldVertex.java +70 -0
- data/src/org/cx4a/rsense/util/HereDocReader.java +48 -0
- data/src/org/cx4a/rsense/util/Logger.java +111 -0
- data/src/org/cx4a/rsense/util/NodeUtil.java +198 -0
- data/src/org/cx4a/rsense/util/SourceLocation.java +70 -0
- data/src/org/cx4a/rsense/util/StringUtil.java +63 -0
- data/src/resources/org/cx4a/rsense/rsense.properties +1 -0
- data/stubs/1.8/_builtin.rb +3006 -0
- data/stubs/1.8/bigdecimal.rb +131 -0
- data/stubs/1.8/cgi.rb +257 -0
- data/stubs/1.8/date.rb +147 -0
- data/stubs/1.8/optparse.rb +113 -0
- data/stubs/1.8/rational.rb +47 -0
- data/stubs/1.8/set.rb +94 -0
- data/stubs/1.8/socket.rb +461 -0
- data/stubs/1.8/stringio.rb +129 -0
- data/test/data/a file.rb +1 -0
- data/test/data/benchmark.rb +12 -0
- data/test/data/crlf.rb +5 -0
- data/test/data/test.rb +19 -0
- data/test/script/all.rsense +2 -0
- data/test/script/array_dynamic.rsense +25 -0
- data/test/script/block_nested.rsense +7 -0
- data/test/script/builtin.rsense +785 -0
- data/test/script/class_method_partial_update.rsense +52 -0
- data/test/script/class_partial_update.rsense +17 -0
- data/test/script/find-definition.rsense +72 -0
- data/test/script/method_arg_onearg.rsense +6 -0
- data/test/script/method_arg_optional.rsense +7 -0
- data/test/script/method_partial_update.rsense +14 -0
- data/test/script/method_yield_arrayarg.rsense +8 -0
- data/test/script/method_yield_arrayarg_expand.rsense +8 -0
- data/test/script/method_yield_arrayarg_splat.rsense +17 -0
- data/test/script/misc.rsense +2 -0
- data/test/script/proc_higher_order.rsense +22 -0
- data/test/script/regression.rsense +95 -0
- data/test/script/stdlib.rsense +66 -0
- data/test/script/where.rsense +41 -0
- metadata +315 -0
@@ -0,0 +1,52 @@
|
|
1
|
+
type-inference --test=Class.Method.PartialUpdate1 --should-be=Fixnum
|
2
|
+
class C
|
3
|
+
def f(x) x_|_ end
|
4
|
+
end
|
5
|
+
C.new.f(1)
|
6
|
+
EOF
|
7
|
+
|
8
|
+
type-inference --test=Class.Method.PartialUpdate2 --keep-env --should-be=Fixnum
|
9
|
+
class C
|
10
|
+
def f(x) x_|_ end
|
11
|
+
end
|
12
|
+
C.new.f(1)
|
13
|
+
EOF
|
14
|
+
|
15
|
+
type-inference --test=Class.Method.PartialUpdate3 --keep-env --should-be=Fixnum
|
16
|
+
class C
|
17
|
+
def f(x) 1; x_|_ end
|
18
|
+
end
|
19
|
+
C.new.f(1)
|
20
|
+
EOF
|
21
|
+
|
22
|
+
|
23
|
+
type-inference --test=Class.Method.PartialUpdate4 --should-be=Fixnum
|
24
|
+
class C
|
25
|
+
def self.f(x) D.new.f(x) end
|
26
|
+
class D
|
27
|
+
def f(x) x_|_ end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
C.f(1)
|
31
|
+
EOF
|
32
|
+
|
33
|
+
type-inference --test=Class.Method.PartialUpdate5 --keep-env --should-be=Fixnum
|
34
|
+
class C
|
35
|
+
def self.f(x) D.new.f(x) end
|
36
|
+
class D
|
37
|
+
def f(x) x_|_ end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
C.f(1)
|
41
|
+
EOF
|
42
|
+
|
43
|
+
type-inference --test=Class.Method.PartialUpdate6 --keep-env --should-be=Fixnum
|
44
|
+
class C
|
45
|
+
def self.f(x) D.new.f(x) end
|
46
|
+
class D
|
47
|
+
def f(x) 1; x_|_ end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
C.f(1)
|
51
|
+
EOF
|
52
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
type-inference --test=Class.PartialUpdate1 --should-be=Fixnum
|
2
|
+
class C
|
3
|
+
1_|_
|
4
|
+
end
|
5
|
+
EOF
|
6
|
+
|
7
|
+
type-inference --test=Class.PartialUpdate2 --keep-env --should-be=Fixnum
|
8
|
+
class C
|
9
|
+
1_|_
|
10
|
+
end
|
11
|
+
EOF
|
12
|
+
|
13
|
+
type-inference --test=Class.PartialUpdate3 --keep-env --should-be=Float
|
14
|
+
class C
|
15
|
+
2.3_|_
|
16
|
+
end
|
17
|
+
EOF
|
@@ -0,0 +1,72 @@
|
|
1
|
+
find-definition --test=FindDefinitionCommand1 --should-be=(stdin):1
|
2
|
+
def f
|
3
|
+
end
|
4
|
+
f_|_
|
5
|
+
EOF
|
6
|
+
|
7
|
+
find-definition --keep-env --test=FindDefinitionCommand2 --should-be=(stdin):3
|
8
|
+
def f
|
9
|
+
end
|
10
|
+
def g
|
11
|
+
end
|
12
|
+
g_|_
|
13
|
+
EOF
|
14
|
+
|
15
|
+
find-definition --keep-env --test=FindDefinitionCommand3 --should-be=(stdin):2
|
16
|
+
class C
|
17
|
+
def f() end
|
18
|
+
end
|
19
|
+
C.new.f_|_
|
20
|
+
EOF
|
21
|
+
|
22
|
+
find-definition --keep-env --test=FindDefinitionCommand4 --should-be=(stdin):2
|
23
|
+
class C
|
24
|
+
def f() end
|
25
|
+
end
|
26
|
+
class D
|
27
|
+
def f() end
|
28
|
+
end
|
29
|
+
C.new.f_|_
|
30
|
+
EOF
|
31
|
+
|
32
|
+
find-definition --keep-env --test=FindDefinitionCommand5 --should-be=(stdin):5
|
33
|
+
class C
|
34
|
+
def f() end
|
35
|
+
end
|
36
|
+
class D
|
37
|
+
def f() end
|
38
|
+
end
|
39
|
+
D.new.f_|_
|
40
|
+
EOF
|
41
|
+
|
42
|
+
find-definition --keep-env --test=FindDefinitionCommand6 --should-be=(stdin):4
|
43
|
+
class C
|
44
|
+
def f() end
|
45
|
+
end
|
46
|
+
class D
|
47
|
+
def f() end
|
48
|
+
end
|
49
|
+
D_|_
|
50
|
+
EOF
|
51
|
+
|
52
|
+
find-definition --keep-env --test=FindDefinitionCommand7 --should-be=(stdin):3
|
53
|
+
class C
|
54
|
+
def f() end
|
55
|
+
class D
|
56
|
+
def f() end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
C::D_|_
|
60
|
+
EOF
|
61
|
+
|
62
|
+
find-definition --keep-env --test=FindDefinitionCommand8 --should-be=(stdin):1
|
63
|
+
C = 1
|
64
|
+
C_|_
|
65
|
+
EOF
|
66
|
+
|
67
|
+
find-definition --keep-env --test=FindDefinitionCommand9 --should-be=(stdin):2
|
68
|
+
module M
|
69
|
+
C = 1
|
70
|
+
end
|
71
|
+
M::C_|_
|
72
|
+
EOF
|
@@ -0,0 +1,14 @@
|
|
1
|
+
type-inference --test=Method.PartialUpdate1 --should-be=Fixnum
|
2
|
+
def f(x) x_|_ end
|
3
|
+
f(1)
|
4
|
+
EOF
|
5
|
+
|
6
|
+
type-inference --test=Method.PartialUpdate2 --keep-env --should-be=Fixnum
|
7
|
+
def f(x) x_|_ end
|
8
|
+
f(1)
|
9
|
+
EOF
|
10
|
+
|
11
|
+
type-inference --test=Method.Partialupdate3 --keep-env --should-be=Fixnum
|
12
|
+
def f(x) 1; x_|_ end
|
13
|
+
f(1)
|
14
|
+
EOF
|
@@ -0,0 +1,17 @@
|
|
1
|
+
type-inference --test=Method.Yield.ArrayArg.Splat1 --should-be=Array
|
2
|
+
def f
|
3
|
+
yield [1, 2.3]
|
4
|
+
end
|
5
|
+
f {|x, *y|
|
6
|
+
y_|_
|
7
|
+
}
|
8
|
+
EOF
|
9
|
+
|
10
|
+
type-inference --test=Method.Yield.ArrayArg.Splat2 --should-be=String
|
11
|
+
def f
|
12
|
+
yield [1, 2.3, '']
|
13
|
+
end
|
14
|
+
f {|x, *y|
|
15
|
+
y[1]_|_
|
16
|
+
}
|
17
|
+
EOF
|
@@ -0,0 +1,22 @@
|
|
1
|
+
type-inference --test=Proc.HigherOrder1 --should-be=Fixnum,Bignum
|
2
|
+
def set(&block)
|
3
|
+
$block = block
|
4
|
+
end
|
5
|
+
set {|a| a + 1}
|
6
|
+
$block.call(1)_|_
|
7
|
+
EOF
|
8
|
+
|
9
|
+
type-inference --test=Proc.HigherOrder2 --should-be=Fixnum,Bignum
|
10
|
+
def adder(a)
|
11
|
+
proc {|b| a + b }
|
12
|
+
end
|
13
|
+
adder(1).call(2)_|_
|
14
|
+
EOF
|
15
|
+
|
16
|
+
type-inference --keep-env --test=Proc.HigherOrder.Bug --should-be=Fixnum,Bignum
|
17
|
+
def adder(a)
|
18
|
+
proc {|b| a + b }
|
19
|
+
end
|
20
|
+
adder(1).call(2)_|_
|
21
|
+
EOF
|
22
|
+
|
@@ -0,0 +1,95 @@
|
|
1
|
+
type-inference --test=MegamorphicObject.InfinityLoop --should-be=Fixnum
|
2
|
+
def f(a)
|
3
|
+
a = []
|
4
|
+
a = []
|
5
|
+
a = []
|
6
|
+
a = []
|
7
|
+
a = []
|
8
|
+
f(a)
|
9
|
+
1
|
10
|
+
end
|
11
|
+
f([])_|_
|
12
|
+
EOF
|
13
|
+
|
14
|
+
type-inference --test=Hash.OpElementAssign --should-be=String
|
15
|
+
a = {}
|
16
|
+
b = (a[''] ||= {})
|
17
|
+
b[''] = ''
|
18
|
+
a['']['']_|_
|
19
|
+
EOF
|
20
|
+
|
21
|
+
type-inference --test=Pathname --should-be=Pathname
|
22
|
+
class Pathname
|
23
|
+
def initialize(path)
|
24
|
+
@path = path
|
25
|
+
end
|
26
|
+
|
27
|
+
def sub(pattern, *rest, &block)
|
28
|
+
@path.sub(pattern) {}
|
29
|
+
end
|
30
|
+
|
31
|
+
def parent
|
32
|
+
self + '..'
|
33
|
+
end
|
34
|
+
|
35
|
+
def +(other)
|
36
|
+
other = Pathname.new(other)
|
37
|
+
end
|
38
|
+
|
39
|
+
def find(&block)
|
40
|
+
self.class.new(@path.sub('', ''))
|
41
|
+
end
|
42
|
+
end
|
43
|
+
Pathname.new('')_|_
|
44
|
+
EOF
|
45
|
+
|
46
|
+
type-inference --test=InstVar.ArrayMegamorphism1 --should-be=Array
|
47
|
+
class C
|
48
|
+
def f
|
49
|
+
@a = []
|
50
|
+
@a = []
|
51
|
+
@a = []
|
52
|
+
@a = []
|
53
|
+
@a = []
|
54
|
+
@a = []
|
55
|
+
@a_|_
|
56
|
+
end
|
57
|
+
end
|
58
|
+
EOF
|
59
|
+
|
60
|
+
type-inference --test=InstVar.ArrayMegamorphism2 --should-be=Fixnum
|
61
|
+
class C
|
62
|
+
def f
|
63
|
+
b = []
|
64
|
+
@a = b
|
65
|
+
@a = []
|
66
|
+
@a = []
|
67
|
+
@a = []
|
68
|
+
@a = []
|
69
|
+
@a = []
|
70
|
+
b << 1
|
71
|
+
@a.first_|_
|
72
|
+
end
|
73
|
+
end
|
74
|
+
EOF
|
75
|
+
|
76
|
+
type-inference --test=InstVar.ArrayMegamorphism3 --should-be=Object
|
77
|
+
class C
|
78
|
+
def f
|
79
|
+
@a = [1]
|
80
|
+
@a = ['']
|
81
|
+
@a = [2.3]
|
82
|
+
@a = [:a]
|
83
|
+
@a = [[]]
|
84
|
+
@a = [{}]
|
85
|
+
@a_|_
|
86
|
+
end
|
87
|
+
end
|
88
|
+
EOF
|
89
|
+
|
90
|
+
type-inference --test=ClassForModule --should-be=Fixnum
|
91
|
+
class C
|
92
|
+
def self.foo() 1 end
|
93
|
+
end
|
94
|
+
C.foo_|_
|
95
|
+
EOF
|
@@ -0,0 +1,66 @@
|
|
1
|
+
type-inference --test=BigDecimal --should-be=BigDecimal
|
2
|
+
require 'bigdecimal'
|
3
|
+
BigDecimal('')_|_
|
4
|
+
EOF
|
5
|
+
|
6
|
+
type-inference --test=CGI --should-be=CGI
|
7
|
+
require 'cgi'
|
8
|
+
CGI.new_|_
|
9
|
+
EOF
|
10
|
+
|
11
|
+
type-inference --test=Socket --should-be=TCPSocket
|
12
|
+
require 'socket'
|
13
|
+
TCPSocket.open('foo', 80)_|_
|
14
|
+
EOF
|
15
|
+
|
16
|
+
type-inference --test=StringIO --should-be=StringIO
|
17
|
+
require 'stringio'
|
18
|
+
StringIO.new_|_
|
19
|
+
EOF
|
20
|
+
|
21
|
+
type-inference --test=Date --should-be=Date
|
22
|
+
require 'date'
|
23
|
+
Date.today_|_
|
24
|
+
EOF
|
25
|
+
|
26
|
+
type-inference --test=DateTime --should-be=DateTime
|
27
|
+
require 'date'
|
28
|
+
DateTime.now_|_
|
29
|
+
EOF
|
30
|
+
|
31
|
+
type-inference --test=Rational --should-be=Rational
|
32
|
+
require 'rational'
|
33
|
+
Rational(0, 0)_|_
|
34
|
+
EOF
|
35
|
+
|
36
|
+
type-inference --test=Set --should-be=Set
|
37
|
+
require 'set'
|
38
|
+
Set[1, 2.3]_|_
|
39
|
+
EOF
|
40
|
+
|
41
|
+
type-inference --test=Set.Access --should-be=Fixnum
|
42
|
+
require 'set'
|
43
|
+
a = Set.new
|
44
|
+
a << 1
|
45
|
+
a.max_|_
|
46
|
+
EOF
|
47
|
+
|
48
|
+
type-inference --test=SortedSet --should-be=SortedSet
|
49
|
+
require 'set'
|
50
|
+
SortedSet[1, 2.3]_|_
|
51
|
+
EOF
|
52
|
+
|
53
|
+
type-inference --test=SortedSet.Access --should-be=Fixnum
|
54
|
+
require 'set'
|
55
|
+
a = SortedSet.new
|
56
|
+
a << 1
|
57
|
+
a.max_|_
|
58
|
+
EOF
|
59
|
+
|
60
|
+
type-inference --test=OptionParser --should-be=String,Boolean,TrueClass,FalseClass
|
61
|
+
require 'optparse'
|
62
|
+
OptionParser.new do |opt|
|
63
|
+
opt.on('-a') {|v| v_|_}
|
64
|
+
opt.order!
|
65
|
+
end
|
66
|
+
EOF
|
@@ -0,0 +1,41 @@
|
|
1
|
+
where --line=2 --test=WhereCommand1 --should-be=C
|
2
|
+
class C
|
3
|
+
|
4
|
+
def f
|
5
|
+
1
|
6
|
+
end
|
7
|
+
end
|
8
|
+
EOF
|
9
|
+
|
10
|
+
where --line=3 --test=WhereCommand2 --should-be=C#f
|
11
|
+
class C
|
12
|
+
def f
|
13
|
+
1
|
14
|
+
end
|
15
|
+
end
|
16
|
+
EOF
|
17
|
+
|
18
|
+
where --line=7 --test=WhereCommand3 --should-be=C#g
|
19
|
+
class C
|
20
|
+
def f
|
21
|
+
1
|
22
|
+
end
|
23
|
+
|
24
|
+
def g
|
25
|
+
2.3
|
26
|
+
end
|
27
|
+
end
|
28
|
+
EOF
|
29
|
+
|
30
|
+
where --line=9 --test=WhereCommand4 --should-be=C#g
|
31
|
+
class C
|
32
|
+
def f
|
33
|
+
1
|
34
|
+
end
|
35
|
+
|
36
|
+
def g
|
37
|
+
2.3
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
EOF
|