You can check if a name was exported by Base and isn’t assigned the same thing in the current module: isshadowed(name::Symbol, current::Module, origin::Module) = name in names(origin) && getproperty(current, name) !== getproperty(origin, name), called like isshadowed(:Matrix, @__MODULE__, Base). Checking all the names at opportune times is the tricky bit.