Delphi parser loses every call inside a `for var x in …` loop
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 45/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Ambito
- tooling
Direzione di ricerca
Start by reproducing with the Loop.pas sample in the issue, running codegraph callees WithVar and codegraph callers DropIfEmpty. Then inspect the parse tree the Pascal grammar produces for for var lItem in AList do, which the issue shows as an ERROR node, and compare it with the working for lItem in AList do form. The grammar ships as tree-sitter-pascal.wasm, so the fix may belong upstream. Done when WithVar lists DropIfEmpty as a callee and DropIfEmpty has two callers.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Summary
In a Delphi (Object Pascal) unit, a for … in loop that declares its variable inline (for var lItem in AList do, Delphi 10.3 and later) is an ERROR node for the parser: the loop and its body contribute nothing, so a call made in the body is missing from callees of the
routine and from callers of the callee. The same loop with the variable declared in a var section (for lItem in AList do) is indexed with its calls.
Versions
codegraph --version: 1.6.2 (Windows x64 bundle).- Windows 10 Pro 10.0.19045.
Minimal reproduction
Loop.pas:
unit Loop;
interface
type
TItem = class
public
function DropIfEmpty: Boolean;
end;
procedure WithVar(const AList: TArray<TItem>);
procedure WithDecl(const AList: TArray<TItem>);
implementation
function TItem.DropIfEmpty: Boolean;
begin
Result := True;
end;
procedure WithVar(const AList: TArray<TItem>);
begin
for var lItem in AList do
lItem.DropIfEmpty;
end;
procedure WithDecl(const AList: TArray<TItem>);
var
lItem: TItem;
begin
for lItem in AList do
lItem.DropIfEmpty;
end;
end.
Steps, in a directory holding only that file:
codegraph init -y .
codegraph callees WithVar
codegraph callees WithDecl
codegraph callers DropIfEmpty
Observed (1.6.2):
● 6 nodes, 6 edges
function WithVar (pascal) — Loop.pas:11
ℹ No callees found for "WithVar"
function WithDecl (pascal) — Loop.pas:12
method DropIfEmpty
Loop.pas:8
Callers of "DropIfEmpty" (1):
method TItem::DropIfEmpty (pascal) — Loop.pas:8
function WithDecl
Loop.pas:12
Expected: WithVar with the callee DropIfEmpty as well, and DropIfEmpty with two callers.
The grammar's tree for the body of WithVar (tree-sitter-pascal.wasm shipped in 1.6.2) — the whole loop is an ERROR, the body's lItem.DropIfEmpty never becomes a statement/exprDot:
block !
ERROR !
kFor
varAssignDef !
kVar "var"
ERROR ! lItem in AList do
ERROR ! lItem
identifier "DropIfEmpty"
The other inline-variable forms parse: var x := …; (varAssignDef), var y: T; (varDef) and for var i := 0 to … do (for with a varAssignDef); only for var x in … is missing.
Where it was found
A product of about 600 for var … in loops across its units: callers DropIfEmpty names five of the six routines that call it, and the one left out calls it from for var lItem in lEmpty do lItem.DropIfEmpty;. Fourteen of the loops type the variable (for var lHandle: THandle in lHandles do).
Note on the syntax
for var x in … is Delphi's inline variable declaration inside a for-in loop (documented under Inline Variable Declaration, Delphi 10.3 Rio and later); the variable may carry a type (for var x: T in …), generic types included.
- Lingua principale
- C
- Stelle
- 73.2k
- Fork
- 4.7k
- Merge medio
- 2h 13m
- PR unite (30g)
- 418
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di colbymchenry/codegraph
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 90/100
colbymchenry/codegraph#2634 ·
I maintainer di solito rispondono entro 1 giorno
-
Windows: bundled Node v24.16.0 can abort at exit (nodejs/node#56645); please bundle Node >= 24.20.0Forse già presa @Ancienttwo l’ha presa 2 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
colbymchenry/codegraph#2617 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Invalid regular expression: /\boperator++\s*(?:<[^<>()]*>)?\s*\(/: Nothing to repeat (v1.6.2)Aperta
Difficoltà 2/5 Meno di un'ora Idoneità per principianti 72/100
colbymchenry/codegraph#2482 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
codegraph ui - does not workAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
colbymchenry/codegraph#1900 · 2 commenti · 5 reazioni ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
colbymchenry/codegraph#1700 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di colbymchenry/codegraph
Issue simili
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 91/100
FujiNetWIFI/fujinet-firmware#2045 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
OpenPrinting/cups#1772 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
snowballstem/snowball#311 ·
-
tech-debt
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
I maintainer di solito rispondono entro 1 giorno