Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 699a6b0

Browse files
committed
Giving up on fixing root problem, adding hack
1 parent 7545848 commit 699a6b0

File tree

2 files changed

+11
-7
lines changed

2 files changed

+11
-7
lines changed

src/Analysis/Ast/Impl/Analyzer/Handlers/SequenceExpressionHandler.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,13 @@ private static void Assign(SequenceExpression seq, ValueEnumerator valueEnum, Ex
6666
eval.DeclareVariable(nex.Name, valueEnum.Next, VariableSource.Declaration, nex);
6767
break;
6868
// Nested sequence expression in sequence, Tuple[Tuple[int, str], int], List[Tuple[int], str]
69-
case SequenceExpression se when valueEnum.Peek is IPythonCollection:
70-
var pc = valueEnum.Next as IPythonCollection;
71-
Assign(se, pc, eval);
69+
// TODO: Because of bug with how collection types are constructed, they don't make nested collection types
70+
// into instances, meaning we have to create it here
71+
case SequenceExpression se when valueEnum.Peek is IPythonCollection || valueEnum.Peek is IPythonCollectionType:
72+
var collection = valueEnum.Next;
73+
var pc = collection as IPythonCollection;
74+
var pct = collection as IPythonCollectionType;
75+
Assign(se, pc ?? pct.CreateInstance(), eval);
7276
break;
7377
case SequenceExpression se:
7478
Assign(se, valueEnum, eval);

src/Analysis/Ast/Impl/Utilities/ValueEnumerator.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
namespace Microsoft.Python.Analysis.Utilities {
77
internal sealed class ValueEnumerator {
88
private readonly IMember _value;
9-
private readonly IMember _unknown;
9+
private readonly IPythonType _unknown;
1010
private readonly IMember[] _values;
1111
private int _index;
1212

@@ -15,7 +15,7 @@ internal sealed class ValueEnumerator {
1515
/// </summary>
1616
/// <param name="value">Collection to iterate over</param>
1717
/// <param name="unknown">Default type when we cannot find type from collection</param>
18-
public ValueEnumerator(IMember value, IMember unknown) {
18+
public ValueEnumerator(IMember value, IPythonType unknown) {
1919
_value = value;
2020
_unknown = unknown;
2121
switch (value) {
@@ -43,12 +43,12 @@ public IMember Peek {
4343
if (_values.Length > 0) {
4444
return _index < _values.Length ? _values[_index] : _values[_values.Length - 1];
4545
} else {
46-
return Filler;
46+
return Filler.CreateInstance();
4747
}
4848
}
4949
}
5050

51-
private IMember Filler {
51+
private IPythonType Filler {
5252
get {
5353
switch (_value?.GetPythonType()) {
5454
case ITypingListType tlt:

0 commit comments

Comments
 (0)