 
 Accepts :core, :private and :plugins as special arguments, indicating you want
 to byte-compile Doom's core files, your private config or your ELPA plugins,
-respectively."
-  (doom//byte-compile args))
-
-(def-dispatcher! (recompile rc)
-  "Re-byte-compiles outdated *.elc files."
-  (doom//byte-compile args 'recompile))
-
-(def-dispatcher! clean
-  "Delete all *.elc files."
-  (doom//clean-byte-compiled-files))
-
-(def-dispatcher! test
-  "Run Doom unit tests."
-  (require 'core-tests)
-  (doom//run-tests args))
-
-(def-dispatcher! info
-  "Output system info in markdown for bug reports."
-  (doom/info))
-
-(def-dispatcher! (version v)
-  "Reports the version of Doom and Emacs."
-  (doom/version))
-
-(def-dispatcher! (refresh re)
+respectively.")
+
+(dispatcher! (compile c) (doom-byte-compile args)
+  "Byte-compiles your config or selected modules.
+
+  compile [TARGETS...]
+  compile :core :private lang/python
+  compile feature lang
+
+Accepts :core, :private and :plugins as special arguments, indicating you want
+to byte-compile Doom's core files, your private config or your ELPA plugins,
+respectively.")
+
+(dispatcher! (recompile rc) (doom-byte-compile args 'recompile)
+  "Re-byte-compiles outdated *.elc files.")
+
+(dispatcher! clean (doom-clean-byte-compiled-files)
+  "Delete all *.elc files.")
+
+
+(dispatcher! test
+  (progn (require 'core-tests)
+         (doom-run-tests args))
+  "Run Doom unit tests.")
+
+(dispatcher! info (doom/info)
+  "Output system info in markdown for bug reports.")
+
+(dispatcher! (version v) (doom/version)
+  "Reports the version of Doom and Emacs.")
+
+(dispatcher! (refresh re) (doom-refresh)
   "Refresh Doom. Same as autoremove+install+autoloads.
 
 This is the equivalent of running autoremove, install, autoloads, then

  doom -p ~/.config/doom quickstart

This command will refuse to overwrite the private directory if it already
exists."
  (doom//quickstart))

(def-dispatcher! (install i)
  "Installs requested plugins that aren't installed."
  (doom//reload-doom-autoloads)
  (when (doom//packages-install doom-auto-accept)
    (doom//reload-package-autoloads)))

(def-dispatcher! (update u)
  "Checks for and updates outdated plugins."
  (doom//reload-doom-autoloads)
  (when (doom//packages-update doom-auto-accept)
    (doom//reload-package-autoloads)))

(def-dispatcher! (autoremove r)
  "Removes orphaned plugins."
  (doom//reload-doom-autoloads)
  (when (doom//packages-autoremove doom-auto-accept)
    (doom//reload-package-autoloads)))

(def-dispatcher! (autoloads a)
  "Regenerates Doom's autoloads file.

This file tells Emacs where to find your module's autoloaded functions and
plugins."
  (doom//reload-autoloads nil 'force))

(def-dispatcher! (upgrade up)
  "Checks out the latest Doom on this branch."
  (doom//upgrade))

(def-dispatcher! (compile c)
  "Byte-compiles your config or selected modules.

  compile [TARGETS...]

          (apply #'doom--dispatch-help command desc (cdr args))
        (funcall body (cdr args))))))

(defmacro dispatcher! (command form &optional docstring)
  "Define a dispatcher command. COMMAND is a symbol or a list of symbols
representing the aliases for this command. DESC is a string description. The
first line should be short (under 60 letters), as it will be displayed for
bin/doom help.

BODY will be run when this dispatcher is called."
  (declare (doc-string 3))
  (let* ((command (doom-enlist command))
         (cmd (car command))
         (aliases (cdr command)))
