;;; development/cpp.el -*- lexical-binding: t; -*- ;; 4. Optional: Fine-tuning Clangd ;; These arguments are passed directly to the clangd binary. (setq lsp-clients-clangd-args '("-j=4" "--background-index" "--clang-tidy" "--completion-style=detailed" "--header-insertion=never" "--header-insertion-decorators=0")) (after! lsp-clangd (set-lsp-priority! 'clangd 2)) ; Ensure clangd is preferred over ccls ;; Formatting for c++ ;; This tells Doom to use the LSP server (clangd) for formatting instead of ;; a separate clang-format call via apheleia. (setq-hook! '(c-mode-hook c++-mode-hook) +format-with-lsp t) ;; Formatting as I type ;; This enables real-time formatting as you type trigger characters like ; or } (after! lsp-mode (setq lsp-enable-on-type-formatting t)) ;; Ensure cc-mode settings align with clangd/clang-format ;; While clangd handles most things, basic Emacs indentation settings are ;; still useful as a fallback or for initial indentation. (after! cc-mode (setq-default c-basic-offset 2) (c-add-style "doom-cpp" '("llvm" (c-basic-offset . 2) (c-offsets-alist . ((innamespace . 0) (access-label . -) (arglist-intro . +) (arglist-cont-nonempty . +))))) (add-hook! '(c-mode-hook c++-mode-hook) (c-set-style "doom-cpp"))) ;; Add C++ documentation support (set-docsets! 'c++-mode "C++") (set-docsets! 'c-mode "C")