diff options
| author | Jakob Lykke Andersen <Jakob@caput.dk> | 2020-04-24 11:38:22 +0200 |
|---|---|---|
| committer | Jakob Lykke Andersen <Jakob@caput.dk> | 2020-04-24 11:38:22 +0200 |
| commit | abe65423ca6ca5cfc4fa3420015e8ce26f64e9cf (patch) | |
| tree | 6dd84bc287ca06d560a66eaeec6a7ad851661245 /sphinx/domains | |
| parent | ef0c2bf83c76e1657f153d62681c32af71b0cae6 (diff) | |
| download | sphinx-git-abe65423ca6ca5cfc4fa3420015e8ce26f64e9cf.tar.gz | |
C, allow semicolon in the end of declarations
(except macros)
Diffstat (limited to 'sphinx/domains')
| -rw-r--r-- | sphinx/domains/c.py | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/sphinx/domains/c.py b/sphinx/domains/c.py index 35641ec8c..1e5eb57a0 100644 --- a/sphinx/domains/c.py +++ b/sphinx/domains/c.py @@ -1272,10 +1272,12 @@ class ASTEnumerator(ASTBase): class ASTDeclaration(ASTBaseBase): - def __init__(self, objectType: str, directiveType: str, declaration: Any) -> None: + def __init__(self, objectType: str, directiveType: str, declaration: Any, + semicolon: bool = False) -> None: self.objectType = objectType self.directiveType = directiveType self.declaration = declaration + self.semicolon = semicolon self.symbol = None # type: Symbol # set by CObject._add_enumerator_to_parent @@ -1304,7 +1306,10 @@ class ASTDeclaration(ASTBaseBase): return self.get_id(_max_id, True) def _stringify(self, transform: StringifyTransform) -> str: - return transform(self.declaration) + res = transform(self.declaration) + if self.semicolon: + res += ';' + return res def describe_signature(self, signode: TextElement, mode: str, env: "BuildEnvironment", options: Dict) -> None: @@ -1340,6 +1345,8 @@ class ASTDeclaration(ASTBaseBase): else: assert False self.declaration.describe_signature(mainDeclNode, mode, env, self.symbol) + if self.semicolon: + mainDeclNode += nodes.Text(';') class SymbolLookupResult: @@ -2742,7 +2749,7 @@ class DefinitionParser(BaseParser): declSpecs = self._parse_decl_specs(outer=outer, typed=False) decl = self._parse_declarator(named=True, paramMode=outer, typed=False) - self.assert_end() + self.assert_end(allowSemicolon=True) except DefinitionError as exUntyped: desc = "If just a name" prevErrors.append((exUntyped, desc)) @@ -2875,7 +2882,12 @@ class DefinitionParser(BaseParser): declaration = self._parse_type(named=True, outer='type') else: assert False - return ASTDeclaration(objectType, directiveType, declaration) + if objectType != 'macro': + self.skip_ws() + semicolon = self.skip_string(';') + else: + semicolon = False + return ASTDeclaration(objectType, directiveType, declaration, semicolon) def parse_namespace_object(self) -> ASTNestedName: return self._parse_nested_name() |
