[cmd3] Report incorrect coroutine usage on the variable use site (#8481)

This makes error messages point directly at the variable use, instead of
on the enclosing AST node:

```
error: `outerCoroutine` may not be in scope
    outerCoroutine.yield()
    ^

error: `outerCoroutine` may not be in scope
    consume(x, outerCoroutine);
               ^
```

instead of 

```
error: `outerCoroutine` may not be in scope
    outerCoroutine.yield()
                        ^

error: `outerCoroutine` may not be in scope
    consume(x, outerCoroutine);
           ^
```
This commit is contained in:
Sam Carlberg
2025-12-17 01:23:30 -05:00
committed by GitHub
parent 6ef55654f6
commit 5bebaebcc0
2 changed files with 12 additions and 2 deletions

View File

@@ -55,6 +55,7 @@ class IncorrectCoroutineUseDetectorTest {
assertEquals(
"Coroutine `outerCoroutine` may not be in scope. Consider using `innerCoroutine`",
error.getMessage(null));
assertEquals(7, error.getColumnNumber()); // leading "o" in "outerCoroutine.yield()"
}
@Test
@@ -90,6 +91,8 @@ class IncorrectCoroutineUseDetectorTest {
assertEquals(
"Coroutine `outerCoroutine` may not be in scope. Consider using `innerCoroutine`",
error.getMessage(null));
// leading "o" in "outerCoroutine" passed to `method(outerCoroutine)`
assertEquals(14, error.getColumnNumber());
}
@Test
@@ -126,6 +129,8 @@ class IncorrectCoroutineUseDetectorTest {
assertEquals(
"Coroutine `outerCoroutine` may not be in scope. Consider using `a` or `b`",
error.getMessage(null));
// leading "o" in "outerCoroutine" passed to `method(outerCoroutine)`
assertEquals(14, error.getColumnNumber());
}
@Test
@@ -166,6 +171,8 @@ class IncorrectCoroutineUseDetectorTest {
assertEquals(
"Coroutine `outerCoroutine` may not be in scope. Consider using `a`, `b`, or `c`",
error.getMessage(null));
// leading "o" in "outerCoroutine" passed to `method(outerCoroutine)`
assertEquals(14, error.getColumnNumber());
}
@Test