| ### If you commit changes: |
| |
| 1. Make sure all tests pass. |
| 2. Run `mardown-it-bench`, make sure that performance not degraded. |
| |
| ### Other things: |
| |
| 1. Prefer [gitter](https://gitter.im/markdown-it/markdown-it) for short "questions". |
| Keep issues for bug reports, suggestions and so on. |
| 2. Make sure to read [dev info](https://github.com/markdown-it/markdown-it/tree/master/docs) |
| prior to ask about plugins development. |
| 3. __Provide examples with [demo](https://markdown-it.github.io/) when possible.__ |
| |
| ## Code Style |
| |
| Code style is tested using [flake8](http://flake8.pycqa.org), |
| with the configuration set in `.flake8`, |
| and code formatted with [black](https://github.com/ambv/black). |
| |
| Installing with `markdown-it-py[code_style]` makes the [pre-commit](https://pre-commit.com/) |
| package available, which will ensure this style is met before commits are submitted, by reformatting the code |
| and testing for lint errors. |
| It can be setup by: |
| |
| ```shell |
| >> cd markdown-it-py |
| >> pre-commit install |
| ``` |
| |
| Optionally you can run `black` and `flake8` separately: |
| |
| ```shell |
| >> black . |
| >> flake8 . |
| ``` |
| |
| Editors like VS Code also have automatic code reformat utilities, which can adhere to this standard. |
| |
| All functions and class methods should be annotated with types and include a docstring. The prefered docstring format is outlined in `markdown-it-py/docstring.fmt.mustache` and can be used automatically with the |
| [autodocstring](https://marketplace.visualstudio.com/items?itemName=njpwerner.autodocstring) VS Code extension. |
| |
| ## Testing |
| |
| For code tests: |
| |
| ```shell |
| >> cd markdown-it-py |
| >> pytest |
| ``` |
| |
| For documentation build tests: |
| |
| ```shell |
| >> cd markdown-it-py/docs |
| >> make clean |
| >> make html-strict |
| ``` |
| |
| ```{seealso} |
| {ref}`develop/testing` |
| ``` |
| |
| ## Pull Requests |
| |
| To contribute, make Pull Requests to the `master` branch (this is the default branch). A PR can consist of one or multiple commits. Before you open a PR, make sure to clean up your commit history and create the commits that you think best divide up the total work as outlined above (use `git rebase` and `git commit --amend`). Ensure all commit messages clearly summarise the changes in the header and the problem that this commit is solving in the body. |
| |
| Merging pull requests: There are three ways of 'merging' pull requests on GitHub: |
| |
| - Squash and merge: take all commits, squash them into a single one and put it on top of the base branch. |
| Choose this for pull requests that address a single issue and are well represented by a single commit. |
| Make sure to clean the commit message (title & body) |
| - Rebase and merge: take all commits and 'recreate' them on top of the base branch. All commits will be recreated with new hashes. |
| Choose this for pull requests that require more than a single commit. |
| Examples: PRs that contain multiple commits with individually significant changes; PRs that have commits from different authors (squashing commits would remove attribution) |
| - Merge with merge commit: put all commits as they are on the base branch, with a merge commit on top |
| Choose for collaborative PRs with many commits. Here, the merge commit provides actual benefits. |