AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte UnitOptimizer

UnitOptimizer

Ein Thema von stahli · begonnen am 25. Mai 2018 · letzter Beitrag vom 15. Okt 2019
Antwort Antwort
Seite 4 von 10   « Erste     234 56     Letzte » 
Benutzerbild von stahli
stahli
Registriert seit: 26. Nov 2003
Ich bin dabei, ein Tool aufzubauen, das Units sortiert und Code ergänzt.

Es ist quasi eine Klassenvervollständigung, Codeformatierung und Codesortierung in einem.

Hier mal ein aktueller Zwischenstand als Video: https://youtu.be/cfKa3wuoEd0

Eine direkte Codeformatierung (Einrückung) habe ich noch nicht drin, will das aber auch noch ergänzen. Die anderen Features gehen für mich aber vor.

Die Abkürzung "prop" könnte man auch mit "property" ausschreiben lassen. Ebenso sind optional andere Voreinstellungen möglich, wenn dies gewünscht würde. Ich bin zunächst erst einmal von meinen Wünschen ausgegangen.

Ich würde das später sehr gern kommerziell anbieten, wenn es Nachfrage gibt.
Für öffentliche Tests ist es noch etwas früh. Dazu muss ich noch einiges ausbauen und ausbessern.
Sofern jemand Erfahrungen mit den OTA hat und daran mitarbeiten möchte, dann gebt Bescheid...



Ich hatte dazu schon einen Thread, der sich aber speziell auf die Interface-Unterstützung bezogen hatte. Da das Tool aber Units allgemein bearbeitet habe ich hier einen neuen Thread eröffnet.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
 
raller09

 
Delphi 10.1 Berlin Enterprise
 
#31
  Alt 11. Sep 2018, 15:22
So, hab jetzt mal das Haupt-Verzeichnis der Units mit dem Tool von Herrn Raabe bearbeitet (350 Units).

"UnitScopeNames" so eingestellt wie im Projekt, "GroupNames=" (leer).

Dadurch wird nicht sortiert sondern nur entsprechend erweitert.
Ich musste noch an ein paar Stellen den fehlenden Scope vor einzelnen Funktions-Aufrufen erweitern...


Sieht soweit gut aus aber kompiliert leider auch nicht schneller (Erzeugen ohne IDEFixPack ca. 15 Min, mit ca. 3 Min.).
Lasse es aber trotzdem so. vielleicht bemerke ich noch Vorteile an anderer Stelle...


Danke
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

 
Delphi 10.3 Rio
 
#32
  Alt 29. Okt 2018, 23:15
Ich habe jetzt die Formatierung angefangen.
Aktuell sehen die uses- und const-Abschnitte schon ganz gut aus.

Es werden bestimmte Regeln zu den Einrückungen und Leerzeichen um bestimmte Zeichen eingehalten.

Die Einrückungen können auch bestimmte Inhalte (z.B. '=' oder später 'read' und 'write' von Properties) untereinander ausrichten.
Leerzeilen dienen dabei als Trennzeilen für einzelne Blöcke.

Umgebrochene lange Zeilen können ebenfalls an bestimmten Textmarken ausgerichtet werden.

Es gibt natürlich extrem viele Möglichkeiten, die da relevant werden können. Sicherlich hat da jeder Entwickler auch eigene Wünsche und Vorstellungen.
Mal sehen, wie weit ich damit komme.

Es ist auf jeden Fall eine ziemlich komplexe Angelegenheit. :-/


Was mir besonderes Kopfzerbrechen macht, ist der Umgang mit Zeilenumbrüchen und Kommentartexten.
Ich kann leider nicht unterscheiden, ob ein Zeilenumbruch durch einen Entwickler eingefügt wurde oder durch eine frühere Formatierung.
Entsprechend weiß ich bei einer Neuformatierung nicht, ob ein Zeilenumbruch bestehen bleiben soll oder ob der nach einer Codeänderung neu berechnet werden muss.
Workarounds, die mir da einfallen, sind nicht wirklich tauglich oder zumindest im Codeeditor störend.
Weiß jemand, ob der Codeeditor sowas wie weiche Umbrüche unterstützt (Shift+Enter)? Ich habe leider noch nichts gefunden.

Bei Kommentaren werde ich unterscheiden zwischen "Auskommentierungen" und "echtem Kommentar". "Auskommentierungen" werden auf Wunsch wie Quelltext formatiert, was die Einrückungen, Umbrüche und Space-Korrekturen betrifft. Die Codezeilen werden dann zwischen begin-end usw. entsprechend eingerückt.
Echter Kommentar wird im Block wie gehabt linksbündig ausgerichtet und kann beliebige Leerzeichen enthalten.
(Für den Compiler bleibt natürlich alles normaler Kommentar.)


Anbei mal zwei Darstellungen eines Beispielcodes, unformatiert und formatiert.
Da das hier in der DP nur näherungsweise darstellbar ist, auch mal noch zwei entsprechende Screenshots.


VORHER:
Code:
unit uInterfaces;

interface

uses
  System.Classes,Generics.Collections        ,System.Generics.Collections  ,   Vcl.Graphics;

const
  sid_UnitFile = '{3D27E420-B68B-423D-8F4A-BF9179A14BF3}';
sid_Parser='{683E78A3-A24F-4841-81B2-459EC0A9A20F}';

  sid_ResultText = '{23B6DE22-7C2C-4F6C-BB49-F6BD5FCF9A56}'  ;
  sid_PosMarker = '{7F1F73C8-722E-4D87-A367-D06EFFA1D81E}'   ;
  sid_Word = '{CF738D99-C813-471B-9810-DD8BE204F007}'        ;
  sid_Words = '{A5461E5E-67A7-42EC-B918-23828C749DAA}'       ;

  sid_LB = '{3765F016-9575-4916-BDC4-CF0700462E0D}'          ;
  sid_Apostroph = '{904BD8A1-2149-4679-B80D-FC89CDFB31D7}';
  sid_Comment = '{AF8075A3-3C80-40DE-8963-53FC9A791B1D}';
  sid_CommentParenthesisStars = '{B0D4E9FB-BBF3-4C13-889F-21A54E54D70F}';
  sid_CommentCurlyBraces = '{2D28310E-F09F-4016-9D35-84DE5352F18A}';
  sid_CommentDoubleSlashes = '{C983F5E9-F68A-46D4-9895-AF68A38A0B04}';
  sid_CommentHK = '{FD36117E-5E4F-4D13-8D33-5407259F61A0}';
  sid_Attribute = '{2D28DE78-CD7A-4164-915D-BE4A228DFEAD}';
  sid_Type = '{40D018C6-55EC-4040-804C-5F45AEB77382}';
  sid_FoundMember = '{6E68F02E-2FB5-4FE2-BD53-1E8E5CFE3DF8}';
  sid_Unit = '{E7E7399C-AA72-472C-BD51-0EB6298FCB9B}';
  sid_UnitInterface = '{42207023-90C8-4D10-9066-F51221D8C53D}';
  sid_UnitImplementation = '{546D8E44-433C-46BF-96AB-3E6BDE4D4F09}';
  sid_UnitUses = '{AF8CD130-CB09-4D7D-AD26-FE2C636F9DBD}';
  sid_UnitUse = '{48EC2F39-887A-4AC5-893E-02B4B385B18F}';
  sid_UnitConst = '{64264236-FCAA-4765-896E-941DE00B8A59}';
  sid_UnitType = '{66906CF4-9489-4AD9-8246-FC2F010DAF4B}';
  sid_UnitInitialization = '{72DF6782-D73C-4353-8177-66BE26E3527E}';
  sid_UnitFinalization = '{CF5EAA57-9946-4875-91A6-75985DAFA2EB}';
  sid_ParamPart = '{8A3310C3-2126-4E85-8451-B2383FFF7D93}';
  sid_Params = '{04D95874-A9D6-475E-B9EA-CF2806108E29}';
  sid_Index = '{AFCF6127-F72A-472B-A963-25B3F3CCB365}';
  sid_Bases = '{FF65E2E6-BA17-444A-8F16-040EFD73B2B0}';
  sid_InterfaceClassDeclaration = '{604DD7AF-9699-4DF6-B333-EE49ACE67DB5}';
  sid_InterfaceDeclaration = '{2B986919-AF9E-4673-845B-001EBFD17E91}';
  sid_ClassDeclaration = '{61B14F2F-8B38-4995-A0A4-DDE4D70254D4}';
  sid_ClassSection = '{87176506-56B6-426F-BFCC-6DA956AB5560}';
  sid_Getter = '{15E251BF-A12A-480B-A512-07A7CA9B056D}';
  sid_Setter = '{E319417C-8AF6-4558-81DD-7F2970380C8E}';
  sid_ConstructorDeclaration = '{3CA6DA10-29B3-4393-AE41-FF8C7484232A}';
  sid_DestructorDeclaration = '{C1981961-EED7-45C4-9BBA-6F7E51597892}';
  sid_ProcedureDeclaration = '{C4DD75FD-138D-45D7-9C01-0928747CAFB9}';
  sid_FunctionDeclaration = '{D8F6BC30-5D06-4482-8C83-07ABC6EDD4F4}';
  sid_PropertyDeclaration = '{0294DE48-6390-4DE7-A4CD-EE17F62DA292}';
  sid_PropDeclaration = '{831497FE-1FA7-4418-B019-A505906D00E3}';
  sid_PropSig = '{919A50FC-A5A1-4464-98A3-D15F9778AD75}';
  sid_FieldDeclaration = '{6C62B581-CFAD-42CD-843D-6F9051BD16D7}';

  sid_ClassHeader = '{ADC0E9DF-803C-41AE-8CA4-1E2473144525}';
  sid_ClassConstructor = '{AAA34D34-E4DB-4BD1-A5C8-F27CDAF68E31}';
  sid_ClassDestructor = '{263AE578-4E0B-4093-9FC0-7264F619A98D}';
  sid_ClassProcedure = '{8D8585FA-B120-476B-B84B-46D29E2F8E4E}';
  sid_ClassFunction = '{F8A6A860-9B8E-4051-A533-D22ACDFAA510}';

TEST_Integer=1+2+3+4+5+6+7+8+9+11+2+3+4+5+6+7+888+9+1+2+3+44+5+6+7+8+9+1111+2+3+4+5+6+7+8+9+1+2+3+4+5+666+7+8+99999999999999999+11111+2+3+4+5+6+7+8+99+1+2+3+4+5+6+7+8+9+111+2+3+4+5+66+7+8+999;
Test_String='Test '+'Test '+'Test '+'Test '+'Test '+'Test '+'Test '+'Test '+'Test '+'Test '+'Test '+'Test '+'Test '+'Test '+'Test '+'Test '+'Test '+'Test '+'Test';
NACHHER:
Code:
unit uInterfaces;

interface

uses
  System.Classes, Generics.Collections, System.Generics.Collections, Vcl.Graphics;

const
  sid_UnitFile = '{3D27E420-B68B-423D-8F4A-BF9179A14BF3}';
  sid_Parser  = '{683E78A3-A24F-4841-81B2-459EC0A9A20F}';

  sid_ResultText = '{23B6DE22-7C2C-4F6C-BB49-F6BD5FCF9A56}';
  sid_PosMarker = '{7F1F73C8-722E-4D87-A367-D06EFFA1D81E}';
  sid_Word      = '{CF738D99-C813-471B-9810-DD8BE204F007}';
  sid_Words     = '{A5461E5E-67A7-42EC-B918-23828C749DAA}';

  sid_LB                       = '{3765F016-9575-4916-BDC4-CF0700462E0D}';
  sid_Apostroph                = '{904BD8A1-2149-4679-B80D-FC89CDFB31D7}';
  sid_Comment                  = '{AF8075A3-3C80-40DE-8963-53FC9A791B1D}';
  sid_CommentParenthesisStars  = '{B0D4E9FB-BBF3-4C13-889F-21A54E54D70F}';
  sid_CommentCurlyBraces       = '{2D28310E-F09F-4016-9D35-84DE5352F18A}';
  sid_CommentDoubleSlashes     = '{C983F5E9-F68A-46D4-9895-AF68A38A0B04}';
  sid_CommentHK                = '{FD36117E-5E4F-4D13-8D33-5407259F61A0}';
  sid_Attribute                = '{2D28DE78-CD7A-4164-915D-BE4A228DFEAD}';
  sid_Type                     = '{40D018C6-55EC-4040-804C-5F45AEB77382}';
  sid_FoundMember              = '{6E68F02E-2FB5-4FE2-BD53-1E8E5CFE3DF8}';
  sid_Unit                     = '{E7E7399C-AA72-472C-BD51-0EB6298FCB9B}';
  sid_UnitInterface            = '{42207023-90C8-4D10-9066-F51221D8C53D}';
  sid_UnitImplementation       = '{546D8E44-433C-46BF-96AB-3E6BDE4D4F09}';
  sid_UnitUses                 = '{AF8CD130-CB09-4D7D-AD26-FE2C636F9DBD}';
  sid_UnitUse                  = '{48EC2F39-887A-4AC5-893E-02B4B385B18F}';
  sid_UnitConst                = '{64264236-FCAA-4765-896E-941DE00B8A59}';
  sid_UnitType                 = '{66906CF4-9489-4AD9-8246-FC2F010DAF4B}';
  sid_UnitInitialization       = '{72DF6782-D73C-4353-8177-66BE26E3527E}';
  sid_UnitFinalization         = '{CF5EAA57-9946-4875-91A6-75985DAFA2EB}';
  sid_ParamPart                = '{8A3310C3-2126-4E85-8451-B2383FFF7D93}';
  sid_Params                   = '{04D95874-A9D6-475E-B9EA-CF2806108E29}';
  sid_Index                    = '{AFCF6127-F72A-472B-A963-25B3F3CCB365}';
  sid_Bases                    = '{FF65E2E6-BA17-444A-8F16-040EFD73B2B0}';
  sid_InterfaceClassDeclaration = '{604DD7AF-9699-4DF6-B333-EE49ACE67DB5}';
  sid_InterfaceDeclaration     = '{2B986919-AF9E-4673-845B-001EBFD17E91}';
  sid_ClassDeclaration         = '{61B14F2F-8B38-4995-A0A4-DDE4D70254D4}';
  sid_ClassSection             = '{87176506-56B6-426F-BFCC-6DA956AB5560}';
  sid_Getter                   = '{15E251BF-A12A-480B-A512-07A7CA9B056D}';
  sid_Setter                   = '{E319417C-8AF6-4558-81DD-7F2970380C8E}';
  sid_ConstructorDeclaration   = '{3CA6DA10-29B3-4393-AE41-FF8C7484232A}';
  sid_DestructorDeclaration    = '{C1981961-EED7-45C4-9BBA-6F7E51597892}';
  sid_ProcedureDeclaration     = '{C4DD75FD-138D-45D7-9C01-0928747CAFB9}';
  sid_FunctionDeclaration      = '{D8F6BC30-5D06-4482-8C83-07ABC6EDD4F4}';
  sid_PropertyDeclaration      = '{0294DE48-6390-4DE7-A4CD-EE17F62DA292}';
  sid_PropDeclaration          = '{831497FE-1FA7-4418-B019-A505906D00E3}';
  sid_PropSig                  = '{919A50FC-A5A1-4464-98A3-D15F9778AD75}';
  sid_FieldDeclaration         = '{6C62B581-CFAD-42CD-843D-6F9051BD16D7}';

  sid_ClassHeader     = '{ADC0E9DF-803C-41AE-8CA4-1E2473144525}';
  sid_ClassConstructor = '{AAA34D34-E4DB-4BD1-A5C8-F27CDAF68E31}';
  sid_ClassDestructor = '{263AE578-4E0B-4093-9FC0-7264F619A98D}';
  sid_ClassProcedure  = '{8D8585FA-B120-476B-B84B-46D29E2F8E4E}';
  sid_ClassFunction   = '{F8A6A860-9B8E-4051-A533-D22ACDFAA510}';

  TEST_Integer = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 11 + 2 + 3 + 4 + 5 + 6 + 7 + 888 + 9 + 1 + 2 + 3 + 44 + 5 + 6 + 7 +
                 8 + 9 + 1111 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 1 + 2 + 3 + 4 + 5 + 666 + 7 + 8 + 99999999999999999 +
                 11111 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 99 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 111 + 2 + 3 + 4 + 5 + 66 +
                 7 + 8 + 999;
  Test_String = 'Test ' + 'Test ' + 'Test ' + 'Test ' + 'Test ' + 'Test ' + 'Test ' + 'Test ' + 'Test ' + 'Test ' +
                 'Test ' + 'Test ' + 'Test ' + 'Test ' + 'Test ' + 'Test ' + 'Test ' + 'Test ' + 'Test';
Miniaturansicht angehängter Grafiken
f1.jpg   f2.jpg  

Geändert von stahli (30. Okt 2018 um 11:03 Uhr)
  Mit Zitat antworten Zitat
EWeiss
 
#33
  Alt 30. Okt 2018, 07:06
Sieht gut aus und gefällt mir.
Vor allem die Sortierung der sid_

Das jedoch fällt etwas aus dem Rahmen "sid_InterfaceClassDeclaration"
Es ist der längste string sollten dann nicht die anderen alle noch um 1 aufrücken?

Das scheint bei allen längsten srings zu sein.

gruss

Geändert von EWeiss (30. Okt 2018 um 07:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

 
Delphi 2010 Professional
 
#34
  Alt 30. Okt 2018, 08:56
Das jedoch fällt etwas aus dem Rahmen "sid_InterfaceClassDeclaration"
Es ist der längste string sollten dann nicht die anderen alle noch um 1 aufrücken?
Da das hier in der DP nur näherungsweise darstellbar ist, auch mal noch zwei entsprechende Screenshots.
Aufm Bild passt alles und ich kann auch nur meinen Respekt zollen indem ich sage: Das hast Du echt cool hinbekommen!
  Mit Zitat antworten Zitat
EWeiss
 
#35
  Alt 30. Okt 2018, 09:27
Das jedoch fällt etwas aus dem Rahmen "sid_InterfaceClassDeclaration"
Es ist der längste string sollten dann nicht die anderen alle noch um 1 aufrücken?
Da das hier in der DP nur näherungsweise darstellbar ist, auch mal noch zwei entsprechende Screenshots.
Aufm Bild passt alles und ich kann auch nur meinen Respekt zollen indem ich sage: Das hast Du echt cool hinbekommen!
Korrekt
Macht wohl der Formater im Forum Trouble..
Nehme alles zurück

gruss
  Mit Zitat antworten Zitat
generic

 
Delphi XE5 Professional
 
#36
  Alt 30. Okt 2018, 09:53
Bezüglich des Uses kann ich nur empfehlen jede Unit untereinander zu schreiben,
dann klappt das mit den SVN/GIT besser beim Mergen.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

 
Delphi 10.3 Rio
 
#37
  Alt 30. Okt 2018, 11:38
Danke Euch, ist aber noch ein weiter Weg.

Bezüglich des weichen Umbruchs werde ich mal mit #00#0A#0D experimentieren oder mit #0A oder #0D statt #0A#0D.
Mal sehen, was Delphi da im Editor und Parser toleriert...
Es wäre halt schön, erkennen zu können, welche Umbrüche vom Optimizer eingefügt wurden.
Ich könnte da auch optional verschiedene Varianten ermöglichen, für den Fall, dass bestimmte Kennzeichnungen (in bestimmten Delphi-IDEs) Probleme machen sollten.

@generic
Da sehe ich auch gar kein Problem, das optional anzubieten.
Man hätte dann für die einzelnen Code-Abschnitte die Möglichkeit, bestimmte Vorgaben auszuwählen (für den uses-Block dann "OneUnitPerLine").

Geändert von stahli (30. Okt 2018 um 11:51 Uhr)
  Mit Zitat antworten Zitat
EWeiss
 
#38
  Alt 30. Okt 2018, 12:52
Zitat:
Da sehe ich auch gar kein Problem, das optional anzubieten.
Man hätte dann für die einzelnen Code-Abschnitte die Möglichkeit, bestimmte Vorgaben auszuwählen (für den uses-Block dann "OneUnitPerLine").
Ich habe ja nicht zu sagen.. aber ich würde mir einen Formater wünschen bei dem man nicht zu viele Einstellmöglichkeiten hat.
In die IDE einbinden - Formatieren klicken fertig!

Anschließend das Ergebnis wie bei dir in den Bildern.
Vollkommen ausreichend.

Funktionen, Proceduren Alphabetisch anordnen für jede Classe einzeln.
Das war's einfach, simple, schnell. (Ich meine natürlich die Bedienbarkeit)

gruss

Geändert von EWeiss (30. Okt 2018 um 12:57 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

 
Delphi 10.3 Rio
 
#39
  Alt 30. Okt 2018, 13:01
Na ja, wer mit den Standardeinstellungen leben kann, muss ja keine Optionen ändern.

Eine alphabetische Funktionssortierung hatte ich allerdings nicht vorgesehen. Statt dessen soll sich standardmäßig der Implementationsteil immer nach der Reihenfolge in der Klassendeklaration richten.

Wenn dies abweichend alphabetisch sein soll, müsste ich eine Option zur Auswahl anbieten (und man müsste klären, ob in den Klassensektionen (private, public etc.) oder nur im Implementationsteil sortiert werden soll - wie es jetzt annähernd die IDE macht).
  Mit Zitat antworten Zitat
EWeiss
 
#40
  Alt 30. Okt 2018, 13:06
Zitat:
Eine alphabetische Funktionssortierung hatte ich allerdings nicht vorgesehen
In der Structur Ansicht sind die Funktionen Alphabetisch sortiert da bietet sich es doch an das auch im Code so zu handhaben.
Ich habe ja einen Formatierter jcf_243 aber genau hier liegt das Problem zuviele Einstellmöglichkeiten die einen fast erschlagen.

Da bleibe ich dann doch lieber bei dem in der IDE integrierten und nehme das was ich habe. Tabweite 4 und gut ist.
Alles andere bleibt wie es ist.

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