summary refs log tree commit diff
diff options
context:
space:
mode:
authorRichard van der Hoff <richard@matrix.org>2017-10-26 10:58:34 +0100
committerRichard van der Hoff <richard@matrix.org>2017-10-26 11:55:41 +0100
commit1eb300e1fcc2ec05c33420033f1d2acdf46d7e20 (patch)
tree554ad66255f344cf4339183535edb53f87782084
parentcode_style: more formatting (diff)
downloadsynapse-1eb300e1fcc2ec05c33420033f1d2acdf46d7e20.tar.xz
Document import rules
-rw-r--r--docs/code_style.rst44
1 files changed, 44 insertions, 0 deletions
diff --git a/docs/code_style.rst b/docs/code_style.rst

index a7a71686ba..9c52cb3182 100644 --- a/docs/code_style.rst +++ b/docs/code_style.rst
@@ -73,3 +73,47 @@ `examples <http://sphinxcontrib-napoleon.readthedocs.io/en/latest/example_google.html>`_ in the sphinx documentation. + +- **Imports**: + + - Prefer to import classes and functions than packages or modules. + + Example:: + + from synapse.types import UserID + ... + user_id = UserID(local, server) + + is preferred over:: + + from synapse import types + ... + user_id = types.UserID(local, server) + + (or any other variant). + + This goes against the advice in the Google style guide, but it means that + errors in the name are caught early (at import time). + + - Multiple imports from the same package can be combined onto one line:: + + from synapse.types import GroupID, RoomID, UserID + + An effort should be made to keep the individual imports in alphabetical + order. + + If the list becomes long, wrap it with parentheses and split it over + multiple lines. + + - As per `PEP-8 <https://www.python.org/dev/peps/pep-0008/#imports>`_, + imports should be grouped in the following order, with a blank line between + each group: + + 1. standard library imports + 2. related third party imports + 3. local application/library specific imports + + - Imports within each group should be sorted alphabetically by module name. + + - Avoid wildcard imports (``from synapse.types import *``) and relative + imports (``from .types import UserID``).