mirror of
https://gitlab.freedesktop.org/libinput/libei.git
synced 2025-12-31 13:30:09 +01:00
scanner: detect duplicates in the XML file
This commit is contained in:
parent
5ee9f738a8
commit
8a52cbbe10
1 changed files with 24 additions and 4 deletions
|
|
@ -108,6 +108,8 @@ class Message:
|
|||
arguments: list[Argument] = attr.ib(init=False, factory=list)
|
||||
|
||||
def add_argument(self, arg: Argument) -> None:
|
||||
if arg.name in [a.name for a in self.arguments]:
|
||||
raise ValueError(f"Duplicate argument name '{arg.name}'")
|
||||
self.arguments.append(arg)
|
||||
|
||||
@property
|
||||
|
|
@ -206,8 +208,11 @@ class Enum:
|
|||
|
||||
def add_entry(self, entry: Entry) -> None:
|
||||
for e in self.entries:
|
||||
if e.name == entry.name:
|
||||
raise ValueError(f"Duplicate enum name '{entry.name}'")
|
||||
|
||||
if e.value == entry.value:
|
||||
raise ValueError(f"Duplicate enum value {entry.value}")
|
||||
raise ValueError(f"Duplicate enum value '{entry.value}'")
|
||||
|
||||
if self.is_bitmask:
|
||||
if e.value < 0:
|
||||
|
|
@ -238,12 +243,18 @@ class Interface:
|
|||
mode: str = attr.ib() # "ei" or "eis"
|
||||
|
||||
def add_request(self, request: Request) -> None:
|
||||
if request.name in [r.name for r in self.requests]:
|
||||
raise ValueError(f"Duplicate request name '{request.name}'")
|
||||
self.requests.append(request)
|
||||
|
||||
def add_event(self, event: Event) -> None:
|
||||
if event.name in [r.name for r in self.events]:
|
||||
raise ValueError(f"Duplicate event name '{event.name}'")
|
||||
self.events.append(event)
|
||||
|
||||
def add_enum(self, enum: Enum) -> None:
|
||||
if enum.name in [r.name for r in self.enums]:
|
||||
raise ValueError(f"Duplicate enum name '{enum.name}'")
|
||||
self.enums.append(enum)
|
||||
|
||||
@property
|
||||
|
|
@ -388,7 +399,10 @@ class Protocol(xml.sax.handler.ContentHandler):
|
|||
interface=self.current_interface,
|
||||
is_destructor=is_destructor,
|
||||
)
|
||||
self.current_interface.add_request(request)
|
||||
try:
|
||||
self.current_interface.add_request(request)
|
||||
except ValueError as e:
|
||||
raise XmlError(*self.location, str(e))
|
||||
self.current_message = request
|
||||
elif element == "event":
|
||||
if self.current_interface is None:
|
||||
|
|
@ -418,7 +432,10 @@ class Protocol(xml.sax.handler.ContentHandler):
|
|||
interface=self.current_interface,
|
||||
is_destructor=is_destructor,
|
||||
)
|
||||
self.current_interface.add_event(event)
|
||||
try:
|
||||
self.current_interface.add_event(event)
|
||||
except ValueError as e:
|
||||
raise XmlError(*self.location, str(e))
|
||||
self.current_message = event
|
||||
elif element == "enum":
|
||||
if self.current_interface is None:
|
||||
|
|
@ -453,7 +470,10 @@ class Protocol(xml.sax.handler.ContentHandler):
|
|||
interface=self.current_interface,
|
||||
is_bitmask=is_bitmask,
|
||||
)
|
||||
self.current_interface.add_enum(enum)
|
||||
try:
|
||||
self.current_interface.add_enum(enum)
|
||||
except ValueError as e:
|
||||
raise XmlError(*self.location, str(e))
|
||||
self.current_message = enum
|
||||
elif element == "arg":
|
||||
if self.current_interface is None:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue