Thanks for being willing to contribute!
Working on your first Pull Request? You can learn how from this free series How to Contribute to an Open Source Project on GitHub.
- Fork this repository
- Clone your forked repository
- Run
npm install
to install corresponding dependencies - Create a branch for your PR named like
pr/your-branch-name
(you can do this through git CLI withgit checkout -b pr/your-branch-name
)
Tip: Keep your
master
branch pointing at the original repository and make pull requests from branches on your fork. To do this, run:git remote add upstream https://github.com/testing-library/eslint-plugin-testing-library.git git fetch upstream git branch --set-upstream-to=upstream/master master
This will add the original repository as a "remote" called "upstream," Then fetch the git information from that remote, then set your local
master
branch to use the upstream master branch whenever you rungit pull
. Then you can make all of your pull request branches based on thismaster
branch. Whenever you want to update your version ofmaster
, do a regulargit pull
.
Git hooks are configured on this project when you install dependencies. The following will be run on every commit:
- Lint and format files automatically
- Check all tests are passing
- Check commit message is following Conventional Commit specification
If you ever need to update a snapshot, you can run npm run test:update
Based on ESLint's Rule Naming Conventions, you must follow these rules:
- If your rule is disallowing something, prefix it with
no-
such asno-debug
for disallowingdebug()
. - If your rule is suggesting to prefer a way of doing something, among other ways, you can optionally prefix it with
prefer-
. For example,prefer-screen-queries
suggests to usescreen.getByText()
from importedscreen
rather thangetByText()
fromrender
's result though both are technically fine. - If your rule is enforcing the inclusion of something, use a short name without a special prefix. As an example,
await-async-utils
enforce to wait for proper async utils. - Use dashes between words.
- Try to keep the name simple and clear.
In the same way as ESLint,
each rule has three files named with its identifier (e.g. no-debug
):
- in the
lib/rules
directory: a source file (e.g.no-debug.js
) - in the
tests/lib/rules
directory: a test file (e.g.no-debug.js
) - in the
docs/rules
directory: a Markdown documentation file (e.g.no-debug.md
)
Additionally, you need to do a couple of extra things:
- Import the new rule in
lib/index.js
and include it inrules
constant (there is a test which will make sure you did this). Remember to include your rule under correspondingconfig
if necessary (a snapshot test will check this too, but you can update it just runningnpm run test:update
). - Include your rule in the "Supported Rules" table within the README.md. Don't forget to include the proper badges if needed and to sort alphabetically the rules for readability.
A couple of things you need to remember when editing already existing rules:
- If renaming a rule, make sure to update all points mentioned in "Adding new rules" section.
- Try to add tests to cover the changes introduced, no matter if that's a bug fix or a new feature.
Please check the the open issues
Also, please watch the repo and respond to questions/bug reports/feature requests! Thanks!