Refactoring in ifdef/endif

Für Fragen rund um die Ide und zum Debugger
Antworten
Benutzeravatar
greye
Beiträge: 45
Registriert: So 16. Feb 2014, 15:38
OS, Lazarus, FPC: Debian/Fedora/Windows, Lazarus 3.6/4.0RC2, FPC 3.2.2
CPU-Target: 64 Bit

Refactoring in ifdef/endif

Beitrag von greye »

Hallo zusammen,

ich habe einen Schnipsel dergestalt:

Code: Alles auswählen

{$ifdef debug}
  cap := '[ DEBUG ]';
{$else}
  cap := '[ RELEASE ]';
{$endif}
wobei "cap" ein String ist, aber das spielt vermutlich keine Rolle, geht ja nicht um den String, sondern um den Variablenbezeichner.

Wenn ich nun im Debug-Modus ein Refactoring (Refactor | Rename Identifier) anstoße, um aus "cap" "c" zu machen, dann passiert das im "debug"-Bereich der Bedingung, unter "else" bleibt es bei "cap". "Search in Comments too" ist angehakt, mehr Auswahl habe ich da nicht.

Ich nehme an, daß die IDE denkt, das wäre egal, weil der Code in dem Moment keine Rolle spielt. Wäre verständlich, ist aber trotzdem irgendwie doof. Was muss ich tun, damit auch in den bedingten Codeteilen, die im gewählten Modus gerade nicht "aktiv" sind, umbenannt wird?

Lazarus 4.0RC2 (rev lazarus_4_0RC2-165-gdc81b2e397) FPC 3.2.3 x86_64-linux-gtk2

Danke schon mal für Eure Ideen,
42m
Zuletzt geändert von greye am Fr 14. Mär 2025, 17:48, insgesamt 3-mal geändert.

Benutzeravatar
Zvoni
Beiträge: 363
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: Refactoring in ifdef/endif

Beitrag von Zvoni »

Wäre mir nichts bekannt per "Refactoring"-Funktion der IDE,
und der {$ELSE}-Teil ist in diesem Moment kein Kommentar, weil kein "Comment-Delimiter" gefunden wird.
Ja, ein {Das ist ein Kommentar} IST ein Kommentar, aber {$ELSE} hat eben das Dollarzeichen als zweites, was dann eben nicht als Kommentar, sondern als Direktive interpretiert wird

Das einzige was mir einfällt wäre ein stumpfes "Suchen/Ersetzen" ggfs. unter Zuhilfenahme von regex
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Benutzeravatar
greye
Beiträge: 45
Registriert: So 16. Feb 2014, 15:38
OS, Lazarus, FPC: Debian/Fedora/Windows, Lazarus 3.6/4.0RC2, FPC 3.2.2
CPU-Target: 64 Bit

Re: Refactoring in ifdef/endif

Beitrag von greye »

Zvoni hat geschrieben: Mo 17. Mär 2025, 08:40[…] und der {$ELSE}-Teil ist in diesem Moment kein Kommentar, weil kein "Comment-Delimiter" gefunden wird.
Dachte ich auch, aber irgendwas hat da nicht funktioniert. Ist jetzt in dem Fall nicht tragisch, die handvoll Stellen kann ich auch so ändern, zudem ist das eh nur eine spielerische Bastelei, um mit Pascal/Lazarus warm zu werden - ärgerlich wäre es allerdings, wenn das in einem größeren Projekt passiert.

Aber klar, ein stumpfes Replace erfüllt den Zweck wohl auch und vielleicht sogar besser …

42m

Benutzeravatar
Zvoni
Beiträge: 363
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: Refactoring in ifdef/endif

Beitrag von Zvoni »

greye hat geschrieben: Mo 17. Mär 2025, 09:24 Aber klar, ein stumpfes Replace erfüllt den Zweck wohl auch und vielleicht sogar besser …
42m
Wie gesagt: ggfs Regex benutzen (bzw. wohl die "sicherere" Variante")

Suchen/Ersetzen "cap" mit "c" wird dann lustig bei ner Zeile wie

Code: Alles auswählen

cap := MeinLabel.caption;
//wird zu
c := MeinLabel.ction;
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

PascalDragon
Beiträge: 945
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Refactoring in ifdef/endif

Beitrag von PascalDragon »

greye hat geschrieben: Mo 17. Mär 2025, 09:24 Dachte ich auch, aber irgendwas hat da nicht funktioniert. Ist jetzt in dem Fall nicht tragisch, die handvoll Stellen kann ich auch so ändern, zudem ist das eh nur eine spielerische Bastelei, um mit Pascal/Lazarus warm zu werden - ärgerlich wäre es allerdings, wenn das in einem größeren Projekt passiert.
Der inaktive Teil von Compilerbedingungen wird von den CodeTools nicht verarbeitet, da es sich dabei um Code handeln könnte, den die IDE nicht versteht (zum Beispiel Delphi Code mit neueren Features oder Code für eine andere Platform, für den die nötigen Bezeichner nicht verfügbar sind). Das würde letztilch nur dazu führen, dass die CodeTools abstürzen oder einen Fehler melden (je nachdem).
FPC Compiler Entwickler

multiplatform-coder
Beiträge: 59
Registriert: Do 20. Apr 2023, 18:25

Re: Refactoring in ifdef/endif

Beitrag von multiplatform-coder »

In welchem Menu ist das Refactoring noch mal, ah, im Popup Menü das ich mit der Rechten Maustaste erreiche? Habe eine Variable im Quellcode umbenannt, die Änderung wird aber nicht übernommen, ich will deshalb das Refactoring verwenden. Ich habe meine fraglichen Bezeichner von Hand umbenannt ohne Refactoring. Das aber erkennt der Compiler nicht an. Warum und weche Schritte muss ich stattdessen ausführen?
Zuletzt geändert von multiplatform-coder am Di 15. Apr 2025, 12:35, insgesamt 2-mal geändert.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1639
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Refactoring in ifdef/endif

Beitrag von fliegermichl »

multiplatform-coder hat geschrieben: Di 15. Apr 2025, 12:20 In welcchem Menu ist das Refactoring noch mal? Habe eine Variable im Quellcode umbenannt, die Änderung wird aber nicht übernommen, ich will deshalb das Refactoring verwenden.
Quelltext -> Refactoring

multiplatform-coder
Beiträge: 59
Registriert: Do 20. Apr 2023, 18:25

Re: Refactoring in ifdef/endif

Beitrag von multiplatform-coder »

Ah, ok DANKE!!!!

Antworten