fixed arduino again I think

using arduino-lsp instead of clangd
let gemini rewrite the whole lsp use-package def
This commit is contained in:
2026-08-24 21:44:49 +02:00
parent 93f98879f4
commit 64f1c6a55a
2 changed files with 68 additions and 67 deletions
-3
View File
@@ -252,9 +252,6 @@
(use-package markdown-mode
:mode "\\.qd$")
(use-package c++-mode
:mode "\\.ino$")
(use-package typescript-ts-mode
:mode "\\.ts$")
+42 -38
View File
@@ -33,75 +33,79 @@
:config
(mason-setup))
(defvar my/lsp-mode-hooks
;List of major mode hooks to enable LSP.
'(c-ts-mode-hook
(use-package lsp-mode
:defer t
:commands (lsp lsp-deferred)
:init
(setq lsp-keymap-prefix "C-l")
:hook
((c-mode-hook
c++-mode-hook
c-ts-mode-hook
c++-ts-mode-hook
arduino-mode-hook
typescript-ts-mode-hook
js-ts-mode-hook
tsx-ts-mode-hook
arduino-mode-hook
toml-ts-mode-hook
json-ts-mode-hook
python-ts-mode-hook)
)
python-ts-mode-hook) . lsp-deferred)
(dolist (hook my/lsp-mode-hooks)
(add-hook hook #'lsp-deferred))
(use-package lsp-mode
:defer t
:commands lsp
:init
(setq lsp-keymap-prefix "C-l")
:config
(add-hook 'lsp-mode-hook #'lsp-enable-which-key-integration)
(setq lsp-clients-clangd-executable "clangd"
lsp-clangd-binary-path "/usr/bin/clangd"
lsp-clients--clangd-default-executable "/usr/bin/clangd"
lsp-completion-provider :none
;; --- General LSP Settings ---
(setq lsp-completion-provider :none
lsp-completion-enable-filtering nil
lsp-completion-sort-initial-results t
lsp-enable-indentation t
lsp-enable-on-type-formatting nil)
(add-hook 'lsp-mode-hook #'lsp-enable-which-key-integration)
;; --- C / C++ Configuration (clangd) ---
(setq lsp-clients-clangd-executable "/usr/bin/clangd"
lsp-clients--clangd-default-executable "/usr/bin/clangd"
lsp-clients-clangd-args '("--header-insertion=iwyu"
"--fallback-style=LLVM"
"-query-driver=/usr/bin/c++"
"--header-insertion-decorators")
"--query-driver=/usr/bin/c++,/usr/bin/g++,/home/*/.arduino15/packages/**/bin/*"
"--header-insertion-decorators"))
lsp-enable-indentation t
lsp-enable-on-type-formatting nil
;; Map major modes to LSP language IDs
(add-to-list 'lsp-language-id-configuration '(c-ts-mode . "c"))
(add-to-list 'lsp-language-id-configuration '(c++-ts-mode . "cpp"))
(add-to-list 'lsp-language-id-configuration '(arduino-mode . "arduino"))
;; --- Arduino Language Server Registration ---
(lsp-register-client
(make-lsp-client
:new-connection (lsp-stdio-connection
(list "arduino-language-server"
"-clangd" "/usr/bin/clangd"
"-cli" "/usr/bin/arduino-cli"
"-cli-config" (expand-file-name "~/.arduino15/arduino-cli.yaml")
))
:activation-fn (lsp-activate-on "arduino")
:major-modes '(arduino-mode)
:server-id 'arduino-ls))
(with-eval-after-load 'lsp-mode
;; --- Keybindings ---
(define-key lsp-command-map (kbd "a") #'lsp-execute-code-action)
(define-key lsp-command-map (kbd "d") #'lsp-ui-doc-glance)
(define-key lsp-command-map (kbd "r") #'lsp-rename)
;; Safe Capability Filter: Handles both association list (alist) and hash-table formats
;; Filter out unsupported inlineCompletion capability
(advice-add 'lsp--client-capabilities :filter-return
(lambda (caps)
(cond
;; If it's a hash table
((hash-table-p caps)
(when-let ((text-doc (gethash "textDocument" caps)))
(if (hash-table-p text-doc)
(remhash "inlineCompletion" text-doc)
(setcdr (assoc "inlineCompletion" text-doc) nil))))
;; If it's an association list (alist)
((listp caps)
(when-let ((text-doc (cdr (assoc 'textDocument caps))))
(setcdr (assoc 'textDocument caps)
(assq-delete-all 'inlineCompletion text-doc)))))
caps))
;; Set up arduino-mode safely after lsp-mode is loaded
(add-to-list 'lsp-language-id-configuration '(arduino-mode . "cpp"))
(lsp-register-client
(make-lsp-client
:new-connection (lsp-stdio-connection '("clangd" "--header-insertion=never"))
:activation-fn (lsp-activate-on "arduino")
:server-id 'lsp-arduino-clangd
)))
caps)))
(use-package lsp-ui
:defer t