From 977a19733740fa4a8d61a1bbbcf01acd18996fc8 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Mon, 26 May 2025 13:09:10 +0200 Subject: [PATCH 1/2] Rust: skip private items when extracting library files --- rust/extractor/src/translate/base.rs | 55 +++++++++++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/rust/extractor/src/translate/base.rs b/rust/extractor/src/translate/base.rs index d40dd01acd1e..223255bc9a89 100644 --- a/rust/extractor/src/translate/base.rs +++ b/rust/extractor/src/translate/base.rs @@ -16,7 +16,7 @@ use ra_ap_ide_db::RootDatabase; use ra_ap_ide_db::line_index::{LineCol, LineIndex}; use ra_ap_parser::SyntaxKind; use ra_ap_span::TextSize; -use ra_ap_syntax::ast::{Const, Fn, HasName, Param, Static}; +use ra_ap_syntax::ast::{Const, Fn, HasName, HasVisibility, Param, Static}; use ra_ap_syntax::{ AstNode, NodeOrToken, SyntaxElementChildren, SyntaxError, SyntaxNode, SyntaxToken, TextRange, ast, @@ -687,6 +687,59 @@ impl<'a> Translator<'a> { { return true; } + + if ast::AnyHasVisibility::cast(syntax.clone()) + .and_then(|x| x.visibility()) + .is_none() + { + match syntax.kind() { + SyntaxKind::ENUM + | SyntaxKind::STATIC + | SyntaxKind::STRUCT + | SyntaxKind::TRAIT + | SyntaxKind::TRAIT_ALIAS + | SyntaxKind::UNION => return true, + SyntaxKind::CONST | SyntaxKind::FN | SyntaxKind::TYPE_ALIAS => { + // check for enclosing source file + if syntax.parent().and_then(ast::SourceFile::cast).is_some() { + return true; + } + // check for enclosing module + if syntax + .parent() + .and_then(ast::ItemList::cast) + .and_then(|x| x.syntax().parent()) + .and_then(ast::Module::cast) + .is_some() + { + return true; + } + // check for enclosing extern block + if syntax + .parent() + .and_then(ast::ExternItemList::cast) + .is_some() + { + return true; + } + // check for enclosing block expr + if syntax.parent().and_then(ast::BlockExpr::cast).is_some() { + return true; + } + // check for enclosing non-trait impl + if syntax + .parent() + .and_then(ast::AssocItemList::cast) + .and_then(|x| x.syntax().parent()) + .and_then(ast::Impl::cast) + .is_some_and(|imp| imp.trait_().is_none()) + { + return true; + } + } + _ => {} + } + } } false } From 5d23d4789e6ec0b45f28994c358c7ad25c165871 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Wed, 28 May 2025 13:52:48 +0200 Subject: [PATCH 2/2] Rust: skip comments and token trees when extracting library files --- rust/extractor/src/translate/base.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/rust/extractor/src/translate/base.rs b/rust/extractor/src/translate/base.rs index 223255bc9a89..2e64ab1d7db8 100644 --- a/rust/extractor/src/translate/base.rs +++ b/rust/extractor/src/translate/base.rs @@ -272,7 +272,7 @@ impl<'a> Translator<'a> { ) { for child in children { if let NodeOrToken::Token(token) = child { - if token.kind() == SyntaxKind::COMMENT { + if token.kind() == SyntaxKind::COMMENT && self.source_kind == SourceKind::Source { let label = self.trap.emit(generated::Comment { id: TrapId::Star, parent: parent_label, @@ -655,6 +655,9 @@ impl<'a> Translator<'a> { pub(crate) fn should_be_excluded(&self, item: &impl ast::AstNode) -> bool { if self.source_kind == SourceKind::Library { let syntax = item.syntax(); + if syntax.kind() == SyntaxKind::TOKEN_TREE { + return true; + } if syntax .parent() .and_then(Fn::cast)