|
@@ -18,6 +18,7 @@
|
|
|
import os
|
|
|
import re
|
|
|
from typing import (
|
|
|
+ TYPE_CHECKING,
|
|
|
Dict,
|
|
|
List,
|
|
|
Optional,
|
|
@@ -30,6 +31,12 @@
|
|
|
from .source import QAPISourceInfo
|
|
|
|
|
|
|
|
|
+if TYPE_CHECKING:
|
|
|
+ # pylint: disable=cyclic-import
|
|
|
+ # TODO: Remove cycle. [schema -> expr -> parser -> schema]
|
|
|
+ from .schema import QAPISchemaFeature, QAPISchemaMember
|
|
|
+
|
|
|
+
|
|
|
# Return value alias for get_expr().
|
|
|
_ExprValue = Union[List[object], Dict[str, object], str, bool]
|
|
|
|
|
@@ -473,9 +480,9 @@ def append(self, line):
|
|
|
class ArgSection(Section):
|
|
|
def __init__(self, parser, name, indent=0):
|
|
|
super().__init__(parser, name, indent)
|
|
|
- self.member = None
|
|
|
+ self.member: Optional['QAPISchemaMember'] = None
|
|
|
|
|
|
- def connect(self, member):
|
|
|
+ def connect(self, member: 'QAPISchemaMember') -> None:
|
|
|
self.member = member
|
|
|
|
|
|
class NullSection(Section):
|
|
@@ -747,14 +754,14 @@ def _append_freeform(self, line):
|
|
|
% match.group(1))
|
|
|
self._section.append(line)
|
|
|
|
|
|
- def connect_member(self, member):
|
|
|
+ def connect_member(self, member: 'QAPISchemaMember') -> None:
|
|
|
if member.name not in self.args:
|
|
|
# Undocumented TODO outlaw
|
|
|
self.args[member.name] = QAPIDoc.ArgSection(self._parser,
|
|
|
member.name)
|
|
|
self.args[member.name].connect(member)
|
|
|
|
|
|
- def connect_feature(self, feature):
|
|
|
+ def connect_feature(self, feature: 'QAPISchemaFeature') -> None:
|
|
|
if feature.name not in self.features:
|
|
|
raise QAPISemError(feature.info,
|
|
|
"feature '%s' lacks documentation"
|