loom

Форк
0
/
ClientParams.cpp 
84 строки · 3.0 Кб
1
#include "simodo/lsp-client/ClientParams.h"
2

3
#include "simodo/inout/convert/functions.h"
4

5
using namespace simodo::inout;
6

7
namespace simodo::lsp
8
{
9

10
ClientParams parseClientParams(std::shared_ptr<variable::Object> params_object)
11
{
12
    ClientParams p;
13

14
    const variable::Value & processId_value = params_object->find(u"processId");
15
    if (processId_value.type() == variable::ValueType::Int)
16
        p.processId = processId_value.getInt();
17

18
    const variable::Value & locale_value = params_object->find(u"locale");
19
    if (locale_value.type() == variable::ValueType::String)
20
        p.locale = toU8(locale_value.getString());
21

22
    const variable::Value & rootPath_value = params_object->find(u"rootPath");
23
    if (rootPath_value.type() == variable::ValueType::String)
24
        p.rootPath = toU8(rootPath_value.getString());
25

26
    const variable::Value & rootUri_value = params_object->find(u"rootUri");
27
    if (rootUri_value.type() == variable::ValueType::String)
28
        p.rootUri = toU8(rootUri_value.getString());
29

30
    const variable::Value & capabilities_value = params_object->find(u"capabilities");
31
    if (capabilities_value.type() == variable::ValueType::Object)
32
        p.cap = parseClientCapabilities(capabilities_value.getObject());
33

34
    const variable::Value & trace_value = params_object->find(u"trace");
35
    if (trace_value.type() == variable::ValueType::String) {
36
        if (trace_value.getString() == u"messages")
37
            p.trace = TraceValue::messages;
38
        else if (trace_value.getString() == u"verbose")
39
            p.trace = TraceValue::verbose;
40
    }
41

42
    return p;
43
}
44

45
Capabilities parseClientCapabilities(std::shared_ptr<variable::Object> cap_object)
46
{
47
    Capabilities cap;
48

49
    const variable::Value & textDocument_value = cap_object->find(u"textDocument");
50
    if (textDocument_value.type() == variable::ValueType::Object)
51
        cap.doc = parseTextDocument(textDocument_value.getObject());
52

53
    return cap;
54
}
55

56
TextDocument parseTextDocument(std::shared_ptr<variable::Object> doc_object)
57
{
58
    TextDocument doc;
59

60
    const variable::Value & hover_value = doc_object->find(u"hover");
61
    if (hover_value.type() == variable::ValueType::Object)
62
        doc.hover = parseHoverClientCapabilities(hover_value.getObject());
63

64
    return doc;
65
}
66

67
HoverClientCapabilities parseHoverClientCapabilities(std::shared_ptr<simodo::variable::Object> hover_object)
68
{
69
    HoverClientCapabilities hover;
70

71
    const variable::Value & dynamicRegistration_value = hover_object->find(u"dynamicRegistration");
72
    if (dynamicRegistration_value.type() == variable::ValueType::Bool)
73
        hover.dynamicRegistration = dynamicRegistration_value.getBool();
74

75
    const variable::Value & contentFormat_value = hover_object->find(u"contentFormat");
76
    if (contentFormat_value.type() == variable::ValueType::Array)
77
        for(const variable::Value & format_value : contentFormat_value.getArray()->values())
78
            if (format_value.type() == variable::ValueType::String)
79
                hover.contentFormat.insert(toU8(format_value.getString()));
80

81
    return hover;
82
}
83

84
}
85

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

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

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

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