Skip to content

Commit

Permalink
Use showerror for showing captured errors (#261)
Browse files Browse the repository at this point in the history
  • Loading branch information
tpapp authored Oct 17, 2024
1 parent ecae718 commit c4ac614
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 12 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## Unreleased
### Fixed
- Errors from code evaluation (with `continue_on_error = true`) are now properly displayed
with `showerror`. ([#261])

## [v2.20.0] - 2024-10-16
### Added
- A new keyword argument configuration `continue_on_error::Bool = false` has been added
Expand Down
27 changes: 18 additions & 9 deletions src/Literate.jl
Original file line number Diff line number Diff line change
Expand Up @@ -936,15 +936,24 @@ function execute_block(sb::Module, block::String; inputfile::String, fake_source
end
end
popdisplay(disp) # IOCapture.capture has a try-catch so should always end up here
if c.error && !continue_on_error
error("""
$(sprint(showerror, c.value))
when executing the following code block from inputfile `$(Base.contractuser(inputfile))`
```julia
$block
```
""")
if c.error
if continue_on_error
err = c.value
if err isa LoadError # include_string may wrap error in LoadError
err = err.error
end
all_output = c.output * "\n\nERROR: " * sprint(showerror, err)
return nothing, all_output, disp.data
else
error("""
$(sprint(showerror, c.value))
when executing the following code block from inputfile `$(Base.contractuser(inputfile))`
```julia
$block
```
""")
end
end
return c.value, c.output, disp.data
end
Expand Down
7 changes: 4 additions & 3 deletions test/runtests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -1462,16 +1462,17 @@ end end
@testset "continue_on_error=true" begin
input_with_error =
"""
# The following will error
# The following will print something, then error
print("I always wanted to calculate")
sqrt(-1.0)
"""
mktempdir(@__DIR__) do sandbox
inputfile = joinpath(sandbox, "input.jl")
write(inputfile, input_with_error)
Literate.markdown(inputfile, sandbox; continue_on_error = true, execute = true)
output_md = read(joinpath(sandbox, "input.md"), String)
@test occursin("DomainError(-1.0", output_md)
@test occursin("I always wanted to calculate", output_md)
@test occursin("ERROR: DomainError with -1.0", output_md)
end
end

Expand Down

0 comments on commit c4ac614

Please sign in to comment.