Cargo-edit: `cargo add`: Nicer TOML Files

Created on 11 Oct 2015  Â·  14Comments  Â·  Source: killercup/cargo-edit

  • [x] Don't mess up Cargo.toml structure too much, e.g. keep the ordering
  • [x] Don't remove comments.
  • [x] Use inline tables whenever possible, e.g. clippy = {version = "0.0.19", optional = true}
cargo-add help wanted refinement

Most helpful comment

I would still like to see this happen someday...

All 14 comments

+1 to this. Running using cargo add on https://github.com/Hoverbear/rust-rosetta/blob/master/Cargo.toml was a minor disaster (comments removed, binaries reordered, etc.). The toml linked above might make an interesting test case.

another annoyance:

  • my single quoted strings get converted to double quoted ones (ideally cargo-add would detect the predominate string style and use it)

we should really parse this into an extensive AST and operate on that level instead of using hashmaps without stylistic and meta information.

i didn’t need that yet, but i can also imagine a complex Cargo.toml having some sections divided by blank lines that should be preserved

Like @rgardner mentioned in #57, there was some effort by @vosen to implement some of this in alexcrichton/toml-rs#64.

It might be a good idea to use that code as a starting point for a new crate that parses toml into an AST that maintains more stylistic information but that also offers a "high level" interface that can be used like a nested hashmap to easily insert/update values.

toml-rs was written when the rust ecosystem wasn’t as far so maybe someone would have fun just implementing a new TOML parser in nom or peresil or so.

toml-rs is fine for reading TOML, but not for editing it.

Good idea, @flying-sheep. There are always people asking for suggestions on what to implement to learn Rust. A TOML parser that can write nice files is probably both easy to start and enough of a challenge to spend some time with. I think I'm going to post this in a few places :smile:

yup, toml is really easy to parse. no whitespace, no ambiguities. therefore no state and no backtracking.

whatever you choose (parser combinator or classic tokenizer + AST parser), it shouldn’t be much of a problem

Hi guys. This discussion got a little bit fragmented. I've summed up the current state of alexcrichton/toml-rs#64 on Discourse (tl;dr It's not dead). But I think this place is slightly more fitting for planning what to actually do. Since my goal is the same as yours (having TOML parsing that doesn't mangle Cargo.toml, part of PistonDevelopers/VisualRust#196), I want to invite you to join me in alexcrichton/toml-rs#64 (or take over). From what I can tell this code is furthest ahead when it comes to handling TOML gracefully: ordering, whitrespace, comments are all preserved. What's missing is a public interface for querying/editing/adding/removing elements.

tomllib (I renamed toml_parser) is out now at version 0.1.1. It is currently limited to parsing documents, getting values, setting/changing values and getting subkeys of a key. This should be enough to get cargo-bump and the cargo list command for cargo-edit (by using the get_children method on the "dependencies" key and then get_value on each of the child keys). For the next set of features I'm targeting the cargo add and cargo rm commands.

That sounds awesome, @joelself! I'll have a look at tomllib (← cool name, btw) when I'm home next week. Maybe I'll even have some time to help out! :smiley:

I would still like to see this happen someday...

I think the three checkboxes can be ticked, but cargo-edit still adds double-quoted version specifiers to my single-quoted .toml files. Should I file a new issue and let this be closed or wat do? :smile:

@flying-sheep best you open a new one for that!

Fixes by #181 and #312.

@flying-sheep feel free to open an issue for respecting single-quoted style.

I did! #217

Was this page helpful?
0 / 5 - 0 ratings

Related issues

DCjanus picture DCjanus  Â·  15Comments

Dowwie picture Dowwie  Â·  5Comments

jcgruenhage picture jcgruenhage  Â·  7Comments

ordian picture ordian  Â·  29Comments

killercup picture killercup  Â·  19Comments