nixd
Toggle main menu visibility
Loading...
Searching...
No Matches
nixd
lib
Controller
TextDocumentSync.cpp
Go to the documentation of this file.
1
/// \file
2
/// \brief Implementation of the [text document
3
/// sync](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_synchronization).
4
#include "
nixd/Controller/Controller.h
"
5
6
#include "
lspserver/SourceCode.h
"
7
8
namespace
nixd
{
9
10
using namespace
llvm::json;
11
using namespace
lspserver;
12
13
void
Controller::onDocumentDidOpen(
14
const
lspserver::DidOpenTextDocumentParams
&Params) {
15
PathRef
File
= Params.
textDocument
.
uri
.
file
();
16
const
std::string &Contents = Params.
textDocument
.
text
;
17
std::optional<int64_t> Version = Params.
textDocument
.
version
;
18
Store.addDraft(
File
,
DraftStore::encodeVersion
(Version), Contents);
19
actOnDocumentAdd(
File
, Version);
20
}
21
22
void
Controller::onDocumentDidChange(
23
const
DidChangeTextDocumentParams
&Params) {
24
PathRef
File
= Params.
textDocument
.
uri
.
file
();
25
auto
Code = Store.getDraft(
File
);
26
if
(!Code) {
27
log
(
"Trying to incrementally change non-added document: {0}"
,
File
);
28
return
;
29
}
30
std::string NewCode(*Code->Contents);
31
for
(
const
auto
&Change : Params.
contentChanges
) {
32
if
(
auto
Err =
applyChange
(NewCode, Change)) {
33
// If this fails, we are most likely going to be not in sync anymore
34
// with the client. It is better to remove the draft and let further
35
// operations fail rather than giving wrong results.
36
removeDocument(
File
);
37
elog
(
"Failed to update {0}: {1}"
,
File
, std::move(Err));
38
return
;
39
}
40
}
41
std::optional<int64_t> Version = Params.
textDocument
.
version
;
42
Store.addDraft(
File
,
DraftStore::encodeVersion
(Version), NewCode);
43
actOnDocumentAdd(
File
, Version);
44
}
45
46
void
Controller::onDocumentDidClose(
const
DidCloseTextDocumentParams
&Params) {
47
PathRef
File
= Params.
textDocument
.
uri
.
file
();
48
removeDocument(
File
);
49
}
50
51
}
// namespace nixd
Controller.h
SourceCode.h
lspserver::DraftStore::encodeVersion
static std::string encodeVersion(std::optional< int64_t > LSPVersion)
Definition
DraftStore.cpp:84
lspserver::applyChange
llvm::Error applyChange(std::string &Contents, const TextDocumentContentChangeEvent &Change)
Apply an incremental update to a text document.
Definition
SourceCode.cpp:191
lspserver::elog
void elog(const char *Fmt, Ts &&...Vals)
Definition
Logger.h:52
lspserver::CompletionItemKind::File
@ File
Definition
lspserver/include/lspserver/Protocol.h:413
lspserver::PathRef
llvm::StringRef PathRef
Definition
Path.h:27
lspserver::log
void log(const char *Fmt, Ts &&...Vals)
Definition
Logger.h:58
nixd
Definition
CommandLine/Configuration.h:9
lspserver::DidChangeTextDocumentParams
Definition
lspserver/include/lspserver/Protocol.h:833
lspserver::DidChangeTextDocumentParams::contentChanges
std::vector< TextDocumentContentChangeEvent > contentChanges
The actual content changes.
Definition
lspserver/include/lspserver/Protocol.h:840
lspserver::DidChangeTextDocumentParams::textDocument
VersionedTextDocumentIdentifier textDocument
Definition
lspserver/include/lspserver/Protocol.h:837
lspserver::DidCloseTextDocumentParams
Definition
lspserver/include/lspserver/Protocol.h:806
lspserver::DidCloseTextDocumentParams::textDocument
TextDocumentIdentifier textDocument
The document that was closed.
Definition
lspserver/include/lspserver/Protocol.h:808
lspserver::DidOpenTextDocumentParams
Definition
lspserver/include/lspserver/Protocol.h:799
lspserver::DidOpenTextDocumentParams::textDocument
TextDocumentItem textDocument
The document that was opened.
Definition
lspserver/include/lspserver/Protocol.h:801
lspserver::TextDocumentIdentifier::uri
URIForFile uri
The text document's URI.
Definition
lspserver/include/lspserver/Protocol.h:106
lspserver::TextDocumentItem::version
std::optional< int64_t > version
Definition
lspserver/include/lspserver/Protocol.h:359
lspserver::TextDocumentItem::text
std::string text
The content of the opened text document.
Definition
lspserver/include/lspserver/Protocol.h:362
lspserver::TextDocumentItem::uri
URIForFile uri
The text document's URI.
Definition
lspserver/include/lspserver/Protocol.h:350
lspserver::URIForFile::file
llvm::StringRef file() const
Retrieves absolute path to the file.
Definition
lspserver/include/lspserver/Protocol.h:77
lspserver::VersionedTextDocumentIdentifier::version
std::optional< std::int64_t > version
Definition
lspserver/include/lspserver/Protocol.h:123
Generated by
1.17.0