Skip to content

Commit 53dcd2f

Browse files
committed
fix(manifest): Provide more context on sematic errors
1 parent 8927ea9 commit 53dcd2f

File tree

6 files changed

+45
-22
lines changed

6 files changed

+45
-22
lines changed

src/cargo/util/toml/mod.rs

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ use cargo_util::paths;
1212
use itertools::Itertools;
1313
use lazycell::LazyCell;
1414
use semver::{self, VersionReq};
15-
use serde::de::IntoDeserializer as _;
1615
use serde::de::{self, Unexpected};
1716
use serde::ser;
1817
use serde::{Deserialize, Serialize};
@@ -99,15 +98,9 @@ fn read_manifest_from_str(
9998
) -> CargoResult<(EitherManifest, Vec<PathBuf>)> {
10099
let package_root = manifest_file.parent().unwrap();
101100

102-
let toml = {
103-
let pretty_filename = manifest_file
104-
.strip_prefix(config.cwd())
105-
.unwrap_or(manifest_file);
106-
parse_document(contents, pretty_filename, config)?
107-
};
108-
109101
let mut unused = BTreeSet::new();
110-
let manifest: TomlManifest = serde_ignored::deserialize(toml.into_deserializer(), |path| {
102+
let deserializer = toml::de::Deserializer::new(contents);
103+
let manifest: TomlManifest = serde_ignored::deserialize(deserializer, |path| {
111104
let mut key = String::new();
112105
stringify(&mut key, &path);
113106
unused.insert(key);

tests/testsuite/bad_config.rs

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1285,8 +1285,11 @@ fn bad_dependency() {
12851285
error: failed to parse manifest at `[..]`
12861286
12871287
Caused by:
1288+
TOML parse error at line 8, column 23
1289+
|
1290+
8 | bar = 3
1291+
| ^
12881292
invalid type: integer `3`, expected a version string like [..]
1289-
in `dependencies.bar`
12901293
",
12911294
)
12921295
.run();
@@ -1317,8 +1320,11 @@ fn bad_debuginfo() {
13171320
error: failed to parse manifest [..]
13181321
13191322
Caused by:
1323+
TOML parse error at line 8, column 25
1324+
|
1325+
8 | debug = 'a'
1326+
| ^^^
13201327
invalid value: string \"a\", expected a boolean, 0, 1, 2, \"line-tables-only\", or \"line-directives-only\"
1321-
in `profile.dev.debug`
13221328
",
13231329
)
13241330
.run();
@@ -1349,8 +1355,11 @@ fn bad_debuginfo2() {
13491355
error: failed to parse manifest at `[..]`
13501356
13511357
Caused by:
1358+
TOML parse error at line 8, column 25
1359+
|
1360+
8 | debug = 3.6
1361+
| ^^^
13521362
invalid type: floating point `3.6`, expected a boolean, 0, 1, 2, \"line-tables-only\", or \"line-directives-only\"
1353-
in `profile.dev.debug`
13541363
",
13551364
)
13561365
.run();
@@ -1379,8 +1388,11 @@ fn bad_opt_level() {
13791388
error: failed to parse manifest at `[..]`
13801389
13811390
Caused by:
1391+
TOML parse error at line 6, column 25
1392+
|
1393+
6 | build = 3
1394+
| ^
13821395
expected a boolean or a string
1383-
in `package.build`
13841396
",
13851397
)
13861398
.run();

tests/testsuite/build.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -340,8 +340,11 @@ fn cargo_compile_with_invalid_version() {
340340
[ERROR] failed to parse manifest at `[..]`
341341
342342
Caused by:
343+
TOML parse error at line 4, column 19
344+
|
345+
4 | version = \"1.0\"
346+
| ^^^^^
343347
unexpected end of input while parsing minor version number
344-
in `package.version`
345348
",
346349
)
347350
.run();

tests/testsuite/cargo_features.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -676,8 +676,11 @@ fn wrong_position() {
676676
error: failed to parse manifest at [..]
677677
678678
Caused by:
679+
TOML parse error at line 5, column 34
680+
|
681+
5 | cargo-features = [\"test-dummy-unstable\"]
682+
| ^^^^^^^^^^^^^^^^^^^^^^^
679683
the field `cargo-features` should be set at the top of Cargo.toml before any tables
680-
in `package.cargo-features`
681684
",
682685
)
683686
.run();

tests/testsuite/inheritable_workspace_fields.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1234,8 +1234,11 @@ fn error_workspace_false() {
12341234
[ERROR] failed to parse manifest at `[CWD]/Cargo.toml`
12351235
12361236
Caused by:
1237+
TOML parse error at line 7, column 41
1238+
|
1239+
7 | description = { workspace = false }
1240+
| ^^^^^
12371241
`workspace` cannot be false
1238-
in `package.description.workspace`
12391242
",
12401243
)
12411244
.run();

tests/testsuite/metadata.rs

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1821,8 +1821,11 @@ fn cargo_metadata_with_invalid_authors_field() {
18211821
r#"[ERROR] failed to parse manifest at `[..]`
18221822
18231823
Caused by:
1824-
invalid type: string "", expected a vector of strings or workspace
1825-
in `package.authors`"#,
1824+
TOML parse error at line 3, column 27
1825+
|
1826+
3 | authors = ""
1827+
| ^^
1828+
invalid type: string "", expected a vector of strings or workspace"#,
18261829
)
18271830
.run();
18281831
}
@@ -1846,8 +1849,11 @@ fn cargo_metadata_with_invalid_version_field() {
18461849
r#"[ERROR] failed to parse manifest at `[..]`
18471850
18481851
Caused by:
1849-
invalid type: integer `1`, expected SemVer version
1850-
in `package.version`"#,
1852+
TOML parse error at line 3, column 27
1853+
|
1854+
3 | version = 1
1855+
| ^
1856+
invalid type: integer `1`, expected SemVer version"#,
18511857
)
18521858
.run();
18531859
}
@@ -1871,8 +1877,11 @@ fn cargo_metadata_with_invalid_publish_field() {
18711877
r#"[ERROR] failed to parse manifest at `[..]`
18721878
18731879
Caused by:
1874-
invalid type: string "foo", expected a boolean, a vector of strings, or workspace
1875-
in `package.publish`"#,
1880+
TOML parse error at line 3, column 27
1881+
|
1882+
3 | publish = "foo"
1883+
| ^^^^^
1884+
invalid type: string "foo", expected a boolean, a vector of strings, or workspace"#,
18761885
)
18771886
.run();
18781887
}

0 commit comments

Comments
 (0)