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_linefunction inReaderUtilacts very differently to equivalent functions in Python, Ruby, Clojure etc. E.g. given a filetwith contentstrailing\nnew line\nandncontainingno 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_lineact like Clojure (and PHP, i.e. not including the\n), as well as adjustingstr::linesto fix the trailing empty line problem.Also, add a convenience
read_linesmethod to read all the lines in a file into a vector.