summaryrefslogtreecommitdiffstats
path: root/docs/source/contributing/code.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/source/contributing/code.md')
-rw-r--r--docs/source/contributing/code.md124
1 files changed, 124 insertions, 0 deletions
diff --git a/docs/source/contributing/code.md b/docs/source/contributing/code.md
new file mode 100644
index 0000000..20ccb82
--- /dev/null
+++ b/docs/source/contributing/code.md
@@ -0,0 +1,124 @@
+# Contributing code
+
+## Basic requirements and standards
+
+- A [new ticket](http://dev.deluge-torrent.org/newticket) is required for bugs
+ or features. Search the ticket system first, to avoid filing a duplicate.
+- Ensure code follows the [syntax and conventions](#syntax-and-conventions).
+- Code must pass tests. See [testing](testing.md) document for
+ information on how to run and write unit tests.
+- Commit messages are informative.
+
+## Pull request process:
+
+- Fork us on [GitHub](https://github.com/deluge-torrent/deluge).
+- Clone your repository.
+- Create a feature branch for your issue.
+- Apply your changes:
+ - Add them, and then commit them to your branch.
+ - Run the tests until they pass.
+ - When you feel you are finished, rebase your commits to ensure a simple
+ and informative commit log.
+- Create a pull request on GitHub from your forked repository.
+ - Verify that the tests run by [Travis-ci](https://travis-ci.org/deluge-torrent/deluge)
+ are passing.
+
+## Syntax and conventions
+
+### Code formatting
+
+We use two applications to automatically format the code to save development
+time. They are both run with [pre-commit].
+
+#### Black
+
+- Python
+
+#### Prettier
+
+- JavaScript
+- CSS
+- YAML
+- Markdown
+
+### Common
+
+- Line length: `79` chars.
+- Indent: `4 spaces`, no tabs.
+- All code should use `'single quotes'`.
+
+### Python
+
+We follow [PEP8](http://www.python.org/dev/peps/pep-0008/) and
+[Python Code Style](http://docs.python-guide.org/en/latest/writing/style/)
+which is adhered to with [Black].
+
+- Code '''must''' pass [Black], [flake8] and [isort] source code checkers.
+ (Optionally [Pylint])
+
+ flake8 deluge
+ isort -rc -df deluge
+ pylint deluge
+ pylint deluge/plugins/\*/deluge/
+
+- Using the [pre-commit] application can aid in identifying issues while
+ creating git commits.
+
+#### Strings and bytes
+
+To prevent bugs or errors in the code byte strings (`str`) must be decoded to
+strings (Unicode text strings, `unicode`) on input and then encoded on output.
+
+_Notes:_
+
+- PyGTK/GTK+ will accept `str` (UTF-8 encoded) or `unicode` but will only return
+ `str`. See [GTK3 Unicode] docs.
+- There is a `bytearray` type which enables in-place modification of a string.
+ See [Python Bytearrays](http://stackoverflow.com/a/9099337/175584)
+- Python 3 renames `unicode` to `str` type and byte strings become `bytes` type.
+
+### JavaScript
+
+- Classes should follow the Ext coding style.
+- Class names should be in !CamelCase
+- Instances of classes should use camelCase.
+
+### Path separators
+
+- All relative path separators used within code should be converted to posix
+ format `/`, so should not contain `\` or `\\`. This is to prevent confusion
+ when dealing with cross-platform clients and servers.
+
+### Docstrings
+
+All new docstrings must use Napoleon
+[Google Style](http://www.sphinx-doc.org/en/stable/ext/napoleon.html)
+with old docstrings eventually converted over.
+
+Google Style example:
+
+ def func(arg):
+ """Function purpose.
+
+ Args:
+ arg (type): Description.
+
+ Returns:
+ type: Description. If the line is too, long indent next
+ line with three spaces.
+ """
+ return
+
+See complete list of [supported headers][napoleon sections].
+
+Verify that the documentation parses correctly with:
+
+ python setup.py build_docs
+
+[pre-commit]: http://pre-commit.com/
+[flake8]: https://pypi.python.org/pypi/flake8
+[isort]: https://pypi.python.org/pypi/isort
+[pylint]: http://www.pylint.org/
+[black]: https://github.com/python/black/
+[gtk3 unicode]: http://python-gtk-3-tutorial.readthedocs.org/en/latest/unicode.html
+[napoleon sections]: http://www.sphinx-doc.org/en/master/usage/extensions/napoleon.html#docstring-sections