AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Delphi-Parser mit Anwendung "Hyperlinked Browser for Ids and References"

Delphi-Parser mit Anwendung "Hyperlinked Browser for Ids and References"

Ein Thema von DenkDirNix · begonnen am 19. Apr 2020 · letzter Beitrag vom 11. Okt 2020
Antwort Antwort
DenkDirNix
Registriert seit: 13. Dez 2018
Moinsen,

ich habe ein altes Tool (aus 2003 für Delphi7) mal etwas aufgefrischt und suche jetzt neben freundlichen Kommentaren natürlich auch Nutzer (bzw. erstmal Tester).
Motivation war die Unzuverlässigkeit der IDE-Funktion "Referenzen suchen".

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 und Typ-gerecht in einen TreeView einsortiert. Elemente sind im wesentlichen die Identifier, aber auch Pascal-Direktiven und -Attribute, Compiler-Direktiven und -Schalter, Literale 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).
  • Per DoppelClick öffnet man den FileViewer zur aktuellen Referenz, Identifier sind dort ebenfalls hyperlinked.

Regeln für Einordnung der Ids im Treeview
  • Variablen mit eindeutig zugeordnetem Speicher erhalten die gesamte Typ-Struktur kopiert
  • Zugriffe über Pointer (auch Klassen) sind nicht unbedingt eindeutig einer Variablen zuzuordnen. Sie landen deshalb unter dem zugehörigen Typ.

Nutzen
  • Zusätzlich zum üblichen funktionsbezogen-sequentiellen Blick auf die Anweisungen im Quellcode bekommt man schnellen Zugriff auf den "Lebenslauf" eines Ids, zum Beispiel eines Propertys.
    Die Denkweise geht also nicht vom Event aus (mit der Frage "was muss ich bei diesem Event tun?") sondern vom Identifier/Objekt (mit der Frage "welche Events betreffen diesen Identifier,
    finde ich diese im Code wieder?"). Man erhält also bestenfalls eine zusätzliche Verifikations-Möglichkeit.
  • schnelles und intelligentes (weil Syntax- statt Text-basiertes) Suchen, z.B. auch nach Tippfehlern in Compiler-Defines
  • Filterung nach speziellen Nutzungen (z.B. ungenutzte Variablen, nur schreibende Zugriffe,...)
  • sieht hübsch aus, stört nicht bei der Arbeit

Specials
  • Units dürfen fehlen. Nicht deklarierte Elemente werden in einer <Unknown-unscoped>-Liste geführt.
    Natürlich ist solch ein Ergebnis nicht mehr exakt, trotzdem kann man idR damit arbeiten.
    -> Empfehlung: Ohne Nicht-Projekt-Units anfangen, soweit nötig dann hinzufügen (evtl als reduzierte Version).
    Grenzen wenn ein Identifier nicht deklariert ist:
    - fehlender type bei overload- und operator-Zuordnung
    - falsche Zuordnung zu Identifier gleichen Namens in äußerem Scope, auch zu System-Ids
    - dann gff auch falscher Referenz-Typ für Parameter
  • Ids aus System.pas sind rudimentär integriert, können nach Bedarf ergänzt werden.

Anzeige und Bedienung

siehe Hilfe-Datei

Aktueller Download ist auch aus meiner DropBox möglich.
Miniaturansicht angehängter Grafiken
refpicmain.jpg   refpicoptions.jpg   refpicfiltered.jpg  
Angehängte Dateien
Dateityp: zip Ref.ZIP (1,14 MB, 5x aufgerufen)

Geändert von DenkDirNix (11. Okt 2020 um 11:17 Uhr) Grund: Fehler bei Compiler-Direktiven behoben.
 
DenkDirNix

 
Delphi 10.3 Rio
 
#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                          // im record-constructor!
Das sollte jetzt funktionieren, im Anhang Version 0.9.0
Angehängte Dateien
Dateityp: zip Ref.zip (1,13 MB, 8x aufgerufen)

Geändert von DenkDirNix (12. Okt 2020 um 09:37 Uhr)
  Mit Zitat antworten Zitat
DenkDirNix

 
Delphi 10.3 Rio
 
#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, 9x aufgerufen)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 17:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf