mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-01 11:31:15 +00:00
fix: Fix item tree lowering pub(self) to pub()
This commit is contained in:
parent
2d879e0431
commit
d54745aed3
@ -370,3 +370,15 @@ struct S<#[cfg(never)] T>;
|
|||||||
"#]],
|
"#]],
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn pub_self() {
|
||||||
|
check(
|
||||||
|
r#"
|
||||||
|
pub(self) struct S;
|
||||||
|
"#,
|
||||||
|
expect![[r#"
|
||||||
|
pub(self) struct S;
|
||||||
|
"#]],
|
||||||
|
)
|
||||||
|
}
|
||||||
|
@ -93,15 +93,11 @@ impl DefMap {
|
|||||||
if remaining.is_some() {
|
if remaining.is_some() {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
let types = result.take_types();
|
let types = result.take_types()?;
|
||||||
|
match types {
|
||||||
match (types, path.kind) {
|
ModuleDefId::ModuleId(m) => Visibility::Module(m),
|
||||||
(Some(ModuleDefId::ModuleId(m)), _) => Visibility::Module(m),
|
// error: visibility needs to refer to module
|
||||||
// resolve_path doesn't find any values for a plan pathkind of a private function
|
_ => {
|
||||||
(None, PathKind::Plain | PathKind::Crate) => {
|
|
||||||
Visibility::Module(self.module_id(original_module))
|
|
||||||
}
|
|
||||||
(_, _) => {
|
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -73,7 +73,7 @@ impl RawVisibility {
|
|||||||
RawVisibility::Module(path)
|
RawVisibility::Module(path)
|
||||||
}
|
}
|
||||||
ast::VisibilityKind::PubSelf => {
|
ast::VisibilityKind::PubSelf => {
|
||||||
let path = ModPath::from_kind(PathKind::Plain);
|
let path = ModPath::from_kind(PathKind::Super(0));
|
||||||
RawVisibility::Module(path)
|
RawVisibility::Module(path)
|
||||||
}
|
}
|
||||||
ast::VisibilityKind::Pub => RawVisibility::Public,
|
ast::VisibilityKind::Pub => RawVisibility::Public,
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
//! Completion of names from the current scope in expression position.
|
//! Completion of names from the current scope in expression position.
|
||||||
|
|
||||||
use hir::{HasVisibility, Module, ScopeDef};
|
use hir::ScopeDef;
|
||||||
use syntax::ast;
|
use syntax::ast;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
@ -9,23 +9,6 @@ use crate::{
|
|||||||
CompletionContext, Completions,
|
CompletionContext, Completions,
|
||||||
};
|
};
|
||||||
|
|
||||||
fn scope_def_applicable(
|
|
||||||
def: ScopeDef,
|
|
||||||
ctx: &CompletionContext<'_>,
|
|
||||||
module: Option<&Module>,
|
|
||||||
) -> bool {
|
|
||||||
match (def, module) {
|
|
||||||
(ScopeDef::GenericParam(hir::GenericParam::LifetimeParam(_)) | ScopeDef::Label(_), _) => {
|
|
||||||
false
|
|
||||||
}
|
|
||||||
(ScopeDef::ModuleDef(hir::ModuleDef::Macro(mac)), _) => mac.is_fn_like(ctx.db),
|
|
||||||
(ScopeDef::ModuleDef(hir::ModuleDef::Function(f)), Some(m)) => {
|
|
||||||
f.is_visible_from(ctx.db, *m)
|
|
||||||
}
|
|
||||||
_ => true,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(crate) fn complete_expr_path(
|
pub(crate) fn complete_expr_path(
|
||||||
acc: &mut Completions,
|
acc: &mut Completions,
|
||||||
ctx: &CompletionContext<'_>,
|
ctx: &CompletionContext<'_>,
|
||||||
@ -54,6 +37,12 @@ pub(crate) fn complete_expr_path(
|
|||||||
let wants_mut_token =
|
let wants_mut_token =
|
||||||
ref_expr_parent.as_ref().map(|it| it.mut_token().is_none()).unwrap_or(false);
|
ref_expr_parent.as_ref().map(|it| it.mut_token().is_none()).unwrap_or(false);
|
||||||
|
|
||||||
|
let scope_def_applicable = |def| match def {
|
||||||
|
ScopeDef::GenericParam(hir::GenericParam::LifetimeParam(_)) | ScopeDef::Label(_) => false,
|
||||||
|
ScopeDef::ModuleDef(hir::ModuleDef::Macro(mac)) => mac.is_fn_like(ctx.db),
|
||||||
|
_ => true,
|
||||||
|
};
|
||||||
|
|
||||||
let add_assoc_item = |acc: &mut Completions, item| match item {
|
let add_assoc_item = |acc: &mut Completions, item| match item {
|
||||||
hir::AssocItem::Function(func) => acc.add_function(ctx, path_ctx, func, None),
|
hir::AssocItem::Function(func) => acc.add_function(ctx, path_ctx, func, None),
|
||||||
hir::AssocItem::Const(ct) => acc.add_const(ctx, ct),
|
hir::AssocItem::Const(ct) => acc.add_const(ctx, ct),
|
||||||
@ -98,7 +87,7 @@ pub(crate) fn complete_expr_path(
|
|||||||
hir::PathResolution::Def(hir::ModuleDef::Module(module)) => {
|
hir::PathResolution::Def(hir::ModuleDef::Module(module)) => {
|
||||||
let module_scope = module.scope(ctx.db, Some(ctx.module));
|
let module_scope = module.scope(ctx.db, Some(ctx.module));
|
||||||
for (name, def) in module_scope {
|
for (name, def) in module_scope {
|
||||||
if scope_def_applicable(def, ctx, Some(module)) {
|
if scope_def_applicable(def) {
|
||||||
acc.add_path_resolution(
|
acc.add_path_resolution(
|
||||||
ctx,
|
ctx,
|
||||||
path_ctx,
|
path_ctx,
|
||||||
@ -244,7 +233,7 @@ pub(crate) fn complete_expr_path(
|
|||||||
[..] => acc.add_path_resolution(ctx, path_ctx, name, def, doc_aliases),
|
[..] => acc.add_path_resolution(ctx, path_ctx, name, def, doc_aliases),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ if scope_def_applicable(def, ctx, None) => {
|
_ if scope_def_applicable(def) => {
|
||||||
acc.add_path_resolution(ctx, path_ctx, name, def, doc_aliases)
|
acc.add_path_resolution(ctx, path_ctx, name, def, doc_aliases)
|
||||||
}
|
}
|
||||||
_ => (),
|
_ => (),
|
||||||
|
@ -1292,7 +1292,7 @@ fn completes_only_public() {
|
|||||||
r#"
|
r#"
|
||||||
//- /e.rs
|
//- /e.rs
|
||||||
pub(self) fn i_should_be_hidden() {}
|
pub(self) fn i_should_be_hidden() {}
|
||||||
pub(in crate::krate) fn i_should_also_be_hidden() {}
|
pub(in crate::e) fn i_should_also_be_hidden() {}
|
||||||
pub fn i_am_public () {}
|
pub fn i_am_public () {}
|
||||||
|
|
||||||
//- /lib.rs crate:krate
|
//- /lib.rs crate:krate
|
||||||
|
Loading…
x
Reference in New Issue
Block a user