[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 16/34] qapi/common.py: Convert comments into docstrings, and elabo
From: |
Markus Armbruster |
Subject: |
[PULL 16/34] qapi/common.py: Convert comments into docstrings, and elaborate |
Date: |
Sat, 10 Oct 2020 11:54:46 +0200 |
From: John Snow <jsnow@redhat.com>
As docstrings, they'll show up in documentation and IDE help.
The docstring style being targeted is the Sphinx documentation
style. Sphinx uses an extension of ReST with "domains". We use the
(implicit) Python domain, which supports a number of custom "info
fields". Those info fields are documented here:
https://www.sphinx-doc.org/en/master/usage/restructuredtext/domains.html#info-field-lists
Primarily, we use `:param X: descr`, `:return[s]: descr`, and `:raise[s]
Z: when`. Everything else is the Sphinx dialect of ReST.
(No, nothing checks or enforces this style that I am aware of. Sphinx
either chokes or succeeds, but does not enforce a standard of what is
otherwise inside the docstring. Pycharm does highlight when your param
fields are not aligned with the actual fields present. It does not
highlight missing return or exception statements. There is no existing
style guide I am aware of that covers a standard for a minimally
acceptable docstring. I am debating writing one.)
Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Cleber Rosa <crosa@redhat.com>
Message-Id: <20201009161558.107041-17-jsnow@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
scripts/qapi/common.py | 54 +++++++++++++++++++++++++++++++-----------
1 file changed, 40 insertions(+), 14 deletions(-)
diff --git a/scripts/qapi/common.py b/scripts/qapi/common.py
index 74a2c001ed..669e3829b3 100644
--- a/scripts/qapi/common.py
+++ b/scripts/qapi/common.py
@@ -15,15 +15,25 @@ import re
from typing import Optional, Sequence
+#: Magic string that gets removed along with all space to its right.
EATSPACE = '\033EATSPACE.'
POINTER_SUFFIX = ' *' + EATSPACE
_C_NAME_TRANS = str.maketrans('.-', '__')
-# ENUMName -> ENUM_NAME, EnumName1 -> ENUM_NAME1
-# ENUM_NAME -> ENUM_NAME, ENUM_NAME1 -> ENUM_NAME1, ENUM_Name2 -> ENUM_NAME2
-# ENUM24_Name -> ENUM24_NAME
def camel_to_upper(value: str) -> str:
+ """
+ Converts CamelCase to CAMEL_CASE.
+
+ Examples::
+
+ ENUMName -> ENUM_NAME
+ EnumName1 -> ENUM_NAME1
+ ENUM_NAME -> ENUM_NAME
+ ENUM_NAME1 -> ENUM_NAME1
+ ENUM_Name2 -> ENUM_NAME2
+ ENUM24_Name -> ENUM24_NAME
+ """
c_fun_str = c_name(value, False)
if value.isupper():
return c_fun_str
@@ -45,21 +55,33 @@ def camel_to_upper(value: str) -> str:
def c_enum_const(type_name: str,
const_name: str,
prefix: Optional[str] = None) -> str:
+ """
+ Generate a C enumeration constant name.
+
+ :param type_name: The name of the enumeration.
+ :param const_name: The name of this constant.
+ :param prefix: Optional, prefix that overrides the type_name.
+ """
if prefix is not None:
type_name = prefix
return camel_to_upper(type_name) + '_' + c_name(const_name, False).upper()
-# Map @name to a valid C identifier.
-# If @protect, avoid returning certain ticklish identifiers (like
-# C keywords) by prepending 'q_'.
-#
-# Used for converting 'name' from a 'name':'type' qapi definition
-# into a generated struct member, as well as converting type names
-# into substrings of a generated C function name.
-# '__a.b_c' -> '__a_b_c', 'x-foo' -> 'x_foo'
-# protect=True: 'int' -> 'q_int'; protect=False: 'int' -> 'int'
def c_name(name: str, protect: bool = True) -> str:
+ """
+ Map ``name`` to a valid C identifier.
+
+ Used for converting 'name' from a 'name':'type' qapi definition
+ into a generated struct member, as well as converting type names
+ into substrings of a generated C function name.
+
+ '__a.b_c' -> '__a_b_c', 'x-foo' -> 'x_foo'
+ protect=True: 'int' -> 'q_int'; protect=False: 'int' -> 'int'
+
+ :param name: The name to map.
+ :param protect: If true, avoid returning certain ticklish identifiers
+ (like C keywords) by prepending ``q_``.
+ """
# ANSI X3J11/88-090, 3.1.1
c89_words = set(['auto', 'break', 'case', 'char', 'const', 'continue',
'default', 'do', 'double', 'else', 'enum', 'extern',
@@ -129,12 +151,16 @@ class Indentation:
self._level -= amount
+#: Global, current indent level for code generation.
indent = Indentation()
-# Generate @code with @kwds interpolated.
-# Obey indent, and strip EATSPACE.
def cgen(code: str, **kwds: object) -> str:
+ """
+ Generate ``code`` with ``kwds`` interpolated.
+
+ Obey `indent`, and strip `EATSPACE`.
+ """
raw = code % kwds
if indent:
raw = re.sub(r'^(?!(#|$))', str(indent), raw, flags=re.MULTILINE)
--
2.26.2
- [PULL 27/34] qapi/gen.py: Remove unused parameter, (continued)
- [PULL 27/34] qapi/gen.py: Remove unused parameter, Markus Armbruster, 2020/10/10
- [PULL 18/34] qapi: establish mypy type-checking baseline, Markus Armbruster, 2020/10/10
- [PULL 24/34] qapi/source.py: delint with pylint, Markus Armbruster, 2020/10/10
- [PULL 28/34] qapi/gen.py: update write() to be more idiomatic, Markus Armbruster, 2020/10/10
- [PULL 21/34] qapi/commands.py: Don't re-bind to variable of different type, Markus Armbruster, 2020/10/10
- [PULL 17/34] qapi/common.py: move build_params into gen.py, Markus Armbruster, 2020/10/10
- [PULL 20/34] qapi/events.py: Move comments into docstrings, Markus Armbruster, 2020/10/10
- [PULL 23/34] qapi/source.py: add type hint annotations, Markus Armbruster, 2020/10/10
- [PULL 25/34] qapi/gen: Make _is_user_module() return bool, Markus Armbruster, 2020/10/10
- [PULL 29/34] qapi/gen.py: delint with pylint, Markus Armbruster, 2020/10/10
- [PULL 16/34] qapi/common.py: Convert comments into docstrings, and elaborate,
Markus Armbruster <=
- [PULL 22/34] qapi/commands.py: add type hint annotations, Markus Armbruster, 2020/10/10
- [PULL 30/34] qapi/types.py: add type hint annotations, Markus Armbruster, 2020/10/10
- [PULL 26/34] qapi/gen.py: add type hint annotations, Markus Armbruster, 2020/10/10
- [PULL 33/34] qapi/visit.py: remove unused parameters from gen_visit_object, Markus Armbruster, 2020/10/10
- [PULL 34/34] qapi/visit.py: add type hint annotations, Markus Armbruster, 2020/10/10
- [PULL 09/34] qapi: add pylintrc, Markus Armbruster, 2020/10/10
- [PULL 32/34] qapi/visit.py: assert tag_member contains a QAPISchemaEnumType, Markus Armbruster, 2020/10/10
- [PULL 19/34] qapi/events.py: add type hint annotations, Markus Armbruster, 2020/10/10
- [PULL 31/34] qapi/types.py: remove one-letter variables, Markus Armbruster, 2020/10/10
- Re: [PULL 00/34] QAPI patches patches for 2020-10-10, Peter Maydell, 2020/10/12