feat(cc): redo c++ configuration with clangd and modularity

This commit is contained in:
2026-03-23 16:42:07 +08:00
parent 7d0b244e22
commit b5bb42cca6
5 changed files with 88 additions and 7 deletions
+43
View File
@@ -0,0 +1,43 @@
;;; 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")
+43
View File
@@ -0,0 +1,43 @@
;;; 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")
-6
View File
@@ -37,14 +37,8 @@
corfu-annotate-max-width 50)
)
;; If using LSP, configure to show more details
(after! lsp-mode
(setq lsp-completion-show-detail t ; Show method signatures
lsp-completion-show-kind t ; Show completion item kind
lsp-completion-show-label-description t ; Show more details in label
))
(after! lsp-clangd
(setq lsp-clients-clangd-executable "clangd")
(setq lsp-clients--clangd-default-executable "clangd")
(setq lsp-clangd-binary-path "clangd"))