This commit is contained in:
team3
2026-07-28 12:31:42 +02:00
parent 58efba988d
commit 2e86d682eb
15 changed files with 1823 additions and 65 deletions

View File

@@ -89,7 +89,16 @@ def _umfeld(zeilen: list, nr: int, rand: int = 5) -> str:
return "\n".join(zeilen[von:bis]).strip()
_ENDE = re.compile(r"^(function |const |async function |\S)")
def _pyrumpf(zeilen: list, nr: int, hoechstens: int = 14) -> str:
"""Der eingerückte Block unter einer Zeile — für Python statt geschweifter Klammern."""
if nr > len(zeilen):
return "" # Dekorator ohne Rumpf, etwa am Dateiende
block = [zeilen[nr - 1]]
for weiter in zeilen[nr:nr + hoechstens]:
if weiter.strip() and not weiter[:1].isspace() and not weiter.startswith("@"):
break
block.append(weiter)
return "\n".join(block).rstrip()
def _rumpf(zeilen: list, name: str, hoechstens: int = 14) -> str:
@@ -120,9 +129,17 @@ def interaktionen(quelle: dict = None) -> list[dict]:
Dazu Fenster-Lauscher: ein Tastaturgriff ist eine Fähigkeit, auch ohne Knopf.
Backend-Routen stehen bewusst nicht drin. Jede nutzbare Route hängt an einem
Knopf, der schon in der Liste steht — als eigene Einträge wurden sie doppelt
gemeldet und dabei der falschen Karte zugeordnet.
Dazu die Backend-Routen. Sie standen zwischenzeitlich nicht drin, weil sie
doppelt gemeldet und dabei der falschen Karte zugeordnet wurden. Beides ist
jetzt aufgefangen: das Gedächtnis hält die Zuordnung fest, und der
Dublettenabgleich fängt zwei Funktionen für dieselbe Sache. Was hinter einem
Knopf liegt, ist der einzige Weg an Parser, Dateiverwaltung und Prüflogik —
ohne die Routen bliebe der ganze Rücken des Programms ungeprüft.
Reine Hilfsfunktionen bleiben draußen. Ein Kunde bestellt keine Funktion namens
`_slug`; sie wird über die Route erreicht, die ihn interessiert. Jedes
öffentliche Symbol aufzunehmen ergäbe wieder ein Code-Inventar statt einer
Auftragsliste.
"""
quelle = dateien() if quelle is None else quelle
raus, gesehen = [], set()
@@ -144,6 +161,11 @@ def interaktionen(quelle: dict = None) -> list[dict]:
for m in _LAUSCHER.finditer(zeile):
merke(f"lauscher:{m.group(1)}.{m.group(2)}", "Tastatur oder Maus",
pfad, nr, zeilen, zeile)
for m in _ROUTE.finditer(zeile):
punkt = merke(f"route:{m.group(1)} {m.group(2)}", "Schnittstelle",
pfad, nr, zeilen, zeile)
if punkt is not None:
punkt["rumpf"] = _pyrumpf(zeilen, nr + 1)
if not pfad.endswith(".vue"):
continue
for m in _EREIGNIS.finditer(zeile):