You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

55 lines
2.1 KiB

if Base.isinteractive() &&
(local REPL = get(Base.loaded_modules, Base.PkgId(Base.UUID("3fa0cd96-eef1-5676-8a61-b3b8758bbffb"), "REPL"), nothing); REPL !== nothing)
# Exit Julia with :q
pushfirst!(REPL.repl_ast_transforms, function(ast::Union{Expr,Nothing})
if Meta.isexpr(ast, :toplevel, 2) && ast.args[2] === QuoteNode(:q)
exit()
end
return ast
end)
# Restart Julia with :r
pushfirst!(REPL.repl_ast_transforms, function(ast::Union{Expr,Nothing})
if Meta.isexpr(ast, :toplevel, 2) && ast.args[2] === QuoteNode(:r)
argv = Base.julia_cmd().exec
opts = Base.JLOptions()
if opts.project != C_NULL
push!(argv, "--project=$(unsafe_string(opts.project))")
end
if opts.nthreads != 0
push!(argv, "--threads=$(opts.nthreads)")
end
@ccall execv(argv[1]::Cstring, argv::Ref{Cstring})::Cint
end
return ast
end)
# Automatically load Debugger.jl when encountering @enter or @run and BenchmarkTools.jl
# when encountering @btime or @benchmark.
pushfirst!(REPL.repl_ast_transforms, function(ast::Union{Expr,Nothing})
contains_macro(_, _) = false
function contains_macro(x::Expr, s::Symbol)
(Meta.isexpr(x, :macrocall) && x.args[1] === s) ||
any(y -> contains_macro(y, s), x.args)
end
if Meta.isexpr(ast, :toplevel, 2) &&
!isdefined(Main, :Debugger) &&
(contains_macro(ast, Symbol("@enter")) || contains_macro(ast, Symbol("@run")))
@info "Loading Debugger ..."
try
Core.eval(Main, :(using Debugger))
catch
end
elseif Meta.isexpr(ast, :toplevel, 2) &&
!isdefined(Main, :BenchmarkTools) &&
(contains_macro(ast, Symbol("@btime")) || contains_macro(ast, Symbol("@benchmark")))
@info "Loading BenchmarkTools ..."
try
Core.eval(Main, :(using BenchmarkTools))
catch
end
end
return ast
end)
end