embed-doc-image icon indicating copy to clipboard operation
embed-doc-image copied to clipboard

Remove `syn` dependency by relying only on `doc = embed_image!` functionality.

Open Andlon opened this issue 3 years ago • 5 comments

Currently, syn is only necessary for the embed_doc_image attribute. Although the #[embed_doc_image] also works on older Rust versions, it seems like a reasonable trade-off to only be able to generate docs for Rust > 1.54. Then we can remove #[embed_doc_image] as well as syn. The remaining dependencies are hopefully lightweight enough that most users won't need to disable them during non-doc compilation.

We should also simplify documentation to focus on the case when Rust >= 1.54 - in which case using embed-doc-image is easy, and put less emphasis on all the workarounds for making code compile on Rust < 1.54 (although still discuss them).

Additionally, as suggested by @GuillaumeGomez here, we can use cfg(doc) to ensure that embed_image! evaluates to a no-op when not compiling docs.

Finally, we should also provide an enabled feature that, when not enabled, makes the whole crate a no-op with no dependencies. This way it's possible for users to only embed doc images when a feature, and otherwise pay no price whatsoever when the feature is not enabled.

Andlon avatar Feb 16 '22 12:02 Andlon

I'd also add that it could be much simplified if this cargo issue was fixed to allow to have dependencies only doc build.

GuillaumeGomez avatar Feb 16 '22 12:02 GuillaumeGomez

It was just pointed out to me in the community Discord that #[cfg(doc)] interacts poorly with dependencies. My understanding is that this configuration directive is not necessarily applied to dependencies. The result of this in the context of this crate could be that images are not embedded in dependencies, which seems unfortunate.

This suggests that using cfg(doc) unfortunately is off the table...

Andlon avatar Feb 16 '22 12:02 Andlon

I'm a bit surprised. Do you have an example where cfg(doc) isn't working nicely? (that might allow to fix things in rustdoc directly)

GuillaumeGomez avatar Feb 16 '22 13:02 GuillaumeGomez

@GuillaumeGomez: I'm just going by the word of @Nemo157 here, to be honest. I don't have an explicit example myself, unfortunately.

Andlon avatar Feb 16 '22 13:02 Andlon

Ah right, cfg(doc) isn't propagated to dependencies, which is an issue...

GuillaumeGomez avatar Feb 16 '22 13:02 GuillaumeGomez