From ef97c273dbd28b1cf6e8aa80c4204d24dd3887eb Mon Sep 17 00:00:00 2001 From: Gouvernathor <44340603+Gouvernathor@users.noreply.github.com> Date: Mon, 1 Apr 2024 22:05:24 +0200 Subject: [PATCH] Linting dynamic (cherry picked from commit 60244e258abbc5cc364a7f7e3aea4ddd4bddc82f) --- game/scripts/cds.rpy | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/game/scripts/cds.rpy b/game/scripts/cds.rpy index 74e84582..76c09dc4 100644 --- a/game/scripts/cds.rpy +++ b/game/scripts/cds.rpy @@ -1,5 +1,14 @@ python early hide: import inspect + + try: + from renpy.lint import python_builtins, renpy_builtins + except ImportError: + import builtins + python_builtins = set(dir(builtins)) + del builtins + renpy_builtins = set() + __register_params = frozenset(inspect.signature(renpy.register_statement).parameters).difference({"name", "parse"}) def register_decorator(cls): """ @@ -54,6 +63,12 @@ python early hide: evaled = {n: eval(e) for n, e in self.items()} renpy.dynamic(**evaled) + def lint(self): + for domain, st in (("Python", python_builtins), ("Ren'Py", renpy_builtins)): + inter = st.intersection(self) + if inter: + renpy.error(f"Dynamic statement redefines one or several {domain} builtins: {', '.join(map(repr, inter))}") + @register_decorator class chibi: @staticmethod