mirror of
https://gitlab.freedesktop.org/libinput/libei.git
synced 2026-05-09 07:28:25 +02: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)
|
arguments: list[Argument] = attr.ib(init=False, factory=list)
|
||||||
|
|
||||||
def add_argument(self, arg: Argument) -> None:
|
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)
|
self.arguments.append(arg)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
|
@ -206,8 +208,11 @@ class Enum:
|
||||||
|
|
||||||
def add_entry(self, entry: Entry) -> None:
|
def add_entry(self, entry: Entry) -> None:
|
||||||
for e in self.entries:
|
for e in self.entries:
|
||||||
|
if e.name == entry.name:
|
||||||
|
raise ValueError(f"Duplicate enum name '{entry.name}'")
|
||||||
|
|
||||||
if e.value == entry.value:
|
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 self.is_bitmask:
|
||||||
if e.value < 0:
|
if e.value < 0:
|
||||||
|
|
@ -238,12 +243,18 @@ class Interface:
|
||||||
mode: str = attr.ib() # "ei" or "eis"
|
mode: str = attr.ib() # "ei" or "eis"
|
||||||
|
|
||||||
def add_request(self, request: Request) -> None:
|
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)
|
self.requests.append(request)
|
||||||
|
|
||||||
def add_event(self, event: Event) -> None:
|
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)
|
self.events.append(event)
|
||||||
|
|
||||||
def add_enum(self, enum: Enum) -> None:
|
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)
|
self.enums.append(enum)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
|
@ -388,7 +399,10 @@ class Protocol(xml.sax.handler.ContentHandler):
|
||||||
interface=self.current_interface,
|
interface=self.current_interface,
|
||||||
is_destructor=is_destructor,
|
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
|
self.current_message = request
|
||||||
elif element == "event":
|
elif element == "event":
|
||||||
if self.current_interface is None:
|
if self.current_interface is None:
|
||||||
|
|
@ -418,7 +432,10 @@ class Protocol(xml.sax.handler.ContentHandler):
|
||||||
interface=self.current_interface,
|
interface=self.current_interface,
|
||||||
is_destructor=is_destructor,
|
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
|
self.current_message = event
|
||||||
elif element == "enum":
|
elif element == "enum":
|
||||||
if self.current_interface is None:
|
if self.current_interface is None:
|
||||||
|
|
@ -453,7 +470,10 @@ class Protocol(xml.sax.handler.ContentHandler):
|
||||||
interface=self.current_interface,
|
interface=self.current_interface,
|
||||||
is_bitmask=is_bitmask,
|
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
|
self.current_message = enum
|
||||||
elif element == "arg":
|
elif element == "arg":
|
||||||
if self.current_interface is None:
|
if self.current_interface is None:
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue