Skip to content

Commit

Permalink
fix rust-lang#44953 - The “use of unstable library feature 'rustc_pri…
Browse files Browse the repository at this point in the history
…vate'” error is very repetitive
  • Loading branch information
Virgil Palanciuc committed Oct 25, 2017
1 parent f9d2416 commit 4e16e30
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 5 deletions.
30 changes: 27 additions & 3 deletions src/librustc/middle/stability.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ use hir::def_id::{CrateNum, CRATE_DEF_INDEX, DefId, LOCAL_CRATE};
use ty::{self, TyCtxt};
use middle::privacy::AccessLevels;
use syntax::symbol::Symbol;
use syntax_pos::{Span, DUMMY_SP};
use syntax_pos::{Span, MultiSpan, DUMMY_SP};
use syntax::ast;
use syntax::ast::{NodeId, Attribute};
use syntax::feature_gate::{GateIssue, emit_feature_err, find_lang_feature_accepted_version};
Expand Down Expand Up @@ -597,8 +597,32 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
feature.as_str(), &r),
None => format!("use of unstable library feature '{}'", &feature)
};
emit_feature_err(&self.sess.parse_sess, &feature.as_str(), span,
GateIssue::Library(Some(issue)), &msg);

let msp: MultiSpan = span.into();
let cm = &self.sess.parse_sess.codemap();
let real_file_location =
msp.primary_span().and_then(|sp:Span|
if sp != DUMMY_SP {
let fname = cm.lookup_char_pos(sp.lo()).file.as_ref().name.clone();
if fname.starts_with("<") && fname.ends_with(" macros>") {
None
} else {
Some(fname)
}
} else {
None
}
);

if let Some(_) = real_file_location {
let tuple = (None, Some(span), msg.clone());
let fresh = self.sess.one_time_diagnostics.borrow_mut().insert(tuple);
if fresh {
emit_feature_err(&self.sess.parse_sess, &feature.as_str(), span,
GateIssue::Library(Some(issue)), &msg);
}
}

}
Some(_) => {
// Stable APIs are always ok to call and deprecated APIs are
Expand Down
4 changes: 2 additions & 2 deletions src/librustc/session/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ pub struct Session {
/// Set of (LintId, Option<Span>, message) tuples tracking lint
/// (sub)diagnostics that have been set once, but should not be set again,
/// in order to avoid redundantly verbose output (Issue #24690).
pub one_time_diagnostics: RefCell<FxHashSet<(lint::LintId, Option<Span>, String)>>,
pub one_time_diagnostics: RefCell<FxHashSet<(Option<lint::LintId>, Option<Span>, String)>>,
pub plugin_llvm_passes: RefCell<Vec<String>>,
pub plugin_attributes: RefCell<Vec<(String, AttributeType)>>,
pub crate_types: RefCell<Vec<config::CrateType>>,
Expand Down Expand Up @@ -361,7 +361,7 @@ impl Session {
},
_ => {
let lint_id = lint::LintId::of(lint);
let id_span_message = (lint_id, span, message.to_owned());
let id_span_message = (Some(lint_id), span, message.to_owned());
let fresh = self.one_time_diagnostics.borrow_mut().insert(id_span_message);
if fresh {
do_method()
Expand Down

0 comments on commit 4e16e30

Please sign in to comment.