After I refactored my own set of code files into a package (with generate command), and using Revise prior to everything (thanks to the VS Code option), development got better, but I noticed some changes in my submodules were not tracked, compared to other changes in other same level submodules.
After I removed almost all my main code in order to create a minimal working example, I found the source of the problem…
- test file.jl - Project.toml… - src - MyModule.jl - submodule1.jl (intermediate level functions) - subsubmodule1.jl (low level functions) - subsubmodule2.jl (low level functions)
using MyModule test_all();
module MyModule include("subsubmodule1.jl") include("submodule1.jl") # Includes after this line are not tracked anymore, so order seems important in this setting. include("subsubmodule2.jl") using .SubSubModule1 using .SubSubModule2 export test_all function test_all() test_0 = "b" @show test_0 test1() test2() end end
module SubModule include("subsubmodule1.jl") include("subsubmodule2.jl") end
module SubSubModule1 export test1 function test1() test_1 = "b" @show test_1 end end
module SubSubModule2 export test2 function test2() test_2 = "b" @show test_2 end end
When I execute
test file.jl, as expected, the result is:
julia> using MyModule julia> test_all(); test_0 = "b" test_1 = "b" test_2 = "b"
After I changed all
"a", this is the result:
julia> test_all(); test_0 = "a" test_1 = "a" test_2 = "b"
After several tests, it seems all includes occurring after the include of the submodule1 (including again the 2 subsubmodules) are not tracked by Revise, so each change in these files needs a restart of Julia…
In this example, it seems easy to solve, at least by changing order of includes, but in my real files, these includes are mainly nested in intermediate level modules, so high level modules will call low level modules several times (and the interfering includes are not always in the same file)…
To give a more real code tree:
- test file.jl - Project.toml… - src - MyModule.jl - submodule1.jl (includes subsubmodule1.jl, subsubmodule2.jl, subsubsubmodule1.jl and subsubsubmodule2.jl) - submodule2.jl (includes subsubsubmodule1.jl, subsubsubmodule2.jl and subsubsubmodule3.jl) - submodule3.jl (includes subsubsubmodule1.jl, subsubsubmodule2.jl and subsubsubmodule3.jl) - subsubmodule1.jl (includes subsubsubmodule1.jl and subsubsubmodule2.jl) - subsubmodule2.jl (includes subsubsubmodule1.jl and subsubsubmodule2.jl) - subsubsubmodule1.jl - subsubsubmodule2.jl - subsubsubmodule3.jl
And in this real case, changes in subsubsubmodules are not tracked, but if I comment the includes of submodules 1 and 2 (removing the multiple includes), they are tracked again after the restart of Julia.
Did I miss something in the guides for Revise and Pkg for development, do I make it the wrong way with inner imports/includes?
More generally, what should be improved in this code tree?
Thank you for your answers, and great work!