mirror of
https://github.com/rust-lang/rust.git
synced 2025-05-14 02:49:40 +00:00
auto merge of #16767 : SiegeLord/rust/reexported_methods, r=cmr
Previously, this caused methods of re-exported types to not be inserted into the search index. This fix may introduce some false positives, but in my testing they appear as orphaned methods and end up not being inserted into the final search index at a later stage. Fixes issue #11943
This commit is contained in:
commit
51d0d06410
@ -819,16 +819,17 @@ impl DocFolder for Cache {
|
||||
// Index this method for searching later on
|
||||
match item.name {
|
||||
Some(ref s) => {
|
||||
let parent = match item.inner {
|
||||
let (parent, is_method) = match item.inner {
|
||||
clean::TyMethodItem(..) |
|
||||
clean::StructFieldItem(..) |
|
||||
clean::VariantItem(..) => {
|
||||
(Some(*self.parent_stack.last().unwrap()),
|
||||
Some(self.stack.slice_to(self.stack.len() - 1)))
|
||||
((Some(*self.parent_stack.last().unwrap()),
|
||||
Some(self.stack.slice_to(self.stack.len() - 1))),
|
||||
false)
|
||||
}
|
||||
clean::MethodItem(..) => {
|
||||
if self.parent_stack.len() == 0 {
|
||||
(None, None)
|
||||
((None, None), false)
|
||||
} else {
|
||||
let last = self.parent_stack.last().unwrap();
|
||||
let did = *last;
|
||||
@ -844,17 +845,18 @@ impl DocFolder for Cache {
|
||||
Some(..) => Some(self.stack.as_slice()),
|
||||
None => None
|
||||
};
|
||||
(Some(*last), path)
|
||||
((Some(*last), path), true)
|
||||
}
|
||||
}
|
||||
_ => (None, Some(self.stack.as_slice()))
|
||||
_ => ((None, Some(self.stack.as_slice())), false)
|
||||
};
|
||||
let hidden_field = match item.inner {
|
||||
clean::StructFieldItem(clean::HiddenStructField) => true,
|
||||
_ => false
|
||||
};
|
||||
|
||||
match parent {
|
||||
(parent, Some(path)) if !self.privmod && !hidden_field => {
|
||||
(parent, Some(path)) if is_method || (!self.privmod && !hidden_field) => {
|
||||
self.search_index.push(IndexItem {
|
||||
ty: shortty(&item),
|
||||
name: s.to_string(),
|
||||
@ -863,7 +865,7 @@ impl DocFolder for Cache {
|
||||
parent: parent,
|
||||
});
|
||||
}
|
||||
(Some(parent), None) if !self.privmod => {
|
||||
(Some(parent), None) if is_method || (!self.privmod && !hidden_field)=> {
|
||||
if ast_util::is_local(parent) {
|
||||
// We have a parent, but we don't know where they're
|
||||
// defined yet. Wait for later to index this item.
|
||||
|
17
src/test/run-make/rustdoc-search-index/Makefile
Normal file
17
src/test/run-make/rustdoc-search-index/Makefile
Normal file
@ -0,0 +1,17 @@
|
||||
-include ../tools.mk
|
||||
|
||||
# FIXME ignore windows
|
||||
ifndef IS_WINDOWS
|
||||
|
||||
source=index.rs
|
||||
|
||||
all:
|
||||
$(HOST_RPATH_ENV) $(RUSTDOC) -w html -o $(TMPDIR)/doc $(source)
|
||||
cp $(source) $(TMPDIR)
|
||||
cp verify.sh $(TMPDIR)
|
||||
$(call RUN,verify.sh) $(TMPDIR)
|
||||
|
||||
else
|
||||
all:
|
||||
|
||||
endif
|
29
src/test/run-make/rustdoc-search-index/index.rs
Normal file
29
src/test/run-make/rustdoc-search-index/index.rs
Normal file
@ -0,0 +1,29 @@
|
||||
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
#![crate_name = "rustdoc_test"]
|
||||
|
||||
// In: Foo
|
||||
pub use private::Foo;
|
||||
|
||||
mod private {
|
||||
pub struct Foo;
|
||||
impl Foo {
|
||||
// In: test_method
|
||||
pub fn test_method() {}
|
||||
// Out: priv_method
|
||||
fn priv_method() {}
|
||||
}
|
||||
|
||||
pub trait PrivateTrait {
|
||||
// Out: priv_method
|
||||
fn trait_method() {}
|
||||
}
|
||||
}
|
33
src/test/run-make/rustdoc-search-index/verify.sh
Executable file
33
src/test/run-make/rustdoc-search-index/verify.sh
Executable file
@ -0,0 +1,33 @@
|
||||
#!/bin/sh
|
||||
|
||||
source="$1/index.rs"
|
||||
index="$1/doc/search-index.js"
|
||||
|
||||
if ! [ -e $index ]
|
||||
then
|
||||
echo "Could not find the search index (looked for $index)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ins=$(grep -o 'In: .*' $source | sed 's/In: \(.*\)/\1/g')
|
||||
outs=$(grep -o 'Out: .*' $source | sed 's/Out: \(.*\)/\1/g')
|
||||
|
||||
for p in $ins
|
||||
do
|
||||
if ! grep -q $p $index
|
||||
then
|
||||
echo "'$p' was erroneously excluded from search index."
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
for p in $outs
|
||||
do
|
||||
if grep -q $p $index
|
||||
then
|
||||
echo "'$p' was erroneously included in search index."
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
exit 0
|
Loading…
Reference in New Issue
Block a user