feat!: use an Error
userdata instead of a plain error code for I/O errors
#1939
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.
Problem
In practice, most of these I/O errors need to be displayed to the end user through logs or prompts. Showing an error code to the user doesn't make much sense:
which prints:
Goal
This PR changes the type of I/O errors from a number to a new
Error
type.The
Error
type implements the__tostring()
and__concat()
meta method, allowing it to generate more human-readable error messages:which prints:
In certain cases where the raw error code is needed, it can be accessed via the
.code
property of theError
:which prints:
Breaking changes
After this PR, the second return value of the following functions will change from a numeric error code to the new
Error
type:fs
API:fs.cha()
fs.write()
fs.remove()
fs.read_dir()
fs.unique_name()
Command
API:Command:spawn()
Command:output()
Command:status()
Child
API:Child:write_all()
Child:flush()
Child:wait()
Child:wait_with_output()
Child:start_kill()