introduce completion presentation
This module should remove completion rendering boilerplate from the "brains" of completion engine.
This commit is contained in:
parent
67528c4b39
commit
d0a261468e
5 changed files with 42 additions and 33 deletions
|
@ -55,7 +55,7 @@ pub use self::{
|
|||
ids::{HirFileId, MacroCallId, MacroCallLoc, HirInterner},
|
||||
macros::{MacroDef, MacroInput, MacroExpansion},
|
||||
nameres::{ItemMap, PerNs, Namespace},
|
||||
ty::Ty,
|
||||
ty::{Ty, Substs},
|
||||
impl_block::{ImplBlock, ImplItem},
|
||||
docs::{Docs, Documentation},
|
||||
adt::AdtDef,
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
mod completion_item;
|
||||
mod completion_context;
|
||||
mod presentation;
|
||||
|
||||
mod complete_dot;
|
||||
mod complete_struct_literal;
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
use hir::{Ty, AdtDef, Docs};
|
||||
use hir::{Ty, AdtDef};
|
||||
|
||||
use crate::completion::{CompletionContext, Completions, CompletionItem, CompletionItemKind};
|
||||
use crate::completion::completion_item::CompletionKind;
|
||||
use crate::completion::{CompletionContext, Completions, CompletionItem, CompletionItemKind, CompletionKind};
|
||||
|
||||
/// Complete dot accesses, i.e. fields or methods (currently only fields).
|
||||
pub(super) fn complete_dot(acc: &mut Completions, ctx: &CompletionContext) {
|
||||
|
@ -29,15 +28,7 @@ fn complete_fields(acc: &mut Completions, ctx: &CompletionContext, receiver: Ty)
|
|||
match def_id {
|
||||
AdtDef::Struct(s) => {
|
||||
for field in s.fields(ctx.db) {
|
||||
CompletionItem::new(
|
||||
CompletionKind::Reference,
|
||||
ctx.source_range(),
|
||||
field.name(ctx.db).to_string(),
|
||||
)
|
||||
.kind(CompletionItemKind::Field)
|
||||
.detail(field.ty(ctx.db).subst(substs).to_string())
|
||||
.set_documentation(field.docs(ctx.db))
|
||||
.add_to(acc);
|
||||
acc.add_field(CompletionKind::Reference, ctx, field, substs);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -47,14 +38,7 @@ fn complete_fields(acc: &mut Completions, ctx: &CompletionContext, receiver: Ty)
|
|||
}
|
||||
Ty::Tuple(fields) => {
|
||||
for (i, ty) in fields.iter().enumerate() {
|
||||
CompletionItem::new(
|
||||
CompletionKind::Reference,
|
||||
ctx.source_range(),
|
||||
i.to_string(),
|
||||
)
|
||||
.kind(CompletionItemKind::Field)
|
||||
.detail(ty.to_string())
|
||||
.add_to(acc);
|
||||
acc.add_pos_field(CompletionKind::Reference, ctx, i, ty);
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
use hir::{Ty, AdtDef, Docs};
|
||||
use hir::{Ty, AdtDef};
|
||||
|
||||
use crate::completion::{CompletionContext, Completions, CompletionItem, CompletionItemKind};
|
||||
use crate::completion::completion_item::CompletionKind;
|
||||
use crate::completion::{CompletionContext, Completions, CompletionKind};
|
||||
|
||||
/// Complete fields in fields literals.
|
||||
pub(super) fn complete_struct_literal(acc: &mut Completions, ctx: &CompletionContext) {
|
||||
|
@ -23,15 +22,7 @@ pub(super) fn complete_struct_literal(acc: &mut Completions, ctx: &CompletionCon
|
|||
match adt {
|
||||
AdtDef::Struct(s) => {
|
||||
for field in s.fields(ctx.db) {
|
||||
CompletionItem::new(
|
||||
CompletionKind::Reference,
|
||||
ctx.source_range(),
|
||||
field.name(ctx.db).to_string(),
|
||||
)
|
||||
.kind(CompletionItemKind::Field)
|
||||
.detail(field.ty(ctx.db).subst(substs).to_string())
|
||||
.set_documentation(field.docs(ctx.db))
|
||||
.add_to(acc);
|
||||
acc.add_field(CompletionKind::Reference, ctx, field, substs);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
33
crates/ra_ide_api/src/completion/presentation.rs
Normal file
33
crates/ra_ide_api/src/completion/presentation.rs
Normal file
|
@ -0,0 +1,33 @@
|
|||
//! This modules takes care of rendering various defenitions as completion items.
|
||||
use hir::Docs;
|
||||
|
||||
use crate::completion::{Completions, CompletionKind, CompletionItemKind, CompletionContext, CompletionItem};
|
||||
|
||||
impl Completions {
|
||||
pub(crate) fn add_field(
|
||||
&mut self,
|
||||
kind: CompletionKind,
|
||||
ctx: &CompletionContext,
|
||||
field: hir::StructField,
|
||||
substs: &hir::Substs,
|
||||
) {
|
||||
CompletionItem::new(kind, ctx.source_range(), field.name(ctx.db).to_string())
|
||||
.kind(CompletionItemKind::Field)
|
||||
.detail(field.ty(ctx.db).subst(substs).to_string())
|
||||
.set_documentation(field.docs(ctx.db))
|
||||
.add_to(self);
|
||||
}
|
||||
|
||||
pub(crate) fn add_pos_field(
|
||||
&mut self,
|
||||
kind: CompletionKind,
|
||||
ctx: &CompletionContext,
|
||||
field: usize,
|
||||
ty: &hir::Ty,
|
||||
) {
|
||||
CompletionItem::new(kind, ctx.source_range(), field.to_string())
|
||||
.kind(CompletionItemKind::Field)
|
||||
.detail(ty.to_string())
|
||||
.add_to(self);
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue