Ejemplo n.º 1
0
        private static bool IsExceptionType(MemberResult member) {
            switch (member.MemberType) {
                case Interpreter.PythonMemberType.Class:
                    // Classes need further checking
                    break;
                case Interpreter.PythonMemberType.Module:
                case Interpreter.PythonMemberType.Namespace:
                    // Always include modules
                    return true;
                default:
                    // Never include anything else
                    return false;
            }

            if (KnownExceptions.Contains(member.Name)) {
                return true;
            }

            if (member.Name.IndexOf("Exception", StringComparison.CurrentCultureIgnoreCase) >= 0 ||
                member.Name.IndexOf("Error", StringComparison.CurrentCultureIgnoreCase) >= 0) {
                return true;
            }

            return false;
        }
Ejemplo n.º 2
0
 internal static DynamicallyVisibleCompletion PythonCompletion(IGlyphService service, MemberResult memberResult) {
     return new DynamicallyVisibleCompletion(memberResult.Name, 
         memberResult.Completion, 
         () => memberResult.Documentation, 
         () => service.GetGlyph(memberResult.MemberType.ToGlyphGroup(), StandardGlyphItem.GlyphItemPublic),
         Enum.GetName(typeof(PythonMemberType), memberResult.MemberType)
     );
 }
Ejemplo n.º 3
0
        private static IMemberResult[] ModuleDictToMemberResult(Dictionary <string, List <ModuleLoadState> > d)
        {
            var result = new IMemberResult[d.Count];
            int pos    = 0;

            foreach (var kvp in d)
            {
                var lazyEnumerator = new LazyModuleEnumerator(kvp.Value);
                result[pos++] = new MemberResult(
                    kvp.Key,
                    lazyEnumerator.GetLazyModules,
                    lazyEnumerator.GetModuleType
                    );
            }
            return(result);
        }
Ejemplo n.º 4
0
        private static bool IsDecoratorType(MemberResult member) {
            switch (member.MemberType) {
                case Interpreter.PythonMemberType.Function:
                case Interpreter.PythonMemberType.Class:
                    // Classes and functions need further checking
                    break;
                case Interpreter.PythonMemberType.Module:
                case Interpreter.PythonMemberType.Namespace:
                    // Always include modules
                    return true;
                default:
                    // Never include anything else
                    return false;
            }

            // TODO: Only include objects that look like decorators
            // This is probably impossible to tell, since a decorator may be
            // called immediately or as part of creating the function. Filtering
            // down to callables that return a callable would work, but if our
            // analysis has failed then items could randomly be missing.
            return true;
        }
Ejemplo n.º 5
0
        /// <summary>
        /// returns the MemberResults associated with modules in the specified
        /// list of names.  The list of names is the path through the module, for example
        /// ['System', 'Runtime']
        /// </summary>
        /// <returns></returns>
        public MemberResult[] GetModuleMembers(IModuleContext moduleContext, string[] names, bool bottom)
        {
            IDictionary <string, ISet <Namespace> > d = null;

            ModuleReference moduleRef;

            if (Modules.TryGetValue(names[0], out moduleRef) && moduleRef.Module != null)
            {
                var module = moduleRef.Module;
                d = new Dictionary <string, ISet <Namespace> >();

                var mod = module.SelfSet;
                if (bottom)
                {
                    for (int i = 1; i < names.Length; i++)
                    {
                        var next = names[i];
                        // import Foo.Bar as Baz, we need to get Bar
                        VariableDef      def;
                        ISet <Namespace> newMod  = EmptySet <Namespace> .Instance;
                        bool             madeSet = false;
                        foreach (var modItem in mod)
                        {
                            BuiltinModule builtinMod = modItem as BuiltinModule;
                            if (builtinMod != null)
                            {
                                var mem = builtinMod._type.GetMember(moduleContext, next);
                                if (mem != null)
                                {
                                    newMod = newMod.Union(GetNamespaceFromObjects(mem), ref madeSet);
                                }
                            }
                            else
                            {
                                ModuleInfo userMod = modItem as ModuleInfo;
                                if (userMod != null && userMod.Scope.Variables.TryGetValue(next, out def))
                                {
                                    newMod = newMod.Union(def.Types, ref madeSet);
                                }
                            }
                        }

                        mod = newMod;
                        if (mod.Count == 0)
                        {
                            break;
                        }
                    }
                }

                foreach (var modItem in mod)
                {
                    Update(d, modItem.GetAllMembers(moduleContext));
                }
            }

            MemberResult[] result;
            if (d != null)
            {
                result = new MemberResult[d.Count];
                int pos = 0;
                foreach (var kvp in d)
                {
                    result[pos++] = new MemberResult(kvp.Key, kvp.Value);
                }
            }
            else
            {
                result = new MemberResult[0];
            }

            return(result);
        }
Ejemplo n.º 6
0
        private AP.Completion[] ToCompletions(MemberResult[] memberResult, GetMemberOptions options) {
            AP.Completion[] res = new AP.Completion[memberResult.Length];
            for (int i = 0; i < memberResult.Length; i++) {
                var member = memberResult[i];

                res[i] = new AP.Completion() {
                    name = member.Name,
                    completion = member.Completion,
                    doc = member.Documentation,
                    memberType = member.MemberType
                };

                if (options.HasFlag(GetMemberOptions.DetailedInformation)) {
                    List<AP.CompletionValue> values = new List<AnalysisProtocol.CompletionValue>();

                    foreach (var value in member.Values) {
                        var descComps = Array.Empty<AP.DescriptionComponent>();
                        var hasDesc = value as IHasRichDescription;
                        if (hasDesc != null) {
                            descComps = hasDesc
                                .GetRichDescription()
                                .Select(kv => new AP.DescriptionComponent(kv.Value, kv.Key))
                                .ToArray();
                        }
                        values.Add(
                            new AP.CompletionValue() {
                                description = descComps,
                                doc = value.Documentation,
                                locations = value.Locations.Select(x => MakeReference(x, VariableType.Definition)).ToArray()
                            }
                        );
                    }
                    res[i].detailedValues = values.ToArray();
                }
            }
            return res;
        }
Ejemplo n.º 7
0
            public MemberResult[] GetMemberNames(string text) {
                _completionResultEvent.Reset();
                _memberResults = null;

                using (new StreamLock(this, throwIfDisconnected: false)) {
                    if (_stream == null) {
                        return new MemberResult[0];
                    }
                    try {
                        _stream.Write(GetMembersCommandBytes);
                        SendString(text);
                    } catch (IOException) {
                        return new MemberResult[0];
                    }
                }

                if (_completionResultEvent.WaitOne(1000) && _memberResults != null) {
                    MemberResult[] res = new MemberResult[_memberResults.TypeMembers.Count + _memberResults.InstanceMembers.Count];
                    int i = 0;
                    foreach (var member in _memberResults.TypeMembers) {
                        res[i++] = CreateMemberResult(member.Key, member.Value);
                    }
                    foreach (var member in _memberResults.InstanceMembers) {
                        res[i++] = CreateMemberResult(member.Key, member.Value);
                    }

                    _memberResults = null;
                    return res;
                }
                return null;
            }
Ejemplo n.º 8
0
 public bool Equals(MemberResult other) => string.Equals(Name, other.Name) && Equals(Scope, other.Scope);
Ejemplo n.º 9
0
        private AP.Completion[] ToCompletions(MemberResult[] memberResult, GetMemberOptions options) {
            AP.Completion[] res = new AP.Completion[memberResult.Length];
            for (int i = 0; i < memberResult.Length; i++) {
                var member = memberResult[i];

                res[i] = new AP.Completion() {
                    name = member.Name,
                    completion = member.Completion,
                    doc = member.Documentation,
                    memberType = member.MemberType
                };

                if (options.HasFlag(GetMemberOptions.DetailedInformation)) {
                    List<AP.CompletionValue> values = new List<AnalysisProtocol.CompletionValue>();

                    foreach (var value in member.Values) {
                        var descComps = new List<AP.DescriptionComponent>();
                        if (value is FunctionInfo) {
                            var def = ((FunctionInfo)value).FunctionDefinition;
                            ((FunctionInfo)value).GetDescription((text, kind) => {
                                descComps.Add(new AP.DescriptionComponent(text, kind));
                            });
                        } else if (value is ClassInfo) {
                            FillClassDescription(descComps, ((ClassInfo)value).ClassDefinition);
                        }
                        values.Add(
                            new AP.CompletionValue() {
                                description = descComps.ToArray(),
                                doc = value.Documentation,
                                locations = value.Locations.Select(x => MakeReference(x, VariableType.Definition)).ToArray()
                            }
                        );
                    }
                    res[i].detailedValues = values.ToArray();
                }
            }
            return res;
        }