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

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3004
  • Karma: 135
    • Verze Delphi: D2007, XE3, DX10
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.
To nemelo vyresit problem, ale pripadne naznacit, na cem se eventualne rozsype formatovani tj. noreni bloku...
« Poslední změna: 08-10-2020, 14:52:51 od pf1957 »

Offline age.new

  • Plnoletý
  • ***
  • Příspěvků: 229
  • Karma: 0
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;

To ať klidně generuje, ale ať to tak udělá hned po napsání TRY nebo BEGIN. A nedělá to pak při jakémkoliv dalším enteru. Toto je přeci snadno ošetřitelné. Navíc proč to generuje FINALLY a END i v případě, že dáte enter kdekoliv v kódu výše než je TRY nebo BEGIN. To přeci není správné. Respektive z mého pohledu vnořování. Ta logika je tupá a prostě se snaží uzavřít vše co je otevřené.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3004
  • Karma: 135
    • Verze Delphi: D2007, XE3, DX10
BEGIN. To přeci není správné. Respektive z mého pohledu vnořování. Ta logika je tupá a prostě se snaží uzavřít vše co je otevřené.
No pokud se to chova takto divne, tak tam chyba nejspis bude, zrejme ve spojeni s temi anonymnimi metodami, jak pises, protoze IDE vzdycky kulhalo za prekladacem.

I kdyz jsem nepochopil, jak muzes napsat try, dat enter a cituji "...že časem nakonec procedury vytvoříš i FINALY...", kdyz to ti tam finally vygeneruje hned.

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 1109
  • Karma: 47
    • Verze Delphi: 10.3
I kdyz jsem nepochopil, jak muzes napsat try, dat enter a cituji "...že časem nakonec procedury vytvoříš i FINALY...", kdyz to ti tam finally vygeneruje hned.

Třeba už mám napsaných pár řádků, ale zjistím, že ještě budu potřebovat nějaký tMemoryStream. Tak si ho deklaruju, před těmi existujícímí řádky dám .Create, try... A od té doby Enter znamená, že se vloží finally end. Možná by stačilo, když by někde v nastavení bylo, zda to má vkládat vždycky, nebo jen když uživatel stisknul Enter hned za tím try.

Ale neříkám, že mi to stávající chování vadí - jednak to alespoň nutí to finally rovnou napsat a nezapomenout na něj, druhak kdybych ho hned psát nešel, tak si označím kousek textu, a pak to nedoplňuje.
« Poslední změna: 09-10-2020, 08:55:21 od vandrovnik »

Offline age.new

  • Plnoletý
  • ***
  • Příspěvků: 229
  • Karma: 0
Třeba už mám napsaných pár řádků, ale zjistím, že ještě budu potřebovat nějaký tMemoryStream. Tak si ho deklaruju, před těmi existujícímí řádky dám .Create, try... A od té doby Enter znamená, že se vloží finally end. Možná by stačilo, když by někde v nastavení bylo, zda to má vkládat vždycky, nebo jen když uživatel stisknul Enter hned za tím try.

Přesně to jsem myslel... doplnit jen 1x za TRY nebo BEGIN a pak už ne.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3004
  • Karma: 135
    • Verze Delphi: D2007, XE3, DX10
Třeba už mám napsaných pár řádků, ale zjistím, že ještě budu potřebovat nějaký tMemoryStream. Tak si ho deklaruju, před těmi existujícímí řádky dám .Create, try... A od té doby Enter znamená, že se vloží finally end.
Ale to ja povazuju za spravne chovani: chce to po tobe, abys uzavrel blok, takze kurzor za existuji radky a enter. Navic to muzes psat odzadu tj. nejprve to ve finally uvolnit a pak pred try doplnit konstrukci a kdyz ne in-line variable, tak jeste definovat promennou v odpovidajicim scope...

Citace
Možná by stačilo, když by někde v nastavení bylo, zda to má vkládat vždycky, nebo jen když uživatel stisknul Enter hned za tím try.
Ono to tam je: Options | Editor Options | Code Insight | Block completion

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 1109
  • Karma: 47
    • Verze Delphi: 10.3
Ono to tam je: Options | Editor Options | Code Insight | Block completion

A jo, takže když to někomu bude dělat neplechu, mělo by stačit tam nastavit "New blocks only".

Offline age.new

  • Plnoletý
  • ***
  • Příspěvků: 229
  • Karma: 0
Ono to tam je: Options | Editor Options | Code Insight | Block completion

To ale zablokuje veškeré doplňování ne? To bych zas nechtěl :) ... krátký příběh ze života: Roky jsem dělal v Delphi 6 a 7. Když jsem začal s XE2 verzí, prskal jsem pokaždé, když mi editor doplnil nějaké řádky za mě. Teď když dělám roky s novým Delphi a občas se musím vrátit k D6/D7, tak prskám, když mi editor řádky nedoplňuje, že to musím psát sám.

Ta funkce je fajn (kromě doplňování u cyklu FOR - to jsem snad nikdy nevyužil). Ale jen je škoda, že má takové chybky.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3004
  • Karma: 135
    • Verze Delphi: D2007, XE3, DX10
Excellent
Rated 1 time
To ale zablokuje veškeré doplňování ne? To bych zas nechtěl :)
Tak si to vyzkousej, jak se to chova. Ja s default chovanim problem nemam.

A mam jiny pribeh ze zivota: nekdy pred 35 lety jsem mel vypiplany MultiEdit od American Cybernetics k obrazu svemu, mel do nej napsano hafo scriptu, sablon atd. A kdyz jsem prisel k jinemu pocitaci, kde sice byl Multiedit, ale bez mych scriptu, tak jsem s tim skoro nedokazal delat.
A pak mi v nejake dalsi verzi zmenili scriptovaci jazyk z Pascal-like na C-like a to byl pro mne dostatecny impuls, abych si prestal prizpusobovat nastroj, ale prizpusobil se nastroji. Konec koncu je to jedina cesta, jak muzes efektivne prechazet mezi ruznymi platformami a nastroji.

Offline age.new

  • Plnoletý
  • ***
  • Příspěvků: 229
  • Karma: 0
Tak je to jasné. V editoru jsou nějaké neplechy s anonymními metodami. Použil jsem v novém kódu anonymní vlákno a od té doby mi v celém kódu po enteru vkládá "until ;". Je to nějaké pomatené.