File tree Expand file tree Collapse file tree 3 files changed +107
-0
lines changed
src/test/ui/annotate-snippet Expand file tree Collapse file tree 3 files changed +107
-0
lines changed Original file line number Diff line number Diff line change 1+ // force-host
2+ // no-prefer-dynamic
3+
4+ #![ crate_type = "proc-macro" ]
5+ #![ feature( proc_macro_diagnostic, proc_macro_span, proc_macro_def_site) ]
6+
7+ extern crate proc_macro;
8+
9+ use proc_macro:: { TokenStream , TokenTree , Span , Diagnostic } ;
10+
11+ fn parse ( input : TokenStream ) -> Result < ( ) , Diagnostic > {
12+ let mut hi_spans = vec ! [ ] ;
13+ for tree in input {
14+ if let TokenTree :: Ident ( ref ident) = tree {
15+ if ident. to_string ( ) == "hi" {
16+ hi_spans. push ( ident. span ( ) ) ;
17+ }
18+ }
19+ }
20+
21+ if !hi_spans. is_empty ( ) {
22+ return Err ( Span :: def_site ( )
23+ . error ( "hello to you, too!" )
24+ . span_note ( hi_spans, "found these 'hi's" ) ) ;
25+ }
26+
27+ Ok ( ( ) )
28+ }
29+
30+ #[ proc_macro]
31+ pub fn hello ( input : TokenStream ) -> TokenStream {
32+ if let Err ( diag) = parse ( input) {
33+ diag. emit ( ) ;
34+ }
35+
36+ TokenStream :: new ( )
37+ }
Original file line number Diff line number Diff line change 1+ // aux-build:multispan.rs
2+ // compile-flags: --error-format human-annotate-rs
3+
4+ #![ feature( proc_macro_hygiene) ]
5+
6+ extern crate multispan;
7+
8+ use multispan:: hello;
9+
10+ fn main ( ) {
11+ // This one emits no error.
12+ hello ! ( ) ;
13+
14+ // Exactly one 'hi'.
15+ hello ! ( hi) ; //~ ERROR hello to you, too!
16+
17+ // Now two, back to back.
18+ hello ! ( hi hi) ; //~ ERROR hello to you, too!
19+
20+ // Now three, back to back.
21+ hello ! ( hi hi hi) ; //~ ERROR hello to you, too!
22+
23+ // Now several, with spacing.
24+ hello ! ( hi hey hi yo hi beep beep hi hi) ; //~ ERROR hello to you, too!
25+ hello ! ( hi there, hi how are you? hi... hi. ) ; //~ ERROR hello to you, too!
26+ hello ! ( whoah. hi di hi di ho) ; //~ ERROR hello to you, too!
27+ hello ! ( hi good hi and good bye) ; //~ ERROR hello to you, too!
28+ }
Original file line number Diff line number Diff line change 1+ error: hello to you, too!
2+ --> $DIR/multispan.rs:15:5
3+ |
4+ LL | hello!(hi);
5+ | ^^^^^^^^^^^
6+ |
7+ error: hello to you, too!
8+ --> $DIR/multispan.rs:18:5
9+ |
10+ LL | hello!(hi hi);
11+ | ^^^^^^^^^^^^^^
12+ |
13+ error: hello to you, too!
14+ --> $DIR/multispan.rs:21:5
15+ |
16+ LL | hello!(hi hi hi);
17+ | ^^^^^^^^^^^^^^^^^
18+ |
19+ error: hello to you, too!
20+ --> $DIR/multispan.rs:24:5
21+ |
22+ LL | hello!(hi hey hi yo hi beep beep hi hi);
23+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
24+ |
25+ error: hello to you, too!
26+ --> $DIR/multispan.rs:25:5
27+ |
28+ LL | hello!(hi there, hi how are you? hi... hi.);
29+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
30+ |
31+ error: hello to you, too!
32+ --> $DIR/multispan.rs:26:5
33+ |
34+ LL | hello!(whoah. hi di hi di ho);
35+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
36+ |
37+ error: hello to you, too!
38+ --> $DIR/multispan.rs:27:5
39+ |
40+ LL | hello!(hi good hi and good bye);
41+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
42+ |
You can’t perform that action at this time.
0 commit comments