pypa / hatch

Modern, extensible Python project management
https://hatch.pypa.io/latest/
MIT License
6.03k stars 307 forks source link

`hatch fmt --sync` with `config-path = "pyproject.toml"` overwrites `pyproject.toml` #1211

Open dbohdan opened 9 months ago

dbohdan commented 9 months ago

When you have

[tool.hatch.envs.hatch-static-analysis]
config-path = "pyproject.toml"

in pyproject.toml or its equivalent in hatch.toml and run

hatch fmt --sync

it overwrites pyproject.toml.

While this is perfectly consistent behavior, it can't be what the user wants. Issuing this command with this configuration is a mistake. I discovered it when exploring Hatch. Without a backup, I would have lost a bit of work on pyproject.toml. I think Hatch should abort such sync or ask for confirmation.

Demo

> cat pyproject.toml
[project]
name = "foo"

[tool.hatch.envs.hatch-static-analysis]
config-path = "pyproject.toml"

[tool.ruff]
# ...

> hatch fmt --sync
1 file left unchanged

> cat pyproject.toml
line-length = 120

[format]
docstring-code-format = true
docstring-code-line-length = 80

[lint]
select = [
  "A001",
  "A002",
  "A003",
# ...
  "YTT301",
  "YTT302",
  "YTT303",
]

[lint.per-file-ignores]
"**/scripts/*" = [
  "INP001",
  "T201",
]
"**/tests/**/*" = [
  "PLC1901",
  "PLR2004",
  "PLR6301",
  "S",
  "TID252",
]

[lint.flake8-tidy-imports]
ban-relative-imports = "all"

[lint.isort]
known-first-party = ["foo"]

[lint.flake8-pytest-style]
fixture-parentheses = false
mark-parentheses = false

> hatch --version
Hatch, version 1.9.1
ofek commented 9 months ago

True, thanks for the report!