private static IEnumerable <AnalysisValue> GetTestCaseClasses(ModuleAnalysis analysis) { return(analysis.GetAllAvailableMembersByIndex(0, GetMemberOptions.ExcludeBuiltins) .SelectMany(m => analysis.GetValuesByIndex(m.Name, 0)) .Where(v => v.MemberType == PythonMemberType.Class) .Where(v => v.Mro.SelectMany(v2 => v2).Any(IsTestCaseClass))); }
private string ClassifyName(Tuple <string, Span> node) { var name = node.Item1; foreach (var sd in _head.EnumerateTowardsGlobal) { if (sd.Parameters.Contains(name)) { return(Classifications.Parameter); } else if (sd.Functions.Contains(name)) { return(Classifications.Function); } else if (sd.Types.Contains(name)) { return(Classifications.Class); } else if (sd.TypeHints.Contains(name)) { return(Classifications.TypeHint); } else if (sd.Modules.Contains(name)) { return(Classifications.Module); } } if (_analysis != null) { var memberType = PythonMemberType.Unknown; bool isTypeHint = false; lock (_analysis) { var values = _analysis.GetValuesByIndex(name, node.Item2.Start).ToArray(); isTypeHint = values.Any(v => v is TypingTypeInfo || v.DeclaringModule?.ModuleName == "typing"); memberType = values.Select(v => v.MemberType) .DefaultIfEmpty(PythonMemberType.Unknown) .Aggregate((a, b) => a == b ? a : PythonMemberType.Unknown); } if (isTypeHint) { return(Classifications.TypeHint); } if (memberType == PythonMemberType.Module) { return(Classifications.Module); } else if (memberType == PythonMemberType.Class) { return(Classifications.Class); } else if (memberType == PythonMemberType.Function || memberType == PythonMemberType.Method) { return(Classifications.Function); } } return(null); }
private string ClassifyName(Tuple <string, Span> node) { var name = node.Item1; foreach (var sd in _head.EnumerateTowardsGlobal) { if (sd.Parameters.Contains(name)) { return(Classifications.Parameter); } else if (sd.Functions.Contains(name)) { return(Classifications.Function); } else if (sd.Types.Contains(name)) { return(Classifications.Class); } else if (sd.Modules.Contains(name)) { return(Classifications.Module); } } if (_analysis != null) { var memberType = PythonMemberType.Unknown; lock (_analysis) { memberType = _analysis .GetValuesByIndex(name, node.Item2.Start) .Select(v => v.MemberType) .DefaultIfEmpty(PythonMemberType.Unknown) .Aggregate((a, b) => a == b ? a : PythonMemberType.Unknown); } if (memberType == PythonMemberType.Module) { return(Classifications.Module); } else if (memberType == PythonMemberType.Class) { return(Classifications.Class); } else if (memberType == PythonMemberType.Function || memberType == PythonMemberType.Method) { return(Classifications.Function); } } return(null); }