Skip to content

Commit aeadc1f

Browse files
committed
wip
1 parent 0e35740 commit aeadc1f

File tree

8 files changed

+229
-134
lines changed

8 files changed

+229
-134
lines changed

plugins/org.python.pydev.ast/src/org/python/pydev/ast/codecompletion/revisited/modules/SourceModule.java

+12
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@
6666
import org.python.pydev.parser.jython.ast.Module;
6767
import org.python.pydev.parser.jython.ast.Name;
6868
import org.python.pydev.parser.jython.ast.Str;
69+
import org.python.pydev.parser.jython.ast.TypeAlias;
6970
import org.python.pydev.parser.jython.ast.exprType;
7071
import org.python.pydev.parser.visitors.NodeUtils;
7172
import org.python.pydev.parser.visitors.TypeInfo;
@@ -1010,6 +1011,17 @@ private Definition[] findDefinition(ICompletionState state, int line, int col, f
10101011
toRet.add(new Definition(tok, scopeVisitor.scope, this, true));
10111012
continue;
10121013
}
1014+
1015+
if (sourceToken.getFoundInTypeAlias() != null) {
1016+
TypeAlias node = sourceToken.getFoundInTypeAlias();
1017+
String target = tok.getRepresentation();
1018+
toRet.add(
1019+
FindDefinitionModelVisitor.getAssignDefinition(node, target, 0, line, col,
1020+
scopeVisitor.scope, this,
1021+
-1));
1022+
continue;
1023+
}
1024+
10131025
if (sourceTokenAst instanceof Assign) {
10141026
Assign node = (Assign) sourceTokenAst;
10151027
String target = tok.getRepresentation();

plugins/org.python.pydev.ast/src/org/python/pydev/ast/codecompletion/revisited/modules/SourceToken.java

+11
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import org.python.pydev.parser.jython.ast.ImportFrom;
3434
import org.python.pydev.parser.jython.ast.Name;
3535
import org.python.pydev.parser.jython.ast.NameTok;
36+
import org.python.pydev.parser.jython.ast.TypeAlias;
3637
import org.python.pydev.parser.jython.ast.keywordType;
3738
import org.python.pydev.parser.visitors.NodeUtils;
3839
import org.python.pydev.shared_core.callbacks.ICallback;
@@ -364,6 +365,8 @@ public FunctionDef getAliased() {
364365

365366
private Call foundInCall;
366367

368+
private TypeAlias foundInTypeAlias;
369+
367370
public void setDefinition(Definition d) {
368371
this.definition = d;
369372
}
@@ -396,4 +399,12 @@ public Assign getDummyAssignFromParam() {
396399
return dummyAssignFromParam;
397400
}
398401

402+
public void setFoundInTypeAlias(TypeAlias node) {
403+
this.foundInTypeAlias = node;
404+
}
405+
406+
public TypeAlias getFoundInTypeAlias() {
407+
return foundInTypeAlias;
408+
}
409+
399410
}

plugins/org.python.pydev.ast/src/org/python/pydev/ast/codecompletion/revisited/visitors/FindDefinitionModelVisitor.java

+17
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import org.python.pydev.parser.jython.ast.NamedExpr;
4040
import org.python.pydev.parser.jython.ast.Subscript;
4141
import org.python.pydev.parser.jython.ast.Tuple;
42+
import org.python.pydev.parser.jython.ast.TypeAlias;
4243
import org.python.pydev.parser.jython.ast.aliasType;
4344
import org.python.pydev.parser.jython.ast.comprehensionType;
4445
import org.python.pydev.parser.jython.ast.exprType;
@@ -549,6 +550,22 @@ public static AssignDefinition getAssignDefinition(Assign node, String target, i
549550
unpackPos);
550551
}
551552

553+
public static AssignDefinition getAssignDefinition(TypeAlias node, String target, int targetPos, int line, int col,
554+
ILocalScope scope, IModule module, int unpackPos) {
555+
exprType nodeValue = node.value;
556+
exprType nodeType = NodeUtils.extractOptionalValueSubscript(node.type);
557+
String value = NodeUtils.getFullRepresentationString(nodeValue);
558+
String type = NodeUtils.getFullRepresentationString(nodeType);
559+
if (value == null) {
560+
value = "";
561+
}
562+
if (type == null) {
563+
type = "";
564+
}
565+
return new AssignDefinition(value, type, target, targetPos, node, line, col, scope, module, nodeValue, nodeType,
566+
unpackPos);
567+
}
568+
552569
public static int findUnpackPos(Assign foundInAssign, String representation) {
553570
if (foundInAssign.targets != null) {
554571
if (foundInAssign.targets.length > 0) {

plugins/org.python.pydev.ast/src/org/python/pydev/ast/codecompletion/revisited/visitors/GlobalModelVisitor.java

+8
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import org.python.pydev.parser.jython.ast.Name;
3131
import org.python.pydev.parser.jython.ast.Str;
3232
import org.python.pydev.parser.jython.ast.Tuple;
33+
import org.python.pydev.parser.jython.ast.TypeAlias;
3334
import org.python.pydev.parser.jython.ast.exprType;
3435
import org.python.pydev.parser.visitors.NodeUtils;
3536
import org.python.pydev.shared_core.structure.FastStack;
@@ -145,6 +146,13 @@ public Object visitCall(Call node) throws Exception {
145146
return null;
146147
}
147148

149+
@Override
150+
public Object visitTypeAlias(TypeAlias node) throws Exception {
151+
SourceToken token = addToken(node.name);
152+
token.setFoundInTypeAlias(node);
153+
return null;
154+
}
155+
148156
/**
149157
* Visiting some name
150158
*

plugins/org.python.pydev/tests/pysrc/extendable/typecheck/__init__.py

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class FooClass:
2+
def foo_method(self):
3+
pass
4+
5+
type FooType = FooClass

plugins/org.python.pydev/tests_analysis/com/python/pydev/analysis/OccurrencesAnalyzerPy312Test.java

+7
Original file line numberDiff line numberDiff line change
@@ -96,4 +96,11 @@ class C:
9696
assertEquals(29, messages[0].getStartCol(doc));
9797
}
9898

99+
public void testImportTypeAlias() {
100+
doc = new Document("from extendable.typecheck.typemod import FooType\n" +
101+
"print(FooType)\n");
102+
103+
checkNoError();
104+
}
105+
99106
}

0 commit comments

Comments
 (0)