Skip to content

Commit d031595

Browse files
dgleichKristofferC
authored andcommitted
InteractiveUtils.jl: fixes issue where subtypes resolves bindings and causes deprecation warnings (#56306)
The current version of `subtypes` will throw deprecation errors even if no one is using the deprecated bindings. A similar bug was fixed in Aqua.jl - https://github.com/JuliaTesting/Aqua.jl/pull/89/files See discussion here: - JuliaIO/ImageMagick.jl#235 (for identifying the problem) - JuliaLang/Reexport.jl#42 (for pointing to the issue in Aqua.jl) - https://github.com/JuliaTesting/Aqua.jl/pull/89/files (for the fix in Aqua.jl) This adds the `isbindingresolved` test to the `subtypes` function to avoid throwing deprecation warnings. It also adds a test to check that this doesn't happen. --- On the current master branch (before the fix), the added test shows: ``` WARNING: using deprecated binding InternalModule.MyOldType in OuterModule. , use MyType instead. Subtypes and deprecations: Test Failed at /home/dgleich/devextern/julia/usr/share/julia/stdlib/v1.12/Test/src/Test.jl:932 Expression: isempty(stderr_content) Evaluated: isempty("WARNING: using deprecated binding InternalModule.MyOldType in OuterModule.\n, use MyType instead.\n") Test Summary: | Fail Total Time Subtypes and deprecations | 1 1 2.8s ERROR: LoadError: Some tests did not pass: 0 passed, 1 failed, 0 errored, 0 broken. in expression starting at /home/dgleich/devextern/julia/stdlib/InteractiveUtils/test/runtests.jl:841 ERROR: Package InteractiveUtils errored during testing ``` --- Using the results of this pull request: ``` @test_nowarn subtypes(Integer); ``` passes without error. The other tests pass too. (cherry picked from commit 20f933a)
1 parent 3dd91a1 commit d031595

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

stdlib/InteractiveUtils/src/InteractiveUtils.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export apropos, edit, less, code_warntype, code_llvm, code_native, methodswith,
1616
import Base.Docs.apropos
1717

1818
using Base: unwrap_unionall, rewrap_unionall, isdeprecated, Bottom, show_unquoted, summarysize,
19-
signature_type, format_bytes
19+
signature_type, format_bytes, isbindingresolved
2020
using Base.Libc
2121
using Markdown
2222

@@ -262,7 +262,7 @@ function _subtypes_in!(mods::Array, x::Type)
262262
m = pop!(mods)
263263
xt = xt::DataType
264264
for s in names(m, all = true)
265-
if isdefined(m, s) && !isdeprecated(m, s)
265+
if isbindingresolved(m, s) && !isdeprecated(m, s) && isdefined(m, s)
266266
t = getfield(m, s)
267267
dt = isa(t, UnionAll) ? unwrap_unionall(t) : t
268268
if isa(dt, DataType)

stdlib/InteractiveUtils/test/runtests.jl

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -728,3 +728,22 @@ end
728728
@testset "Docstrings" begin
729729
@test isempty(Docs.undocumented_names(InteractiveUtils))
730730
end
731+
732+
# issue https://github.com/JuliaIO/ImageMagick.jl/issues/235
733+
module OuterModule
734+
module InternalModule
735+
struct MyType
736+
x::Int
737+
end
738+
739+
Base.@deprecate_binding MyOldType MyType
740+
741+
export MyType
742+
end
743+
using .InternalModule
744+
export MyType, MyOldType
745+
end # module
746+
@testset "Subtypes and deprecations" begin
747+
using .OuterModule
748+
@test_nowarn subtypes(Integer);
749+
end

0 commit comments

Comments
 (0)