Files
lypacamacs/packages/dev-packages.el
T
lyrgb 64f1c6a55a fixed arduino again I think
using arduino-lsp instead of clangd
let gemini rewrite the whole lsp use-package def
2026-08-24 21:44:49 +02:00

134 lines
4.4 KiB
EmacsLisp

;; Tree-sitter & LSP tweaks (Core transformative changes)
(use-package treesit-fold
:defer t
:commands (treesit-fold-close
treesit-fold-close-all
treesit-fold-open
treesit-fold-toggle
treesit-fold-open-all
treesit-fold-mode
global-treesit-fold-mode
treesit-fold-open-recursively
treesit-fold-line-comment-mode)
:custom
(treesit-fold-line-count-show t)
(treesit-fold-line-count-format "--▼--")
:config
(set-face-attribute 'treesit-fold-replacement-face nil
:foreground "#808080"
:box nil
:weight 'bold)
)
;; Tree-sitter hooks
(dolist (hook '(c-ts-mode-hook c++-ts-mode-hook java-ts-mode-hook rust-ts-mode-hook go-ts-mode-hook ruby-ts-mode-hook js-ts-mode-hook typescript-ts-mode-hook tsx-ts-mode-hook css-ts-mode-hook html-ts-mode-hook bash-ts-mode-hook cmake-ts-mode-hook dockerfile-ts-mode-hook json-ts-mode-hook toml-ts-mode-hook yaml-ts-mode-hook))
(add-hook hook #'treesit-fold-mode))
(with-eval-after-load 'treesit
(setq treesit-font-lock-level 4))
(use-package mason
:defer t
:config
(mason-setup))
(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
toml-ts-mode-hook
json-ts-mode-hook
python-ts-mode-hook) . lsp-deferred)
:config
;; --- 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++,/usr/bin/g++,/home/*/.arduino15/packages/**/bin/*"
"--header-insertion-decorators"))
;; 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))
;; --- 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)
;; Filter out unsupported inlineCompletion capability
(advice-add 'lsp--client-capabilities :filter-return
(lambda (caps)
(cond
((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))))
((listp caps)
(when-let ((text-doc (cdr (assoc 'textDocument caps))))
(setcdr (assoc 'textDocument caps)
(assq-delete-all 'inlineCompletion text-doc)))))
caps)))
(use-package lsp-ui
:defer t
:after lsp-mode
:commands lsp-ui-mode
:init
(setq lsp-ui-sideline-show-symbol t
lsp-ui-side-show-code-actions t
lsp-ui-sideline-show-hover t
lsp-ui-doc-enable t
lsp-ui-doc-delay 1
lsp-ui-doc-position 'at-point
lsp-ui-sideline-show-hover t
lsp-ui-sideline-show-diagnostics t
lsp-ui-side-show-code-actions t
lsp-ui-sideline-delay 0.25
)
)
(with-eval-after-load 'lsp-mode
(add-to-list 'lsp-disabled-clients 'tailwindcss))
(provide 'dev-packages)