From c8124c3efb9c68bd4a3310da1422af9fa92e61f1 Mon Sep 17 00:00:00 2001
From: Joel Grunbaum <joelgrun@gmail.com>
Date: Thu, 15 Oct 2020 00:16:56 +0000
Subject: [PATCH] Added LSP support

---
 config.org |  193 +++++++++++++++++++++++++++++++++++++----------
 1 files changed, 150 insertions(+), 43 deletions(-)

diff --git a/config.org b/config.org
index 1accf57..9e4ccb8 100644
--- a/config.org
+++ b/config.org
@@ -677,6 +677,28 @@
   (defalias 'yes-or-no-p 'y-or-n-p)
 #+END_SRC
 
+** COMMENT Sublime-like minimap
+Get a minimap preview of the file on the side like sublime text.
+Want to make work but need to find a good way of doing so.
+#+BEGIN_SRC emacs-lisp
+  (use-package sublimity
+    :ensure t
+    :config
+    (require 'sublimity-scroll)
+    (setq sublimity-scroll-weight 4
+          sublimity-scroll-drift-length 3)
+    (require 'sublimity-map)
+    (setq sublimity-map-size 20
+          sublimity-map-scale 0.3)
+    (sublimity-map-set-delay nil)
+    (sublimity-mode 1))
+
+  (use-package minimap
+    :ensure t
+    :config
+    (minimap-mode))
+#+END_SRC
+
 * Mode line tweaks
 Diminish is used but is included in init.el such that it can be used throughout this document
 ** Spaceline
@@ -698,6 +720,15 @@
 Slightly nicer separator.
 #+BEGIN_SRC emacs-lisp
 (setq powerline-default-separator nil)
+#+END_SRC
+
+** Nyan mode
+Use nyan cat as a reference for buffer progression.
+#+BEGIN_SRC emacs-lisp
+  (use-package nyan-mode
+    :ensure t
+    :config
+    (nyan-mode 1))
 #+END_SRC
 
 * Programming tweaks
@@ -747,6 +778,27 @@
     (setq company-minimum-prefix-length 3))
 #+END_SRC
 
+** LSP Mode
+Use LSP for completion suggestions
+#+BEGIN_SRC emacs-lisp
+  (use-package lsp-mode
+    :ensure t
+    :hook ((lsp-mode . lsp-enable-which-key-integration))
+    :init
+    (setq lsp-keymap-prefix "C-c l")
+    :commands lsp
+    :config
+    (setq read-process-output-max (* 1024 1024))
+    (setq lsp-completion-provider :capf))
+
+  (use-package lsp-ui
+    :ensure t
+    :commands lsp-ui-mode)
+
+  (use-package helm-lsp
+    :ensure t
+    :commands helm-lsp-workspace-symbol)
+#+END_SRC
 ** Version control
 Settings for emacs' own version control system.
 *** Enable version control on the mode line
@@ -906,6 +958,12 @@
                                      company-irony)))
 #+END_SRC
 
+**** LSP
+Allow completion with LSP.
+#+BEGIN_SRC emacs-lisp
+(add-hook 'c-mode-hook 'lsp)
+(add-hook 'cpp-mode-hook 'lsp)
+#+END_SRC
 *** emacs-lisp
 **** COMMENT yasnippet
 Enable yasnippet.
@@ -996,7 +1054,7 @@
     (shell-command "unzip -o ~/.texcount/texcount.zip -d ~/.texcount")
     (add-to-list 'exec-path "~/.texcount/texcount.pl"))
 
-  (if (not(file-exists-p "~/.texcount/texcount.pl"))
+  (if (not(or (file-exists-p "~/.texcount/texcount.pl") (file-exists-p "/usr/bin/texcount")))
       (get-texcount-latest))
 
   (defun texcount ()
@@ -1067,54 +1125,55 @@
 **** Integrate into emacs
 Add updated version (based off auto-package-update) and integrate it with Emacs.
 #+BEGIN_SRC emacs-lisp
-    (defun verilog-read-file-as-string (file)
-      "Read FILE contents."
-      (when (file-exists-p file)
-        (with-temp-buffer
-          (insert-file-contents file)
-          (buffer-string))))
-
-    (defun verilog-write-string-to-file (file string)
-      "Substitute FILE contents with STRING."
+  (defun verilog-read-file-as-string (file)
+    "Read FILE contents."
+    (when (file-exists-p file)
       (with-temp-buffer
-        (insert string)
-        (when (file-writable-p file)
-          (write-region (point-min)
-                        (point-max)
-                        file))))
+        (insert-file-contents file)
+        (buffer-string))))
 
-    (defun verilog-today-day ()
-      (time-to-days (current-time)))
+  (defun verilog-write-string-to-file (file string)
+    "Substitute FILE contents with STRING."
+    (with-temp-buffer
+      (insert string)
+      (when (file-writable-p file)
+        (write-region (point-min)
+                      (point-max)
+                      file))))
 
-    (defun should-update-verilog-p ()
-      "Return non-nil when an update is due."
-      (and
-       (or
-        (not (file-exists-p "~/.emacs.d/.last-verilog-update-day"))
-        (if (>= (/ (- (verilog-today-day) (verilog-read-last-update-day)) 7) 1)
-            t
-          nil))))
+  (defun verilog-today-day ()
+    (time-to-days (current-time)))
 
-    (defun verilog-read-last-update-day ()
-      "Read last update day."
-      (string-to-number
-       (verilog-read-file-as-string "~/.emacs.d/.last-verilog-update-day")))
+  (defun should-update-verilog-p ()
+    "Return non-nil when an update is due."
+    (and
+     (or
+      (not (file-exists-p "~/.emacs.d/.last-verilog-update-day"))
+      (if (>= (/ (- (verilog-today-day) (verilog-read-last-update-day)) 7) 1)
+          t
+        nil))))
 
-    (defun verilog-write-current-day ()
-      "Store current day."
-      (verilog-write-string-to-file
-       "~/.emacs.d/.last-verilog-update-day"
-       (int-to-string (verilog-today-day))))
+  (defun verilog-read-last-update-day ()
+    "Read last update day."
+    (string-to-number
+     (verilog-read-file-as-string "~/.emacs.d/.last-verilog-update-day")))
 
-    (use-package verilog-mode
-      :init
-      (when (should-update-verilog-p)
-          (get-verilog-latest)
-          (verilog-write-current-day))
-      (add-to-list 'load-path "~/.emacs.d/elpa/verilog-mode/verilog-mode.el")
-      :config
-      (autoload 'verilog-mode "verilog-mode" "Verilog mode" t )
-      (add-to-list 'auto-mode-alist '("\\.[ds]?vh?\\'" . verilog-mode)))
+  (defun verilog-write-current-day ()
+    "Store current day."
+    (verilog-write-string-to-file
+     "~/.emacs.d/.last-verilog-update-day"
+     (int-to-string (verilog-today-day))))
+
+  (use-package verilog-mode
+    :hook (verilog-mode . lsp)
+    :init
+    (when (should-update-verilog-p)
+        (get-verilog-latest)
+        (verilog-write-current-day))
+    (add-to-list 'load-path "~/.emacs.d/elpa/verilog-mode/verilog-mode.el")
+    :config
+    (autoload 'verilog-mode "verilog-mode" "Verilog mode" t )
+    (add-to-list 'auto-mode-alist '("\\.[ds]?vh?\\'" . verilog-mode)))
 #+END_SRC
 
 *** COMMENT MATLAB
@@ -1147,6 +1206,54 @@
     :ensure t)
 #+END_SRC
 
+*** Rust
+**** Major mode
+Get the major mode for rust files.
+#+BEGIN_SRC emacs-lisp
+  (use-package rust-mode
+    :ensure t
+    :hook (rust-mode . lsp)
+    :config
+    ;; style guide suggests spaces not tabs
+    (add-hook 'rust-mode-hook (lambda () (setq indent-tabs-mode nil)))
+    (setq rust-format-on-save t))
+
+  (use-package toml-mode
+    :ensure t)
+#+END_SRC
+**** Cargo integration
+Integrate Cargo, rust's package manager.
+#+BEGIN_SRC emacs-lisp
+  (use-package cargo
+    :ensure t
+    :hook
+    (rust-mode . cargo-minor-mode))
+#+END_SRC
+**** Flycheck
+Linting with flycheck.
+#+BEGIN_SRC emacs-lisp
+  (use-package flycheck-rust
+    :ensure t
+    :config
+    (add-hook 'flyckeck-mode-hook #'flycheck-rust-setup))
+#+END_SRC
+
+**** COMMENT Completion
+Code completion with racer.
+#+BEGIN_SRC emacs-lisp
+  (use-package racer
+    :ensure t
+    :hook ((rust-mode . racer-mode)
+           (racer-mode . (eldoc-mode company-mode)))
+    :init
+    (setq racer-command "~/.cargo/bin/racer"))
+#+END_SRC
+*** Bash
+**** LSP
+Completion with LSP
+#+BEGIN_SRC emacs-lisp
+(add-hook 'sh-mode-hook 'lsp)
+#+END_SRC
 * Org mode
 ** Up to date org
 Pull the latest org mode from the repository, rather than the org which comes with emacs.

--
Gitblit v1.9.3