loom

Форк
0
/
LocationParsers.cpp 
61 строка · 2.0 Кб
1
#include "simodo/lsp/client/LocationParsers.h"
2
#include "simodo/variable/Variable.h"
3
#include "simodo/inout/convert/functions.h"
4

5
namespace simodo::lsp
6
{
7
    bool parsePosition(const variable::Value & position_value, inout::Position & position)
8
    {
9
        if (position_value.type() != variable::ValueType::Object)
10
            return false;
11

12
        const variable::Value & line_value      = position_value.getObject()->find(u"line");
13
        const variable::Value & character_value = position_value.getObject()->find(u"character");
14

15
        if (line_value.type() != variable::ValueType::Int
16
        || character_value.type() != variable::ValueType::Int)
17
            return false;
18

19
        position = inout::Position(line_value.getInt(), character_value.getInt());
20

21
        return true;
22
    }
23

24
    bool parseRange(const variable::Value & range_value, inout::Range & range)
25
    {
26
        if (range_value.type() != variable::ValueType::Object) 
27
            return false;
28

29
        inout::Position start, end;
30

31
        std::shared_ptr<variable::Object> range_object = range_value.getObject();
32
        if (!parsePosition(range_object->find(u"start"), start)
33
        || !parsePosition(range_object->find(u"end"), end))
34
            return false;
35

36
        range = inout::Range(start, end);
37

38
        return true;
39
    }
40

41
    bool parseLocation(const variable::Value & location_value, inout::Location & location)
42
    {
43
        if (location_value.type() != variable::ValueType::Object) 
44
            return false;
45

46
        std::shared_ptr<variable::Object> location_object = location_value.getObject();
47
        const variable::Value &           uri_value     = location_object->find(u"uri");
48
        if (uri_value.type() != variable::ValueType::String)
49
            return false;
50

51
        inout::Range range;
52

53
        if (!parseRange(location_object->find(u"range"), range))
54
            return false;
55

56
        location = inout::Location(inout::toU8(uri_value.getString()), range);
57

58
        return true;
59
    }
60

61
}
62

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.