Developer forums (C::B DEVELOPMENT STRICTLY!) > Plugins development
Code format support in clangd_client plugin
christo:
Many of the projects now a days use clang-format for formatting code. clangd has support for clang-format as well using textDocument/rangeFormatting LSP request. Attaching patch which adds a context menu item " Format use Clangd" and does the formatting on selecting that.
Pecan:
--- Quote from: christo on May 02, 2025, 07:04:53 pm ---Many of the projects now a days use clang-format for formatting code. clangd has support for clang-format as well using textDocument/rangeFormatting LSP request. Attaching patch which adds a context menu item " Format use Clangd" and does the formatting on selecting that.
--- End quote ---
Applied svn 13663. Thanks
christo:
Thank you Pecan.
In the change applied in svn, menu item is added after astyle menu item. But if I disable astyle plugin, this leads to context menu not working.
Edit:
Following change fixes the issue.
--- Code: ---diff --git a/src/plugins/contrib/clangd_client/src/codecompletion/codecompletion.cpp b/src/plugins/contrib/clangd_client/src/codecompletion/codecompletion.cpp
index 0964bbd37..e122e4823 100644
--- a/src/plugins/contrib/clangd_client/src/codecompletion/codecompletion.cpp
+++ b/src/plugins/contrib/clangd_client/src/codecompletion/codecompletion.cpp
@@ -1073,11 +1073,9 @@ void ClgdCompletion::BuildModuleMenu(const ModuleType type, wxMenu* menu, const
const wxString labelAStyle = _("Format use AStyle");
const wxString label = _("Format use Clangd"); // (christo 25/05/02)
int position = Manager::Get()->GetPluginManager()->FindSortedMenuItemPosition(*menu, labelAStyle);
- wxMenuItem* item = menu->FindItemByPosition(position);
- if (item) {
- wxString itemLabel = item->GetItemLabelText();
- if (itemLabel == labelAStyle)
- position += 1;
+ if (position != menu->GetMenuItemCount())
+ {
+ position += 1;
}
menu->Insert(position, idCodeFormatterActiveFile, label, _("Format the selected source code (selected line) in the current file"));
--- End code ---
Pecan:
@ christo
In what way does it not work?
For me, if AStyle is enabled, it places "Format use clangd" just after the AStyle context menu item, else it appends it to the context menu.
christo:
Hi Pecan, I'm seeing below error on right clicking.
../src/common/menucmn.cpp(623): assert ""position < m_items.GetCount()"" failed in FindItemByPosition(): wxMenu::FindItemByPosition(): invalid menu index
https://github.com/wxWidgets/wxWidgets/blob/v3.2.4/src/common/menucmn.cpp#L623
I've enabled debug mode of wxWidgets, that might be the reason error is seen for me, and NULL for you.
Screenshot attached.
Navigation
[0] Message Index
[#] Next page
Go to full version