Skip to content

Commit 1095448

Browse files
authored
Add support for Foreach statement in C# (#35)
1 parent aeeb056 commit 1095448

File tree

4 files changed

+58
-0
lines changed

4 files changed

+58
-0
lines changed

ScipDotnet/ScipCSharpSyntaxWalker.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,12 @@ public override void VisitTypeParameter(TypeParameterSyntax node)
136136
base.VisitTypeParameter(node);
137137
}
138138

139+
public override void VisitForEachStatement(ForEachStatementSyntax node)
140+
{
141+
_scipDocumentIndexer.VisitOccurrence(_semanticModel.GetDeclaredSymbol(node), node.Identifier.GetLocation(), true);
142+
base.VisitForEachStatement(node);
143+
}
144+
139145
public override void VisitFromClause(FromClauseSyntax node)
140146
{
141147
_scipDocumentIndexer.VisitOccurrence(_semanticModel.GetDeclaredSymbol(node), node.Identifier.GetLocation(), true);

snapshots/input/syntax/Main/Statements.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,4 +82,12 @@ int Foreach()
8282
z += x;
8383
return z;
8484
}
85+
86+
void ForeachVariable(List<(int, int)> names)
87+
{
88+
foreach ((int firstName, int lastName) in names)
89+
{
90+
Console.WriteLine($"FirstName:{firstName}, LastName:{lastName}");
91+
}
92+
}
8593
}

snapshots/output-net6.0/syntax/Main/Statements.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,11 +168,32 @@ int Foreach()
168168
// ^ definition local 20
169169
// documentation ```cs\nint? z\n```
170170
foreach (int x in y)
171+
// ^ definition local 21
172+
// documentation ```cs\nint x\n```
171173
// ^ reference local 19
172174
z += x;
173175
// ^ reference local 20
174176
// ^ reference local 21
175177
return z;
176178
// ^ reference local 20
177179
}
180+
181+
void ForeachVariable(List<(int, int)> names)
182+
// ^^^^^^^^^^^^^^^ definition scip-dotnet nuget . . Main/Statements#ForeachVariable().
183+
// documentation ```cs\nprivate void Statements.ForeachVariable(List<(int, int)> names)\n```
184+
// ^^^^^ definition scip-dotnet nuget . . Main/Statements#ForeachVariable().(names)
185+
// documentation ```cs\nList<(int, int)> names\n```
186+
{
187+
foreach ((int firstName, int lastName) in names)
188+
// ^^^^^^^^^ definition local 22
189+
// documentation ```cs\nint firstName\n```
190+
// ^^^^^^^^ definition local 23
191+
// documentation ```cs\nint lastName\n```
192+
// ^^^^^ reference scip-dotnet nuget . . Main/Statements#ForeachVariable().(names)
193+
{
194+
Console.WriteLine($"FirstName:{firstName}, LastName:{lastName}");
195+
// ^^^^^^^^^ reference local 22
196+
// ^^^^^^^^ reference local 23
197+
}
198+
}
178199
}

snapshots/output-net7.0/syntax/Main/Statements.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,11 +191,34 @@ int Foreach()
191191
// ^ definition local 20
192192
// documentation ```cs\nint z\n```
193193
foreach (int x in y)
194+
// ^ definition local 21
195+
// documentation ```cs\nint x\n```
194196
// ^ reference local 19
195197
z += x;
196198
// ^ reference local 20
197199
// ^ reference local 21
198200
return z;
199201
// ^ reference local 20
200202
}
203+
204+
void ForeachVariable(List<(int, int)> names)
205+
// ^^^^^^^^^^^^^^^ definition scip-dotnet nuget . . Main/Statements#ForeachVariable().
206+
// documentation ```cs\nprivate void Statements.ForeachVariable(List<(int, int)> names)\n```
207+
// ^^^^^ definition scip-dotnet nuget . . Main/Statements#ForeachVariable().(names)
208+
// documentation ```cs\nList<(int, int)> names\n```
209+
{
210+
foreach ((int firstName, int lastName) in names)
211+
// ^^^^^^^^^ definition local 22
212+
// documentation ```cs\nint firstName\n```
213+
// ^^^^^^^^ definition local 23
214+
// documentation ```cs\nint lastName\n```
215+
// ^^^^^ reference scip-dotnet nuget . . Main/Statements#ForeachVariable().(names)
216+
{
217+
Console.WriteLine($"FirstName:{firstName}, LastName:{lastName}");
218+
// ^^^^^^^ reference scip-dotnet nuget System.Console 7.0.0.0 System/Console#
219+
// ^^^^^^^^^ reference scip-dotnet nuget System.Console 7.0.0.0 System/Console#WriteLine(+11).
220+
// ^^^^^^^^^ reference local 22
221+
// ^^^^^^^^ reference local 23
222+
}
223+
}
201224
}

0 commit comments

Comments
 (0)