How to integrate Chairmarks into your workflow
There are several ways to use Chairmarks in your interactive sessions, ordered from simplest to install first to most streamlined user experience last.
Add Chairmarks to your default environment with
import Pkg; Pkg.activate(); Pkg.add("Chairmarks")
. Chairmarks has no non-stdlib dependencies, and precompiles in less than one second, so this should not have any adverse impacts on your environments nor slow load times nor package instillation times.Add Chairmarks to your default environment and put
isinteractive() && using Chairmarks
in your startup.jl file. This will make Chairmarks available in all your REPL sessions while still requiring an explicit load in scripts and packages. This will slow down launching a new Julia session by a few milliseconds (for comparison, this is about 20x faster than loadingRevise
in your startup.jl file).[Recommended] Add Chairmarks to your default environment and put the following script in your startup.jl file to automatically load it when you type
@b
or@be
in the REPL:
if isinteractive() && (local REPL = get(Base.loaded_modules, Base.PkgId(Base.UUID("3fa0cd96-eef1-5676-8a61-b3b8758bbffb"), "REPL"), nothing); REPL !== nothing)
# https://github.com/fredrikekre/.dotfiles/blob/65b96f492da775702c05dd2fd460055f0706457b/.julia/config/startup.jl
# Automatically load tooling on demand. These packages should be stdlibs or part of the default environment.
# - Chairmarks when encountering @b or @be
# - add more as desired...
local tooling = [
["@b", "@be"] => :Chairmarks,
# add more here...
]
local tooling_dict = Dict(Symbol(k) => v for (ks, v) in tooling for k in ks)
function load_tools(ast)
if ast isa Expr
if ast.head === :macrocall
pkg = get(tooling_dict, ast.args[1], nothing)
if pkg !== nothing && !isdefined(Main, pkg)
@info "Loading $pkg ..."
try
Core.eval(Main, :(using $pkg))
catch err
@info "Failed to automatically load $pkg" exception=err
end
end
end
foreach(load_tools, ast.args)
end
ast
end
pushfirst!(REPL.repl_ast_transforms, load_tools)
end