示例#1
0
        public async Task ClassDefinition()
        {
            var code = @"class ClassBase(object):
    pass

class ClassDerived(ClassBase):
    pass

obj = ClassDerived()
obj
";

            using (var helper = new NavigableHelper(code, Version)) {
                // ClassBase
                await helper.CheckDefinitionLocations(57, 9, Location(1, 1), Location(1, 7));

                // ClassDerived
                await helper.CheckDefinitionLocations(88, 12, Location(4, 1), Location(4, 7));

                // object
                await helper.CheckDefinitionLocations(16, 6, null);

                // obj
                await helper.CheckDefinitionLocations(82, 3, Location(7, 1));

                // obj
                await helper.CheckDefinitionLocations(104, 3, Location(7, 1));
            }
        }
示例#2
0
        public async Task NamedArgumentDefinition()
        {
            var code = @"class MyClass(object):
    def my_class_func1(self, param2 = True):
        pass

    def my_class_func2(self, param3 = True):
        pass

def my_func(param3 = True):
    pass

def different_func():
    pass

my_func(param3=False)

obj = MyClass()
obj.my_class_func1(param2=False)
obj.my_class_func2(param3=False)
";

            using (var helper = new NavigableHelper(code, Version)) {
                // param3 in my_func(param3=False)
                await helper.CheckDefinitionLocations(232, 6, Location(8, 13));

                // param2 in obj.my_class_func1(param2=False)
                await helper.CheckDefinitionLocations(285, 6, Location(2, 30));

                // param3 in obj.my_class_func2(param3=False)
                await helper.CheckDefinitionLocations(319, 6, Location(5, 30));
            }
        }
示例#3
0
        public async Task ParameterDefinition()
        {
            var code = @"def my_func(param1, param2 = True):
    print(param1)
    print(param2)

my_func(1)
my_func(2, param2=False)
";

            using (var helper = new NavigableHelper(code, Version)) {
                // param1
                await helper.CheckDefinitionLocations(12, 6, Location(1, 13));

                await helper.CheckDefinitionLocations(47, 6, Location(1, 13));

                // param2
                await helper.CheckDefinitionLocations(20, 6, Location(1, 21));

                await helper.CheckDefinitionLocations(66, 6, Location(1, 21));

                await helper.CheckDefinitionLocations(100, 6, Location(1, 21));

                // my_func
                await helper.CheckDefinitionLocations(4, 7, Location(1, 1), Location(1, 5));

                await helper.CheckDefinitionLocations(77, 7, Location(1, 1), Location(1, 5));

                await helper.CheckDefinitionLocations(89, 7, Location(1, 1), Location(1, 5));
            }
        }
示例#4
0
        public async Task NamedArgumentDefinition()
        {
            var code = @"class MyClass(object):
    def my_class_func1(self, param2 = True):
        pass

    def my_class_func2(self, param3 = True):
        pass

def my_func(param3 = True):
    pass

my_func(param3=False)

obj = MyClass()
obj.my_class_func1(param2=False)
obj.my_class_func2(param3=False)
";

            using (var helper = new NavigableHelper(code, Version)) {
                // param3 in my_func(param3=False)
                await helper.CheckDefinitionLocation(197, 6, Location(8, 13));

                // BUG: can't go to definition
                // param2 in obj.my_class_func1(param2=False)
                await helper.CheckDefinitionLocation(250, 6, Location(2, 30));

                // BUG: goes to my_func instead of my_class_func2
                // param3 in obj.my_class_func2(param3=False)
                await helper.CheckDefinitionLocation(284, 6, Location(5, 30));
            }
        }
示例#5
0
        public async Task PropertyDefinition()
        {
            var code = @"class MyClass(object):
    _my_attr_val = 0

    @property
    def my_attr(self):
        return self._my_attr_val

    @my_attr.setter
    def my_attr(self, val):
        self._my_attr_val = val

obj = MyClass()
obj.my_attr = 5
print(obj.my_attr)
print(obj._my_attr_val)
";

            using (NavigableHelper helper = new NavigableHelper(code, Version))
            {
                // my_attr
                await helper.CheckDefinitionLocations(71, 7, Location(4, 5), Location(8, 5), Location(9, 9));

                await helper.CheckDefinitionLocations(128, 7, Location(4, 5), Location(8, 5), Location(9, 9));

                await helper.CheckDefinitionLocations(152, 7, Location(4, 5), Location(8, 5), Location(9, 9));

                await helper.CheckDefinitionLocations(229, 7, Location(4, 5), Location(5, 9), Location(8, 5), Location(9, 9), Location(13, 5));

                await helper.CheckDefinitionLocations(252, 7, Location(4, 5), Location(5, 9), Location(8, 5), Location(9, 9), Location(13, 5));

                // val
                await helper.CheckDefinitionLocations(166, 3, Location(9, 23));

                await helper.CheckDefinitionLocations(201, 3, Location(9, 23));

                // _my_attr_val
                await helper.CheckDefinitionLocations(28, 12, Location(2, 5));

                await helper.CheckDefinitionLocations(107, 12, Location(2, 5), Location(10, 14));

                await helper.CheckDefinitionLocations(186, 12, Location(2, 5), Location(10, 14));

                await helper.CheckDefinitionLocations(272, 12, Location(2, 5), Location(10, 14));

                // self
                await helper.CheckDefinitionLocations(79, 4, Location(1, 1));

                await helper.CheckDefinitionLocations(102, 4, Location(1, 1));

                await helper.CheckDefinitionLocations(160, 4, Location(1, 1));

                await helper.CheckDefinitionLocations(181, 4, Location(1, 1));
            }
        }
示例#6
0
        public async Task ModuleDefinition()
        {
            var code = @"import os
";

            using (var helper = new NavigableHelper(code, Version)) {
                // os
                await helper.CheckDefinitionLocations(7, 2, ExternalLocation(1, 1, "os.py"), Location(1, 8));
            }
        }
示例#7
0
        public async Task VariableDefinition()
        {
            var code = @"my_var = 0
my_var = 1
res = my_var * 10
";

            using (var helper = new NavigableHelper(code, Version)) {
                // 2 definitions for my_var
                await helper.CheckDefinitionLocations(30, 6, Location(1, 1), Location(2, 1));
            }
        }
示例#8
0
        public async Task ModuleImportDefinition()
        {
            var code = @"import sys

sys.version
";

            using (var helper = new NavigableHelper(code, Version)) {
                // sys
                await helper.CheckDefinitionLocations(14, 3, Location(1, 8));

                // version
                await helper.CheckDefinitionLocations(18, 7, null);
            }
        }