rust/src/libsyntax_pos
bors 3fc30d884a Auto merge of #66070 - petrochenkov:regattr, r=matthewjasper
Support registering inert attributes and attribute tools using crate-level attributes

And remove `#[feature(custom_attribute)]`.
(`rustc_plugin::Registry::register_attribute` is not removed yet, I'll do it in a follow up PR.)

```rust
#![register_attr(my_attr)]
#![register_tool(my_tool)]

#[my_attr] // OK
#[my_tool::anything] // OK
fn main() {}
```

---
Some tools (`rustfmt` and `clippy`) used in tool attributes are hardcoded in the compiler.
We need some way to introduce them without hardcoding as well.

This PR introduces a way to do it with a crate level attribute.
The previous attempt to introduce them through command line (https://github.com/rust-lang/rust/pull/57921) met some resistance.

This probably needs to go through an RFC before stabilization.
However, I'd prefer to land *this* PR without an RFC to able to remove `#[feature(custom_attribute)]` and `Registry::register_attribute` while also providing a replacement.

---
`register_attr` is a direct replacement for `#![feature(custom_attribute)]` (https://github.com/rust-lang/rust/issues/29642), except it doesn't rely on implicit fallback from unresolved attributes to custom attributes (which was always hacky and is the primary reason for the removal of `custom_attribute`) and requires registering the attribute explicitly.
It's not clear whether it should go through stabilization or not.
It's quite possible that all the uses should migrate to `#![register_tool]` (https://github.com/rust-lang/rust/issues/66079) instead.

---

Details:
- The naming is `register_attr`/`register_tool` rather than some `register_attributes` (plural, no abbreviation) for consistency with already existing attributes like `cfg_attr`, or `feature`, etc.
---
Previous attempt: https://github.com/rust-lang/rust/pull/57921
cc https://github.com/rust-lang/rust/issues/44690
Tracking issues: #66079 (`register_tool`), #66080 (`register_attr`)
Closes https://github.com/rust-lang/rust/issues/29642
2019-11-10 15:53:35 +00:00
..
analyze_source_file libsyntax_pos: Unconfigure tests during normal build 2019-08-02 01:59:01 +03:00
symbol Remove gensyms 2019-10-15 21:12:05 +01:00
analyze_source_file.rs libsyntax_pos: Unconfigure tests during normal build 2019-08-02 01:59:01 +03:00
Cargo.toml remove indexed_vec re-export from rustc_data_structures 2019-09-29 16:48:31 +00:00
edition.rs syntax_pos: Remove the duplicate global edition 2019-08-15 20:41:45 +03:00
hygiene.rs caller_location: point to macro invocation sites, like file!/line!. 2019-10-30 18:54:40 +02:00
lib.rs Span cannot represent span.hi < span.lo 2019-11-01 23:40:07 +03:00
span_encoding.rs Increase Span from 4 bytes to 8 bytes. 2019-04-05 12:26:09 +11:00
symbol.rs Auto merge of #66070 - petrochenkov:regattr, r=matthewjasper 2019-11-10 15:53:35 +00:00
tests.rs Fix the start/end byte positions in the compiler JSON output 2019-10-21 19:28:29 +03:00