Skip to content

Commit 813ccb9

Browse files
authored
Merge pull request #17855 from hvitved/csharp/comments-mapped-locations
C#: Take mapped locations into account in `Comments.qll`
2 parents 733158f + 7910af1 commit 813ccb9

File tree

8 files changed

+16
-3
lines changed

8 files changed

+16
-3
lines changed

csharp/ql/lib/semmle/code/csharp/Comments.qll

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,13 @@
88
import Element
99
import Location
1010

11+
private Location unmapLoc(Location l) {
12+
result.(SourceLocation).getMappedLocation() = l
13+
or
14+
not exists(result.(SourceLocation).getMappedLocation()) and
15+
result = l
16+
}
17+
1118
/**
1219
* A single line of comment.
1320
*
@@ -19,7 +26,7 @@ class CommentLine extends @commentline {
1926
string toString() { none() }
2027

2128
/** Gets the location of this comment line. */
22-
Location getLocation() { commentline_location(this, result) }
29+
Location getLocation() { commentline_location(this, unmapLoc(result)) }
2330

2431
/** Gets the containing comment block. */
2532
CommentBlock getParent() { result.getAChild() = this }
@@ -159,7 +166,7 @@ class CommentBlock extends @commentblock {
159166
string toString() { result = this.getChild(0).toString() }
160167

161168
/** Gets the location of this comment block */
162-
Location getLocation() { commentblock_location(this, result) }
169+
Location getLocation() { commentblock_location(this, unmapLoc(result)) }
163170

164171
/** Gets the number of lines in this comment block. */
165172
int getNumLines() { result = count(this.getAChild()) }

csharp/ql/test/library-tests/comments/BindingAfter.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
| comments1.cs:1:1:2:46 | // ... | comments1.cs:9:7:9:7 | C | Start of comment1.cs |
2+
| comments1.cs:1:16:1:46 | // ... | comments1.cs:2:9:2:14 | ... ...; | A mapped single-line comment |
23
| comments1.cs:4:1:4:25 | // ... | comments1.cs:9:7:9:7 | C | 1) Basic comment types |
34
| comments1.cs:6:1:6:24 | // ... | comments1.cs:9:7:9:7 | C | A single-line comment |
45
| comments1.cs:8:1:8:18 | /// ... | comments1.cs:9:7:9:7 | C | An XML comment |

csharp/ql/test/library-tests/comments/BindingBefore.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
| comments1.cs:1:16:1:46 | // ... | comments1.cs:1:9:1:14 | ... ...; | A mapped single-line comment |
12
| comments1.cs:11:1:11:25 | /* ... */ | comments1.cs:9:7:9:7 | C | A multiline comment |
23
| comments1.cs:13:1:13:20 | // ... | comments1.cs:9:7:9:7 | C | 2) Comment blocks |
34
| comments1.cs:15:1:15:38 | // ... | comments1.cs:9:7:9:7 | C | A line on its own is a commentblock |

csharp/ql/test/library-tests/comments/BindingParent.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
| comments1.cs:1:16:1:46 | // ... | trivia.cs:17:5:29:5 | {...} | A mapped single-line comment |
12
| comments1.cs:36:5:38:41 | /* ... */ | comments1.cs:34:7:34:9 | Foo | |
23
| comments1.cs:39:13:40:51 | // ... | comments1.cs:34:7:34:9 | Foo | as this line |
34
| comments1.cs:42:15:42:36 | // ... | comments1.cs:34:7:34:9 | Foo | These are different |

csharp/ql/test/library-tests/comments/Bindings.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
| comments1.cs:1:16:1:46 | // ... | comments1.cs:1:9:1:14 | ... ...; | A mapped single-line comment |
12
| comments1.cs:8:1:8:18 | /// ... | comments1.cs:9:7:9:7 | C | An XML comment |
23
| comments1.cs:36:5:38:41 | /* ... */ | comments1.cs:39:9:39:9 | x | |
34
| comments1.cs:39:13:40:51 | // ... | comments1.cs:39:9:39:9 | x | as this line |

csharp/ql/test/library-tests/comments/Comments.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
singlelineComment
22
| comments1.cs:1:1:2:46 | // ... | comments1.cs:1:1:1:23 | // ... | 2 | Start of comment1.cs | // Start of comment1.cs |
33
| comments1.cs:1:1:2:46 | // ... | comments1.cs:2:1:2:46 | // ... | 2 | This tests the basic types of comment block | // This tests the basic types of comment block |
4+
| comments1.cs:1:16:1:46 | // ... | comments1.cs:1:16:1:46 | // ... | 1 | A mapped single-line comment | // A mapped single-line comment |
45
| comments1.cs:4:1:4:25 | // ... | comments1.cs:4:1:4:25 | // ... | 1 | 1) Basic comment types | // 1) Basic comment types |
56
| comments1.cs:6:1:6:24 | // ... | comments1.cs:6:1:6:24 | // ... | 1 | A single-line comment | // A single-line comment |
67
| comments1.cs:13:1:13:20 | // ... | comments1.cs:13:1:13:20 | // ... | 1 | 2) Comment blocks | // 2) Comment blocks |

csharp/ql/test/library-tests/comments/LineDirectives.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ mapped
1616
| trivia.cs:19:9:19:11 | trivia.cs:19:9:19:11 | comments1.cs:1:9:1:11 | comments1.cs:1:9:1:11 |
1717
| trivia.cs:19:9:19:14 | trivia.cs:19:9:19:14 | comments1.cs:1:9:1:14 | comments1.cs:1:9:1:14 |
1818
| trivia.cs:19:13:19:13 | trivia.cs:19:13:19:13 | comments1.cs:1:13:1:13 | comments1.cs:1:13:1:13 |
19+
| trivia.cs:19:16:19:46 | trivia.cs:19:16:19:46 | comments1.cs:1:16:1:46 | comments1.cs:1:16:1:46 |
1920
| trivia.cs:20:9:20:11 | trivia.cs:20:9:20:11 | comments1.cs:2:9:2:11 | comments1.cs:2:9:2:11 |
2021
| trivia.cs:20:9:20:14 | trivia.cs:20:9:20:14 | comments1.cs:2:9:2:14 | comments1.cs:2:9:2:14 |
2122
| trivia.cs:20:13:20:13 | trivia.cs:20:13:20:13 | comments1.cs:2:13:2:13 | comments1.cs:2:13:2:13 |

csharp/ql/test/library-tests/comments/trivia.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class Tr1
1616
static void M1()
1717
{
1818
#line 1 "comments1.cs"
19-
int i;
19+
int i; // A mapped single-line comment
2020
int j;
2121
#line default
2222
char c;

0 commit comments

Comments
 (0)