diff --git a/README.md b/README.md index cb91f6758..260fa94f9 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Codegen -![PyPI](https://img.shields.io/pypi/v/codegen?color=blue) [![Documentation](https://img.shields.io/badge/docs-docs.codegen.com-purple)](https://docs.codegen.com) [![Slack Community](https://img.shields.io/badge/slack-community-4A154B?logo=slack)](https://community.codegen.com) [![Follow on X](https://img.shields.io/twitter/follow/codegen)](https://x.com/codegen) +![PyPI](https://img.shields.io/pypi/v/codegen?color=blue) [![Documentation](https://img.shields.io/badge/docs-docs.codegen.com-purple)](https://docs.codegen.com) [![Slack Community](https://img.shields.io/badge/slack-community-4A154B?logo=slack)](https://community.codegen.com) [![Follow on X](https://img.shields.io/twitter/follow/codegen)](https://x.com/codegen) [Codegen](https://docs.codegen.com) is a python library for manipulating codebases. diff --git a/pyproject.toml b/pyproject.toml index f7474a234..48fc6d5e0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -86,7 +86,7 @@ classifiers = [ "Topic :: Software Development :: Code Generators", "Topic :: Software Development :: Libraries", ] -authors = [{ name = "Codegen Team", email = "team+codegenbot@codegen.sh" }] +authors = [{ name = "Codegen Team", email = "team@codegen.sh" }] keywords = [ "codegen", "codebase", diff --git a/src/codegen/sdk/core/file.py b/src/codegen/sdk/core/file.py index e242636f4..d22cd227d 100644 --- a/src/codegen/sdk/core/file.py +++ b/src/codegen/sdk/core/file.py @@ -819,6 +819,10 @@ def valid_symbol_names(self) -> dict[str, Symbol | TImport | WildcardImport[TImp @reader def resolve_name(self, name: str, start_byte: int | None = None) -> Symbol | Import | WildcardImport | None: if resolved := self.valid_symbol_names.get(name): + if start_byte is not None and resolved.end_byte > start_byte: + for symbol in self.symbols: + if symbol.start_byte <= start_byte and symbol.name == name: + return symbol return resolved @property diff --git a/src/codegen/sdk/core/import_resolution.py b/src/codegen/sdk/core/import_resolution.py index 489376705..e9d44e9c0 100644 --- a/src/codegen/sdk/core/import_resolution.py +++ b/src/codegen/sdk/core/import_resolution.py @@ -624,6 +624,7 @@ class WildcardImport(Chainable, Generic[TImport]): def __init__(self, imp: TImport, symbol: Importable): self.imp = imp self.symbol = symbol + self.ts_node = imp.ts_node @reader @noapidoc diff --git a/src/codegen/sdk/core/interfaces/importable.py b/src/codegen/sdk/core/interfaces/importable.py index 809fb3efe..f84442cba 100644 --- a/src/codegen/sdk/core/interfaces/importable.py +++ b/src/codegen/sdk/core/interfaces/importable.py @@ -1,3 +1,4 @@ +import logging from typing import TYPE_CHECKING, Generic, Self, TypeVar, Union from tree_sitter import Node as TSNode @@ -20,6 +21,8 @@ Parent = TypeVar("Parent", bound="Editable") +logger = logging.getLogger(__name__) + @apidoc class Importable(Expression[Parent], HasName, Generic[Parent]): @@ -90,7 +93,11 @@ def recompute(self, incremental: bool = False) -> list["Importable"]: """ if incremental: self._remove_internal_edges(EdgeType.SYMBOL_USAGE) - self._compute_dependencies() + try: + self._compute_dependencies() + except Exception as e: + logger.error(f"Error in file {self.file.path} while computing dependencies for symbol {self.name}") + raise e if incremental: return self.descendant_symbols + self.file.get_nodes(sort=False) return [] diff --git a/tests/integration/codemod/repos/open_source/gradio.json b/tests/integration/codemod/repos/open_source/gradio.json new file mode 100644 index 000000000..0e3d56376 --- /dev/null +++ b/tests/integration/codemod/repos/open_source/gradio.json @@ -0,0 +1,7 @@ +{ + "name": "gradio", + "commit": "f40747c9fd12d160ac9f7b3c5273be6be815efac", + "url": "https://github.com/gradio-app/gradio", + "language": "PYTHON", + "size": "small" +} diff --git a/uv.lock b/uv.lock index 41dbf5b5b..c74fd17fa 100644 --- a/uv.lock +++ b/uv.lock @@ -385,7 +385,6 @@ dependencies = [ { name = "hatchling" }, { name = "humanize" }, { name = "lazy-object-proxy" }, - { name = "loguru" }, { name = "mini-racer" }, { name = "networkx" }, { name = "openai" }, @@ -448,6 +447,7 @@ dev = [ { name = "isort" }, { name = "jsbeautifier" }, { name = "keyrings-codeartifact" }, + { name = "loguru" }, { name = "mypy", extra = ["faster-cache", "mypyc"] }, { name = "pre-commit" }, { name = "pre-commit-uv" }, @@ -482,7 +482,6 @@ requires-dist = [ { name = "hatchling", specifier = ">=1.25.0" }, { name = "humanize", specifier = ">=4.10.0,<5.0.0" }, { name = "lazy-object-proxy", specifier = ">=0.0.0" }, - { name = "loguru", specifier = ">=0.7.3" }, { name = "mini-racer", specifier = ">=0.12.4" }, { name = "networkx", specifier = ">=3.4.1" }, { name = "openai", specifier = "==1.59.9" }, @@ -541,6 +540,7 @@ dev = [ { name = "isort", specifier = ">=5.13.2" }, { name = "jsbeautifier", specifier = ">=1.15.1,<2.0.0" }, { name = "keyrings-codeartifact", specifier = ">=1.3.3" }, + { name = "loguru", specifier = ">=0.7.3" }, { name = "mypy", extras = ["mypyc", "faster-cache"], specifier = ">=1.13.0" }, { name = "pre-commit", specifier = ">=4.0.1" }, { name = "pre-commit-uv", specifier = ">=4.1.4" },