aboutsummaryrefslogtreecommitdiffstats
path: root/docs/documentation_best_practices.md
blob: 77c226117c2d95eb8fcbb27bd8a4cdd355ae2558 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# Documentation Best Practices

This page exists to document best practices when writing documentation for QMK. Following these guidelines will help to keep a consistent tone and style, which will in turn help other people more easily understand QMK.

# Page Opening

Your documentation page should generally start with an H1 heading, followed by a 1 paragraph description of what the user will find on this page. Keep in mind that this heading and paragraph will sit next to the Table of Contents, so keep the heading short and avoid long strings with no whitespace.

Example:

```
# My Page Title

This page covers my super cool feature. You can use this feature to make coffee, squeeze fresh oj, and have an egg mcmuffin and hashbrowns delivered from your local macca's by drone.
```

# Headings

Your page should generally have multiple "H1" headings. Only H1 and H2 headings will included in the Table of Contents, so plan them out appropriately. Excess width should be avoided in H1 and H2 headings to prevent the Table of Contents from getting too wide.

# Styled Hint Blocks

You can have styled hint blocks drawn around text to draw attention to it.

### Important

```
!> This is important
```

Renders as:

!> This is important

### General Tips

```
?> This is a helpful tip.
```

Renders as:

?> This is a helpful tip.


# Documenting Features

If you create a new feature for QMK, create a documentation page for it. It doesn't have to be very long, a few sentences describing your feature and a table listing any relevant keycodes is enough. Here is a basic template:

```markdown
# My Cool Feature

This page describes my cool feature. You can use my cool feature to make coffee and order cream and sugar to be delivered via drone.

## My Cool Feature Keycodes

|Long Name|Short Name|Description|
|---------|----------|-----------|
|KC_COFFEE||Make Coffee|
|KC_CREAM||Order Cream|
|KC_SUGAR||Order Sugar|
```

Place your documentation into `docs/feature_<my_cool_feature>.md`, and add that file to the appropriate place in `docs/_sidebar.md`. If you have added any keycodes be sure to add them to `docs/keycodes.md` with a link back to your feature page.
pickle.dumps(m.simple_callable) assert re.search("can.*t pickle .*PyCapsule.* object", str(excinfo.value)) @pytest.mark.parametrize("cls_name", ["Pickleable", "PickleableNew"]) def test_roundtrip(cls_name): cls = getattr(m, cls_name) p = cls("test_value") p.setExtra1(15) p.setExtra2(48) data = pickle.dumps(p, 2) # Must use pickle protocol >= 2 p2 = pickle.loads(data) assert p2.value() == p.value() assert p2.extra1() == p.extra1() assert p2.extra2() == p.extra2() @pytest.mark.xfail("env.PYPY") @pytest.mark.parametrize("cls_name", ["PickleableWithDict", "PickleableWithDictNew"]) def test_roundtrip_with_dict(cls_name): cls = getattr(m, cls_name) p = cls("test_value") p.extra = 15 p.dynamic = "Attribute" data = pickle.dumps(p, pickle.HIGHEST_PROTOCOL) p2 = pickle.loads(data) assert p2.value == p.value assert p2.extra == p.extra assert p2.dynamic == p.dynamic def test_enum_pickle(): from pybind11_tests import enums as e data = pickle.dumps(e.EOne, 2) assert e.EOne == pickle.loads(data) # # exercise_trampoline # class SimplePyDerived(m.SimpleBase): pass def test_roundtrip_simple_py_derived(): p = SimplePyDerived() p.num = 202 p.stored_in_dict = 303 data = pickle.dumps(p, pickle.HIGHEST_PROTOCOL) p2 = pickle.loads(data) assert isinstance(p2, SimplePyDerived) assert p2.num == 202 assert p2.stored_in_dict == 303 def test_roundtrip_simple_cpp_derived(): p = m.make_SimpleCppDerivedAsBase() assert m.check_dynamic_cast_SimpleCppDerived(p) p.num = 404 if not env.PYPY: # To ensure that this unit test is not accidentally invalidated. with pytest.raises(AttributeError): # Mimics the `setstate` C++ implementation. setattr(p, "__dict__", {}) # noqa: B010 data = pickle.dumps(p, pickle.HIGHEST_PROTOCOL) p2 = pickle.loads(data) assert isinstance(p2, m.SimpleBase) assert p2.num == 404 # Issue #3062: pickleable base C++ classes can incur object slicing # if derived typeid is not registered with pybind11 assert not m.check_dynamic_cast_SimpleCppDerived(p2)