diff --git a/Sandbox.ipynb b/Sandbox.ipynb index 8b0daf4..65788af 100644 --- a/Sandbox.ipynb +++ b/Sandbox.ipynb @@ -9,7 +9,7 @@ }, "outputs": [], "source": [ - "import py_cppmodel" + "import xyz.cppmodel" ] }, { @@ -57,7 +57,7 @@ "\"\"\"\n", "\n", "tu = clang.cindex.TranslationUnit.from_source(\"tmp.cc\", COMPILER_ARGS, unsaved_files=[(\"tmp.cc\", source)])\n", - "model = py_cppmodel.Model(tu)\n", + "model = xyz.cppmodel.Model(tu)\n", "model" ] }, @@ -72,19 +72,11 @@ "source": [ "model.unmodelled_nodes" ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5", - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "py-cppmodel", "language": "python", "name": "python3" }, @@ -98,7 +90,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.14" + "version": "3.10.9" } }, "nbformat": 4, diff --git a/pyproject.toml b/pyproject.toml index 57f3443..064a434 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [project] -name = "py-cppmodel" +name = "xyz-cppmodel" version = "0.0.1" description = "A Python wrapper around clang's python bindings to generate a simple Python model of a C++ translation unit." readme = "README.md" @@ -31,15 +31,8 @@ addopts = "-n auto -v" requires = ["hatchling"] build-backend = "hatchling.build" -[tool.hatch.build.targets.sdist] -include = [ - "py_cppmodel.py", - "LICENSE", - "README.md", -] - [tool.hatch.build.targets.wheel] -include = ["py_cppmodel.py"] +packages = ["src/xyz"] [tool.ruff] line-length = 120 diff --git a/py_cppmodel.py b/src/xyz/cppmodel.py similarity index 93% rename from py_cppmodel.py rename to src/xyz/cppmodel.py index ef2c741..3ded5ec 100644 --- a/py_cppmodel.py +++ b/src/xyz/cppmodel.py @@ -28,7 +28,7 @@ def __init__(self, cursor: Cursor): self.name: str = cursor.displayname def __repr__(self) -> str: - return "".format(self.name, self.location) + return "".format(self.name, self.location) class Type: @@ -44,7 +44,7 @@ def __init__(self, cindex_type): self.pointee = None def __repr__(self) -> str: - return "".format(self.name) + return "".format(self.name) class Member: @@ -53,7 +53,7 @@ def __init__(self, cursor: Cursor): self.name: str = cursor.spelling def __repr__(self) -> str: - return "".format(self.type, self.name) + return "".format(self.type, self.name) class FunctionArgument: @@ -63,8 +63,8 @@ def __init__(self, type: Type, name: Optional[str] = None): def __repr__(self) -> str: if self.name is None: - return "" - return "".format(self.type, self.name) + return "" + return "".format(self.type, self.name) class _Function: @@ -101,7 +101,7 @@ def __init__(self, cursor, namespaces=[]): def __repr__(self) -> str: s = _Function.__repr__(self) - return "".format(s) + return "".format(s) def __eq__(self, f) -> bool: if self.name != f.name: @@ -132,7 +132,7 @@ def __repr__(self) -> str: s = "virtual {} = 0".format(s) elif self.is_virtual: s = "virtual {}".format(s) - return "".format(s) + return "".format(s) class Class: @@ -163,7 +163,7 @@ def __init__(self, cursor: Cursor, namespaces: List[str]): self.base_classes.append(c.type.spelling) def __repr__(self) -> str: - return "".format(self.name) + return "".format(self.name) class Model: @@ -193,7 +193,7 @@ def is_error_in_current_file(diagnostic: Diagnostic) -> bool: self._add_child_nodes(translation_unit.cursor, []) def __repr__(self) -> str: - return "".format( + return "".format( self.filename, [c.name for c in self.classes], [f.name for f in self.functions], diff --git a/test_py_cppmodel.py b/tests/test_cppmodel.py similarity index 62% rename from test_py_cppmodel.py rename to tests/test_cppmodel.py index 908262b..b5ca4da 100644 --- a/test_py_cppmodel.py +++ b/tests/test_cppmodel.py @@ -1,7 +1,7 @@ import pytest from clang.cindex import TranslationUnit -import py_cppmodel +import xyz.cppmodel COMPILER_ARGS = [ "-x", @@ -41,7 +41,7 @@ def model(): COMPILER_ARGS, unsaved_files=[("sample.cc", SOURCE)], ) - return py_cppmodel.Model(tu) + return xyz.cppmodel.Model(tu) def test_filename(model): @@ -50,13 +50,13 @@ def test_filename(model): def test_functions(model): assert len(model.functions) == 2 - assert str(model.functions[0]) == "" - assert str(model.functions[1]) == "" + assert str(model.functions[0]) == "" + assert str(model.functions[1]) == "" def test_classes(model): assert len(model.classes) == 1 - assert str(model.classes[0]) == "" + assert str(model.classes[0]) == "" assert len(model.classes[0].annotations) == 1 assert model.classes[0].annotations[0] == "A" @@ -64,12 +64,12 @@ def test_classes(model): def test_class_members(model): assert len(model.classes[0].members) == 3 - assert str(model.classes[0].members[0]) == " a>" - assert str(model.classes[0].members[1]) == " b>" - assert str(model.classes[0].members[2]) == " c>" + assert str(model.classes[0].members[0]) == " a>" + assert str(model.classes[0].members[1]) == " b>" + assert str(model.classes[0].members[2]) == " c>" assert len(model.classes[0].methods) == 1 - assert str(model.classes[0].methods[0]) == "" + assert str(model.classes[0].methods[0]) == "" assert len(model.classes[0].methods[0].annotations) == 1 assert model.classes[0].methods[0].annotations[0] == "foo" @@ -78,9 +78,9 @@ def test_unmodelled_nodes(model): assert len(model.unmodelled_nodes) == 2 assert ( str(model.unmodelled_nodes[0]) - == ">" + == ">" ) assert ( str(model.unmodelled_nodes[1]) - == " >" + == " >" ) diff --git a/test_parse_standard_library_includes.py b/tests/test_parse_standard_library_includes.py similarity index 95% rename from test_parse_standard_library_includes.py rename to tests/test_parse_standard_library_includes.py index 716f7d4..df45ad8 100644 --- a/test_parse_standard_library_includes.py +++ b/tests/test_parse_standard_library_includes.py @@ -1,7 +1,7 @@ import pytest from clang.cindex import TranslationUnit -import py_cppmodel +import xyz.cppmodel COMPILER_ARGS = [ "-x", @@ -49,4 +49,4 @@ def test_include(include): ) # This should not raise an exception. - py_cppmodel.Model(tu) + xyz.cppmodel.Model(tu) diff --git a/uv.lock b/uv.lock index 2938601..0bb40de 100644 --- a/uv.lock +++ b/uv.lock @@ -3,8 +3,7 @@ revision = 3 requires-python = ">=3.10" resolution-markers = [ "python_full_version >= '3.14'", - "python_full_version == '3.13.*'", - "python_full_version >= '3.11' and python_full_version < '3.13'", + "python_full_version >= '3.11' and python_full_version < '3.14'", "python_full_version < '3.11'", ] @@ -352,11 +351,11 @@ wheels = [ [[package]] name = "clang" -version = "14.0" +version = "21.1.7" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5b/1f/0cde370a9b3f51d8aee106c50d0acf84f088de0d8c99e65b924443314c13/clang-14.0.tar.gz", hash = "sha256:0fe241386d3b780666e032d8c2e482b1d434880185c685071aa38b78317e969f", size = 31219, upload-time = "2022-02-12T17:56:59.807Z" } +sdist = { url = "https://files.pythonhosted.org/packages/50/9b/956a03195656847c4e3620dab9c36c9e53aecf685a6c3f0bc1ce025d7ec3/clang-21.1.7.tar.gz", hash = "sha256:01d5602b3fff77fef6d691a193d7aead4766b0f11d789d596200f3334a88f4b8", size = 8600, upload-time = "2025-12-18T22:04:51.886Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/08/ae/4c5e775b3bafc86fde8db6e4f3fed014651312f33b5fd0468e4bf6848187/clang-14.0-py3-none-any.whl", hash = "sha256:049c7f7740f46f733fc96b5395910ffc57f56d4d61bca65b5556e9772d146deb", size = 31266, upload-time = "2022-02-12T17:56:58.082Z" }, + { url = "https://files.pythonhosted.org/packages/50/a4/608c542925949b300a295baa422b568f835044c5e3ad20820676b840228a/clang-21.1.7-py3-none-any.whl", hash = "sha256:23ee8f7b62af648009aee5139516b2a2a9320680dbce6e42a53e48bd5e8983ea", size = 40240, upload-time = "2025-12-18T22:04:50.636Z" }, ] [[package]] @@ -610,8 +609,7 @@ version = "9.9.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.14'", - "python_full_version == '3.13.*'", - "python_full_version >= '3.11' and python_full_version < '3.13'", + "python_full_version >= '3.11' and python_full_version < '3.14'", ] dependencies = [ { name = "colorama", marker = "python_full_version >= '3.11' and sys_platform == 'win32'" }, @@ -1340,42 +1338,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842, upload-time = "2024-07-21T12:58:20.04Z" }, ] -[[package]] -name = "py-cppmodel" -version = "0.0.1" -source = { editable = "." } -dependencies = [ - { name = "clang" }, - { name = "libclang" }, -] - -[package.dev-dependencies] -dev = [ - { name = "ipython", version = "8.38.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "ipython", version = "9.9.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "jupyter" }, - { name = "pre-commit" }, - { name = "pytest" }, - { name = "pytest-xdist" }, - { name = "ty" }, -] - -[package.metadata] -requires-dist = [ - { name = "clang", specifier = ">=14.0" }, - { name = "libclang", specifier = ">=18.1.1" }, -] - -[package.metadata.requires-dev] -dev = [ - { name = "ipython", specifier = ">=8.12.3" }, - { name = "jupyter", specifier = ">=1.1.1" }, - { name = "pre-commit", specifier = ">=4.5.1" }, - { name = "pytest", specifier = ">=9.0.2" }, - { name = "pytest-xdist", specifier = ">=3.8.0" }, - { name = "ty", specifier = ">=0.0.14" }, -] - [[package]] name = "pycparser" version = "3.0" @@ -2059,3 +2021,39 @@ sdist = { url = "https://files.pythonhosted.org/packages/bd/f4/c67440c7fb409a71b wheels = [ { url = "https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl", hash = "sha256:8156704e4346a571d9ce73b84bee86a29906c9abfd7223b7228a28899ccf3366", size = 2196503, upload-time = "2025-11-01T21:15:53.565Z" }, ] + +[[package]] +name = "xyz-cppmodel" +version = "0.0.1" +source = { editable = "." } +dependencies = [ + { name = "clang" }, + { name = "libclang" }, +] + +[package.dev-dependencies] +dev = [ + { name = "ipython", version = "8.38.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "ipython", version = "9.9.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "jupyter" }, + { name = "pre-commit" }, + { name = "pytest" }, + { name = "pytest-xdist" }, + { name = "ty" }, +] + +[package.metadata] +requires-dist = [ + { name = "clang", specifier = ">=14.0" }, + { name = "libclang", specifier = ">=18.1.1" }, +] + +[package.metadata.requires-dev] +dev = [ + { name = "ipython", specifier = ">=8.12.3" }, + { name = "jupyter", specifier = ">=1.1.1" }, + { name = "pre-commit", specifier = ">=4.5.1" }, + { name = "pytest", specifier = ">=9.0.2" }, + { name = "pytest-xdist", specifier = ">=3.8.0" }, + { name = "ty", specifier = ">=0.0.14" }, +]