コード例 #1
0
 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)));
 }
コード例 #2
0
        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);
        }
コード例 #3
0
ファイル: ClassifierWalker.cs プロジェクト: wzhiliang/PTVS
        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);
        }