= Contributing

== Issues

Report issues and suggest features and improvements on the
https://github.com/bbatsov/projectile/issues[GitHub issue tracker]
and https://github.com/bbatsov/projectile/discussions[our discussions board].

If you want to file a bug, please provide all the necessary info listed in
our issue reporting template (it's loaded automatically when you create a
new GitHub issue). Pasting the output of kbd:[M-x] `projectile-doctor` is a
great start - it describes how Projectile sees your project (root, type,
indexing, cache, ignore rules) and saves us a round of questions. See
xref:troubleshooting.adoc#doctor[Troubleshooting] for the details.

It's usually a good idea to try to reproduce (obscure) bugs in isolation. You
can do this by cloning Projectile's GitHub repo and running `eldev emacs` inside
it (you need to install https://github.com/doublep/eldev[Eldev] tool first).
This will bring up Emacs with only the latest version of Projectile loaded. By
starting fresh, with the latest code, we can ensure that the problem at hand
isn't already fixed or caused by interactions with other packages.

== Patches

Patches in any form are always welcome! GitHub pull requests are even better! :-)

Before submitting a patch or a pull request make sure all tests are
passing and that your patch is in line with the https://github.com/bbatsov/projectile/blob/master/CONTRIBUTING.md[contribution guidelines].

== Running the tests in batch mode

[source,sh]
----
$ cd /path/to/projectile
$ eldev test
----

If you need to make sure dependencies are at the latest version:

[source,sh]
----
$ eldev update
----

Run all tests with Projectile installed as an Emacs package
(i.e. byte-compiled and all that; this won't affect your normal Emacs
though):

[source,sh]
----
$ eldev -p test
----

Tests should run fine in `shell-mode` or `term-mode`. It's also possible to use kbd:[M-x] `compile` (or `helm-make`).

== Documentation

Good documentation is just as important as good code.
Consider improving and extending this manual and the
https://github.com/bbatsov/projectile/wiki[community wiki].

=== Working on the docs

The manual is generated from the AsciiDoc files in the https://github.com/bbatsov/projectile/tree/master/doc[doc] folder of Projectile's GitHub repo and is published to https://docs.projectile.mx.
https://antora.org[Antora] is used to convert the manual into HTML.
The filesystem layout is described at https://docs.antora.org/antora/latest/component-structure/.

To make changes to the manual you simply have to change the files under `doc`.
The manual will be regenerated manually periodically.

==== Installing Antora

NOTE: The instructions here assume you already have (the right version of) node.js installed.

Installing the Antora is super simple:

[source]
----
$ cd docs.projectile.mx
$ npm install
----

Check out https://docs.antora.org/antora/latest/install/install-antora/[the detailed installation instructions]
if you run into any problems.

==== Building the site

You can build the documentation locally from the https://github.com/bbatsov/docs.projectile.mx[docs.projectile.mx] repo.

[source]
----
$ cd docs.projectile.mx
$ make build
----

After you're done with the initial setup you can use the `make` to push changes to the site:

[source]
----
$ make deploy
----

NOTE: You'll need commit access to the repository for this to work.

To check the generated site you can simply open `docs/index.html` in your favourite browser.

If you want to make changes to the manual's page structure you'll have to edit
https://github.com/bbatsov/projectile/blob/master/doc/modules/ROOT/nav.adoc[nav.adoc].

== Donations

You can support the development of Projectile via
https://www.paypal.me/bbatsov[PayPal],
https://www.patreon.com/bbatsov[Patreon] and
https://github.com/sponsors/bbatsov[GitHub Sponsors].
