convert save-analysis to use `ItemCtxt` and not `ast_ty_to_ty_cache`

This commit is contained in:
Niko Matsakis 2017-05-03 12:18:04 -04:00
parent 196c98d314
commit 3039398c68
4 changed files with 14 additions and 7 deletions

1
src/Cargo.lock generated
View File

@ -723,6 +723,7 @@ dependencies = [
"rls-span 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc 0.0.0",
"rustc-serialize 0.3.23 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc_typeck 0.0.0",
"syntax 0.0.0",
"syntax_pos 0.0.0",
]

View File

@ -11,6 +11,7 @@ crate-type = ["dylib"]
[dependencies]
log = "0.3"
rustc = { path = "../librustc" }
rustc_typeck = { path = "../librustc_typeck" }
syntax = { path = "../libsyntax" }
syntax_pos = { path = "../libsyntax_pos" }
rls-data = "0.1"

View File

@ -122,7 +122,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
f(self);
self.save_ctxt.tables = old_tables;
} else {
f(self)
f(self);
}
}

View File

@ -27,6 +27,7 @@
#[macro_use] extern crate log;
#[macro_use] extern crate syntax;
extern crate rustc_serialize;
extern crate rustc_typeck;
extern crate syntax_pos;
extern crate rls_data;
@ -50,6 +51,7 @@ use rustc::hir::def_id::DefId;
use rustc::session::config::CrateType::CrateTypeExecutable;
use rustc::session::Session;
use rustc::ty::{self, TyCtxt};
use rustc_typeck::hir_ty_to_ty;
use std::env;
use std::fs::File;
@ -606,11 +608,12 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> {
Def::Local(def_id)
}
Node::NodeTy(&hir::Ty { node: hir::TyPath(ref qpath), .. }) => {
match *qpath {
hir::QPath::Resolved(_, ref path) => path.def,
hir::QPath::TypeRelative(..) => {
if let Some(ty) = self.tcx.ast_ty_to_ty_cache.borrow().get(&id) {
Node::NodeTy(ty) => {
if let hir::Ty { node: hir::TyPath(ref qpath), .. } = *ty {
match *qpath {
hir::QPath::Resolved(_, ref path) => path.def,
hir::QPath::TypeRelative(..) => {
let ty = hir_ty_to_ty(self.tcx, ty);
if let ty::TyProjection(proj) = ty.sty {
for item in self.tcx.associated_items(proj.trait_ref.def_id) {
if item.kind == ty::AssociatedKind::Type {
@ -620,9 +623,11 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> {
}
}
}
Def::Err
}
Def::Err
}
} else {
Def::Err
}
}