Example #1
0
        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();
        }
Example #2
0
        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);
                        }
                    }
                }
            }
        }