Skip to content
This repository was archived by the owner on Apr 14, 2022. It is now read-only.

Commit b84d9a5

Browse files
author
MikhailArkhipov
committed
Don't ignore empty value sets (unknown types)
1 parent da98c14 commit b84d9a5

File tree

1 file changed

+36
-1
lines changed

1 file changed

+36
-1
lines changed

src/Analysis/Engine/Impl/Values/Protocols.cs

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
using System;
1818
using System.Collections.Generic;
1919
using System.Linq;
20+
using System.Text;
2021
using Microsoft.PythonTools.Analysis.Infrastructure;
2122
using Microsoft.PythonTools.Interpreter;
2223
using Microsoft.PythonTools.Parsing;
@@ -389,7 +390,41 @@ class TupleProtocol : IterableProtocol {
389390

390391
public TupleProtocol(ProtocolInfo self, IEnumerable<IAnalysisSet> values) : base(self, AnalysisSet.UnionAll(values)) {
391392
_values = values.Select(s => s.AsUnion(1)).ToArray();
392-
Name = "tuple[{0}]".FormatInvariant(string.Join(", ", _values.Select(v => v.GetShortDescriptions())));
393+
Name = GetNameFromValues();
394+
}
395+
396+
private string GetNameFromValues() {
397+
// Enumerate manually since SelectMany drops empty/unknown values
398+
var sb = new StringBuilder("tuple[");
399+
for (var i = 0; i < _values.Length; i++) {
400+
if (i > 0) {
401+
sb.Append(", ");
402+
}
403+
sb.Append(GetParameterString(_values[i].ToArray()));
404+
}
405+
sb.Append(']');
406+
return sb.ToString();
407+
}
408+
409+
private string GetParameterString(AnalysisValue[] sets) {
410+
if (sets.Length == 0) {
411+
return "?";
412+
}
413+
var sb = new StringBuilder();
414+
if (sets.Length > 1) {
415+
sb.Append('[');
416+
}
417+
for (var i = 0; i < sets.Length; i++) {
418+
if (i > 0) {
419+
sb.Append(", ");
420+
}
421+
var desc = sets[i] is IHasQualifiedName qn ? qn.FullyQualifiedName : sets[i].ShortDescription;
422+
sb.Append(desc);
423+
}
424+
if (sets.Length > 1) {
425+
sb.Append(']');
426+
}
427+
return sb.ToString();
393428
}
394429

395430
protected override void EnsureMembers(IDictionary<string, IAnalysisSet> members) {

0 commit comments

Comments
 (0)