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; }
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) ); }
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); }
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; }
/// <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); }
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; }
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; }
public bool Equals(MemberResult other) => string.Equals(Name, other.Name) && Equals(Scope, other.Scope);
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; }