public static IEnumerable <BaseInfo> GetCompletionInfos( MSBuildResolveResult rr, TriggerState trigger, MSBuildValueKind kind, ExpressionNode triggerExpression, int triggerLength, MSBuildRootDocument doc) { switch (trigger) { case TriggerState.Value: return(MSBuildCompletionExtensions.GetValueCompletions(kind, doc, rr)); case TriggerState.Item: return(doc.GetItems()); case TriggerState.Metadata: return(doc.GetMetadata(null, true)); case TriggerState.Property: return(doc.GetProperties(true)); case TriggerState.MetadataOrItem: return(((IEnumerable <BaseInfo>)doc.GetItems()).Concat(doc.GetMetadata(null, true))); case TriggerState.DirectorySeparator: return(MSBuildCompletionExtensions.GetFilenameCompletions(kind, doc, triggerExpression, triggerLength));; case TriggerState.MethodName: return(FunctionCompletion.GetMethodNameCompletions(triggerExpression)); } throw new InvalidOperationException(); }
public static IEnumerable <BaseInfo> GetComparandCompletions(MSBuildRootDocument doc, IReadOnlyList <ExpressionNode> variables) { var names = new HashSet <string> (); foreach (var variable in variables) { ValueInfo info; switch (variable) { case ExpressionProperty ep: if (ep.IsSimpleProperty) { info = doc.GetProperty(ep.Name) ?? new PropertyInfo(ep.Name, null, false); break; } continue; case ExpressionMetadata em: info = doc.GetMetadata(em.ItemName, em.MetadataName, true) ?? new MetadataInfo(em.MetadataName, null, false); break; default: continue; } if (info == null) { continue; } IEnumerable <BaseInfo> cinfos; if (info.Values != null && info.Values.Count > 0) { cinfos = info.Values; } else { var kind = info.InferValueKindIfUnknown(); cinfos = MSBuildCompletionExtensions.GetValueCompletions(kind, doc); } if (cinfos != null) { foreach (var ci in cinfos) { if (names.Add(ci.Name)) { yield return(ci); } } } } }