loom

Форк
0
/
SimodoCommand.cpp 
70 строк · 2.9 Кб
1
#include "script/ScriptDocumentOperation.h"
2
#include "simodo/inout/reporter/StreamReporter.h"
3
#include "simodo/engine/Executor.h"
4
#include "simodo/engine/FrameBody.h"
5

6
#include "simodo/inout/convert/functions.h"
7

8
using namespace simodo;
9

10
variable::Value makeSimodoCommandResult(
11
        const std::u16string &       id,
12
        const std::u16string &       title,
13
        lsp::SimodoCommandReportType type,
14
        const std::u16string &       text
15
) {
16
    return variable::Object{{
17
        { u"id",    id },
18
        { u"title", title },
19
        { u"type",  static_cast<int64_t>(type) },
20
        { u"text",  inout::encodeSpecialChars(text) },
21
}};
22
}
23

24
variable::Value makeSimodoCommandResponse(const std::u16string & uri, const variable::Value & commandResult) {
25
    return variable::Object{{
26
        { u"uri",           uri },
27
        { u"commandResult", commandResult }
28
    }};
29
}
30

31
variable::Value ScriptDocumentOperation::produceSimodoCommandResponse(const std::u16string & command_name, std::u16string text) const
32
{
33
    _doc.server().log().debug("ScriptDocumentOperation::produceSimodoCommandResponse " + simodo::inout::toU8(command_name)
34
                            + " '" + _doc.file_name() + "'");
35

36
    if (command_name.empty() || command_name != execution_report)
37
        return {};
38

39
    const std::string       initial_contract_file = engine::makeInitialContractFile(_factory.loom_dir());
40
    std::ostringstream      outputStream;
41
    inout::StreamReporter   reporter(outputStream);
42
    InputSupplier           file_supplier(_doc.server(), _doc.file_name(), text);
43
    engine::Executor        engine(
44
                                reporter, 
45
                                file_supplier,
46
                                _factory.loom_dir(),
47
                                _doc.file_name() == initial_contract_file ? "" : initial_contract_file,
48
                                _doc.file_name()
49
                            );
50

51
    // _doc.server().log().debug("ScriptDocumentOperation::produceSimodoCommandResponse created");
52

53
    if (engine.prepare()) {
54
        // _doc.server().log().debug("ScriptDocumentOperation::produceSimodoCommandResponse prepared");
55
        engine.run();
56
        // _doc.server().log().debug("ScriptDocumentOperation::produceSimodoCommandResponse ran");
57
    }
58
    // else
59
    //     _doc.server().log().debug("ScriptDocumentOperation::produceSimodoCommandResponse wrong");
60

61
    return makeSimodoCommandResponse(
62
            /* uri           = */ inout::toU16(_doc.file_name()),
63
            /* commandResult = */ makeSimodoCommandResult(
64
                       /* id    = */ u"grammar-report",
65
                       /* title = */ u"'" + fs::path(_doc.file_name()).filename().u16string() + u"' " + command_name,
66
                       /* type  = */ lsp::SimodoCommandReportType::plainText,
67
                       /* text  = */ inout::toU16(outputStream.str())
68
                )
69
    );
70
}

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

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

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

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