Hi Pecan,
I found two issues with applying fix in my setup. I'm using clangd version 18.0.0
1. "fixes available" along with "fix available"
2. Multi line fixes, eg: unused header warnings.
Below modification helped to apply these fixes.
diff --git a/src/plugins/contrib/clangd_client/src/LSPclient/lspdiagresultslog.cpp b/src/plugins/contrib/clangd_client/src/LSPclient/lspdiagresultslog.cpp
index b64e7d760..425268724 100644
--- a/src/plugins/contrib/clangd_client/src/LSPclient/lspdiagresultslog.cpp
+++ b/src/plugins/contrib/clangd_client/src/LSPclient/lspdiagresultslog.cpp
@@ -256,7 +256,7 @@ void LSPDiagnosticsResultsLog::OnApplyFixIfAvailable(wxCommandEvent& event) //(p
{
// Got the selected item index
selectedLineText = GetItemAsText(itemIndex);
- if (not selectedLineText.Contains(" (fix available) "))
+ if (not (selectedLineText.Contains(" (fix available) ") or (selectedLineText.Contains("(fixes available)"))))
{
wxString msg = wxString::Format(_("No Fix available for logLine(%d)"), int(itemIndex) );
InfoWindow::Display(_("NO fix"), msg);
diff --git a/src/plugins/contrib/clangd_client/src/codecompletion/parser/parser.cpp b/src/plugins/contrib/clangd_client/src/codecompletion/parser/parser.cpp
index b97e46a30..2ef369352 100644
--- a/src/plugins/contrib/clangd_client/src/codecompletion/parser/parser.cpp
+++ b/src/plugins/contrib/clangd_client/src/codecompletion/parser/parser.cpp
@@ -3688,15 +3688,17 @@ void Parser::OnRequestCodeActionApply(wxCommandEvent& event) //(ph 2024/02/12)
int startLine; // 1 origin; needs to be changed to zero origin
int lineStartCol;
int lineEndCol;
+ int endLine;
codeActionStr = FixesFound[ii];
try {
// std::string testData = "{\"newText\":\"int\",\"range\":{\"end\":{\"character\":8,\"line\":275},\"start\":{\"character\":4,\"line\":275}}}"; // **Debugging**
nlohmann::json jCodeAction = nlohmann::json::parse(codeActionStr.ToStdString());
newText = jCodeAction["newText"].get<std::string>();
- startLine = lineNumInt; // it's already 1 origin
+ startLine = jCodeAction["range"]["start"]["line"] ;
lineStartCol = jCodeAction["range"]["start"]["character"] ;
lineEndCol = jCodeAction["range"]["end"]["character"] ;
+ endLine = jCodeAction["range"]["end"]["line"] ;
}
catch(std::exception &err)
{
@@ -3708,9 +3710,12 @@ void Parser::OnRequestCodeActionApply(wxCommandEvent& event) //(ph 2024/02/12)
// pEd contains the cbEditor ptr from above
cbStyledTextCtrl* pControl = pEd->GetControl();
// Replace text; note that the startLine is from the log msg line, so it's 1 origin
- int linePosn = pControl->PositionFromLine(startLine-1); // use zero origin for line
- pControl->SetTargetStart(linePosn + lineStartCol);
- pControl->SetTargetEnd(linePosn + lineEndCol );
+ int linePosn = pControl->PositionFromLine(startLine); // use zero origin for line
+ int targetStart = linePosn + lineStartCol;
+ pControl->SetTargetStart(targetStart);
+ int lineEndPosn = pControl->PositionFromLine(endLine);
+ int targetEnd = lineEndPosn + lineEndCol;
+ pControl->SetTargetEnd(targetEnd);
pControl->ReplaceTarget(newText);
}//endfor FixesFound
Thanks, Christo