Skip to content

Commit ec0e307

Browse files
Whathecodegitster
authored andcommitted
userdiff: better method/property matching for C#
- Support multi-line methods by not requiring closing parenthesis. - Support multiple generics (comma was missing before). - Add missing `foreach`, `lock` and `fixed` keywords to skip over. - Remove `instanceof` keyword, which isn't C#. - Also detect non-method keywords not positioned at the start of a line. - Added tests; none existed before. The overall strategy is to focus more on what isn't expected for method/property definitions, instead of what is, but is fully optional. Signed-off-by: Steven Jeuris <[email protected]> Acked-by: Johannes Sixt <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 43072b4 commit ec0e307

21 files changed

+352
-6
lines changed

t/t4018/csharp-exclude-assignments

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class Example
2+
{
3+
string Method(int RIGHT)
4+
{
5+
var constantAssignment = "test";
6+
var methodAssignment = MethodCall();
7+
var multiLineMethodAssignment = MethodCall(
8+
);
9+
var multiLine = "first"
10+
+ MethodCall()
11+
+
12+
( MethodCall()
13+
)
14+
+ MethodCall();
15+
16+
return "ChangeMe";
17+
}
18+
19+
string MethodCall(int a = 0, int b = 0) => "test";
20+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
class Example
2+
{
3+
string Method(int RIGHT)
4+
{
5+
if (false)
6+
{
7+
return "out";
8+
}
9+
else { }
10+
if (true) MethodCall(
11+
);
12+
else MethodCall(
13+
);
14+
switch ("test")
15+
{
16+
case "one":
17+
return MethodCall(
18+
);
19+
case "two":
20+
break;
21+
}
22+
(int, int) tuple = (1, 4);
23+
switch (tuple)
24+
{
25+
case (1, 4):
26+
MethodCall();
27+
break;
28+
}
29+
30+
return "ChangeMe";
31+
}
32+
33+
string MethodCall(int a = 0, int b = 0) => "test";
34+
}

t/t4018/csharp-exclude-exceptions

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using System;
2+
3+
class Example
4+
{
5+
string Method(int RIGHT)
6+
{
7+
try
8+
{
9+
throw new Exception("fail");
10+
}
11+
catch (Exception)
12+
{
13+
}
14+
finally
15+
{
16+
}
17+
try { } catch (Exception) {}
18+
try
19+
{
20+
throw GetException(
21+
);
22+
}
23+
catch (Exception) { }
24+
25+
return "ChangeMe";
26+
}
27+
28+
Exception GetException() => new Exception("fail");
29+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class Example
2+
{
3+
string Method(int RIGHT)
4+
{
5+
GenericMethodCall<int, int>(
6+
);
7+
8+
return "ChangeMe";
9+
}
10+
11+
string GenericMethodCall<T, T2>() => "test";
12+
}

t/t4018/csharp-exclude-init-dispose

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using System;
2+
3+
class Example : IDisposable
4+
{
5+
string Method(int RIGHT)
6+
{
7+
new Example();
8+
new Example(
9+
);
10+
new Example { };
11+
using (this)
12+
{
13+
}
14+
var def =
15+
this is default(
16+
Example);
17+
18+
return "ChangeMe";
19+
}
20+
21+
public void Dispose() {}
22+
}

t/t4018/csharp-exclude-iterations

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
using System.Linq;
2+
3+
class Example
4+
{
5+
string Method(int RIGHT)
6+
{
7+
do { } while (true);
8+
do MethodCall(
9+
); while (true);
10+
while (true);
11+
while (true) {
12+
break;
13+
}
14+
for (int i = 0; i < 10; ++i)
15+
{
16+
}
17+
foreach (int i in Enumerable.Range(0, 10))
18+
{
19+
}
20+
int[] numbers = [5, 4, 1, 3, 9, 8, 6, 7, 2, 0];
21+
22+
return "ChangeMe";
23+
}
24+
25+
string MethodCall(int a = 0, int b = 0) => "test";
26+
}

t/t4018/csharp-exclude-method-calls

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class Example
2+
{
3+
string Method(int RIGHT)
4+
{
5+
MethodCall();
6+
MethodCall(1, 2);
7+
MethodCall(
8+
1, 2);
9+
MethodCall(
10+
1, 2,
11+
3);
12+
MethodCall(
13+
1, MethodCall(),
14+
2);
15+
16+
return "ChangeMe";
17+
}
18+
19+
int MethodCall(int a = 0, int b = 0, int c = 0) => 42;
20+
}

t/t4018/csharp-exclude-other

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Example
2+
{
3+
string Method(int RIGHT)
4+
{
5+
lock (this)
6+
{
7+
}
8+
unsafe
9+
{
10+
byte[] bytes = [1, 2, 3];
11+
fixed (byte* pointerToFirst = bytes)
12+
{
13+
}
14+
}
15+
16+
return "ChangeMe";
17+
}
18+
}

t/t4018/csharp-method

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class Example
2+
{
3+
string Method(int RIGHT)
4+
{
5+
// Filler
6+
// Filler
7+
8+
return "ChangeMe";
9+
}
10+
}

t/t4018/csharp-method-array

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class Example
2+
{
3+
string[] Method(int RIGHT)
4+
{
5+
// Filler
6+
// Filler
7+
8+
return ["ChangeMe"];
9+
}
10+
}

0 commit comments

Comments
 (0)