NEWS
Erzeugung einer Übersicht genutzter States
-
Ich habe bei meinen Skripten die Übersicht verloren, wo ich welche States setze oder lese, oder wo ich sie abonniere.
Daher hab ich mir ein kleines Skript geschrieben, das die JavaScript/TypeScript Dateien analysiert und eine Liste der genutzten States erzeugt.
Das ganze ist mit einer Beschreibung hier zu finden: https://github.com/BenjaminHae/iobroker-semgrep-rulesDas Schöne ist, dass es nicht stupide nach
getState/setState/onsucht, sondern wirklich semantisch geparst wird. D.h. wenn die ID in einer Variable gespeichert wird und diese Variable später insetStategenutzt wird, sollte das auch erkannt werden.
Es gibt ein paar Sonderfälle, bei denen es nicht gut klappt, z.B. bei Strings in Backticks z.B.ID=`id.foo.${id}`;, oder Arrays.Das Skript erkennt zum Beispiele beim nachfolgenden Skript, dass die ID
id.foo.bar´ insetState` genutzt wurde:const ID_OF_DEVICE ="id.foo.bar"; setState(ID_OF_DEVICE, true)Ich freue mich über die Entdeckung weiterer Edge-Cases, oder neuer Ideen, was man noch identifizieren könnte.
(Wenn ich mal ganz viel Zeit habe, versuche ich einen Graphen zu erzeugen, welcher State bei welchen anderen States Änderungen auslösen, aber das ist etwas Arbeit)
-
Ich habe bei meinen Skripten die Übersicht verloren, wo ich welche States setze oder lese, oder wo ich sie abonniere.
Daher hab ich mir ein kleines Skript geschrieben, das die JavaScript/TypeScript Dateien analysiert und eine Liste der genutzten States erzeugt.
Das ganze ist mit einer Beschreibung hier zu finden: https://github.com/BenjaminHae/iobroker-semgrep-rulesDas Schöne ist, dass es nicht stupide nach
getState/setState/onsucht, sondern wirklich semantisch geparst wird. D.h. wenn die ID in einer Variable gespeichert wird und diese Variable später insetStategenutzt wird, sollte das auch erkannt werden.
Es gibt ein paar Sonderfälle, bei denen es nicht gut klappt, z.B. bei Strings in Backticks z.B.ID=`id.foo.${id}`;, oder Arrays.Das Skript erkennt zum Beispiele beim nachfolgenden Skript, dass die ID
id.foo.bar´ insetState` genutzt wurde:const ID_OF_DEVICE ="id.foo.bar"; setState(ID_OF_DEVICE, true)Ich freue mich über die Entdeckung weiterer Edge-Cases, oder neuer Ideen, was man noch identifizieren könnte.
(Wenn ich mal ganz viel Zeit habe, versuche ich einen Graphen zu erzeugen, welcher State bei welchen anderen States Änderungen auslösen, aber das ist etwas Arbeit)
interessantes project - blockly wird nicht berücksichtigt ?
und mein output file ist ziemlich leer, bis auf die namen der scripts
mach ich was falsch ?
auschnitt des files - nur alle namen - keine sonstigen einträge (bei 2922 zeilen im file)
... ## MYSTUFF/VIS/ALERT-WIDGET/AlarmHinzu1.js ## MYSTUFF/VIS/ALERT-WIDGET/PostItHinzu2.js ## MYSTUFF/VIS/ALERT-WIDGET/WidgerAlertTest1.js ## MYSTUFF/VIS/ALERT-WIDGET/xdeleteAlert1.js ## MYSTUFF/VIS/ALEXA15/RefreshMovementMotionShow15All.js ## MYSTUFF/Vorlagen-Verschiedene.js ## MYSTUFF/WAAGE/WaageAnsagen.js ## MYSTUFF/WINDOWS_NODE/new-windows-control.js ## MYSTUFF/WINDOWS_NODE/WindowsNodeWebserver.js ## MYSTUFF/XIAOMI/DASHBUTTONPlayboy2.js ## MYSTUFF/XIAOMI/XiaomiAlarmBatterie1.js ## MYSTUFF/XIAOMI/xiaomiAntennaSchalten.js ## MYSTUFF/XIAOMI/XiaomiSchalter1.js .... -
interessantes project - blockly wird nicht berücksichtigt ?
und mein output file ist ziemlich leer, bis auf die namen der scripts
mach ich was falsch ?
auschnitt des files - nur alle namen - keine sonstigen einträge (bei 2922 zeilen im file)
... ## MYSTUFF/VIS/ALERT-WIDGET/AlarmHinzu1.js ## MYSTUFF/VIS/ALERT-WIDGET/PostItHinzu2.js ## MYSTUFF/VIS/ALERT-WIDGET/WidgerAlertTest1.js ## MYSTUFF/VIS/ALERT-WIDGET/xdeleteAlert1.js ## MYSTUFF/VIS/ALEXA15/RefreshMovementMotionShow15All.js ## MYSTUFF/Vorlagen-Verschiedene.js ## MYSTUFF/WAAGE/WaageAnsagen.js ## MYSTUFF/WINDOWS_NODE/new-windows-control.js ## MYSTUFF/WINDOWS_NODE/WindowsNodeWebserver.js ## MYSTUFF/XIAOMI/DASHBUTTONPlayboy2.js ## MYSTUFF/XIAOMI/XiaomiAlarmBatterie1.js ## MYSTUFF/XIAOMI/xiaomiAntennaSchalten.js ## MYSTUFF/XIAOMI/XiaomiSchalter1.js ....@liv-in-sky zu Blockly kann ich nichts sagen, ich weiß leider nicht, wie das funktioniert.
Dass es ganz leer ist, wundert mich. Ist
semgrepinstalliert? Sonst einmal mitpip install semgrepinstallieren. (Die neueste Version von generateDoc prüft jetzt auch, ob semgrep installiert ist)Ansonsten könntest du mir bite ein Script zeigen, bei dem etwas herauskommen sollte?
-
@liv-in-sky zu Blockly kann ich nichts sagen, ich weiß leider nicht, wie das funktioniert.
Dass es ganz leer ist, wundert mich. Ist
semgrepinstalliert? Sonst einmal mitpip install semgrepinstallieren. (Die neueste Version von generateDoc prüft jetzt auch, ob semgrep installiert ist)Ansonsten könntest du mir bite ein Script zeigen, bei dem etwas herauskommen sollte?
@benjamin-häublein sagte in Erzeugung einer Übersicht genutzter States:
pip install semgrep
-
semgrep ist installiert und die neuste version deines scriptes
-
inhalt outputfile:
# Overview of objects used in /opt/iobroker/scripte-backup/common/ ## 00000000000000000000000000tesssst.js ## 00000000000000HeizungNedis.js ## 0000000000000array.jsdas script dazu:
oder:
-
-
@benjamin-häublein sagte in Erzeugung einer Übersicht genutzter States:
pip install semgrep
-
semgrep ist installiert und die neuste version deines scriptes
-
inhalt outputfile:
# Overview of objects used in /opt/iobroker/scripte-backup/common/ ## 00000000000000000000000000tesssst.js ## 00000000000000HeizungNedis.js ## 0000000000000array.jsdas script dazu:
oder:
@liv-in-sky Bei mir kommt dabei folgendes Ergebnis raus:
## test1.js ### Set State - 0_userdata.0.CONTROL-OWN.AAATEST.TestLogic ### Get State - 0_userdata.0.CONTROL-OWN.AAATEST.TestLogic ## test2.js ### Get State - 0_userdata.0.CONTROL-OWN.MOTION.Standort ### Schedule - */30 * * * * *Was ist denn die Ausgabe des Skripts auf der Konsole?
Und was ist die Ausgabe vonsemgrep --config=rules.yml /pfad/zu/einem/Skript, wenn du das im Verzeichnis desgenerateDocProjekts ausführst?P.S:
SendTokommt auf meine Liste der Dinge die ich noch unterstützen will -
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden