From dd8cbf08bac0e69f1caf00ec1efec6019eb36c29 Mon Sep 17 00:00:00 2001 From: DMRobertson Date: Tue, 10 Jan 2023 12:19:38 +0000 Subject: deploy: 9a4c69f59f1ac54838d3b0f47280d858b7e41073 --- v1.75/code_style.html | 312 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 312 insertions(+) create mode 100644 v1.75/code_style.html (limited to 'v1.75/code_style.html') diff --git a/v1.75/code_style.html b/v1.75/code_style.html new file mode 100644 index 0000000000..c352b63481 --- /dev/null +++ b/v1.75/code_style.html @@ -0,0 +1,312 @@ + + + + + + Code Style - Synapse + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + +
+
+ +
+ +
+ +

Code Style

+

Formatting tools

+

The Synapse codebase uses a number of code formatting tools in order to +quickly and automatically check for formatting (and sometimes logical) +errors in code.

+

The necessary tools are:

+
    +
  • black, a source code formatter;
  • +
  • isort, which organises each file's imports;
  • +
  • ruff, which can spot common errors; and
  • +
  • mypy, a type checker.
  • +
+

Install them with:

+
pip install -e ".[lint,mypy]"
+
+

The easiest way to run the lints is to invoke the linter script as follows.

+
scripts-dev/lint.sh
+
+

It's worth noting that modern IDEs and text editors can run these tools +automatically on save. It may be worth looking into whether this +functionality is supported in your editor for a more convenient +development workflow. It is not, however, recommended to run mypy +on save as they take a while and can be very resource intensive.

+

General rules

+
    +
  • Naming: +
      +
    • Use CamelCase for class and type names
    • +
    • Use underscores for function_names and variable_names.
    • +
    +
  • +
  • Docstrings: should follow the google code +style. +See the +examples +in the sphinx documentation.
  • +
  • Imports: +
      +
    • +

      Imports should be sorted by isort as described above.

      +
    • +
    • +

      Prefer to import classes and functions rather 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).

      +
    • +
    • +

      Avoid wildcard imports (from synapse.types import *) and +relative imports (from .types import UserID).

      +
    • +
    +
  • +
+

Configuration code and documentation format

+

When adding a configuration option to the code, if several settings are grouped into a single dict, ensure that your code +correctly handles the top-level option being set to None (as it will be if no sub-options are enabled).

+

The configuration manual acts as a +reference to Synapse's configuration options for server administrators. +Remember that many readers will be unfamiliar with YAML and server +administration in general, so it is important that when you add +a configuration option the documentation be as easy to understand as possible, which +includes following a consistent format.

+

Some guidelines follow:

+
    +
  • +

    Each option should be listed in the config manual with the following format:

    +
      +
    • +

      The name of the option, prefixed by ###.

      +
    • +
    • +

      A comment which describes the default behaviour (i.e. what +happens if the setting is omitted), as well as what the effect +will be if the setting is changed.

      +
    • +
    • +

      An example setting, using backticks to define the code block

      +

      For boolean (on/off) options, convention is that this example +should be the opposite to the default. For other options, the example should give +some non-default value which is likely to be useful to the reader.

      +
    • +
    +
  • +
  • +

    There should be a horizontal rule between each option, which can be achieved by adding --- before and +after the option.

    +
  • +
  • +

    true and false are spelt thus (as opposed to True, etc.)

    +
  • +
+

Example:

+
+

modules

+

Use the module sub-option to add a module under modules to extend functionality. +The module setting then has a sub-option, config, which can be used to define some configuration +for the module.

+

Defaults to none.

+

Example configuration:

+
modules:
+  - module: my_super_module.MySuperClass
+    config:
+      do_thing: true
+  - module: my_other_super_module.SomeClass
+    config: {}
+
+
+

Note that the sample configuration is generated from the synapse code +and is maintained by a script, scripts-dev/generate_sample_config.sh. +Making sure that the output from this script matches the desired format +is left as an exercise for the reader!

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + \ No newline at end of file -- cgit 1.4.1