2 # QAPI frontend source file info
4 # Copyright (c) 2019 Red Hat Inc.
7 # Markus Armbruster <armbru@redhat.com>
9 # This work is licensed under the terms of the GNU GPL, version 2.
10 # See the COPYING file in the top-level directory.
13 from typing
import List
, Optional
, TypeVar
16 class QAPISchemaPragma
:
17 # Replace with @dataclass in Python 3.7+
18 # pylint: disable=too-few-public-methods
20 def __init__(self
) -> None:
21 # Are documentation comments required?
22 self
.doc_required
= False
23 # Commands whose names may use '_'
24 self
.command_name_exceptions
: List
[str] = []
25 # Commands allowed to return a non-dictionary
26 self
.command_returns_exceptions
: List
[str] = []
27 # Types whose member names may violate case conventions
28 self
.member_name_exceptions
: List
[str] = []
32 T
= TypeVar('T', bound
='QAPISourceInfo')
34 def __init__(self
, fname
: str, parent
: Optional
['QAPISourceInfo']):
38 self
.pragma
: QAPISchemaPragma
= (
39 parent
.pragma
if parent
else QAPISchemaPragma()
41 self
.defn_meta
: Optional
[str] = None
42 self
.defn_name
: Optional
[str] = None
44 def set_defn(self
, meta
: str, name
: str) -> None:
48 def next_line(self
: T
) -> T
:
49 info
= copy
.copy(self
)
54 return f
"{self.fname}:{self.line}"
56 def in_defn(self
) -> str:
58 return "%s: In %s '%s':\n" % (self
.fname
,
59 self
.defn_meta
, self
.defn_name
)
62 def include_path(self
) -> str:
66 ret
= 'In file included from %s:\n' % parent
.loc() + ret
67 parent
= parent
.parent
70 def __str__(self
) -> str:
71 return self
.include_path() + self
.in_defn() + self
.loc()