21 using OptionMapTy = std::map<std::string, std::unique_ptr<AttrSetClientProc>>;
24 std::unique_ptr<OwnedEvalClient> Eval;
27 std::unique_ptr<AttrSetClientProc> NixpkgsEval;
29 std::mutex OptionsLock;
43 void evalExprWithProgress(AttrSetClient &Client,
const EvalExprParams &Params,
44 std::string_view Description);
50 std::mutex ConfigLock;
55 WorkspaceConfiguration;
63 void updateConfig(Configuration NewConfig);
72 CreateWorkDoneProgress;
79 llvm::unique_function<void(
84 llvm::unique_function<void(
86 BeginWorkDoneProgress;
88 void beginWorkDoneProgress(
92 BeginWorkDoneProgress(Params);
95 llvm::unique_function<void(
96 const lspserver::ProgressParams<lspserver::WorkDoneProgressReport> &)>
97 ReportWorkDoneProgress;
99 void reportWorkDoneProgress(
100 const lspserver::ProgressParams<lspserver::WorkDoneProgressReport>
102 if (ClientCaps.WorkDoneProgress)
103 ReportWorkDoneProgress(Params);
106 llvm::unique_function<void(
107 lspserver::ProgressParams<lspserver::WorkDoneProgressEnd>)>
110 void endWorkDoneProgress(
111 const lspserver::ProgressParams<lspserver::WorkDoneProgressEnd> &Params) {
112 if (ClientCaps.WorkDoneProgress)
113 EndWorkDoneProgress(Params);
116 mutable std::mutex TUsLock;
117 llvm::StringMap<std::shared_ptr<NixTU>> TUs;
119 std::shared_ptr<const NixTU> getTU(std::string_view
File)
const {
121 std::lock_guard G(TUsLock);
122 if (!TUs.count(
File)) [[unlikely]] {
126 return TUs.lookup(
File);
129 static std::shared_ptr<nixf::Node> getAST(
const NixTU &TU) {
138 std::shared_ptr<const nixf::Node> getAST(std::string_view
File)
const {
139 auto TU = getTU(
File);
140 return TU ? getAST(*TU) : nullptr;
143#if BOOST_VERSION < 108800
146 boost::asio::thread_pool Pool{
147 static_cast<size_t>(boost::asio::detail::default_thread_pool_size())};
149 boost::asio::thread_pool Pool{};
154 std::optional<int64_t> Version);
158 void onInitialize(
const lspserver::InitializeParams &Params,
163 bool ReceivedShutdown =
false;
165 void onShutdown(
const lspserver::NoParams &,
168 void onDocumentDidOpen(
const lspserver::DidOpenTextDocumentParams &Params);
171 onDocumentDidChange(
const lspserver::DidChangeTextDocumentParams &Params);
173 void onDocumentDidClose(
const lspserver::DidCloseTextDocumentParams &Params);
176 onCodeAction(
const lspserver::CodeActionParams &Params,
179 void onCodeActionResolve(
const lspserver::CodeAction &Params,
182 void onHover(
const lspserver::TextDocumentPositionParams &Params,
185 void onDocumentSymbol(
186 const lspserver::DocumentSymbolParams &Params,
190 const lspserver::FoldingRangeParams &Params,
193 void onSemanticTokens(
const lspserver::SemanticTokensParams &Params,
197 onInlayHint(
const lspserver::InlayHintsParams &Params,
200 void onCompletion(
const lspserver::CompletionParams &Params,
204 onCompletionItemResolve(
const lspserver::CompletionItem &Params,
207 void onDefinition(
const lspserver::TextDocumentPositionParams &Params,
211 onReferences(
const lspserver::TextDocumentPositionParams &Params,
214 void onDocumentHighlight(
215 const lspserver::TextDocumentPositionParams &Params,
219 const lspserver::DocumentLinkParams &Params,
222 std::set<nixf::Diagnostic::DiagnosticKind>
223 SuppressedDiagnostics;
225 std::mutex SuppressedDiagnosticsLock;
229 void updateSuppressed(
const std::vector<std::string> &Sup);
232 bool isSuppressed(nixf::Diagnostic::DiagnosticKind Kind);
234 std::optional<int64_t> Version, std::string_view Src,
235 const std::vector<nixf::Diagnostic> &Diagnostics);
237 void onRename(
const lspserver::RenameParams &Params,
241 onPrepareRename(
const lspserver::TextDocumentPositionParams &Params,
244 void onFormat(
const lspserver::DocumentFormattingParams &Params,
250 void onDidChangeConfiguration(
251 const lspserver::DidChangeConfigurationParams &Params);
254 Controller(std::unique_ptr<lspserver::InboundPort> In,
255 std::unique_ptr<lspserver::OutboundPort> Out);