From 0a78922471454cfeac141dbaee2a47f96b36e7b7 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Sun, 1 May 2016 01:10:30 -0400 Subject: [PATCH] Refactor modules to optimize autoloads + startup --- modules/module-apple.el | 2 +- modules/module-cc.el | 8 +-- modules/module-csharp.el | 2 +- modules/module-data.el | 10 ++-- modules/module-go.el | 6 +- modules/module-haskell.el | 2 +- modules/module-java.el | 2 +- modules/module-js.el | 6 +- modules/module-julia.el | 2 +- modules/module-lisp.el | 104 +++++++++++++++++++---------------- modules/module-lua.el | 6 +- modules/module-php.el | 9 +-- modules/module-processing.el | 2 +- modules/module-python.el | 7 ++- modules/module-ruby.el | 7 +-- modules/module-rust.el | 6 +- modules/module-sh.el | 2 +- modules/module-web.el | 10 ++-- 18 files changed, 103 insertions(+), 90 deletions(-) diff --git a/modules/module-apple.el b/modules/module-apple.el index 634c6ca48..3d30b687f 100644 --- a/modules/module-apple.el +++ b/modules/module-apple.el @@ -22,9 +22,9 @@ (use-package swift-mode :mode "\\.swift$" :init - (def-company-backend! swift-mode (sourcekit yasnippet)) (add-hook 'swift-mode-hook 'flycheck-mode) :config + (def-company-backend! swift-mode (sourcekit yasnippet)) (push 'swift flycheck-checkers)) (use-package company-sourcekit diff --git a/modules/module-cc.el b/modules/module-cc.el index 4a1030d91..4ee8d4eea 100644 --- a/modules/module-cc.el +++ b/modules/module-cc.el @@ -4,8 +4,6 @@ :commands (c-mode c++-mode objc-mode java-mode) :init (associate! objc-mode :match "\\.mm$") - (def-electric! (c-mode c++-mode objc-mode) :chars (?\n ?\})) - (def-company-backend! (c-mode c++-mode objc-mode) (irony-c-headers irony)) (add-hook! 'c++-mode-hook '(highlight-numbers-mode narf|init-c++-C11-highlights)) (add-hook 'c-initialization-hook 'narf|init-c/c++-settings) @@ -24,12 +22,14 @@ magic-mode-alist) :config + (def-electric! (c-mode c++-mode objc-mode) :chars (?\n ?\})) + (def-company-backend! (c-mode c++-mode objc-mode) (irony-c-headers irony)) + (setq c-tab-always-indent nil c-electric-flag nil) (map! :map c-mode-base-map (:localleader :nv ";" 'narf/append-semicolon)) - (def-textobj! "<" "<" ">") (sp-with-modes '(c-mode c++-mode objc-mode java-mode) (sp-local-pair "<" ">" :when '(narf/sp-point-is-template-p narf/sp-point-after-include-p)) (sp-local-pair "/*" "*/" :post-handlers '(("||\n[i]" "RET") ("| " "SPC"))) @@ -65,7 +65,7 @@ ;; (use-package cmake-mode :mode "CMakeLists\\.txt$" - :init (def-company-backend! cmake-mode (cmake yasnippet))) + :config (def-company-backend! cmake-mode (cmake yasnippet))) (use-package company-cmake :after cmake-mode) (use-package glsl-mode :mode ("\\.glsl\\'" "\\.vert\\'" "\\.frag\\'" "\\.geom\\'")) diff --git a/modules/module-csharp.el b/modules/module-csharp.el index 614561556..871136871 100644 --- a/modules/module-csharp.el +++ b/modules/module-csharp.el @@ -13,9 +13,9 @@ omnisharp-server-executable-path (concat narf-ext-dir "/OmniSharp.exe")) :when (file-exists-p omnisharp-server-executable-path) :init - (def-company-backend! csharp-mode (omnisharp)) (add-hook! csharp-mode '(turn-on-eldoc-mode emr-initialize omnisharp-mode)) :config + (def-company-backend! csharp-mode (omnisharp)) (map! :map omnisharp-mode-map "gd" 'omnisharp-go-to-definition (:localleader diff --git a/modules/module-data.el b/modules/module-data.el index cc9787f9a..39b04a907 100644 --- a/modules/module-data.el +++ b/modules/module-data.el @@ -1,6 +1,8 @@ ;;; module-data.el (associate! nxml-mode :match "\\.plist$") +(after! nxml-mode + (def-company-backend! nxml-mode (nxml yasnippet))) (use-package toml-mode :mode "\\.toml$") @@ -20,11 +22,9 @@ ;; (def-project-type! ansible-mode "ans" :modes (yaml-mode) - :files ("roles/")) - -(use-package company-ansible - :commands (company-ansible) - :init (def-company-backend! ansible-mode (ansible))) + :files ("roles/") + (def-company-backend! ansible-mode (ansible))) +(use-package company-ansible :commands (company-ansible)) (def-project-type! vagrant "vagrant" :files ("Vagrantfile")) diff --git a/modules/module-go.el b/modules/module-go.el index 4ec471aaf..d5afe8162 100644 --- a/modules/module-go.el +++ b/modules/module-go.el @@ -4,13 +4,13 @@ :mode "\\.go$" :interpreter "go" :init - (def-builder! go-mode "go build") - (def-company-backend! go-mode (go yasnippet)) - (def-repl! go-mode gorepl-run) (add-hook! go-mode '(emr-initialize flycheck-mode go-eldoc-setup)) (add-hook! go-mode (add-hook 'before-save-hook 'gofmt-before-save)) :config + (def-builder! go-mode "go build") + (def-company-backend! go-mode (go yasnippet)) + (def-repl! go-mode gorepl-run) (map! :map go-mode-map :n "gd" 'godef-jump :n "gD" 'godef-describe diff --git a/modules/module-haskell.el b/modules/module-haskell.el index b952972b6..5b09c0b1c 100644 --- a/modules/module-haskell.el +++ b/modules/module-haskell.el @@ -7,9 +7,9 @@ :interpreter (("runghc" . haskell-mode) ("runhaskell" . haskell-mode)) :init - (def-repl! haskell-mode switch-to-haskell) (add-hook! haskell-mode '(interactive-haskell-mode flycheck-mode)) :config + (def-repl! haskell-mode switch-to-haskell) (push ".hi" completion-ignored-extensions)) (use-package inf-haskell diff --git a/modules/module-java.el b/modules/module-java.el index 3fc19dfe3..c06858269 100644 --- a/modules/module-java.el +++ b/modules/module-java.el @@ -29,9 +29,9 @@ (use-package android-mode :commands android-mode :init - (def-yas-mode! 'android-mode) (add-hook! (java-mode groovy-mode nxml-mode) 'narf|android-mode-enable-maybe) :config + (def-yas-mode! 'android-mode) (after! company-dict (push 'android-mode company-dict-minor-mode-list))) diff --git a/modules/module-js.el b/modules/module-js.el index ece85c984..5a1b0a826 100644 --- a/modules/module-js.el +++ b/modules/module-js.el @@ -4,13 +4,13 @@ :mode "\\.js$" :interpreter "node" :init + (add-hook! js2-mode '(tern-mode emr-initialize)) + + :config (def-repl! js2-mode nodejs-repl) (def-docset! js2-mode "js,javascript,nodejs,angularjs,express,jquery,mongoose") (def-company-backend! js2-mode (tern)) (def-electric! js2-mode :chars (?\} ?\) ?.) :words ("||" "&&")) - (add-hook! js2-mode '(tern-mode emr-initialize)) - - :config (setq-default js2-skip-preprocessor-directives t js2-show-parse-errors nil diff --git a/modules/module-julia.el b/modules/module-julia.el index bab6fbabe..11e28851c 100644 --- a/modules/module-julia.el +++ b/modules/module-julia.el @@ -3,7 +3,7 @@ (use-package julia-mode :mode "\\.jl$" :interpreter "julia" - :init (def-repl! julia-mode narf/julia-repl)) + :config (def-repl! julia-mode narf/julia-repl)) (provide 'module-julia) ;;; module-julia.el ends here diff --git a/modules/module-lisp.el b/modules/module-lisp.el index 9154bcf16..324c5e4d6 100644 --- a/modules/module-lisp.el +++ b/modules/module-lisp.el @@ -1,14 +1,7 @@ ;;; module-lisp --- all things lisp (associate! emacs-lisp-mode :match "\\(/Cask\\|\\.\\(el\\|gz\\)\\)$") -(def-company-backend! emacs-lisp-mode (elisp yasnippet)) -(def-repl! emacs-lisp-mode narf/elisp-inf-ielm) - -(add-hook! emacs-lisp-mode - '(turn-on-eldoc-mode flycheck-mode highlight-numbers-mode)) - -;; Real go-to-definition for elisp -(map! :map emacs-lisp-mode-map :m "gd" 'narf/elisp-find-function-at-pt) +(add-hook! emacs-lisp-mode '(turn-on-eldoc-mode flycheck-mode highlight-numbers-mode)) (use-package highlight-quoted :commands (highlight-quoted-mode) @@ -17,26 +10,70 @@ (use-package slime :defer t :config (setq inferior-lisp-program "clisp")) -;; Don't affect lisp indentation (only `tab-width') -(setq editorconfig-indentation-alist - (delq (assq 'emacs-lisp-mode editorconfig-indentation-alist) - editorconfig-indentation-alist)) +(add-hook 'emacs-lisp-mode-hook 'narf/elisp-init) +(defun narf/elisp-init () + (def-company-backend! emacs-lisp-mode (elisp yasnippet)) + (def-repl! emacs-lisp-mode narf/elisp-inf-ielm) + (def-rotate! emacs-lisp-mode + :symbols (("t" "nil") + ("let" "let*") + ("when" "unless") + ("append" "prepend") + ("advice-add" "advice-remove") + ("add-hook" "add-hook!" "remove-hook"))) -(add-hook! emacs-lisp-mode + ;; Don't affect lisp indentation (only `tab-width') + (setq editorconfig-indentation-alist + (delq (assq 'emacs-lisp-mode editorconfig-indentation-alist) + editorconfig-indentation-alist)) + + ;; Real go-to-definition for elisp + (map! :map emacs-lisp-mode-map :m "gd" 'narf/elisp-find-function-at-pt) + + (font-lock-add-keywords + 'emacs-lisp-mode `(("(\\(lambda\\)" + (1 (narf/show-as ?λ))) + ;; Highlight narf macros (macros are fontified in emacs 25+) + (,(concat + "(\\(def-" + (regexp-opt '("electric" "project-type" "company-backend" + "builder" "repl" "textobj" "tmp-excmd" "rotate" + "repeat" "yas-mode" "env-command" "docset")) + "!\\)") + (1 font-lock-keyword-face append)) + (,(concat + "(\\(" + (regexp-opt '("λ" "in" "map" "after" "shut-up" "add-hook" + "associate" "open-with" "define-org-link" + "define-org-section")) + "!\\)") + (1 font-lock-keyword-face append)) + ;; Ert + (,(concat + "(" + (regexp-opt '("ert-deftest") t) + " \\([^ ]+\\)") + (1 font-lock-keyword-face) + (2 font-lock-function-name-face)))) + + (remove-hook 'emacs-lisp-mode-hook 'narf/elisp-init)) + +(add-hook 'emacs-lisp-mode-hook 'narf/elisp-hook) +(defun narf/elisp-hook () (setq mode-name "Elisp") ; [pedantry intensifies] (add-hook 'before-save-hook 'delete-trailing-whitespace nil t) (add-hook 'after-save-hook 'narf/elisp-auto-compile nil t) (let ((header-face 'font-lock-constant-face)) - (add-to-list 'imenu-generic-expression - `("Evil Command" "\\(^\\s-*(evil-define-command +\\)\\(\\_<.+\\_>\\)" 2)) - (add-to-list 'imenu-generic-expression - `("Evil Operator" "\\(^\\s-*(evil-define-operator +\\)\\(\\_<.+\\_>\\)" 2)) - (add-to-list 'imenu-generic-expression - `("Package" "\\(^\\s-*(use-package +\\)\\(\\_<.+\\_>\\)" 2)) - (add-to-list 'imenu-generic-expression - `("Spaceline Segment" "\\(^\\s-*(spaceline-define-segment +\\)\\(\\_<.+\\_>\\)" 2)))) + (push '("Evil Command" "\\(^\\s-*(evil-define-command +\\)\\(\\_<.+\\_>\\)" 2) + imenu-generic-expression) + (push '("Evil Operator" "\\(^\\s-*(evil-define-operator +\\)\\(\\_<.+\\_>\\)" 2) + imenu-generic-expression) + (push '("Package" "\\(^\\s-*(use-package +\\)\\(\\_<.+\\_>\\)" 2) + imenu-generic-expression) + (push '("Spaceline Segment" "\\(^\\s-*(spaceline-define-segment +\\)\\(\\_<.+\\_>\\)" 2) + imenu-generic-expression))) ;; Add new colors to helm-imenu (after! helm-imenu @@ -64,31 +101,6 @@ collect (cons disp (cons k v))))) -(font-lock-add-keywords - 'emacs-lisp-mode `(("(\\(lambda\\)" - (1 (narf/show-as ?λ))) - ;; Highlight narf macros (macros are fontified in emacs 25+) - (,(concat - "(\\(def-" - (regexp-opt '("electric" "project-type" "company-backend" - "builder" "repl" "textobj" "tmp-excmd" - "repeat" "yas-mode" "env-command" "docset")) - "!\\)") - (1 font-lock-keyword-face append)) - (,(concat - "(\\(" - (regexp-opt '("λ" "in" "map" "after" "shut-up" "add-hook" - "associate" "open-with" "define-org-link" - "define-org-section")) - "!\\)") - (1 font-lock-keyword-face append)) - ;; Ert - (,(concat - "(" - (regexp-opt '("ert-deftest") t) - " \\([^ ]+\\)") - (1 font-lock-keyword-face) - (2 font-lock-function-name-face)))) ;; (def-project-type! emacs-ert "ert" diff --git a/modules/module-lua.el b/modules/module-lua.el index 885f83daa..5b2a9e081 100644 --- a/modules/module-lua.el +++ b/modules/module-lua.el @@ -3,13 +3,11 @@ (use-package lua-mode :mode "\\.lua$" :interpreter "lua" - :init + :init (add-hook 'lua-mode-hook 'flycheck-mode) + :config (def-company-backend! lua-mode (yasnippet)) (def-electric! lua-mode :words ("else" "end")) (def-repl! lua-mode narf/inf-lua) - (add-hook 'lua-mode-hook 'flycheck-mode) - - :config (sp-with-modes '(lua-mode) ;; disable defaults (sp-local-pair "if" nil :actions :rem) diff --git a/modules/module-php.el b/modules/module-php.el index 2a6af4e53..b9a077327 100644 --- a/modules/module-php.el +++ b/modules/module-php.el @@ -2,20 +2,21 @@ (use-package hack-mode :mode "\\.hh$" - :init (def-company-backend! hack-mode (capf))) + :config (def-company-backend! hack-mode (capf))) (use-package php-mode :mode ("\\.php[s345]?$" "\\.inc$" ) :interpreter "php" :init - (def-repl! php-mode php-boris) - (def-docset! php-mode "php,laravel") - (def-company-backend! php-mode '(company-ac-php-backend php-extras-company)) (add-hook 'php-mode-hook 'flycheck-mode) (setq php-template-compatibility nil php-extras-eldoc-functions-file (concat narf-temp-dir "/php-extras-eldoc-functions")) :config + (def-repl! php-mode php-boris) + (def-docset! php-mode "php,laravel") + (def-company-backend! php-mode '(company-ac-php-backend php-extras-company)) + (map! :map php-mode-map (:localleader :nv ";" 'narf/append-semicolon)) (sp-with-modes '(php-mode) diff --git a/modules/module-processing.el b/modules/module-processing.el index 90f2324ec..c579c56a6 100644 --- a/modules/module-processing.el +++ b/modules/module-processing.el @@ -5,10 +5,10 @@ :commands (processing-mode processing-find-sketch) :mode "\\.pde$" :init - (def-builder! processing-mode processing-sketch-build) (add-hook 'processing-compilation-mode-hook 'narf|hide-mode-line) :config + (def-builder! processing-mode processing-sketch-build) (setq processing-location "/usr/local/bin/processing-java" processing-application-dir "/Applications/Processing.app" processing-sketchbook-dir "~/Dropbox/work/pde" diff --git a/modules/module-python.el b/modules/module-python.el index 8482fbdcc..ac1c232bd 100644 --- a/modules/module-python.el +++ b/modules/module-python.el @@ -17,13 +17,14 @@ python-shell-completion-string-code "';'.join(get_ipython().Completer.all_completions('''%s'''))\n") + (add-hook 'python-mode-hook 'flycheck-mode) + + :config (def-company-backend! python-mode (anaconda)) (def-docset! python-mode "py,py3,python") (def-env-command! python-mode "python --version 2>&1 | cut -d' ' -f2") (def-repl! python-mode narf/inf-python) - (add-hook 'python-mode-hook 'flycheck-mode) - :config (define-key python-mode-map (kbd "DEL") nil)) ; interferes with smartparens (use-package anaconda-mode @@ -68,8 +69,8 @@ :preface (defvar nose-mode-map (make-sparse-keymap)) :init (associate! nose-mode :match "/test_.+\\.py$" :in (python-mode)) - (def-yas-mode! 'nose-mode) :config + (def-yas-mode! 'nose-mode) (map! :map nose-mode-map (:localleader :n "tr" 'nosetests-again diff --git a/modules/module-ruby.el b/modules/module-ruby.el index 364b95821..05ffe2edf 100644 --- a/modules/module-ruby.el +++ b/modules/module-ruby.el @@ -4,16 +4,15 @@ :mode ("\\.rb$" "\\.rake$" "\\.gemspec$" "\\.?pryrc$" "/\\(Gem\\|Cap\\|Vagrant\\|Rake\\)file$") :interpreter "ruby" - :init + :init (add-hook! ruby-mode '(flycheck-mode yard-mode)) + :config (def-builder! ruby-mode "rake %s" "Rakefile") (def-company-backend! ruby-mode (dabbrev-code)) (def-docset! ruby-mode "rb,ruby,rubygem") (def-env-command! ruby-mode "ruby --version | cut -d' ' -f2") (def-repl! ruby-mode inf-ruby) (def-electric! ruby-mode :words ("else" "end" "elseif")) - (add-hook! 'ruby-mode-hook '(flycheck-mode yard-mode)) - :config (setq ruby-deep-indent-paren t) ; Formatting ;; Don't interfere with my custom RET behavior @@ -68,7 +67,7 @@ (use-package inf-ruby :commands (inf-ruby inf-ruby-console-auto) - :init (def-company-backend! inf-ruby-mode (inf-ruby))) + :config (def-company-backend! inf-ruby-mode (inf-ruby))) (use-package company-inf-ruby :after inf-ruby) diff --git a/modules/module-rust.el b/modules/module-rust.el index a021c87b4..99f35f911 100644 --- a/modules/module-rust.el +++ b/modules/module-rust.el @@ -2,10 +2,10 @@ (use-package rust-mode :mode "\\.rs$" - :init + :init (add-hook 'rust-mode-hook 'flycheck-mode) + :config (def-builder! rust-mode "cargo run" "Cargo.toml") - (def-builder! toml-mode "cargo run" "Cargo.toml") - (add-hook 'rust-mode-hook 'flycheck-mode)) + (def-builder! toml-mode "cargo run" "Cargo.toml")) (use-package flycheck-rust :after rust-mode) diff --git a/modules/module-sh.el b/modules/module-sh.el index 4a16096fe..aea64f1f3 100644 --- a/modules/module-sh.el +++ b/modules/module-sh.el @@ -3,9 +3,9 @@ (associate! sh-mode :match "\\.\\(ba\\|z\\)sh$") (associate! sh-mode :match "/\\.?z\\(sh\\(/.*\\|$\\)\\|profile\\|login\\|logout\\|shrc\\|shenv\\)$") (associate! sh-mode :match "/\\.?bash\\(/.*\\|rc\\|_profile\\)$") -(def-electric! sh-mode :words ("else" "elif" "fi" "done")) (after! sh-script + (def-electric! sh-mode :words ("else" "elif" "fi" "done")) (def-repl! sh-mode narf/inf-shell) (setq sh-indent-after-continuation 'always) diff --git a/modules/module-web.el b/modules/module-web.el index db04ce2d7..5ccccd080 100644 --- a/modules/module-web.el +++ b/modules/module-web.el @@ -1,8 +1,5 @@ ;;; module-web.el -(def-company-backend! sass-mode (css)) -(def-company-backend! scss-mode (css)) -(def-docset! scss-mode "sass,bourbon") (add-hook! (sass-mode scss-mode less-css-mode) '(flycheck-mode narf|hl-line-off hs-minor-mode)) @@ -17,13 +14,18 @@ :config (push '("less" "css") projectile-other-file-alist)) (use-package sass-mode :mode "\\.sass$" - :config (push '("sass" "css") projectile-other-file-alist)) + :config + (def-company-backend! sass-mode (css)) + (def-docset! sass-mode "sass,bourbon") + (push '("sass" "css") projectile-other-file-alist)) (use-package scss-mode :mode "\\.scss$" :preface (require 'css-mode) :init (setq scss-compile-at-save nil) :config + (def-company-backend! scss-mode (css)) + (def-docset! scss-mode "sass,bourbon") (push '("scss" "css") projectile-other-file-alist) (sp-local-pair 'scss-mode "/*" "*/" :post-handlers '(("[d-3]||\n[i]" "RET") ("| " "SPC")))