Make more informative warning message when failed to parse pyproject.toml (#6009)

## Summary

Added the actual error message to the warning when uv fails to parse
`pyproject.toml`.

Resolves https://github.com/astral-sh/uv/issues/5934

## Test Plan

Took the case from the issue:
- have `pyproject.toml` which contains
```
[tool.uv]
foobar = false
```
- 
```
$ uv venv --preview -v
```
- Expect the message that contains the actual problem in the
`pyproject.toml` like:
```
warning: Failed to parse `pyproject.toml` during settings discovery: unknown field `foobar`; skipping...
```
This commit is contained in:
Alexander Gherm 2024-08-11 23:13:14 +02:00 committed by GitHub
parent 5c44937742
commit 798cc7bf3c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 24 additions and 4 deletions

1
Cargo.lock generated
View file

@ -5127,6 +5127,7 @@ dependencies = [
"pypi-types",
"schemars",
"serde",
"textwrap",
"thiserror",
"toml",
"tracing",

View file

@ -31,6 +31,7 @@ dirs-sys = { workspace = true }
fs-err = { workspace = true }
schemars = { workspace = true, optional = true }
serde = { workspace = true }
textwrap = { workspace = true }
thiserror = { workspace = true }
toml = { workspace = true }
tracing = { workspace = true }

View file

@ -72,9 +72,13 @@ impl FilesystemOptions {
Ok(None) => {
// Continue traversing the directory tree.
}
Err(Error::PyprojectToml(file, _err)) => {
Err(Error::PyprojectToml(file, err)) => {
// If we see an invalid `pyproject.toml`, warn but continue.
warn_user!("Failed to parse `{file}` during settings discovery; skipping...");
warn_user!(
"Failed to parse `{}` during settings discovery:\n{}",
file.cyan(),
textwrap::indent(&err.to_string(), " ")
);
}
Err(err) => {
// Otherwise, warn and stop.

View file

@ -3263,7 +3263,15 @@ fn override_dependency_from_workspace_invalid_syntax() -> Result<()> {
----- stdout -----
----- stderr -----
warning: Failed to parse `pyproject.toml` during settings discovery; skipping...
warning: Failed to parse `pyproject.toml` during settings discovery:
TOML parse error at line 9, column 29
|
9 | override-dependencies = [
| ^
no such comparison operator "=", must be one of ~= == != <= >= < > ===
werkzeug=2.3.0
^^^^^^
error: Failed to parse: `pyproject.toml`
Caused by: TOML parse error at line 9, column 29
|

View file

@ -125,7 +125,13 @@ fn invalid_pyproject_toml_syntax() -> Result<()> {
----- stdout -----
----- stderr -----
warning: Failed to parse `pyproject.toml` during settings discovery; skipping...
warning: Failed to parse `pyproject.toml` during settings discovery:
TOML parse error at line 1, column 5
|
1 | 123 - 456
| ^
expected `.`, `=`
error: Failed to parse: `pyproject.toml`
Caused by: TOML parse error at line 1, column 5
|