diff --git a/Project.toml b/Project.toml index 9e20363d..91aa6f6a 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "Revise" uuid = "295af30f-e4ad-537b-8983-00126c2a3abe" -version = "3.5.18" +version = "3.6.0" [deps] CodeTracking = "da1fd8a2-8d9e-5ec2-8556-3022fb5608a2" diff --git a/src/packagedef.jl b/src/packagedef.jl index 00cfc79e..5708919d 100644 --- a/src/packagedef.jl +++ b/src/packagedef.jl @@ -849,15 +849,24 @@ end revise(backend::REPL.REPLBackend) = revise() """ - revise(mod::Module) + revise(mod::Module; force::Bool=true) -Reevaluate every definition in `mod`, whether it was changed or not. This is useful +Revise all files that define `mod`. + +If `force=true`, reevaluate every definition in `mod`, whether it was changed or not. This is useful to propagate an updated macro definition, or to force recompiling generated functions. +Be warned, however, that this invalidates all the compiled code in your session that depends on `mod`, +and can lead to long recompilation times. """ -function revise(mod::Module) +function revise(mod::Module; force::Bool=true) mod == Main && error("cannot revise(Main)") id = PkgId(mod) pkgdata = pkgdatas[id] + for file in pkgdata.info.files + push!(revision_queue, (pkgdata, file)) + end + revise() + force || return true for (i, file) in enumerate(srcfiles(pkgdata)) fi = fileinfo(pkgdata, i) for (mod, exsigs) in fi.modexsigs