content: [build-system]
  requires = ["hatchling>=1.1.0"]
  build-backend = "hatchling.build"
  
  [project]
  name = "hatch-vcs"
  dynamic = ["version"]
  description = 'Hatch plugin for versioning with your preferred VCS'
  readme = "README.md"
  license = "MIT"
  requires-python = ">=3.9"
  keywords = [
    "git",
    "hatch",
    "mercurial",
    "plugin",
    "scm",
    "vcs",
    "version",
  ]
  authors = [
    { name = "Ofek Lev", email = "oss@ofek.dev" },
  ]
  classifiers = [
    "Development Status :: 4 - Beta",
    "Programming Language :: Python",
    "Programming Language :: Python :: 3.9",
    "Programming Language :: Python :: 3.10",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",
    "Programming Language :: Python :: 3.13",
    "Programming Language :: Python :: Implementation :: CPython",
    "Programming Language :: Python :: Implementation :: PyPy",
  ]
  dependencies = [
    "hatchling>=1.1.0",
    "setuptools-scm>=8.2.0",
  ]
  
  [project.urls]
  Funding = "https://github.com/sponsors/ofek"
  History = "https://github.com/ofek/hatch-vcs/blob/master/HISTORY.md"
  Issues = "https://github.com/ofek/hatch-vcs/issues"
  Source = "https://github.com/ofek/hatch-vcs"
  
  [project.entry-points.hatch]
  vcs = "hatch_vcs.hooks"
  
  [tool.hatch.version]
  path = "hatch_vcs/__about__.py"
  
  [tool.black]
  target-version = ["py39"]
  line-length = 120
  skip-string-normalization = true
  
  [tool.ruff]
  target-version = "py39"
  line-length = 120
  
  [tool.ruff.lint]
  select = [
    "A",
    "B",
    "C",
    "E",
    "F",
    "FBT",
    "I",
    "N",
    "Q",
    "RUF",
    "S",
    "T",
    "UP",
    "W",
    "YTT",
  ]
  ignore = [
    # Allow non-abstract empty methods in abstract base classes
    "B027",
    # Ignore McCabe complexity
    "C901",
    # Allow boolean positional values in function calls, like `dict.get(... True)`
    "FBT003",
    # Ignore checks for possible passwords
    "S105", "S106", "S107",
    # Ignore noisy checks for insecure subprocess calls
    "S603", "S607",
    # Boolean default values
    "FBT002",
  ]
  
  [tool.ruff.lint.isort]
  known-first-party = ["hatch_vcs"]
  
  [tool.ruff.lint.flake8-quotes]
  inline-quotes = "single"
  
  [tool.ruff.lint.flake8-tidy-imports]
  ban-relative-imports = "all"
  
  [tool.ruff.lint.per-file-ignores]
  # Tests can use relative imports and assertions
  "tests/**/*" = ["TID252", "S101"]
  
  [tool.mypy]
  disallow_untyped_defs = false
  follow_imports = "normal"
  ignore_missing_imports = true
  pretty = true
  show_column_numbers = true
  show_error_codes = true
  warn_no_return = false
  warn_unused_ignores = true
  
  [tool.coverage.run]
  source_pkgs = ["hatch_vcs", "tests"]
  branch = true
  parallel = true
  omit = [
    "hatch_vcs/__about__.py",
  ]
  
  [tool.coverage.paths]
  hatch_vcs = ["hatch_vcs", "*/hatch-vcs/hatch_vcs"]
  tests = ["tests", "*/hatch-vcs/tests"]
  
  [tool.coverage.report]
  exclude_lines = [
    "no cov",
    "if __name__ == .__main__.:",
    "if TYPE_CHECKING:",
  ]
  