serde-ignored icon indicating copy to clipboard operation
serde-ignored copied to clipboard

Expose field name suggestions for ignored fields that are typos

Open nipunn1313 opened this issue 2 years ago • 2 comments

For example, if deserializing something like

[dependencies]
serde = { version = "1.0.126", optional = true, feautres = ["derive"] }

With something like

let manifest: TomlManifest = serde_ignored::deserialize(toml, |path| {
    unused.insert(format!("{}", path));
})?;

We could have serde-ignored (perhaps behind a feature flag) leverage something like lev_distance to give suggestions - which the callsite could use as suggestions

Possible new call syntax

let manifest: TomlManifest = serde_ignored::deserialize_with_suggestions(toml, 2 /* lev distance */, |path: Path, suggestions: Vec<Path>| {
    if ! suggestions.empty() {
      print("{} unused. Did you mean {}", path, suggestions[0]);
    }
    unused.insert(stringify(path));
})?;

^ which would ideally print "dependencies.serde.feautres unused. Did you mean dependencies.serde.features"

Inspired by https://github.com/rust-lang/cargo/issues/5264 and https://github.com/rust-lang/cargo/issues/9731

nipunn1313 avatar Aug 15 '21 03:08 nipunn1313