[Gelöst] Typehelper und code suggestions

Für Fragen rund um die Ide und zum Debugger
Antworten
UGerd
Lazarusforum e. V.
Beiträge: 18
Registriert: Fr 4. Mär 2011, 17:00
OS, Lazarus, FPC: Lazarus 2.2.4 (rev lazarus_2_2_4) FPC 3.2.2 x86_64-win64-win32/win64
CPU-Target: 64Bit
Wohnort: Hamburg

[Gelöst] Typehelper und code suggestions

Beitrag von UGerd »

Hi,
ich habe einen Type helper für einen selbst definierten ordinalen Typ geschrieben. Sehr spät, also nach 400 Zeilen habe ich festgestellt, dass die code suggestions via Punkt-Notation beim Benutzen nicht funktionieren.
Ohne dem sind die Helper nicht sehr nützlich. Ist das ein Bug?
Im Bug-tracker habe ich nichts gefunden, allerdings komme ich damit nicht gut klar. folgend ein Beispiel-code:

Code: Alles auswählen

unit testhelper;

{$mode ObjFPC}{$H+}
{$modeswitch typehelpers}

interface

uses
  Classes, SysUtils;
Type
  TSelfDefinedOrdinal = 1..9;
  { TTestHelper }
  TTestHelper = Type Helper for TSelfDefinedOrdinal
  private
    function GetFive: TSelfDefinedOrdinal;
  public
    property five :TSelfDefinedOrdinal read GetFive;
  end;

  procedure Test;

implementation

procedure Test;
var
  i :Integer;
  t :TSelfDefinedOrdinal;
begin
  i:= t.five; //code suggestions funktioniert hier nicht.
  WriteLn(IntToStr(i)); //Kompilieren funktioniert!
  ReadLn;
end;

{ TTestHelper }

function TTestHelper.GetFive: TSelfDefinedOrdinal;
begin
  Result:= 5;
end;

end.
Lazarus 2.2.4 (rev lazarus_2_2_4) FPC 3.2.2 x86_64-win64-win32/win64
Zuletzt geändert von UGerd am Do 15. Dez 2022, 22:11, insgesamt 1-mal geändert.

Frank Ranis
Beiträge: 201
Registriert: Do 24. Jan 2013, 21:22

Re: Typehelper und code suggestions

Beitrag von Frank Ranis »

Hallo UGerd

probier mal so .

Code: Alles auswählen

procedure Test;
var
  i :Integer;
  t :TSelfDefinedOrdinal;
begin
  i:= integer(t.five);
  WriteLn(IntToStr(i)); 
  ReadLn;
end;
Gruß

Frank
www.flz-vortex.de

UGerd
Lazarusforum e. V.
Beiträge: 18
Registriert: Fr 4. Mär 2011, 17:00
OS, Lazarus, FPC: Lazarus 2.2.4 (rev lazarus_2_2_4) FPC 3.2.2 x86_64-win64-win32/win64
CPU-Target: 64Bit
Wohnort: Hamburg

Re: Typehelper und code suggestions

Beitrag von UGerd »

Ich fürchte, ich habe mich nicht klar genug ausgedrückt. Mein Beispielcode kompiliert und funktioniert.
Was nicht funktioniert, sind die Code-suggestions.
Nehmen wir einen String. Ein Typehelper hierfür ist in der Unit Syshelper.inc definiert.

Code: Alles auswählen

TStringHelper = Type Helper for AnsiString
1. ich deklariere eine String-variable: s
2. ich verwende s, und setze einen Punkt hinter s

Code: Alles auswählen

var
  s: String  
  s.
3. Ich bekomme die Methoden des Typehelpers vorgeschlagen, z.B. :

Code: Alles auswählen

CompareTo(const B: string): Integer
Mit meinem selbst definiertem Type-helper bekomme ich alles Mögliche vorgeschlagen, nur nicht die Methoden meines Typehelpers, hier: t.five

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Typehelper und code suggestions

Beitrag von theo »


UGerd
Lazarusforum e. V.
Beiträge: 18
Registriert: Fr 4. Mär 2011, 17:00
OS, Lazarus, FPC: Lazarus 2.2.4 (rev lazarus_2_2_4) FPC 3.2.2 x86_64-win64-win32/win64
CPU-Target: 64Bit
Wohnort: Hamburg

Re: Typehelper und code suggestions

Beitrag von UGerd »

theo hat geschrieben:
Do 15. Dez 2022, 11:29
Es gibt solche Meldungen. z.B.:
https://gitlab.com/freepascal.org/lazar ... sues/37334
Das Problem scheint ähnlich. Gleich ist: Selbst definierte Typen und Type-Helper. Ich habe eine Krücke gefunden: Solange dieses Problem besteht, verwende ich vordefinierte Typen:

Code: Alles auswählen

  //TSelfDefinedOrdinal = 1..9;
  TSelfDefinedOrdinal = Byte;
Jetzt kann ich den Type-Helper wie gewünscht beim Coden verwenden. Vor dem Kompilieren kommentiere ich wieder um, und es läuft. Das ist natürlich kein Dauerzustand, deshalb die Frage: Wie geht´s weiter? Der Eintrag ist zwei Jahre alt! Ein erneuter Eintrag im Bug-Tracker?
Ich scheue ein wenig zurück, es fiel mir schon schwer, mein Problem in Deutsch zu formulieren. Mit meinen mangelnden Englisch fürchte ich mich zu blamieren. :roll:

martin_frb
Beiträge: 572
Registriert: Mi 25. Mär 2009, 21:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
CPU-Target: mostly 32 bit

Re: Typehelper und code suggestions

Beitrag von martin_frb »

Genau das Example im Bugtracker posten.

"Code completion does not work for type-helper on subrange type"

Code completion does not show the method "five" for a variable of type TSelfDefinedOrdinal.
If TSelfDefinedOrdinal is changed to `TSelfDefinedOrdinal: byte` then it will work. So it seems to be the subrange definition


----------------------

Übrigens, folgendes scheint auch zu klappen:

TSelfDefinedOrdinal = type 1..9;

UGerd
Lazarusforum e. V.
Beiträge: 18
Registriert: Fr 4. Mär 2011, 17:00
OS, Lazarus, FPC: Lazarus 2.2.4 (rev lazarus_2_2_4) FPC 3.2.2 x86_64-win64-win32/win64
CPU-Target: 64Bit
Wohnort: Hamburg

[Gelöst] Typehelper und code suggestions

Beitrag von UGerd »

martin_frb hat geschrieben:
Do 15. Dez 2022, 17:48

Übrigens, folgendes scheint auch zu klappen:

TSelfDefinedOrdinal = type 1..9;
Klappt! Allerdings nur, wenn der Code für den Type-Helper in der gleichen Unit wie die Type Definition steht. Ich habe meinen Type-Helper Code in die Unit mit der Definition transferiert.

Ich weiß nicht, wie ich mich bedanken kann, ihr seid schon eine tolle Truppe hier.

Morgen werde ich mich mit dem Bug Tracker rumschlagen, aber zuerst bewerbe ich mich um eine Mitgliedschaft in euren Verein

Gruß
UGerd

Antworten