rust/compiler
Mara Bos ffcbeefd64
Rollup merge of #80765 - petrochenkov:traitsinscope, r=matthewjasper
resolve: Simplify collection of traits in scope

"Traits in scope" for a given location are collected by walking all scopes in type namespace, collecting traits in them and pruning traits that don't have an associated item with the given name and namespace.

Previously we tried to prune traits using some kind of hygienic resolution for associated items, but that was complex and likely incorrect, e.g. in #80762 correction to visibilites of trait items caused some traits to not be in scope anymore.
I previously had some comments and concerns about this in https://github.com/rust-lang/rust/pull/65351.

In this PR we are doing some much simpler pruning based on `Symbol` and `Namespace` comparisons, it should be enough to throw away 99.9% of unnecessary traits.
It is not necessary for pruning to be precise because for trait aliases, for example, we don't do any pruning at all, and precise hygienic resolution for associated items needs to be done in typeck anyway.

The somewhat unexpected effect is that trait imports introduced by macros 2.0 now bring traits into scope due to the removed hygienic check on associated item names.
I'm not sure whether it is desirable or not, but I think it's acceptable for now.
The old check was certainly incorrect because macros 2.0 did bring trait aliases into scope.
If doing this is not desirable, then we should come up with some other way to avoid bringing traits from macros 2.0 into scope, that would accommodate for trait aliases as well.

---

The PR also contains a couple of pure refactorings
- Scope walk is done by using `visit_scopes` instead of a hand-rolled version.
- Code is restructured to accomodate for rustdoc that also wants to query traits in scope, but doesn't want to filter them by associated items at all.

r? ```@matthewjasper```
2021-01-17 12:24:47 +00:00
..
rustc just max_level_info 2020-09-11 09:37:51 -07:00
rustc_apfloat Backport another LLVM commit to rustc_apfloat 2020-10-04 02:02:25 +02:00
rustc_arena stabilize min_const_generics 2020-12-26 18:24:10 +01:00
rustc_ast Remove unnecessary manual shrink_to_fit calls 2021-01-16 14:02:36 +01:00
rustc_ast_lowering Use Option::map_or instead of .map(..).unwrap_or(..) 2021-01-14 19:23:59 +01:00
rustc_ast_passes Use Option::map_or instead of .map(..).unwrap_or(..) 2021-01-14 19:23:59 +01:00
rustc_ast_pretty ast: Remove some indirection layers from values in key-value attributes 2021-01-09 21:50:39 +03:00
rustc_attr Get rid of clean::Deprecation 2020-12-14 22:00:46 -05:00
rustc_builtin_macros resolve: Simplify built-in macro table 2021-01-10 14:48:47 +03:00
rustc_codegen_cranelift codegen_cranelift: Fix redundant semicolon warn 2021-01-16 07:17:13 +03:00
rustc_codegen_llvm Auto merge of #77885 - erikdesjardins:probeasm, r=cuviper 2021-01-16 03:10:52 +00:00
rustc_codegen_ssa Use Option::map_or instead of .map(..).unwrap_or(..) 2021-01-14 19:23:59 +01:00
rustc_data_structures Use Option::map_or instead of .map(..).unwrap_or(..) 2021-01-14 19:23:59 +01:00
rustc_driver Rollup merge of #80944 - LingMan:map_or, r=nagisa 2021-01-15 18:26:14 +09:00
rustc_error_codes Rollup merge of #80614 - 1000teslas:issue-78938-fix, r=tmandry 2021-01-16 17:29:49 +00:00
rustc_errors Use Option::map_or instead of .map(..).unwrap_or(..) 2021-01-14 19:23:59 +01:00
rustc_expand Use Option::map_or instead of .map(..).unwrap_or(..) 2021-01-14 19:23:59 +01:00
rustc_feature Allow #[rustc_builtin_macro = "name"]. 2021-01-09 19:50:06 +01:00
rustc_fs_util Optimize away a fs::metadata call. 2021-01-06 08:33:15 -08:00
rustc_graphviz remove redundant closures (clippy::redundant_closure) 2021-01-03 13:34:24 +01:00
rustc_hir resolve: Reject ambiguity built-in attr vs different built-in attr 2021-01-17 01:48:17 +03:00
rustc_hir_pretty Auto merge of #79328 - c410-f3r:hir-if, r=matthewjasper 2021-01-14 14:41:58 +00:00
rustc_incremental Remove DepKind::CrateMetadata and pre-allocation of DepNodes 2021-01-12 11:22:57 -08:00
rustc_index Switch compiler/ to intra-doc links 2020-12-18 15:22:51 -05:00
rustc_infer Use Option::map_or instead of .map(..).unwrap_or(..) 2021-01-14 19:23:59 +01:00
rustc_interface Remove DepKind::CrateMetadata and pre-allocation of DepNodes 2021-01-12 11:22:57 -08:00
rustc_lexer Return EOF_CHAR constant instead of magic char. 2021-01-07 13:20:04 +01:00
rustc_lint Use Option::map_or instead of .map(..).unwrap_or(..) 2021-01-14 19:23:59 +01:00
rustc_lint_defs Introduce missing ABI lint on extern blocks 2021-01-13 07:49:16 -05:00
rustc_llvm Use probe-stack=inline-asm in LLVM 11+ 2021-01-14 22:49:16 -05:00
rustc_macros Use Option::map_or instead of .map(..).unwrap_or(..) 2021-01-14 19:23:59 +01:00
rustc_metadata Auto merge of #80602 - tgnottingham:cratemetadata_you_aint_special, r=michaelwoerister 2021-01-15 21:13:35 +00:00
rustc_middle Rollup merge of #80635 - sexxi-goose:use-place-instead-of-symbol, r=nikomatsakis` 2021-01-17 12:24:44 +00:00
rustc_mir Rollup merge of #80635 - sexxi-goose:use-place-instead-of-symbol, r=nikomatsakis` 2021-01-17 12:24:44 +00:00
rustc_mir_build Auto merge of #80290 - RalfJung:less-intrinsic-write, r=lcnr 2021-01-16 17:28:32 +00:00
rustc_parse Rollup merge of #80944 - LingMan:map_or, r=nagisa 2021-01-15 18:26:14 +09:00
rustc_parse_format Use Option::map_or instead of .map(..).unwrap_or(..) 2021-01-14 19:23:59 +01:00
rustc_passes Auto merge of #79328 - c410-f3r:hir-if, r=matthewjasper 2021-01-14 14:41:58 +00:00
rustc_plugin_impl Store ForeignItem in a side table. 2020-11-26 21:29:27 +01:00
rustc_privacy Separate out a hir::Impl struct 2021-01-12 20:32:33 -05:00
rustc_query_system Use Option::map_or instead of .map(..).unwrap_or(..) 2021-01-14 19:23:59 +01:00
rustc_resolve Rollup merge of #80765 - petrochenkov:traitsinscope, r=matthewjasper 2021-01-17 12:24:47 +00:00
rustc_save_analysis Use Option::map_or instead of .map(..).unwrap_or(..) 2021-01-14 19:23:59 +01:00
rustc_serialize rustc_serialize: fix incorrect signed LEB128 decoding 2021-01-11 12:13:26 -08:00
rustc_session Use Option::map_or instead of .map(..).unwrap_or(..) 2021-01-14 19:23:59 +01:00
rustc_span Auto merge of #80290 - RalfJung:less-intrinsic-write, r=lcnr 2021-01-16 17:28:32 +00:00
rustc_symbol_mangling Rollup merge of #79968 - bjorn3:better_drop_glue_debuginfo, r=matthewjasper 2021-01-10 16:55:55 +09:00
rustc_target Rollup merge of #80662 - rxrbln:master, r=estebank 2021-01-13 03:20:15 +01:00
rustc_trait_selection Rollup merge of #80635 - sexxi-goose:use-place-instead-of-symbol, r=nikomatsakis` 2021-01-17 12:24:44 +00:00
rustc_traits fix: small typo error in chalk/mod.rs 2020-12-27 03:22:23 +01:00
rustc_ty_utils Auto merge of #77524 - Patryk27:fixes/66228, r=estebank 2021-01-13 20:35:58 +00:00
rustc_type_ir Fix typo in DebruijnIndex documentation 2020-12-12 16:13:06 +01:00
rustc_typeck Rollup merge of #80635 - sexxi-goose:use-place-instead-of-symbol, r=nikomatsakis` 2021-01-17 12:24:44 +00:00