feat(gs/emacs): Configure for C++ development
Vendor the google-c-style module, and configure lsp-mode to run the clangd wrapper script for hacking on tvlnix Change-Id: I8d1ac2f30c9708501e0840ef3d53fe479bc39fa7 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1166 Tested-by: BuildkiteCI Reviewed-by: glittershark <grfn@gws.fyi>
This commit is contained in:
		
							parent
							
								
									d3ad338726
								
							
						
					
					
						commit
						8a7f0beb86
					
				
					 4 changed files with 185 additions and 0 deletions
				
			
		| 
						 | 
					@ -29,6 +29,7 @@
 | 
				
			||||||
(load! "grid")
 | 
					(load! "grid")
 | 
				
			||||||
(load! "nix")
 | 
					(load! "nix")
 | 
				
			||||||
(load! "email")
 | 
					(load! "email")
 | 
				
			||||||
 | 
					(load! "cpp")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(require 's)
 | 
					(require 's)
 | 
				
			||||||
(require 'tvl)
 | 
					(require 'tvl)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										26
									
								
								users/glittershark/emacs.d/cpp.el
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								users/glittershark/emacs.d/cpp.el
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,26 @@
 | 
				
			||||||
 | 
					;;; ~/code/depot/users/glittershark/emacs.d/cpp.el -*- lexical-binding: t; -*-
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(load! "google-c-style")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(after! flycheck
 | 
				
			||||||
 | 
					  (add-to-list 'flycheck-disabled-checkers 'c/c++-gcc)
 | 
				
			||||||
 | 
					  (add-to-list 'flycheck-disabled-checkers 'c/c++-clangd))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(defun +grfn/cpp-setup ()
 | 
				
			||||||
 | 
					  (when (s-starts-with?
 | 
				
			||||||
 | 
					         "/home/grfn/code/depot/third_party/nix"
 | 
				
			||||||
 | 
					         (buffer-file-name))
 | 
				
			||||||
 | 
					    (setq lsp-clients-clangd-executable "/home/grfn/code/depot/users/glittershark/emacs.d/nix-clangd.sh"
 | 
				
			||||||
 | 
					          lsp-clients-clangd-args nil)
 | 
				
			||||||
 | 
					    (google-set-c-style)
 | 
				
			||||||
 | 
					    (lsp)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(add-hook 'c++-mode-hook #'+grfn/cpp-setup)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(comment
 | 
				
			||||||
 | 
					 (setq
 | 
				
			||||||
 | 
					  lsp-clients-clangd-executable
 | 
				
			||||||
 | 
					  "/home/grfn/code/depot/third_party/nix/clangd.sh"
 | 
				
			||||||
 | 
					  lsp-clients-clangd-args nil)
 | 
				
			||||||
 | 
					 )
 | 
				
			||||||
							
								
								
									
										151
									
								
								users/glittershark/emacs.d/google-c-style.el
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										151
									
								
								users/glittershark/emacs.d/google-c-style.el
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,151 @@
 | 
				
			||||||
 | 
					;;; google-c-style.el --- Google's C/C++ style for c-mode
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					;; Keywords: c, tools
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					;; google-c-style.el is Copyright (C) 2008 Google Inc. All Rights Reserved.
 | 
				
			||||||
 | 
					;;
 | 
				
			||||||
 | 
					;; It is free software; you can redistribute it and/or modify it under the
 | 
				
			||||||
 | 
					;; terms of either:
 | 
				
			||||||
 | 
					;;
 | 
				
			||||||
 | 
					;; a) the GNU General Public License as published by the Free Software
 | 
				
			||||||
 | 
					;; Foundation; either version 1, or (at your option) any later version, or
 | 
				
			||||||
 | 
					;;
 | 
				
			||||||
 | 
					;; b) the "Artistic License".
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					;;; Commentary:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					;; Provides the google C/C++ coding style. You may wish to add
 | 
				
			||||||
 | 
					;; `google-set-c-style' to your `c-mode-common-hook' after requiring this
 | 
				
			||||||
 | 
					;; file. For example:
 | 
				
			||||||
 | 
					;;
 | 
				
			||||||
 | 
					;;    (add-hook 'c-mode-common-hook 'google-set-c-style)
 | 
				
			||||||
 | 
					;;
 | 
				
			||||||
 | 
					;; If you want the RETURN key to go to the next line and space over
 | 
				
			||||||
 | 
					;; to the right place, add this to your .emacs right after the load-file:
 | 
				
			||||||
 | 
					;;
 | 
				
			||||||
 | 
					;;    (add-hook 'c-mode-common-hook 'google-make-newline-indent)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					;;; Code:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					;; For some reason 1) c-backward-syntactic-ws is a macro and 2)  under Emacs 22
 | 
				
			||||||
 | 
					;; bytecode cannot call (unexpanded) macros at run time:
 | 
				
			||||||
 | 
					(eval-when-compile (require 'cc-defs))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					;; Wrapper function needed for Emacs 21 and XEmacs (Emacs 22 offers the more
 | 
				
			||||||
 | 
					;; elegant solution of composing a list of lineup functions or quantities with
 | 
				
			||||||
 | 
					;; operators such as "add")
 | 
				
			||||||
 | 
					(defun google-c-lineup-expression-plus-4 (langelem)
 | 
				
			||||||
 | 
					  "Indents to the beginning of the current C expression plus 4 spaces.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This implements title \"Function Declarations and Definitions\"
 | 
				
			||||||
 | 
					of the Google C++ Style Guide for the case where the previous
 | 
				
			||||||
 | 
					line ends with an open parenthese.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					\"Current C expression\", as per the Google Style Guide and as
 | 
				
			||||||
 | 
					clarified by subsequent discussions, means the whole expression
 | 
				
			||||||
 | 
					regardless of the number of nested parentheses, but excluding
 | 
				
			||||||
 | 
					non-expression material such as \"if(\" and \"for(\" control
 | 
				
			||||||
 | 
					structures.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Suitable for inclusion in `c-offsets-alist'."
 | 
				
			||||||
 | 
					  (save-excursion
 | 
				
			||||||
 | 
					    (back-to-indentation)
 | 
				
			||||||
 | 
					    ;; Go to beginning of *previous* line:
 | 
				
			||||||
 | 
					    (c-backward-syntactic-ws)
 | 
				
			||||||
 | 
					    (back-to-indentation)
 | 
				
			||||||
 | 
					    (cond
 | 
				
			||||||
 | 
					     ;; We are making a reasonable assumption that if there is a control
 | 
				
			||||||
 | 
					     ;; structure to indent past, it has to be at the beginning of the line.
 | 
				
			||||||
 | 
					     ((looking-at "\\(\\(if\\|for\\|while\\)\\s *(\\)")
 | 
				
			||||||
 | 
					      (goto-char (match-end 1)))
 | 
				
			||||||
 | 
					     ;; For constructor initializer lists, the reference point for line-up is
 | 
				
			||||||
 | 
					     ;; the token after the initial colon.
 | 
				
			||||||
 | 
					     ((looking-at ":\\s *")
 | 
				
			||||||
 | 
					      (goto-char (match-end 0))))
 | 
				
			||||||
 | 
					    (vector (+ 4 (current-column)))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					;;;###autoload
 | 
				
			||||||
 | 
					(defconst google-c-style
 | 
				
			||||||
 | 
					  `((c-recognize-knr-p . nil)
 | 
				
			||||||
 | 
					    (c-enable-xemacs-performance-kludge-p . t) ; speed up indentation in XEmacs
 | 
				
			||||||
 | 
					    (c-basic-offset . 2)
 | 
				
			||||||
 | 
					    (indent-tabs-mode . nil)
 | 
				
			||||||
 | 
					    (c-comment-only-line-offset . 0)
 | 
				
			||||||
 | 
					    (c-hanging-braces-alist . ((defun-open after)
 | 
				
			||||||
 | 
					                               (defun-close before after)
 | 
				
			||||||
 | 
					                               (class-open after)
 | 
				
			||||||
 | 
					                               (class-close before after)
 | 
				
			||||||
 | 
					                               (inexpr-class-open after)
 | 
				
			||||||
 | 
					                               (inexpr-class-close before)
 | 
				
			||||||
 | 
					                               (namespace-open after)
 | 
				
			||||||
 | 
					                               (inline-open after)
 | 
				
			||||||
 | 
					                               (inline-close before after)
 | 
				
			||||||
 | 
					                               (block-open after)
 | 
				
			||||||
 | 
					                               (block-close . c-snug-do-while)
 | 
				
			||||||
 | 
					                               (extern-lang-open after)
 | 
				
			||||||
 | 
					                               (extern-lang-close after)
 | 
				
			||||||
 | 
					                               (statement-case-open after)
 | 
				
			||||||
 | 
					                               (substatement-open after)))
 | 
				
			||||||
 | 
					    (c-hanging-colons-alist . ((case-label)
 | 
				
			||||||
 | 
					                               (label after)
 | 
				
			||||||
 | 
					                               (access-label after)
 | 
				
			||||||
 | 
					                               (member-init-intro before)
 | 
				
			||||||
 | 
					                               (inher-intro)))
 | 
				
			||||||
 | 
					    (c-hanging-semi&comma-criteria
 | 
				
			||||||
 | 
					     . (c-semi&comma-no-newlines-for-oneline-inliners
 | 
				
			||||||
 | 
					        c-semi&comma-inside-parenlist
 | 
				
			||||||
 | 
					        c-semi&comma-no-newlines-before-nonblanks))
 | 
				
			||||||
 | 
					    (c-indent-comments-syntactically-p . t)
 | 
				
			||||||
 | 
					    (comment-column . 40)
 | 
				
			||||||
 | 
					    (c-indent-comment-alist . ((other . (space . 2))))
 | 
				
			||||||
 | 
					    (c-cleanup-list . (brace-else-brace
 | 
				
			||||||
 | 
					                       brace-elseif-brace
 | 
				
			||||||
 | 
					                       brace-catch-brace
 | 
				
			||||||
 | 
					                       empty-defun-braces
 | 
				
			||||||
 | 
					                       defun-close-semi
 | 
				
			||||||
 | 
					                       list-close-comma
 | 
				
			||||||
 | 
					                       scope-operator))
 | 
				
			||||||
 | 
					    (c-offsets-alist . ((arglist-intro google-c-lineup-expression-plus-4)
 | 
				
			||||||
 | 
					                        (func-decl-cont . ++)
 | 
				
			||||||
 | 
					                        (member-init-intro . ++)
 | 
				
			||||||
 | 
					                        (inher-intro . ++)
 | 
				
			||||||
 | 
					                        (comment-intro . 0)
 | 
				
			||||||
 | 
					                        (arglist-close . c-lineup-arglist)
 | 
				
			||||||
 | 
					                        (topmost-intro . 0)
 | 
				
			||||||
 | 
					                        (block-open . 0)
 | 
				
			||||||
 | 
					                        (inline-open . 0)
 | 
				
			||||||
 | 
					                        (substatement-open . 0)
 | 
				
			||||||
 | 
					                        (statement-cont
 | 
				
			||||||
 | 
					                         .
 | 
				
			||||||
 | 
					                         (,(when (fboundp 'c-no-indent-after-java-annotations)
 | 
				
			||||||
 | 
					                             'c-no-indent-after-java-annotations)
 | 
				
			||||||
 | 
					                          ,(when (fboundp 'c-lineup-assignments)
 | 
				
			||||||
 | 
					                             'c-lineup-assignments)
 | 
				
			||||||
 | 
					                          ++))
 | 
				
			||||||
 | 
					                        (label . /)
 | 
				
			||||||
 | 
					                        (case-label . +)
 | 
				
			||||||
 | 
					                        (statement-case-open . +)
 | 
				
			||||||
 | 
					                        (statement-case-intro . +) ; case w/o {
 | 
				
			||||||
 | 
					                        (access-label . /)
 | 
				
			||||||
 | 
					                        (innamespace . 0))))
 | 
				
			||||||
 | 
					  "Google C/C++ Programming Style.")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					;;;###autoload
 | 
				
			||||||
 | 
					(defun google-set-c-style ()
 | 
				
			||||||
 | 
					  "Set the current buffer's c-style to Google C/C++ Programming
 | 
				
			||||||
 | 
					  Style. Meant to be added to `c-mode-common-hook'."
 | 
				
			||||||
 | 
					  (interactive)
 | 
				
			||||||
 | 
					  (make-local-variable 'c-tab-always-indent)
 | 
				
			||||||
 | 
					  (setq c-tab-always-indent t)
 | 
				
			||||||
 | 
					  (c-add-style "Google" google-c-style t))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					;;;###autoload
 | 
				
			||||||
 | 
					(defun google-make-newline-indent ()
 | 
				
			||||||
 | 
					  "Sets up preferred newline behavior. Not set by default. Meant
 | 
				
			||||||
 | 
					  to be added to `c-mode-common-hook'."
 | 
				
			||||||
 | 
					  (interactive)
 | 
				
			||||||
 | 
					  (define-key c-mode-base-map "\C-m" 'newline-and-indent)
 | 
				
			||||||
 | 
					  (define-key c-mode-base-map [ret] 'newline-and-indent))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(provide 'google-c-style)
 | 
				
			||||||
 | 
					;;; google-c-style.el ends here
 | 
				
			||||||
							
								
								
									
										7
									
								
								users/glittershark/emacs.d/nix-clangd.sh
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										7
									
								
								users/glittershark/emacs.d/nix-clangd.sh
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
					@ -0,0 +1,7 @@
 | 
				
			||||||
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					set -euo pipefail
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CLANGD_FLAGS=--compile-commands-dir=/home/grfn/builds/tazjix \
 | 
				
			||||||
 | 
					    nix-shell /home/grfn/code/depot \
 | 
				
			||||||
 | 
					    -A third_party.nix \
 | 
				
			||||||
 | 
					    --run nix-clangd
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue