else can be used without if #23
Labels
No labels
bug
dependencies
duplicate
enhancement
github_actions
help wanted
invalid
question
wontfix
No milestone
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
gh-rust-lang/cfg-if#23
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
TIL: https://lukaslueg.github.io/macro_railroad_wasm_demo
It clearly shows that an
elsecan be used solely without a leading `if.A quick jump into the compiler shows it as well:
Is this intended? If yes, it should be documented, if not, it should be prohibited.
I think this is just a mistake of the macro! It's not an intended use case but I don't really think it's that big of an issue to either document or prohibit. It seems like sort of a weird quirk at best?
My gut reaction is that you shouldn't allow something like this because quirks like that that you aren't expecting could lead to bugs. This would be an opportunity to accidentally forget the
ifof the statement which would be a logic error in ( I think ) every instance.I mean, imagine if
rustclet us haveelse's withoutif's.If it is a big pain to fix from an implementation perspective, though, then I think that documenting the quirk would be reasonable enough.
I agree with @alexcrichton. But I would add that I think an
elseclause by itself is kinda cute.This is fixed on the current master, appears to be changed in
github.com/alexcrichton/cfg-if@3499136896Any hope this gets released? The commit is one year old.
I'd happily take this. I'm using
cfg_ifquite heavily for architectural dependencies and I've already had a confusing bug whose root cause was a missingifdue to some copy-paste error. There's no use case for allowing this syntax, I'd prefer it to be rejected.I don’t think there’s no use case. I can imagine realistic code depending on this behaviour. Something along these lines:
That single-character change of
*to+is a breaking change; although I doubt that anyone is depending on it, I reckon it should either be reverted, or the next release called 2.0.0.(It’s pure coincidence that I’m commenting less than a day after you: I just happen to be starting doing detailed code review of crates starting with this one today.)
Yes, this is technically a breaking change, so semver requires that release be 2.0.0. That's fine by me, I'd just like to see this released, it's frozen on master which is simply a waste :)
@rust-lang/crate-maintainers Any thoughts on this? I think releasing it as 2.0.0 makes some sense but also concerned that would affect a lot of crates. The decision here seems important.
I don't think this alone is worth a release, given that it would introduce a transition period where crates would be using both for a while. If we have other features motivating a major release then we could include this as well.
But personally, I would love to see this included in the standard library instead. If people are going to go through a transition, let's have them go through a transition to the version in the standard library.
That sounds great, thank you!
Then I'm going to do the following if no one raises any objections in a few days:
else+toelse*in this crate@JohnTitor There's already an internal copy in the stdlib; I put it there. The PR would just need to propose stabilizing it.
(Also, you might add a comment next to the version number in
Cargo.tomlsaying if this ever needs bumping to a new major version then we should fix this.)If we're considering moving this to the standard library (which I wholly support!) then we should perhaps consider whether to introduce language-level syntax for this considering how widely used
cfg_ifis. However this discussion is starting to be off-topic for this issue.Regarding the issue itself, I agree that we should not do a 2.0.0 release just for this.
Any progress on moving this to the standard library?