AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Delphi-Parser mit Anwendung "Referenzen suchen"
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi-Parser mit Anwendung "Referenzen suchen"

Ein Thema von DenkDirNix · begonnen am 19. Apr 2020 · letzter Beitrag vom 23. Apr 2021
Antwort Antwort
Seite 1 von 2  1 2      
DenkDirNix
Registriert seit: 13. Dez 2018
Moinsen,

ich habe ein altes Tool (aus 2003 für Delphi7) mal etwas aufgefrischt und würde mich über freundliche oder hilfreiche Kommentare freuen. Motivation war die Unzulänglichkeit der IDE für die projektweite Suche im Quelltext und die Funktion "Referenzen suchen" (find References).

Was tut das Tool
  • Input ist ein übersetzbares Delphi-Projekt, eine Library oder Package. Die Entwicklung basiert auf dem Sprachumfang von Delphi 10.3.3.
  • Source-Files werden geparst und alle Elemente entsprechend der statischen Blockstruktur mit Typ-Informationen in einen TreeView einsortiert. Elemente sind im wesentlichen die Identifier, aber auch Pascal-Direktiven und -Attribute, Compiler-Direktiven und -Schalter, Literale und Dateinamen sowie falls gewünscht die Keywords.
  • Alle Referenzen (also textuelle Vorkommen) dieser Ids werden daneben als Liste von Code-Snippets angezeigt. Dazu der Referenz-Typ, also deklarierend, lesend, schreibend, weiterreichend. Alle Identifier in diesen Code-Snippets sind hyperlinked zum TreeView (per DoppelClick).

Nutzen
  • Zusätzlich zum üblichen funktionsbezogen-sequentiellen Blick auf die Anweisungen im Quellcode bekommt man schnellen Zugriff auf den "Lebenslauf" eines Identifiers.
  • schnelles projektweites und intelligentes (weil syntax- statt text-basiertes) Suchen und Umbenennen
  • Anbindung an IDE per Drag&Drop: Ziehen einer Referenz in die IDE springt zu dieser Codestelle
  • Filterung nach speziellen Nutzungen (z.B. ungenutzte Variablen, Generics, Overloads ,...)

Specials
  • Units dürfen fehlen. Nicht deklarierte Elemente werden in einer <Unresolved-unscoped>-Liste geführt. Natürlich ist solch ein Ergebnis nicht mehr exakt, trotzdem kann man idR damit arbeiten.
  • Ids aus System.pas sind rudimentär integriert, können nach Bedarf ergänzt werden.
  • Anzeige als Nassi-Shneiderman-Diagramm

Anzeige und Bedienung
  • siehe Hilfe-Datei

Aktueller Download aus meiner DropBox.
Miniaturansicht angehängter Grafiken
refpicmain.jpg   refpicoptions.jpg   refpicfilters.jpg   refpicfilteredname.jpg   refpicfilteredhierarchie.jpg  

refpicfilteredgenerics.jpg   diagramm.jpg  

Geändert von DenkDirNix (22. Jan 2024 um 17:29 Uhr) Grund: neue Version
 
DenkDirNix

 
Delphi 11 Alexandria
 
#2
  Alt 26. Apr 2020, 13:07
Vielen Dank @Rainer und @Michael für die freundlichen und dezenten Hinweise auf den (vor)letzten Fehler im Parser. Es gibt doch Konstrukte in Object-Pascal von denen man nicht zu träumen wagte. Zum Beispiel:
Code:
- f( nil^ )                          // Delphi-source\vcl\vcl.imaging.gifimg.pas
- @@Methode                          // Delphi-source\rtl\common\System.Win.InternetExplorer\TOleWebBrowser.InitControlData
- raise ... at @pTry2;               // ist "at" Keyword oder Direktive?
- inherited                          // in Delphi-source\vcl.Tabs.pas, record-constructor TTabPos.Create
Das sollte jetzt funktionieren, im Anhang Version 0.9.0.
Die Bedeutung bleibt mir aber unklar. Weiß jemand was darüber?
Angehängte Dateien
Dateityp: zip Ref.zip (1,13 MB, 20x aufgerufen)

Geändert von DenkDirNix ( 5. Nov 2020 um 18:12 Uhr)
  Mit Zitat antworten Zitat
DenkDirNix

 
Delphi 11 Alexandria
 
#3
  Alt 11. Okt 2020, 11:31
Die Version 0.9.1 ist fertig und enthält
  • einen schnellen TreeView
  • Korrekturen im Scanner und Parser, getestet u.a. mit Delphi-Sourcen und -Samples
  • HotKeys zum Merken von Bezeichnern

Ich würde mich freuen über
  • Meldungen zu Problemen mit dem Parser (sollten eigentlich nicht mehr auftreten! )
  • Kommentare zur Bedienbarkeit (intuitiv ?) und Darstellung (zu bunt, unprofessionell ?)
  • eure Meinungen zum Nutzen der ganzen Sache:
    Als Entwickler hat man ja eher diesen liebevollen Mein-Projekt-Blick (das schönste Baby der Welt!), kennt das UI komplett auswendig und ist vom Mehrwert schnell begeistert.
    Wie sieht das für Fremd-Nutzer aus?
  • Hat tatsächlich niemand Ideen zu den seltsamen Ausdrücken aus Post#2 ?
Angehängte Dateien
Dateityp: zip Ref.ZIP (1,14 MB, 13x aufgerufen)
  Mit Zitat antworten Zitat
DenkDirNix

 
Delphi 11 Alexandria
 
#4
  Alt 5. Nov 2020, 18:42
Die Version 0.9.2 ist fertig und enthält
  • Drag&Drop zur IDE. Mit Positionierung, über SendInputHelper leider in Zeitlupe
  • erweiterte Filter-Funktionen

Ich würde mich immer noch freuen über
  • Meldungen zu Problemen mit dem Parser (sollten eigentlich nicht mehr auftreten!)
  • Kommentare zur Bedienbarkeit (intuitiv ?) und Darstellung (zu bunt, unprofessionell ?)
  • Vorschläge für weitere Filter

Ich staune etwas, dass niemand Ideen zu den seltsamen Ausdrücken aus Post#2 hat. Die haben meinem Parser bzw. der Einordnung in die Identifier-Hierarchie etwas zu schaffen gemacht, jetzt ignoriert er sie einfach! Wie haben die anderen Parser-Programmierer hier das gemacht?
Angehängte Dateien
Dateityp: zip Ref.ZIP (1,15 MB, 20x aufgerufen)
  Mit Zitat antworten Zitat
delphifan2004

 
Delphi 10.3 Rio
 
#5
  Alt 5. Nov 2020, 20:04
Klasse Arbeit.

Aber wenn ich versuche, das runter zu laden, meldet sich Windows Defender, behauptet das sei Schadsoftware und entfernt sie dann. Windows Defender Notification war deaktiviert.

Bitte mal prüfen, denn die Alarmmeldung kommt nicht nur bei der .exe, sondern auch bei der .zip Datei.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

 
Delphi 12 Athens
 
#6
  Alt 5. Nov 2020, 20:21
@delphifan: sieh es als False-Positive, was leider zu oft passiert.
https://www.virustotal.com/gui/file/...cdfa/detection
https://www.virustotal.com/gui/file/...4410/detection

@DenkDirNix: Hier in diesem Unterforum darfst du deinen ersten Post unbegrenzt lange/oft bearbeiten,
damit man dort übersichtlich die aktuellsten Infos und Dateien einfügen kann.
Sonst müssten Besucher womöglich umständlich in 200000 Antworten den letzten Beitrag von dir suchen.
Gleiche Dateinamen überschreiben/aktualisieren sich und Neue werden hinzugefügt.

Geändert von himitsu ( 5. Nov 2020 um 20:23 Uhr)
  Mit Zitat antworten Zitat
DenkDirNix

 
Delphi 11 Alexandria
 
#7
  Alt 5. Nov 2020, 20:53
Zitat:
@DenkDirNix: Hier in diesem Unterforum darfst du deinen ersten Post unbegrenzt lange/oft bearbeiten,
damit man dort übersichtlich die aktuellsten Infos und Dateien einfügen kann.
Sonst müssten Besucher womöglich umständlich in 200000 Antworten den letzten Beitrag von dir suchen.
Gleiche Dateinamen überschreiben/aktualisieren sich und Neue werden hinzugefügt.
Hallo himitsu,
der erste Post ist zumindest bzgl. der Bilder und Downloads auf dem aktuellen Stand. Trotzdem wollte ich mit einem neuen Post meine offenen Fragen nochmals in die Runde werfen. Vielleicht weiß ja jemand inzwischen was...
  Mit Zitat antworten Zitat
delphifan2004

 
Delphi 10.3 Rio
 
#8
  Alt 5. Nov 2020, 21:01
Also Virenscanner ausschalten und noch mal runter laden? Maxh ich jetzt mal. Hoffentlich bleibt mir die .zip Datei auch nach Neustart des Windeows Defenders erhalten! Ja, tut sie. Ok, so muss ich das also in so einem Fall in Zukunft machen.

Ich vermisse aber noch den Quellcode. Hatte vor Jahren mal ein IDE Projekt und da könnte ich dieses Feature gut gebrauchen. So wie Delphi das macht. Eine Interface Lösung würde aber auch helfen. Dann brauchte ich nur das Interface und eine DLL die das Interface implementiert. @DenkDirNix, kannst Du das machen?

Geändert von delphifan2004 ( 5. Nov 2020 um 21:09 Uhr)
  Mit Zitat antworten Zitat
DenkDirNix

 
Delphi 11 Alexandria
 
#9
  Alt 5. Nov 2020, 21:26
Zitat:
Ich vermisse aber noch den Quellcode. Hatte vor Jahren mal ein IDE Projekt und da könnte ich dieses Feature gut gebrauchen. So wie Delphi das macht. Eine Interface Lösung würde aber auch helfen. Dann brauchte ich nur das Interface und eine DLL die das Interface implementiert. @DenkDirNix, kannst Du das machen?
Das Projekt ist noch in Arbeit, sowohl Scanner und Parser als auch das UI. Es wird noch einige Zeit vergehen bis ein wirklich "fertiger" Zustand erreicht ist.
Hast Du bis dahin vielleicht Hinweise zu meinen Syntax-Fragen aus Post#2 ?
  Mit Zitat antworten Zitat
DenkDirNix

 
Delphi 11 Alexandria
 
#10
  Alt 11. Jan 2021, 11:20
Hallo Forum,

die aktuelle Version (siehe unter Beitrag #1) enthält neben dem projektweiten Suchen nach Bezeichnern aller Art jetzt auch Sortieren und Umbenennen.
Ich würde gerne noch mal meine Parser-Fragen wiederholen:

Was bedeuten diese Konstrukte aus den genannten Delphi-Sourcen?
Code:
- f( nil^ )                // vcl\vcl.imaging.gifimg.pas
- @@Methode                // rtl\common\System.Win.InternetExplorer\TOleWebBrowser.InitControlData
- inherited                // vcl.Tabs.pas, im record-constructor TTabPos.Create
Außerdem finde ich nicht in der Dokumentation:
Code:
- raise ... at @pTry2;     // ist "at" Keyword oder Direktive? Okay, Keyword sicher nicht :-)
- Compiler-Direktive $K    // ist beim automatischen Einfügen per Ctrl-O-O dabei
Hinweise aller Art sind willkommen.
Miniaturansicht angehängter Grafiken
refpicmain.jpg  

Geändert von DenkDirNix (22. Jan 2021 um 08:24 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz