Autor Téma: Delphi 10.4 IDE mi automaticky doplňuje finally-end při každém enteru  (Přečteno 580 krát)

Offline age.new

  • Plnoletý
  • ***
  • Příspěvků: 229
  • Karma: 0
Dobrý den,

je nějaký způsob jak resetovat funkci, která při každém enteru doplňuje finally-end i když všechny try-finaly a begin-end jsou správně. Prostě je IDE nějak zmagořené a já nevím co s tím mám dělat. Kód je v naprostém pořídku, lze jej spustit, ale prostě IDE prostředí na každý enter vloží výše uvedený paskvil. Jinak samozřejmě, po tom automatickém doplnění se kompilace přeruší právě kvůli zdvojenému finally-end. Asi nějaký bug.

Děkuji.
« Poslední změna: 07-10-2020, 09:26:11 od age.new »

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5450
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
V podobných prípadoch najprv spustím build a verím, že to pomôže. Nateraz mi to funguje. Občas vyhodí chybu (ktorá to spôsobovala), ktorú kompilácia nezachytí.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline age.new

  • Plnoletý
  • ***
  • Příspěvků: 229
  • Karma: 0
Bohužel, compile nebo build nepomůže. Vše je bez chyby. Ale jakýkoliv enter v kódu vloží finally-end.

Offline JaroB

  • Guru
  • *****
  • Příspěvků: 1010
  • Karma: 28
    • Verze Delphi: XE8, Seattle
Mně to dělá taky (v Seattle), záleží na pozici kurzoru v bloku, je to asi nějaká chybka.

Offline age.new

  • Plnoletý
  • ***
  • Příspěvků: 229
  • Karma: 0
Je to pěkně blbá chyba ... dělá mi to v celé hlavní proceduře, která je v podstatě od začátku do konce unitu.

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 1109
  • Karma: 47
    • Verze Delphi: 10.3
Můžeš sem dát nějakou třeba osekanou verzi té unity, kde to dělá? Podíval bych se u sebe (10.3.3).

Offline age.new

  • Plnoletý
  • ***
  • Příspěvků: 229
  • Karma: 0
Ta unita je větší, navíc pracuje s procedury z dalších unit. Struktura begin-end, try-except, try-finally je v pořádku. Jinak by to ani nešlo spustit. Prostě je to nějak zmatené.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3004
  • Karma: 135
    • Verze Delphi: D2007, XE3, DX10
Prostě je to nějak zmatené.
Tak to zkus preformatovat prikazem View | Editor | Format Source, co ti to udela.  Jen si schovej puvodni tvar, protoze ve starsich verzich to byl spis slehac na text, nez pomocnik.

Offline age.new

  • Plnoletý
  • ***
  • Příspěvků: 229
  • Karma: 0
Tak formát zdrojáků podle Delphi taky nepomůže. Ten příkaz jsem měl v Project -> Format Project Sources.. ale i tak to pořád doplňuje ty paskvily.

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 1109
  • Karma: 47
    • Verze Delphi: 10.3
Nemáš někdě nějaké "try" třeba v komentáři, v podmíněném překladu apod.? Tzn. kompilátoru by to nevadilo, ale editor by nechápal?

Dělá to úplně všude v té unitě (i když bys třeba psal novou proceduru hned za "uses" v sekci implementace), nebo až od nějakého místa níž?

K.

Offline age.new

  • Plnoletý
  • ***
  • Příspěvků: 229
  • Karma: 0
Žádné více řádkové komentáře. Ani podmíněný překlad. Ale asi už tuším - problém je patrně v anonymních funkcích, které mám v unitě. Po jejich vykomentování to přestalo. Vypadá to, že IDE si s nimi nerozumí a způsobí to tyto problémy.

Offline JaroB

  • Guru
  • *****
  • Příspěvků: 1010
  • Karma: 28
    • Verze Delphi: XE8, Seattle
Já žádné anonymní funkce nemám, a přesto v určitých situacích taky nastává :(

Offline age.new

  • Plnoletý
  • ***
  • Příspěvků: 229
  • Karma: 0
Jj, nastává to třeba, když vytvoříš řádek TRY s tím, že časem nakonec procedury vytvoříš i FINALY. Jenže od této chvíli, kdekoliv dáš enter, tak ti to bude automaticky vkládat END aj. paskvily ... A POZOR ... i když dáš enter nad původním TRY, kde by to logicky nic vkládat nemělo. Ta logika asi nebude moc robustní :) 

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 1109
  • Karma: 47
    • Verze Delphi: 10.3
Jinak pokud máte zapnuté persistentní bloky nebo jak tomu říkají, stačí mít označený kousek textu a pak to nic nevkládá. Teda alespoň u mě :-) Občas si tak pomáhám právě v situaci, kdy vím, že to finally za chvilku dolů půjdu dopsat.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3004
  • Karma: 135
    • Verze Delphi: D2007, XE3, DX10
Jj, nastává to třeba, když vytvoříš řádek TRY s tím, že časem nakonec procedury vytvoříš i FINALY. Jenže od této chvíli, kdekoliv dáš enter, tak ti to bude automaticky vkládat END aj. paskvily ... A POZOR ... i když dáš enter nad původním TRY, kde by to logicky nic vkládat nemělo. Ta logika asi nebude moc robustní :)
No ano, tohle je ovsem spatny postup psani zdrojoveho kodu ;D Programator neni pisarka, aby neco bezduse opisovala shora dolu, takze kdyz napisu try a zmacknu enter, tak ocekavam, ze se objevi prazdny radek pro telo a klauzule finally-end s kurzorem na prazdnem radku, aby se dalo rovnou pokracovat ve psani tela. Osobne bych uvital, kdyby to dalo kurzor na radek za  finally (a mam dojem, ze kdyz jsem delal v Delphi, tak jsem si ty sablony tak upravoval), protoze try clovek pise za vytvoreni/ziskani prostredku, ktery je treba uvolnit a tak to hned uvolnim. Tim, ze to pisu hned parove, tak na to nikdy nezapomenu a nevzpominam si, kdy jsem naposledy chyboval v uvolnovani nejakeho prostredku. A pak se teprv vratim do tela a plne se soustredim na jeho obsah a zivotnim cyklem uz se nezabyvam.

Takze me to prijde jako naprosto prirozene a spravne chovani editoru, ktery se snazi programatorovi ulehcit praci... Je to uplne stejne, jako kdyz enter po begin automaticky vygeneruje end;
« Poslední změna: 08-10-2020, 14:53:26 od pf1957 »