Skip to content

Commit f56c61f

Browse files
committed
Add suggestion to lint
1 parent 37d3bea commit f56c61f

File tree

2 files changed

+25
-4
lines changed

2 files changed

+25
-4
lines changed

src/librustc/lint/builtin.rs

+19-1
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,8 @@ impl LintPass for HardwiredLints {
332332
#[derive(PartialEq, RustcEncodable, RustcDecodable, Debug)]
333333
pub enum BuiltinLintDiagnostics {
334334
Normal,
335-
BareTraitObject(Span, /* is_global */ bool)
335+
BareTraitObject(Span, /* is_global */ bool),
336+
AbsPathWithModule(Span),
336337
}
337338

338339
impl BuiltinLintDiagnostics {
@@ -347,6 +348,23 @@ impl BuiltinLintDiagnostics {
347348
};
348349
db.span_suggestion(span, "use `dyn`", sugg);
349350
}
351+
BuiltinLintDiagnostics::AbsPathWithModule(span) => {
352+
let sugg = match sess.codemap().span_to_snippet(span) {
353+
Ok(ref s) => {
354+
// FIXME(Manishearth) ideally the emitting code
355+
// can tell us whether or not this is global
356+
let opt_colon = if s.trim_left().starts_with("::") {
357+
""
358+
} else {
359+
"::"
360+
};
361+
362+
format!("crate{}{}", opt_colon, s)
363+
}
364+
Err(_) => format!("crate::<path>")
365+
};
366+
db.span_suggestion(span, "use `crate`", sugg);
367+
}
350368
}
351369
}
352370
}

src/librustc_resolve/lib.rs

+6-3
Original file line numberDiff line numberDiff line change
@@ -3344,11 +3344,14 @@ impl<'a> Resolver<'a> {
33443344
}
33453345

33463346
if !is_crate {
3347-
self.session.buffer_lint(
3347+
let diag = lint::builtin::BuiltinLintDiagnostics
3348+
::AbsPathWithModule(path_span);
3349+
self.session.buffer_lint_with_diagnostic(
33483350
lint::builtin::ABSOLUTE_PATH_STARTING_WITH_MODULE,
33493351
id, path_span,
3350-
"Fully-qualified paths must start with `self`, `super`,
3351-
`crate`, or an external crate name in the 2018 edition");
3352+
"Absolute paths must start with `self`, `super`, \
3353+
`crate`, or an external crate name in the 2018 edition",
3354+
diag);
33523355
}
33533356
}
33543357
}

0 commit comments

Comments
 (0)