Remove impl Deref
for AnsiGenericString
#5
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The
Deref
implementation forAnsiGenericString
and its derived type aliases probably violates the tacit definition of theDeref
trait:https://doc.rust-lang.org/std/ops/trait.Deref.html
As the type aliases implement
Display
for the actual styling logic they get a blanketimpl ToString for T: Display + ?Sized
This has the nasty consequence that while you would expect that
fn foo(input: AsRef<str>)
would get the same input fromlet styled: AnsiGenericString<_> = ...
for bothfoo(styled)
andfoo(styled.to_string())
this doesn't hold.Thus the lint https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_to_owned will change the actual behavior and remove styling as the underlying string gets presented via
Deref
.This change removes the
Deref
implementation and fixes the internal uses.