Example #1
0
        public static KnownTypes Create(PythonAnalyzer state, IBuiltinPythonModule fallback)
        {
            var res = new KnownTypes();

            var interpreter = state.Interpreter;

            for (int value = 0; value < res._types.Length; ++value)
            {
                IPythonType type;
                try {
                    type = interpreter.GetBuiltinType((BuiltinTypeId)value);
                } catch (KeyNotFoundException) {
                    type = null;
                }
                if (type == null)
                {
                    type = (IPythonType)fallback.GetAnyMember(((BuiltinTypeId)value).GetTypeName(state.LanguageVersion));
                    Debug.Assert(type != null);
                }
                res._types[value] = type;
            }

            res.SetClassInfo(state);
            return(res);
        }
        public KnownTypes(PythonAnalyzer state)
        {
            ITypeDatabaseReader  fallbackDb = null;
            IBuiltinPythonModule fallback   = null;

            int count = (int)BuiltinTypeIdExtensions.LastTypeId + 1;

            _types      = new IPythonType[count];
            _classInfos = new BuiltinClassInfo[count];

            var interpreter = state.Interpreter;

            for (int value = 0; value < count; ++value)
            {
                try {
                    _types[value] = interpreter.GetBuiltinType((BuiltinTypeId)value);
                } catch (KeyNotFoundException) {
                    if (fallback == null)
                    {
                        var tempDb = PythonTypeDatabase.CreateDefaultTypeDatabase(state.LanguageVersion.ToVersion());
                        fallbackDb = (ITypeDatabaseReader)tempDb;
                        fallback   = tempDb.BuiltinModule;
                    }

                    _types[value] = fallback.GetAnyMember(fallbackDb.GetBuiltinTypeName((BuiltinTypeId)value)) as IPythonType;
                }
                if (_types[value] != null)
                {
                    _classInfos[value] = state.GetBuiltinType(_types[value]);
                }
            }
        }
Example #3
0
        public PythonTypeDatabase CloneWithNewBuiltins(IBuiltinPythonModule newBuiltins)
        {
            var newDb = new PythonTypeDatabase(_factory, null, this);

            newDb._sharedState.BuiltinModule = newBuiltins;
            return(newDb);
        }
Example #4
0
        public static KnownTypes CreateDefault(PythonAnalyzer state, IBuiltinPythonModule fallback)
        {
            var res = new KnownTypes();

            for (int value = 0; value < res._types.Length; ++value)
            {
                res._types[value] = (IPythonType)fallback.GetAnyMember(
                    ((BuiltinTypeId)value).GetTypeName(state.LanguageVersion)
                    );
                Debug.Assert(res._types[value] != null);
            }

            res.SetClassInfo(state);
            return(res);
        }
Example #5
0
        public void Initialize(PythonAnalyzer state)
        {
            if (_analyzer != null)
            {
                _analyzer.SearchPathsChanged -= Analyzer_SearchPathsChanged;
            }

            _analyzer = state;

            if (state != null)
            {
                lock (_userSearchPathsLock) {
                    _userSearchPaths = state.GetSearchPaths();
                }
                state.SearchPathsChanged += Analyzer_SearchPathsChanged;
                var bm = state.BuiltinModule;
                if (!string.IsNullOrEmpty(bm?.Name))
                {
                    _builtinModule = state.BuiltinModule.InterpreterModule as IBuiltinPythonModule;
                    _modules[state.BuiltinModule.Name] = state.BuiltinModule.InterpreterModule;
                }
            }
        }
Example #6
0
 public FallbackBuiltinPythonType(IBuiltinPythonModule module, BuiltinTypeId typeId, string name = null)
 {
     DeclaringModule = module;
     Name            = name ?? typeId.GetModuleName((DeclaringModule as FallbackBuiltinModule)?.LanguageVersion ?? PythonLanguageVersion.None);
     TypeId          = typeId;
 }
Example #7
0
 public PythonTypeDatabase CloneWithNewBuiltins(IBuiltinPythonModule newBuiltins) {
     var newDb = new PythonTypeDatabase(_factory, null, this);
     newDb._sharedState.BuiltinModule = newBuiltins;
     return newDb;
 }
        internal void LoadDatabase(string databaseDirectory)
        {
            var addedModules = new Dictionary <string, IMember>();

            if (_dbDir == null)
            {
                _dbDir = databaseDirectory;
            }

            if (_builtinModule == null)
            {
                _builtinModule = MakeBuiltinModule(databaseDirectory);
            }
            _modules[_builtinName] = _builtinModule;
            if (_isDefaultDb && _langVersion.Major == 3)
            {
                _modules[BuiltinName2x] = _builtinModule;
            }

            foreach (var file in Directory.GetFiles(databaseDirectory))
            {
                if (!file.EndsWith(".idb", StringComparison.OrdinalIgnoreCase) || file.IndexOf('$') != -1)
                {
                    continue;
                }
                else if (String.Equals(Path.GetFileNameWithoutExtension(file), _builtinName, StringComparison.OrdinalIgnoreCase))
                {
                    continue;
                }
                else if (_isDefaultDb && String.Equals(Path.GetFileNameWithoutExtension(file), BuiltinName2x, StringComparison.OrdinalIgnoreCase))
                {
                    continue;
                }

                string modName = Path.GetFileNameWithoutExtension(file);
                if (_isDefaultDb && _langVersion.Major == 3)
                {
                    // aliases for 3.x when using the default completion DB
                    switch (modName)
                    {
                    case "cPickle": modName = "_pickle"; break;

                    case "thread": modName = "_thread"; break;
                    }
                }
                addedModules[modName] = _modules[modName] = new CPythonModule(this, modName, file, false);
            }

            foreach (var keyValue in addedModules)
            {
                List <Action <IMember> > fixups;
                if (_moduleFixups.TryGetValue(keyValue.Key, out fixups))
                {
                    _moduleFixups.Remove(keyValue.Key);
                    foreach (var fixup in fixups)
                    {
                        fixup(keyValue.Value);
                    }
                }
            }
        }
Example #9
0
        internal void LoadDatabase(string databaseDirectory) {
            var addedModules = new Dictionary<string, IMember>();

            if (_dbDir == null) {
                _dbDir = databaseDirectory;
            }

            if (_builtinModule == null) {
                _builtinModule = MakeBuiltinModule(databaseDirectory);
            }
            _modules[_builtinName] = _builtinModule;
            if (_isDefaultDb && _langVersion.Major == 3) {
                _modules[BuiltinName2x] = _builtinModule;
            }

            foreach (var file in Directory.GetFiles(databaseDirectory)) {
                if (!file.EndsWith(".idb", StringComparison.OrdinalIgnoreCase) || file.IndexOf('$') != -1) {
                    continue;
                } else if (String.Equals(Path.GetFileNameWithoutExtension(file), _builtinName, StringComparison.OrdinalIgnoreCase)) {
                    continue;
                } else if (_isDefaultDb && String.Equals(Path.GetFileNameWithoutExtension(file), BuiltinName2x, StringComparison.OrdinalIgnoreCase)) {
                    continue;
                }

                string modName = Path.GetFileNameWithoutExtension(file);
                if (_isDefaultDb && _langVersion.Major == 3) {
                    // aliases for 3.x when using the default completion DB
                    switch (modName) {
                        case "cPickle": modName = "_pickle"; break;
                        case "thread": modName = "_thread"; break;
                    }
                }
                addedModules[modName] = _modules[modName] = new CPythonModule(this, modName, file, false);
            }

            foreach (var keyValue in addedModules) {
                List<Action<IMember>> fixups;
                if (_moduleFixups.TryGetValue(keyValue.Key, out fixups)) {
                    _moduleFixups.Remove(keyValue.Key);
                    foreach (var fixup in fixups) {
                        fixup(keyValue.Value);
                    }
                }
            }
        }
 public void Initialize(PythonAnalyzer state)
 {
     _builtins = state.BuiltinModule.InterpreterModule as IBuiltinPythonModule;
 }