More errors for duplicates

This commit is contained in:
James Westman 2023-05-17 10:25:25 -05:00
parent 2ca71de061
commit 6ac798ea6f
No known key found for this signature in database
GPG key ID: CE2DBA0ADB654EA6
13 changed files with 105 additions and 9 deletions

View file

@ -24,6 +24,23 @@ from .contexts import ScopeCtx
from .common import *
class SignalFlag(AstNode):
grammar = AnyOf(
UseExact("flag", "swapped"),
UseExact("flag", "after"),
)
@property
def flag(self) -> str:
return self.tokens["flag"]
@validate()
def unique(self):
self.validate_unique_in_parent(
f"Duplicate flag '{self.flag}'", lambda x: x.flag == self.flag
)
class Signal(AstNode):
grammar = Statement(
UseIdent("name"),
@ -39,12 +56,7 @@ class Signal(AstNode):
Match("(").expected("argument list"),
Optional(UseIdent("object")).expected("object identifier"),
Match(")").expected(),
ZeroOrMore(
AnyOf(
[Keyword("swapped"), UseLiteral("swapped", True)],
[Keyword("after"), UseLiteral("after", True)],
)
),
ZeroOrMore(SignalFlag),
)
@property
@ -55,6 +67,13 @@ class Signal(AstNode):
def detail_name(self) -> T.Optional[str]:
return self.tokens["detail_name"]
@property
def full_name(self) -> str:
if self.detail_name is None:
return self.name
else:
return self.name + "::" + self.detail_name
@property
def handler(self) -> str:
return self.tokens["handler"]
@ -63,13 +82,17 @@ class Signal(AstNode):
def object_id(self) -> T.Optional[str]:
return self.tokens["object"]
@property
def flags(self) -> T.List[SignalFlag]:
return self.children[SignalFlag]
@property
def is_swapped(self) -> bool:
return self.tokens["swapped"] or False
return any(x.flag == "swapped" for x in self.flags)
@property
def is_after(self) -> bool:
return self.tokens["after"] or False
return any(x.flag == "after" for x in self.flags)
@property
def gir_signal(self):