diff --git a/config.el b/config.el index c07f90e..c959a83 100644 --- a/config.el +++ b/config.el @@ -4,6 +4,7 @@ (load! "security") (load! "core") (load! "development/lsp") +(load! "development/cpp") (load! "development/nix") (load! "development/misc") (load! "org") diff --git a/development/cpp.el b/development/cpp.el new file mode 100644 index 0000000..cdfd983 --- /dev/null +++ b/development/cpp.el @@ -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") diff --git a/development/flycheck_cpp.el b/development/flycheck_cpp.el new file mode 100644 index 0000000..cdfd983 --- /dev/null +++ b/development/flycheck_cpp.el @@ -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") diff --git a/development/lsp.el b/development/lsp.el index e0dc61d..59917fa 100644 --- a/development/lsp.el +++ b/development/lsp.el @@ -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")) diff --git a/init.el b/init.el index 7104d25..7fce826 100644 --- a/init.el +++ b/init.el @@ -115,7 +115,7 @@ :lang ;;agda ; types of types of types of types... ;;beancount ; mind the GAAP - (cc +lsp) ; C > C++ == 1 + (cc +lsp +tree-sitter) ; C > C++ == 1 ;;clojure ; java with a lisp ;;common-lisp ; if you've seen one lisp, you've seen them all ;;coq ; proofs-as-programs