mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-20 13:31:28 +07:00
PY-22094 Include assert statements in CFG to resolve names in f-strings inside
Otherwise it's impossible to flow-sensitively resolve names referenced inside such f-strings since we use the containing statement as the anchor node in the graph.
This commit is contained in:
@@ -765,6 +765,7 @@ public class PyControlFlowBuilder extends PyRecursiveElementVisitor {
|
||||
}
|
||||
|
||||
public void visitPyAssertStatement(final PyAssertStatement node) {
|
||||
myBuilder.startNode(node);
|
||||
super.visitPyAssertStatement(node);
|
||||
final PyExpression[] args = node.getArguments();
|
||||
// assert False
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
0(1) element: null
|
||||
1(2) READ ACCESS: isinstance
|
||||
2(3) READ ACCESS: s
|
||||
3(4) READ ACCESS: basestring
|
||||
4(5) READ ACCESS: isinstance
|
||||
5(6) READ ACCESS: x
|
||||
6(7) READ ACCESS: int
|
||||
7(8) ASSERTTYPE ACCESS: s
|
||||
8(9) ASSERTTYPE ACCESS: x
|
||||
9() element: null
|
||||
1(2) element: PyAssertStatement
|
||||
2(3) READ ACCESS: isinstance
|
||||
3(4) READ ACCESS: s
|
||||
4(5) READ ACCESS: basestring
|
||||
5(6) READ ACCESS: isinstance
|
||||
6(7) READ ACCESS: x
|
||||
7(8) READ ACCESS: int
|
||||
8(9) ASSERTTYPE ACCESS: s
|
||||
9(10) ASSERTTYPE ACCESS: x
|
||||
10() element: null
|
||||
@@ -1,6 +1,8 @@
|
||||
0(1) element: null
|
||||
1(5) READ ACCESS: false
|
||||
2(3) element: PyPrintStatement
|
||||
3(5) READ ACCESS: False
|
||||
4(5) element: PyPrintStatement
|
||||
5() element: null
|
||||
1(2) element: PyAssertStatement
|
||||
2(7) READ ACCESS: false
|
||||
3(4) element: PyPrintStatement
|
||||
4(5) element: PyAssertStatement
|
||||
5(7) READ ACCESS: False
|
||||
6(7) element: PyPrintStatement
|
||||
7() element: null
|
||||
@@ -1,7 +1,9 @@
|
||||
0(1) element: null
|
||||
1(6) READ ACCESS: False
|
||||
2(3) element: PyPrintStatement
|
||||
3(4) READ ACCESS: False
|
||||
4(6) READ ACCESS: f
|
||||
5(6) element: PyPrintStatement
|
||||
6() element: null
|
||||
1(2) element: PyAssertStatement
|
||||
2(8) READ ACCESS: False
|
||||
3(4) element: PyPrintStatement
|
||||
4(5) element: PyAssertStatement
|
||||
5(6) READ ACCESS: False
|
||||
6(8) READ ACCESS: f
|
||||
7(8) element: PyPrintStatement
|
||||
8() element: null
|
||||
4
python/testData/resolve/FStringInsideAssertStatement.py
Normal file
4
python/testData/resolve/FStringInsideAssertStatement.py
Normal file
@@ -0,0 +1,4 @@
|
||||
def test(name: str) -> int:
|
||||
assert name is not None, f'{name} is None'
|
||||
# <ref>
|
||||
return len(name)
|
||||
@@ -118,4 +118,9 @@ public class PyInjectionResolveTest extends PyResolveTestCase {
|
||||
public void testFunctionTypeCommentReturnTypeReference() {
|
||||
assertResolvesTo(PyClass.class, "MyClass");
|
||||
}
|
||||
|
||||
// PY-22094
|
||||
public void testFStringInsideAssertStatement() {
|
||||
runWithLanguageLevel(LanguageLevel.PYTHON36, () -> assertResolvesTo(PyParameter.class, "name"));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user