Move remove_docs_from_attrs into lowering step
This commit is contained in:
parent
203d22762d
commit
db35604792
|
@ -47,8 +47,7 @@ use syntax::ptr::P;
|
||||||
use syntax::codemap::Spanned;
|
use syntax::codemap::Spanned;
|
||||||
use syntax_pos::*;
|
use syntax_pos::*;
|
||||||
|
|
||||||
use super::{escape, generated_code, SaveContext, PathCollector, docs_for_attrs,
|
use super::{escape, generated_code, SaveContext, PathCollector, docs_for_attrs};
|
||||||
remove_docs_from_attrs};
|
|
||||||
use super::data::*;
|
use super::data::*;
|
||||||
use super::dump::Dump;
|
use super::dump::Dump;
|
||||||
use super::external_data::{Lower, make_def_id};
|
use super::external_data::{Lower, make_def_id};
|
||||||
|
@ -450,7 +449,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
|
||||||
visibility: vis,
|
visibility: vis,
|
||||||
docs: docs_for_attrs(attrs),
|
docs: docs_for_attrs(attrs),
|
||||||
sig: method_data.sig,
|
sig: method_data.sig,
|
||||||
attributes: remove_docs_from_attrs(attrs),
|
attributes: attrs.to_vec(),
|
||||||
}.lower(self.tcx));
|
}.lower(self.tcx));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -596,7 +595,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
|
||||||
visibility: vis,
|
visibility: vis,
|
||||||
docs: docs_for_attrs(attrs),
|
docs: docs_for_attrs(attrs),
|
||||||
sig: None,
|
sig: None,
|
||||||
attributes: remove_docs_from_attrs(attrs),
|
attributes: attrs.to_vec(),
|
||||||
}.lower(self.tcx));
|
}.lower(self.tcx));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -641,7 +640,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
|
||||||
visibility: From::from(&item.vis),
|
visibility: From::from(&item.vis),
|
||||||
docs: docs_for_attrs(&item.attrs),
|
docs: docs_for_attrs(&item.attrs),
|
||||||
sig: self.save_ctxt.sig_base(item),
|
sig: self.save_ctxt.sig_base(item),
|
||||||
attributes: remove_docs_from_attrs(&item.attrs),
|
attributes: item.attrs.clone(),
|
||||||
}.lower(self.tcx));
|
}.lower(self.tcx));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -707,7 +706,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
|
||||||
parent: Some(make_def_id(item.id, &self.tcx.hir)),
|
parent: Some(make_def_id(item.id, &self.tcx.hir)),
|
||||||
docs: docs_for_attrs(&variant.node.attrs),
|
docs: docs_for_attrs(&variant.node.attrs),
|
||||||
sig: sig,
|
sig: sig,
|
||||||
attributes: remove_docs_from_attrs(&variant.node.attrs),
|
attributes: variant.node.attrs.clone(),
|
||||||
}.lower(self.tcx));
|
}.lower(self.tcx));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -734,7 +733,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
|
||||||
parent: Some(make_def_id(item.id, &self.tcx.hir)),
|
parent: Some(make_def_id(item.id, &self.tcx.hir)),
|
||||||
docs: docs_for_attrs(&variant.node.attrs),
|
docs: docs_for_attrs(&variant.node.attrs),
|
||||||
sig: sig,
|
sig: sig,
|
||||||
attributes: remove_docs_from_attrs(&variant.node.attrs),
|
attributes: variant.node.attrs.clone(),
|
||||||
}.lower(self.tcx));
|
}.lower(self.tcx));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -806,7 +805,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> {
|
||||||
visibility: From::from(&item.vis),
|
visibility: From::from(&item.vis),
|
||||||
docs: docs_for_attrs(&item.attrs),
|
docs: docs_for_attrs(&item.attrs),
|
||||||
sig: self.save_ctxt.sig_base(item),
|
sig: self.save_ctxt.sig_base(item),
|
||||||
attributes: remove_docs_from_attrs(&item.attrs),
|
attributes: item.attrs.clone(),
|
||||||
}.lower(self.tcx));
|
}.lower(self.tcx));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1315,7 +1314,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump +'ll> Visitor<'l> for DumpVisitor<'l, 'tcx, 'll,
|
||||||
parent: None,
|
parent: None,
|
||||||
docs: docs_for_attrs(&item.attrs),
|
docs: docs_for_attrs(&item.attrs),
|
||||||
sig: Some(self.save_ctxt.sig_base(item)),
|
sig: Some(self.save_ctxt.sig_base(item)),
|
||||||
attributes: remove_docs_from_attrs(&item.attrs),
|
attributes: item.attrs.clone(),
|
||||||
}.lower(self.tcx));
|
}.lower(self.tcx));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@ use rustc::ty::TyCtxt;
|
||||||
use syntax::ast::{self, NodeId};
|
use syntax::ast::{self, NodeId};
|
||||||
use syntax::codemap::CodeMap;
|
use syntax::codemap::CodeMap;
|
||||||
use syntax::print::pprust;
|
use syntax::print::pprust;
|
||||||
|
use syntax::symbol::Symbol;
|
||||||
use syntax_pos::Span;
|
use syntax_pos::Span;
|
||||||
|
|
||||||
use data::{self, Visibility, SigElement};
|
use data::{self, Visibility, SigElement};
|
||||||
|
@ -72,28 +73,29 @@ pub struct Attribute {
|
||||||
span: SpanData,
|
span: SpanData,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Lower for ast::Attribute {
|
|
||||||
type Target = Attribute;
|
|
||||||
|
|
||||||
fn lower(mut self, tcx: TyCtxt) -> Attribute {
|
|
||||||
// strip #[] and #![] from the original attributes
|
|
||||||
self.style = ast::AttrStyle::Outer;
|
|
||||||
let value = pprust::attribute_to_string(&self);
|
|
||||||
// #[] are all ASCII which makes this slice save
|
|
||||||
let value = value[2..value.len()-1].to_string();
|
|
||||||
|
|
||||||
Attribute {
|
|
||||||
value: value,
|
|
||||||
span: SpanData::from_span(self.span, tcx.sess.codemap()),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Lower for Vec<ast::Attribute> {
|
impl Lower for Vec<ast::Attribute> {
|
||||||
type Target = Vec<Attribute>;
|
type Target = Vec<Attribute>;
|
||||||
|
|
||||||
fn lower(self, tcx: TyCtxt) -> Vec<Attribute> {
|
fn lower(self, tcx: TyCtxt) -> Vec<Attribute> {
|
||||||
self.into_iter().map(|x| x.lower(tcx)).collect()
|
let doc = Symbol::intern("doc");
|
||||||
|
self.into_iter()
|
||||||
|
// Only retain real attributes. Doc comments are lowered separately.
|
||||||
|
.filter(|attr| attr.name() != doc)
|
||||||
|
.map(|mut attr| {
|
||||||
|
// Remove the surrounding '#[..]' or '#![..]' of the pretty printed
|
||||||
|
// attribute. First normalize all inner attribute (#![..]) to outer
|
||||||
|
// ones (#[..]), then remove the two leading and the one trailing character.
|
||||||
|
attr.style = ast::AttrStyle::Outer;
|
||||||
|
let value = pprust::attribute_to_string(&attr);
|
||||||
|
// This str slicing works correctly, because the leading and trailing characters
|
||||||
|
// are in the ASCII range and thus exactly one byte each.
|
||||||
|
let value = value[2..value.len()-1].to_string();
|
||||||
|
|
||||||
|
Attribute {
|
||||||
|
value: value,
|
||||||
|
span: SpanData::from_span(attr.span, tcx.sess.codemap()),
|
||||||
|
}
|
||||||
|
}).collect()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -136,7 +136,7 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> {
|
||||||
parent: None,
|
parent: None,
|
||||||
docs: docs_for_attrs(&item.attrs),
|
docs: docs_for_attrs(&item.attrs),
|
||||||
sig: self.sig_base(item),
|
sig: self.sig_base(item),
|
||||||
attributes: remove_docs_from_attrs(&item.attrs),
|
attributes: item.attrs.clone(),
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
ast::ItemKind::Static(ref typ, mt, ref expr) => {
|
ast::ItemKind::Static(ref typ, mt, ref expr) => {
|
||||||
|
@ -165,7 +165,7 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> {
|
||||||
visibility: From::from(&item.vis),
|
visibility: From::from(&item.vis),
|
||||||
docs: docs_for_attrs(&item.attrs),
|
docs: docs_for_attrs(&item.attrs),
|
||||||
sig: Some(self.sig_base(item)),
|
sig: Some(self.sig_base(item)),
|
||||||
attributes: remove_docs_from_attrs(&item.attrs),
|
attributes: item.attrs.clone(),
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
ast::ItemKind::Const(ref typ, ref expr) => {
|
ast::ItemKind::Const(ref typ, ref expr) => {
|
||||||
|
@ -185,7 +185,7 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> {
|
||||||
visibility: From::from(&item.vis),
|
visibility: From::from(&item.vis),
|
||||||
docs: docs_for_attrs(&item.attrs),
|
docs: docs_for_attrs(&item.attrs),
|
||||||
sig: Some(self.sig_base(item)),
|
sig: Some(self.sig_base(item)),
|
||||||
attributes: remove_docs_from_attrs(&item.attrs),
|
attributes: item.attrs.clone(),
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
ast::ItemKind::Mod(ref m) => {
|
ast::ItemKind::Mod(ref m) => {
|
||||||
|
@ -208,7 +208,7 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> {
|
||||||
visibility: From::from(&item.vis),
|
visibility: From::from(&item.vis),
|
||||||
docs: docs_for_attrs(&item.attrs),
|
docs: docs_for_attrs(&item.attrs),
|
||||||
sig: self.sig_base(item),
|
sig: self.sig_base(item),
|
||||||
attributes: remove_docs_from_attrs(&item.attrs),
|
attributes: item.attrs.clone(),
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
ast::ItemKind::Enum(ref def, _) => {
|
ast::ItemKind::Enum(ref def, _) => {
|
||||||
|
@ -232,7 +232,7 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> {
|
||||||
visibility: From::from(&item.vis),
|
visibility: From::from(&item.vis),
|
||||||
docs: docs_for_attrs(&item.attrs),
|
docs: docs_for_attrs(&item.attrs),
|
||||||
sig: self.sig_base(item),
|
sig: self.sig_base(item),
|
||||||
attributes: remove_docs_from_attrs(&item.attrs),
|
attributes: item.attrs.clone(),
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
ast::ItemKind::Impl(.., ref trait_ref, ref typ, _) => {
|
ast::ItemKind::Impl(.., ref trait_ref, ref typ, _) => {
|
||||||
|
@ -320,7 +320,7 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> {
|
||||||
visibility: From::from(&field.vis),
|
visibility: From::from(&field.vis),
|
||||||
docs: docs_for_attrs(&field.attrs),
|
docs: docs_for_attrs(&field.attrs),
|
||||||
sig: Some(sig),
|
sig: Some(sig),
|
||||||
attributes: remove_docs_from_attrs(&field.attrs),
|
attributes: field.attrs.clone(),
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
|
@ -356,7 +356,7 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> {
|
||||||
(result, trait_id, decl_id,
|
(result, trait_id, decl_id,
|
||||||
From::from(&item.vis),
|
From::from(&item.vis),
|
||||||
docs_for_attrs(&item.attrs),
|
docs_for_attrs(&item.attrs),
|
||||||
remove_docs_from_attrs(&item.attrs))
|
item.attrs.to_vec())
|
||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
span_bug!(span,
|
span_bug!(span,
|
||||||
|
@ -382,7 +382,7 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> {
|
||||||
Some(def_id), None,
|
Some(def_id), None,
|
||||||
From::from(&item.vis),
|
From::from(&item.vis),
|
||||||
docs_for_attrs(&item.attrs),
|
docs_for_attrs(&item.attrs),
|
||||||
remove_docs_from_attrs(&item.attrs))
|
item.attrs.to_vec())
|
||||||
}
|
}
|
||||||
r => {
|
r => {
|
||||||
span_bug!(span,
|
span_bug!(span,
|
||||||
|
@ -845,12 +845,6 @@ fn docs_for_attrs(attrs: &[Attribute]) -> String {
|
||||||
result
|
result
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Remove all attributes which are docs
|
|
||||||
fn remove_docs_from_attrs(attrs: &[Attribute]) -> Vec<Attribute> {
|
|
||||||
let doc = Symbol::intern("doc");
|
|
||||||
attrs.iter().cloned().filter(|attr| attr.name() != doc).collect()
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Clone, Copy, Debug, RustcEncodable)]
|
#[derive(Clone, Copy, Debug, RustcEncodable)]
|
||||||
pub enum Format {
|
pub enum Format {
|
||||||
Csv,
|
Csv,
|
||||||
|
|
Loading…
Reference in New Issue