diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d764ff43..c37c20ec 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -9,7 +9,7 @@ jobs: strategy: matrix: - python-version: ['3.8', '3.9', '3.10', '3.11', '3.12'] + python-version: ['3.9', '3.10', '3.11', '3.12', '3.13'] os: [ubuntu-latest, windows-latest, macos-latest] fail-fast: false steps: diff --git a/.readthedocs.yaml b/.readthedocs.yaml index d7fcbf8d..badd01dd 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -11,3 +11,6 @@ python: path: . extra_requirements: - doc + +sphinx: + configuration: docs/conf.py diff --git a/rope/base/oi/type_hinting/utils.py b/rope/base/oi/type_hinting/utils.py index b0a7aff9..2381c847 100644 --- a/rope/base/oi/type_hinting/utils.py +++ b/rope/base/oi/type_hinting/utils.py @@ -1,6 +1,7 @@ from __future__ import annotations import logging +import sys from typing import TYPE_CHECKING, Optional, Union import rope.base.utils as base_utils @@ -81,7 +82,10 @@ def resolve_type( """ Find proper type object from its name. """ - deprecated_aliases = {"collections": "collections.abc"} + if sys.version_info < (3, 13): + deprecated_aliases = {"collections": "collections.abc"} + else: + deprecated_aliases = {"collections": "_collections_abc"} ret_type = None logging.debug("Looking for %s", type_name) if "." not in type_name: diff --git a/rope/contrib/autoimport/sqlite.py b/rope/contrib/autoimport/sqlite.py index 54a6d03c..f06fdaca 100644 --- a/rope/contrib/autoimport/sqlite.py +++ b/rope/contrib/autoimport/sqlite.py @@ -569,14 +569,17 @@ def filter_folders(folder: Path) -> bool: return list(OrderedDict.fromkeys(folder_paths)) def _safe_iterdir(self, folder: Path): - dirs = folder.iterdir() - while True: - try: - yield next(dirs) - except PermissionError: - pass - except StopIteration: - break + try: + dirs = folder.iterdir() + while True: + try: + yield next(dirs) + except PermissionError: + pass + except StopIteration: + break + except PermissionError: + pass def _get_available_packages(self) -> List[Package]: packages: List[Package] = [ diff --git a/rope/contrib/autoimport/utils.py b/rope/contrib/autoimport/utils.py index a16efba0..11ee6f20 100644 --- a/rope/contrib/autoimport/utils.py +++ b/rope/contrib/autoimport/utils.py @@ -92,7 +92,7 @@ def sort_and_deduplicate(results: List[Tuple[str, int]]) -> List[str]: def sort_and_deduplicate_tuple( - results: List[Tuple[str, str, int]] + results: List[Tuple[str, str, int]], ) -> List[Tuple[str, str]]: """Sort and deduplicate a list of name, module, source entries.""" results = sorted(results, key=lambda y: y[-1]) diff --git a/rope/refactor/importutils/module_imports.py b/rope/refactor/importutils/module_imports.py index 8ccbb366..f35b2252 100644 --- a/rope/refactor/importutils/module_imports.py +++ b/rope/refactor/importutils/module_imports.py @@ -31,7 +31,7 @@ def _get_unbound_names(self, defined_pyobject): def _get_all_star_list(self, pymodule): def _resolve_name( - name: Union[pynamesdef.AssignedName, pynames.ImportedName] + name: Union[pynamesdef.AssignedName, pynames.ImportedName], ) -> List: while isinstance(name, pynames.ImportedName): try: