Something I noted on Reddit:
(Modulo glob imports,) In the 2018 modules model, a leaf .rs always has enough information locally in it to determine whether an import is from a crate or a module, without or with allowing local paths in use. This is not true in the current 2015 model.
A 2015 path starts with (a keyword or) a name in scope at the root of your crate. This could be a module or an external crate, you canât know without checking lib.rs.
In contrast, a 2018 path starts with (a keyword,) a crate name (where crate stands in for the local crateâs name) or in this extension, a locally defined symbol. This means that (modulo glob imports), your non-root .rs contains enough information to determine if an import is from an external crate, a module, or a local symbol, because the path cannot start with a root module and local symbols are local.
Glob imports break this a little, as you canât know every symbol that is glob imported without knowing the glob import externally, but Iâd argue that any glob import importing a snake_case name is questionable style other than a few very specific, well-known identifiers.
That said, whatâs complicated about âa path starts with a crate name or a local name, and is an error if thatâs ambiguous; hereâs how to disambiguateâ?
(Note: I am overall neutral on this proposal.)