libcore: handle trailing newlines more like other languages. #5398
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
each_line
function inReaderUtil
acts very differently to equivalent functions in Python, Ruby, Clojure etc. E.g. given a filet
with contentstrailing\nnew line\n
andn
containingno trailing\nnew line
:Rust:
Python:
Ruby:
Clojure
The extra string that rust includes at the end is inconsistent, and means that it is impossible to distinguish between the "real" empty line a file that ends
...\n\n
, and the "fake" one after the last\n
.The code attached makes Rust's
each_line
act like Clojure (and PHP, i.e. not including the\n
), as well as adjustingstr::lines
to fix the trailing empty line problem.Also, add a convenience
read_lines
method to read all the lines in a file into a vector.