Include function name in undocumented-param message (#5818)

Closes #5814.
This commit is contained in:
Charlie Marsh 2023-07-16 22:51:34 -04:00 committed by GitHub
parent 94998aedef
commit be6c744856
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 73 additions and 47 deletions

View file

@ -47,6 +47,14 @@ impl<'a> Module<'a> {
None
}
}
/// Return the name of the module.
pub fn name(&self) -> Option<&'a str> {
match self.source {
ModuleSource::Path(path) => path.last().map(Deref::deref),
ModuleSource::File(file) => file.file_stem().and_then(std::ffi::OsStr::to_str),
}
}
}
#[derive(Debug, Copy, Clone)]
@ -72,12 +80,13 @@ pub struct Member<'a> {
}
impl<'a> Member<'a> {
fn name(&self) -> &'a str {
/// Return the name of the member.
pub fn name(&self) -> Option<&'a str> {
match &self.stmt {
Stmt::FunctionDef(ast::StmtFunctionDef { name, .. }) => name,
Stmt::AsyncFunctionDef(ast::StmtAsyncFunctionDef { name, .. }) => name,
Stmt::ClassDef(ast::StmtClassDef { name, .. }) => name,
_ => unreachable!("Unexpected member kind: {:?}", self.kind),
Stmt::FunctionDef(ast::StmtFunctionDef { name, .. })
| Stmt::AsyncFunctionDef(ast::StmtAsyncFunctionDef { name, .. })
| Stmt::ClassDef(ast::StmtClassDef { name, .. }) => Some(name),
_ => None,
}
}
}
@ -100,6 +109,13 @@ impl Definition<'_> {
})
)
}
pub fn name(&self) -> Option<&str> {
match self {
Definition::Module(module) => module.name(),
Definition::Member(member) => member.name(),
}
}
}
/// The definitions within a Python program indexed by [`DefinitionId`].
@ -134,8 +150,9 @@ impl<'a> Definitions<'a> {
MemberKind::Class => {
let parent = &definitions[member.parent];
if parent.visibility.is_private()
|| exports
.map_or(false, |exports| !exports.contains(&member.name()))
|| exports.map_or(false, |exports| {
member.name().map_or(false, |name| !exports.contains(&name))
})
{
Visibility::Private
} else {
@ -163,8 +180,9 @@ impl<'a> Definitions<'a> {
MemberKind::Function => {
let parent = &definitions[member.parent];
if parent.visibility.is_private()
|| exports
.map_or(false, |exports| !exports.contains(&member.name()))
|| exports.map_or(false, |exports| {
member.name().map_or(false, |name| !exports.contains(&name))
})
{
Visibility::Private
} else {