2019-10-29 01:04:44 -04:00
|
|
|
#+TITLE: Contributing
|
|
|
|
#+STARTUP: nofold
|
|
|
|
|
|
|
|
I can't say Doom Emacs is a one man show anymore. It wouldn't have gotten this
|
|
|
|
far without the help of folks like you! Still, I struggle to maintain it all;
|
|
|
|
especially the modules I do not use. If Doom has been useful to you, consider
|
|
|
|
pitching in and helping me out.
|
|
|
|
|
|
|
|
Help can range from reporting bugs, proposing enhancements, submitting code and
|
|
|
|
documentation, or just spreading the good word. To ensure no toes get stepped on
|
|
|
|
or wires crossed, this guide was created to help you help us.
|
|
|
|
|
|
|
|
* Table of Contents :TOC_3:
|
|
|
|
- [[#where-can-i-help][Where can I help?]]
|
|
|
|
- [[#reporting-issues][Reporting issues]]
|
|
|
|
- [[#collect-backtraces-of-any-error-messages][Collect backtraces of any error messages]]
|
|
|
|
- [[#create-a-step-by-step-reproduction-guide][Create a step-by-step reproduction guide]]
|
|
|
|
- [[#include-information-about-your-doom-install][Include information about your Doom install]]
|
|
|
|
- [[#debugging-crashes-with-gdb][Debugging crashes with gdb]]
|
|
|
|
- [[#suggesting-features-keybinds-andor-enhancements][Suggesting features, keybinds and/or enhancements]]
|
|
|
|
- [[#contributing-code][Contributing code]]
|
|
|
|
- [[#conventions][Conventions]]
|
|
|
|
- [[#code-style][Code style]]
|
|
|
|
- [[#naming-conventions][Naming conventions]]
|
|
|
|
- [[#commits--prs][Commits & PRs]]
|
|
|
|
- [[#keybind-conventions][Keybind conventions]]
|
|
|
|
- [[#your-first-code-contribution][Your first code contribution]]
|
|
|
|
- [[#submitting-pull-requests][Submitting pull requests]]
|
|
|
|
- [[#contributing-to-doom-core][Contributing to Doom core]]
|
|
|
|
- [[#contributing-to-an-existing-module][Contributing to an existing module]]
|
|
|
|
- [[#contributing-a-new-module][Contributing a new module]]
|
|
|
|
- [[#contributing-documentation][Contributing documentation]]
|
|
|
|
- [[#contributing-to-dooms-manual][Contributing to Doom's manual]]
|
|
|
|
- [[#contributing-module-documentation][Contributing module documentation]]
|
|
|
|
- [[#other-ways-to-support-doom-emacs][Other ways to support Doom Emacs]]
|
|
|
|
- [[#special-thanks][Special thanks]]
|
|
|
|
|
|
|
|
* Where can I help?
|
|
|
|
+ Our [[https://github.com/hlissner/doom-emacs/issues][issue tracker]] has many issues. If you find one that you have an answer to,
|
|
|
|
please don't hold back!
|
|
|
|
+ Look for issues tagged [[https://github.com/hlissner/doom-emacs/labels/good%20first%20issue][good first issue]]. These were judged to have a low
|
|
|
|
barrier of entry.
|
|
|
|
+ Look for issues tagged [[https://github.com/hlissner/doom-emacs/labels/help%20wanted][help wanted]]. These tend to be a little (or a lot)
|
|
|
|
harder, and are issues outside my own expertise.
|
|
|
|
+ If you've encountered a bug, [[https://github.com/hlissner/doom-emacs/issues/new/choose][file a bug report]].
|
|
|
|
+ The [[https://github.com/hlissner/doom-emacs/projects/3][development roadmap board]] is a rough timeline of what is being worked on
|
|
|
|
and when. It will give you some idea of what will change and where you can
|
|
|
|
redirect your efforts.
|
|
|
|
+ The [[https://github.com/hlissner/doom-emacs/projects/2][plugins under review board]] lists third party plugins being considered (or
|
|
|
|
rejected) for inclusion in Doom Emacs. Approved and unclaimed packages are
|
|
|
|
open for you to implement yourself.
|
|
|
|
+ The [[https://github.com/hlissner/doom-emacs/projects/5][upstream bugs board]] lists known issues that have external causes, but
|
|
|
|
affect Doom. If you're feeling adventurous (or are better acquainted with the
|
|
|
|
cause) perhaps you can address them at the source.
|
|
|
|
|
|
|
|
* TODO Reporting issues
|
|
|
|
So you've found a problem. Before you fire off that bug report, there are a few
|
|
|
|
things you should try first:
|
|
|
|
|
|
|
|
+ Make sure your configuration (or Doom Emacs) is *not* byte-compiled. Run ~doom
|
|
|
|
clean~ to ensure it isn't. *Byte-compilation interferes with debugging!*
|
2019-11-16 20:41:46 -05:00
|
|
|
+ Run ~bin/doom refresh~ to ensure all plugins are installed and autoload files
|
|
|
|
generated.
|
2019-10-29 01:04:44 -04:00
|
|
|
+ Run ~bin/doom doctor~ to diagnose common issues with your system.
|
|
|
|
+ Check [[file:faq.org::*Common%20Issues][Common Issues]] in the FAQ to see if yours is a known issue.
|
|
|
|
+ If you happen to know what module(s) are relevant to your issue, check their
|
|
|
|
documentation (press =<leader> h m= to jump to a module's documentation). Your
|
|
|
|
issue may be documented.
|
|
|
|
+ If possible, check if the issue can be reproduced in vanilla Emacs (Emacs
|
|
|
|
without Doom) and/or vanilla Doom (Doom without your private config). To test
|
|
|
|
this, use ~M-x doom/sandbox~ (bound to =<leader> h E=). [[file:getting_started.org::*Use the sandbox][A guide for using the
|
|
|
|
sandbox can be found in the manual]].
|
|
|
|
+ Make sure your issue hasn't already been reported by searching the [[https://github.com/hlissner/doom-emacs/issues][issue
|
|
|
|
tracker]].
|
|
|
|
+ Make sure your issue hasn't been resolved on the =develop= branch of Doom.
|
|
|
|
|
|
|
|
If these suggestions haven't worked for you, it's time [[https://github.com/hlissner/doom-emacs/issues/new/choose][to write a bug report]].
|
|
|
|
Please make sure of the following before you submit:
|
|
|
|
|
|
|
|
** TODO Collect backtraces of any error messages
|
|
|
|
|
|
|
|
** TODO Create a step-by-step reproduction guide
|
|
|
|
|
|
|
|
** TODO Include information about your Doom install
|
|
|
|
|
|
|
|
** TODO Debugging crashes with gdb
|
|
|
|
|
|
|
|
* TODO Suggesting features, keybinds and/or enhancements
|
|
|
|
|
|
|
|
* TODO Contributing code
|
|
|
|
There's much to be done around here! We need bugfixes, new features, and
|
2019-10-30 14:41:10 +00:00
|
|
|
documentation. If you'd like to convert some caffeine into Emacs Lisp, here are
|
2019-10-29 01:04:44 -04:00
|
|
|
a few considerations before starting that PR:
|
|
|
|
|
|
|
|
** TODO Conventions
|
|
|
|
*** TODO Code style
|
|
|
|
Doom conforms to [[https://github.com/bbatsov/emacs-lisp-style-guide][@bbatsov's emacs-lisp style guide]] with the following
|
|
|
|
exceptions:
|
|
|
|
|
|
|
|
+ Use ~mapc~ instead of ~seq-do~.
|
|
|
|
+ No hanging parentheses
|
|
|
|
+ We use =DEPRECATED= to indicate code that will eventually be removed.
|
|
|
|
|
|
|
|
*** Naming conventions
|
|
|
|
Doom has a number of naming conventions that it uses in addition to the standard
|
|
|
|
lisp conventions. Third party packages may use their own conventions as well.
|
|
|
|
|
|
|
|
**** Lisp Naming Conventions
|
|
|
|
The lisp conventions are simple. Symbols follow ~NAMESPACE-SYMBOLNAME~ for
|
|
|
|
public variables/functions (e.g. ~bookmark-default-file~ or
|
|
|
|
~electric-indent-mode~) and ~NAMESPACE--SYMBOLNAME~ for private ones (e.g.
|
|
|
|
~byte-compile--lexical-environment~ and ~yas--tables~).
|
|
|
|
|
|
|
|
~NAMESPACE~ is usually the name of the containing file or package. E.g. the
|
|
|
|
~company~ plugin prefixes all its variables/functions with ~company-~.
|
|
|
|
|
|
|
|
**** Doom Naming Conventions
|
|
|
|
+ ~doom/NAME~ or ~+MODULE/NAME~ :: Denotes a public command designed to be used
|
|
|
|
interactively, via =M-x= or a keybinding. e.g. ~doom/info~, ~+popup/other~,
|
|
|
|
~+ivy/rg~.
|
|
|
|
+ ~doom:NAME~ :: A public evil operator, motion or command. e.g. ~+evil:align~,
|
|
|
|
~+ivy:rg~.
|
|
|
|
+ ~doom-[-]NAME-h~ or ~+MODULE-[-]NAME-h~ :: A non-interactive function meant to
|
|
|
|
be used (exclusively) as a hook. e.g. ~+cc-fontify-constants-h~,
|
|
|
|
~+flycheck-buffer-h~.
|
|
|
|
+ ~doom-[-]NAME-a~ or ~+MODULE-[-]NAME-a~ :: Functions designed to be used as
|
|
|
|
advice for other functions. e.g. ~doom-set-jump-a~,
|
|
|
|
~doom--fix-broken-smie-modes-a~, ~+org--babel-lazy-load-library-a~
|
|
|
|
+ ~doom-[-]NAME-fn~ or ~+MODULE-[-]NAME-fn~ :: Indicates an [[https://en.wikipedia.org/wiki/Strategy_pattern][strategy]] function. A
|
|
|
|
good rule of thumb for what makes a strategy function is: is it
|
2019-10-30 14:41:10 +00:00
|
|
|
interchangeable? Can it be replaced with another function with a matching
|
2019-10-29 01:04:44 -04:00
|
|
|
signature? e.g. ~+lookup-dumb-jump-backend-fn~, ~+magit-display-buffer-fn~,
|
|
|
|
~+workspaces-set-project-action-fn~
|
|
|
|
+ ~abc!~ :: A public Doom "autodef" function or macro. An autodef should always
|
|
|
|
be defined, even if its containing module is disabled (i.e. they will not
|
|
|
|
throw a void-function error). The purpose of this is to avoid peppering module
|
|
|
|
configs with conditionals or `after!` blocks before using their APIs. They
|
|
|
|
should noop if their module is disabled, and should be zero-cost in the case
|
|
|
|
their module is disabled.
|
|
|
|
|
|
|
|
Autodefs usually serve to configure Doom or a module. e.g. ~after!~,
|
|
|
|
~set-company-backends!~, ~set-evil-initial-state!~
|
|
|
|
|
|
|
|
*** TODO Commits & PRs
|
|
|
|
+ Target =develop= instead of =master=. The only exception are hotfixes!
|
|
|
|
|
|
|
|
*** TODO Keybind conventions
|
|
|
|
|
|
|
|
** TODO Your first code contribution
|
|
|
|
|
|
|
|
** TODO Submitting pull requests
|
|
|
|
|
|
|
|
** TODO Contributing to Doom core
|
|
|
|
|
|
|
|
** TODO Contributing to an existing module
|
|
|
|
|
|
|
|
** TODO Contributing a new module
|
|
|
|
|
|
|
|
* TODO Contributing documentation
|
|
|
|
Doom Emacs' documentation is an ongoing effort. If you have suggestions,
|
|
|
|
improvements, tutorials and/or articles to submit, don't hesitate to get in
|
|
|
|
contact via our [[https://discord.gg/bcZ6P3y][Discord server]] or [[mailto:henrik@lissner.net][email]]. I appreciate any help I can get!
|
|
|
|
|
|
|
|
** TODO Contributing to Doom's manual
|
2019-10-31 14:35:07 -04:00
|
|
|
|
2019-10-29 01:04:44 -04:00
|
|
|
** TODO Contributing module documentation
|
|
|
|
|
|
|
|
* TODO Other ways to support Doom Emacs
|
|
|
|
|
|
|
|
* TODO Special thanks
|