loom

Форк
0
/
DocumentSymbol.cpp 
52 строки · 2.3 Кб
1
#include "DocumentSymbol.h"
2
#include "simodo/lsp-server/ServerContext.h"
3
#include "simodo/lsp-server/DocumentContext.h"
4

5
#include "simodo/variable/json/Rpc.h"
6
#include "simodo/variable/json/Serialization.h"
7
#include "simodo/inout/convert/functions.h"
8

9
namespace simodo::lsp
10
{
11

12
void DocumentSymbol::work()
13
{
14
    if (_jsonrpc.is_valid()) {
15
        const variable::Value & params_value = _jsonrpc.params();
16
        if (params_value.type() == variable::ValueType::Object) {
17
            std::string uri;
18
            std::shared_ptr<variable::Object> params_object = params_value.getObject();
19
            const variable::Value & textDocument_value  = params_object->find(u"textDocument");
20
            if (textDocument_value.type() == variable::ValueType::Object) {
21
                const variable::Value & uri_value = textDocument_value.getObject()->find(u"uri");
22
                if (uri_value.type() == variable::ValueType::String)
23
                    uri = inout::toU8(uri_value.getString());
24
            }
25

26
            if (!uri.empty()) {
27
                DocumentContext * doc = _server.findDocument(uri);
28
                if (doc) {
29
                    variable::Value result = doc->produceDocumentSymbolsResponse();
30
                    _server.sending().push(variable::JsonRpc(result, _jsonrpc.id()));
31
                    return;
32
                }
33
                _server.log().error("'textDocument/documentSymbol' command: uri '" + uri + "' don't loaded yet",
34
                                    variable::toJson(_jsonrpc.value()));
35
                _server.sending().push(
36
                    /// @todo Скорректировать коды (и тексты) ошибок
37
                    variable::JsonRpc(-1,
38
                        u"'textDocument/documentSymbol' command: uri '" + inout::toU16(uri) + u"' don't loaded yet",
39
                        _jsonrpc.id()));
40
                return;
41
            }
42
        }
43
    }
44
    _server.log().error("There are wrong parameter structure of 'textDocument/documentSymbol' command", 
45
                        variable::toJson(_jsonrpc.value()));
46
    _server.sending().push(
47
        /// @todo Скорректировать коды (и тексты) ошибок
48
        variable::JsonRpc(-1,u"There are wrong parameter structure of 'textDocument/documentSymbol' command",
49
                            _jsonrpc.id()));
50
}
51

52
}

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

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

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

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