Skip to content

Commit

Permalink
nixd: refactor files of nixd implementation
Browse files Browse the repository at this point in the history
Split nixd implementation into multiple files to make it more readable.
  • Loading branch information
inclyc committed Feb 12, 2024
1 parent 9a7c103 commit e76854d
Show file tree
Hide file tree
Showing 13 changed files with 470 additions and 339 deletions.
8 changes: 7 additions & 1 deletion nixd/tools/nixd/meson.build
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
nixd_next = executable('nixd',
'src/Controller.cpp',
'src/CodeAction.cpp',
'src/Convert.cpp',
'src/Diagnostics.cpp',
'src/Hover.cpp',
'src/LifeTime.cpp',
'src/Main.cpp',
'src/Support.cpp',
'src/TextDocumentSync.cpp',
install: true,
dependencies: [ nixd_lsp_server, nixf, llvm ]
)
Expand Down
50 changes: 50 additions & 0 deletions nixd/tools/nixd/src/CodeAction.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
/// \file
/// \brief Implementation of [Code Action].
/// [Code Action]:
/// https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_codeAction

#include "Controller.h"

namespace nixd {

using namespace llvm::json;
using namespace lspserver;

void Controller::onCodeAction(const lspserver::CodeActionParams &Params,
Callback<std::vector<CodeAction>> Reply) {
PathRef File = Params.textDocument.uri.file();
Range Range = Params.range;
const std::vector<nixf::Diagnostic> &Diagnostics = TUs[File].diagnostics();
std::vector<CodeAction> Actions;
Actions.reserve(Diagnostics.size());
for (const nixf::Diagnostic &D : Diagnostics) {
auto DRange = toLSPRange(D.range());
if (!Range.overlap(DRange))
continue;

// Add fixes.
for (const nixf::Fix &F : D.fixes()) {
std::vector<TextEdit> Edits;
Edits.reserve(F.edits().size());
for (const nixf::TextEdit &TE : F.edits()) {
Edits.emplace_back(TextEdit{
.range = toLSPRange(TE.oldRange()),
.newText = std::string(TE.newText()),
});
}
using Changes = std::map<std::string, std::vector<TextEdit>>;
std::string FileURI = URIForFile::canonicalize(File, File).uri();
WorkspaceEdit WE{.changes = Changes{
{std::move(FileURI), std::move(Edits)},
}};
Actions.emplace_back(CodeAction{
.title = F.message(),
.kind = std::string(CodeAction::QUICKFIX_KIND),
.edit = std::move(WE),
});
}
}
Reply(std::move(Actions));
}

} // namespace nixd
330 changes: 0 additions & 330 deletions nixd/tools/nixd/src/Controller.cpp

This file was deleted.

Loading

0 comments on commit e76854d

Please sign in to comment.