loom

Форк
0
/
ClientParamsParsers.cpp 
85 строк · 3.0 Кб
1
#include "simodo/lsp/client/ClientParamsParsers.h"
2

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

6
using namespace simodo::inout;
7

8
namespace simodo::lsp
9
{
10

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

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

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

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

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

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

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

43
    return p;
44
}
45

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

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

54
    return cap;
55
}
56

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

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

65
    return doc;
66
}
67

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

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

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

82
    return hover;
83
}
84

85
}
86

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

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

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

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