mirror of https://github.com/fredrikekre/.dotfiles
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.
39 lines
1.5 KiB
39 lines
1.5 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) |
|
|
|
# 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
|
|
|