[project] name = "program-model" version = "0.1.0" description = "Buttercup contextualizer" readme = "README.md" authors = [{ name = "Trail of Bits", email = "opensource@trailofbits.com" }] license = "AGPL-3.0-only" requires-python = ">=3.12,<3.13" dependencies = [ "common[full]", "tree-sitter ~=0.24.0", "tree-sitter-language-pack ~=0.9.0", "rapidfuzz ~=3.12.2", ] [project.scripts] buttercup-program-model = "buttercup.program_model.__cli__:main" [tool.uv.sources] common = { path = "../common", editable = true } [tool.hatch.build.targets.wheel] packages = ["src/buttercup"] [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [project.urls] Repository = "https://github.com/trailofbits/buttercup" Issues = "https://github.com/trailofbits/buttercup/issues" [dependency-groups] dev = [ # Testing tools "pytest~=9.0.3", "pytest-cov ~=6.0.0", # Linting and type checking "ruff ~=0.14.0", "ty", # Astral type checker (replaces mypy) # Type stubs "types-redis ~=4.6.0", ] [tool.ruff] line-length = 120 target-version = "py312" [tool.ruff.lint] select = ["E", "F", "I", "W", "UP"] ignore = [ "COM812", "ISC001", # Formatter conflicts ] [tool.ruff.lint.per-file-ignores] "tests/**/*.py" = ["S101", "D"] # Allow asserts, no docstrings in tests [tool.ty.environment] python-version = "3.12" [tool.ty.src] # Explicitly include src directory include = ["src"] [tool.ty.rules] unresolved-import = "error" unresolved-attribute = "error"