Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use std::iter;

use either::Either;
use hir::{AsName, EnumVariant, Module, ModuleDef, Name};
use hir::{AsName, Module, ModuleDef, Name, Variant};
use ide_db::helpers::{
insert_use::{insert_use, ImportScope},
mod_path_to_ast,
Expand Down Expand Up @@ -53,7 +53,7 @@ pub(crate) fn extract_struct_from_enum_variant(
let variant_hir_name = variant_hir.name(ctx.db());
let enum_module_def = ModuleDef::from(enum_hir);
let usages =
Definition::ModuleDef(ModuleDef::EnumVariant(variant_hir)).usages(&ctx.sema).all();
Definition::ModuleDef(ModuleDef::Variant(variant_hir)).usages(&ctx.sema).all();

let mut visited_modules_set = FxHashSet::default();
let current_module = enum_hir.module(ctx.db());
Expand Down Expand Up @@ -109,7 +109,7 @@ fn extract_field_list_if_applicable(
}
}

fn existing_definition(db: &RootDatabase, variant_name: &ast::Name, variant: &EnumVariant) -> bool {
fn existing_definition(db: &RootDatabase, variant_name: &ast::Name, variant: &Variant) -> bool {
variant
.parent_enum(db)
.module(db)
Expand All @@ -119,7 +119,7 @@ fn existing_definition(db: &RootDatabase, variant_name: &ast::Name, variant: &En
// only check type-namespace
hir::ScopeDef::ModuleDef(def) => matches!(def,
ModuleDef::Module(_) | ModuleDef::Adt(_) |
ModuleDef::EnumVariant(_) | ModuleDef::Trait(_) |
ModuleDef::Variant(_) | ModuleDef::Trait(_) |
ModuleDef::TypeAlias(_) | ModuleDef::BuiltinType(_)
),
_ => false,
Expand Down
2 changes: 1 addition & 1 deletion crates/assists/src/handlers/fill_match_arms.rs
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ fn resolve_tuple_of_enum_def(
.collect()
}

fn build_pat(db: &RootDatabase, module: hir::Module, var: hir::EnumVariant) -> Option<ast::Pat> {
fn build_pat(db: &RootDatabase, module: hir::Module, var: hir::Variant) -> Option<ast::Pat> {
let path = mod_path_to_ast(&module.find_use_path(db, ModuleDef::from(var))?);

// FIXME: use HIR for this; it doesn't currently expose struct vs. tuple vs. unit variants though
Expand Down
2 changes: 1 addition & 1 deletion crates/assists/src/handlers/fix_visibility.rs
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ fn target_data_for_def(
(vis_offset(syntax), in_file_source.value.visibility(), syntax.text_range(), file_id)
}
// Enum variants can't be private, we can't modify builtin types
hir::ModuleDef::EnumVariant(_) | hir::ModuleDef::BuiltinType(_) => return None,
hir::ModuleDef::Variant(_) | hir::ModuleDef::BuiltinType(_) => return None,
};

Some((offset, current_visibility, target, target_file, target_name))
Expand Down
10 changes: 5 additions & 5 deletions crates/completion/src/completions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ use hir::{ModPath, ScopeDef, Type};
use crate::{
item::Builder,
render::{
const_::render_const, enum_variant::render_enum_variant, function::render_fn,
const_::render_const, enum_variant::render_variant, function::render_fn,
macro_::render_macro, render_field, render_resolution, render_tuple_field,
type_alias::render_type_alias, RenderContext,
},
Expand Down Expand Up @@ -120,20 +120,20 @@ impl Completions {
pub(crate) fn add_qualified_enum_variant(
&mut self,
ctx: &CompletionContext,
variant: hir::EnumVariant,
variant: hir::Variant,
path: ModPath,
) {
let item = render_enum_variant(RenderContext::new(ctx), None, None, variant, Some(path));
let item = render_variant(RenderContext::new(ctx), None, None, variant, Some(path));
self.add(item);
}

pub(crate) fn add_enum_variant(
&mut self,
ctx: &CompletionContext,
variant: hir::EnumVariant,
variant: hir::Variant,
local_name: Option<String>,
) {
let item = render_enum_variant(RenderContext::new(ctx), None, local_name, variant, None);
let item = render_variant(RenderContext::new(ctx), None, local_name, variant, None);
self.add(item);
}
}
2 changes: 1 addition & 1 deletion crates/completion/src/completions/pattern.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ pub(crate) fn complete_pattern(acc: &mut Completions, ctx: &CompletionContext) {
def,
hir::ModuleDef::Adt(hir::Adt::Enum(..))
| hir::ModuleDef::Adt(hir::Adt::Struct(..))
| hir::ModuleDef::EnumVariant(..)
| hir::ModuleDef::Variant(..)
| hir::ModuleDef::Const(..)
| hir::ModuleDef::Module(..)
)
Expand Down
9 changes: 4 additions & 5 deletions crates/completion/src/render.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ use crate::{
CompletionKind, CompletionScore,
};

use crate::render::{enum_variant::render_enum_variant, function::render_fn, macro_::render_macro};
use crate::render::{enum_variant::render_variant, function::render_fn, macro_::render_macro};

pub(crate) fn render_field<'a>(
ctx: RenderContext<'a>,
Expand Down Expand Up @@ -159,9 +159,8 @@ impl<'a> Render<'a> {
let item = render_fn(self.ctx, import_to_add, Some(local_name), *func);
return Some(item);
}
ScopeDef::ModuleDef(EnumVariant(var)) => {
let item =
render_enum_variant(self.ctx, import_to_add, Some(local_name), *var, None);
ScopeDef::ModuleDef(Variant(var)) => {
let item = render_variant(self.ctx, import_to_add, Some(local_name), *var, None);
return Some(item);
}
ScopeDef::MacroDef(mac) => {
Expand Down Expand Up @@ -257,7 +256,7 @@ impl<'a> Render<'a> {
match resolution {
ScopeDef::ModuleDef(Module(it)) => it.docs(self.ctx.db()),
ScopeDef::ModuleDef(Adt(it)) => it.docs(self.ctx.db()),
ScopeDef::ModuleDef(EnumVariant(it)) => it.docs(self.ctx.db()),
ScopeDef::ModuleDef(Variant(it)) => it.docs(self.ctx.db()),
ScopeDef::ModuleDef(Const(it)) => it.docs(self.ctx.db()),
ScopeDef::ModuleDef(Static(it)) => it.docs(self.ctx.db()),
ScopeDef::ModuleDef(Trait(it)) => it.docs(self.ctx.db()),
Expand Down
26 changes: 9 additions & 17 deletions crates/completion/src/render/enum_variant.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,35 +9,35 @@ use crate::{
render::{builder_ext::Params, RenderContext},
};

pub(crate) fn render_enum_variant<'a>(
pub(crate) fn render_variant<'a>(
ctx: RenderContext<'a>,
import_to_add: Option<ImportEdit>,
local_name: Option<String>,
variant: hir::EnumVariant,
variant: hir::Variant,
path: Option<ModPath>,
) -> CompletionItem {
let _p = profile::span("render_enum_variant");
EnumVariantRender::new(ctx, local_name, variant, path).render(import_to_add)
EnumRender::new(ctx, local_name, variant, path).render(import_to_add)
}

#[derive(Debug)]
struct EnumVariantRender<'a> {
struct EnumRender<'a> {
ctx: RenderContext<'a>,
name: String,
variant: hir::EnumVariant,
variant: hir::Variant,
path: Option<ModPath>,
qualified_name: String,
short_qualified_name: String,
variant_kind: StructKind,
}

impl<'a> EnumVariantRender<'a> {
impl<'a> EnumRender<'a> {
fn new(
ctx: RenderContext<'a>,
local_name: Option<String>,
variant: hir::EnumVariant,
variant: hir::Variant,
path: Option<ModPath>,
) -> EnumVariantRender<'a> {
) -> EnumRender<'a> {
let name = local_name.unwrap_or_else(|| variant.name(ctx.db()).to_string());
let variant_kind = variant.kind(ctx.db());

Expand All @@ -51,15 +51,7 @@ impl<'a> EnumVariantRender<'a> {
None => (name.to_string(), name.to_string()),
};

EnumVariantRender {
ctx,
name,
variant,
path,
qualified_name,
short_qualified_name,
variant_kind,
}
EnumRender { ctx, name, variant, path, qualified_name, short_qualified_name, variant_kind }
}

fn render(self, import_to_add: Option<ImportEdit>) -> CompletionItem {
Expand Down
6 changes: 3 additions & 3 deletions crates/hir/src/attrs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ use hir_ty::db::HirDatabase;
use syntax::ast;

use crate::{
Adt, Const, Enum, EnumVariant, Field, Function, MacroDef, Module, ModuleDef, Static, Struct,
Trait, TypeAlias, Union,
Adt, Const, Enum, Field, Function, MacroDef, Module, ModuleDef, Static, Struct, Trait,
TypeAlias, Union, Variant,
};

pub trait HasAttrs {
Expand Down Expand Up @@ -53,7 +53,7 @@ macro_rules! impl_has_attrs {

impl_has_attrs![
(Field, FieldId),
(EnumVariant, EnumVariantId),
(Variant, EnumVariantId),
(Static, StaticId),
(Const, ConstId),
(Trait, TraitId),
Expand Down
44 changes: 20 additions & 24 deletions crates/hir/src/code_model.rs
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ pub enum ModuleDef {
Function(Function),
Adt(Adt),
// Can't be directly declared, but can be imported.
EnumVariant(EnumVariant),
Variant(Variant),
Const(Const),
Static(Static),
Trait(Trait),
Expand All @@ -172,7 +172,7 @@ impl_from!(
Module,
Function,
Adt(Struct, Enum, Union),
EnumVariant,
Variant,
Const,
Static,
Trait,
Expand All @@ -186,7 +186,7 @@ impl From<VariantDef> for ModuleDef {
match var {
VariantDef::Struct(t) => Adt::from(t).into(),
VariantDef::Union(t) => Adt::from(t).into(),
VariantDef::EnumVariant(t) => t.into(),
VariantDef::Variant(t) => t.into(),
}
}
}
Expand All @@ -197,7 +197,7 @@ impl ModuleDef {
ModuleDef::Module(it) => it.parent(db),
ModuleDef::Function(it) => Some(it.module(db)),
ModuleDef::Adt(it) => Some(it.module(db)),
ModuleDef::EnumVariant(it) => Some(it.module(db)),
ModuleDef::Variant(it) => Some(it.module(db)),
ModuleDef::Const(it) => Some(it.module(db)),
ModuleDef::Static(it) => Some(it.module(db)),
ModuleDef::Trait(it) => Some(it.module(db)),
Expand All @@ -221,7 +221,7 @@ impl ModuleDef {
ModuleDef::Module(it) => it.parent(db)?,
ModuleDef::Function(it) => return Some(it.visibility(db)),
ModuleDef::Adt(it) => it.module(db),
ModuleDef::EnumVariant(it) => {
ModuleDef::Variant(it) => {
let parent = it.parent_enum(db);
let module = it.module(db);
return module.visibility_of(db, &ModuleDef::Adt(Adt::Enum(parent)));
Expand All @@ -241,7 +241,7 @@ impl ModuleDef {
ModuleDef::Adt(it) => Some(it.name(db)),
ModuleDef::Trait(it) => Some(it.name(db)),
ModuleDef::Function(it) => Some(it.name(db)),
ModuleDef::EnumVariant(it) => Some(it.name(db)),
ModuleDef::Variant(it) => Some(it.name(db)),
ModuleDef::TypeAlias(it) => Some(it.name(db)),
ModuleDef::Module(it) => it.name(db),
ModuleDef::Const(it) => it.name(db),
Expand Down Expand Up @@ -455,7 +455,7 @@ impl Field {
let generic_def_id: GenericDefId = match self.parent {
VariantDef::Struct(it) => it.id.into(),
VariantDef::Union(it) => it.id.into(),
VariantDef::EnumVariant(it) => it.parent.id.into(),
VariantDef::Variant(it) => it.parent.id.into(),
};
let substs = Substs::type_params(db, generic_def_id);
let ty = db.field_types(var_id)[self.id].clone().subst(&substs);
Expand Down Expand Up @@ -566,12 +566,8 @@ impl Enum {
db.enum_data(self.id).name.clone()
}

pub fn variants(self, db: &dyn HirDatabase) -> Vec<EnumVariant> {
db.enum_data(self.id)
.variants
.iter()
.map(|(id, _)| EnumVariant { parent: self, id })
.collect()
pub fn variants(self, db: &dyn HirDatabase) -> Vec<Variant> {
db.enum_data(self.id).variants.iter().map(|(id, _)| Variant { parent: self, id }).collect()
}

pub fn ty(self, db: &dyn HirDatabase) -> Type {
Expand All @@ -580,12 +576,12 @@ impl Enum {
}

#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct EnumVariant {
pub struct Variant {
pub(crate) parent: Enum,
pub(crate) id: LocalEnumVariantId,
}

impl EnumVariant {
impl Variant {
pub fn module(self, db: &dyn HirDatabase) -> Module {
self.parent.module(db)
}
Expand Down Expand Up @@ -662,40 +658,40 @@ impl Adt {
pub enum VariantDef {
Struct(Struct),
Union(Union),
EnumVariant(EnumVariant),
Variant(Variant),
}
impl_from!(Struct, Union, EnumVariant for VariantDef);
impl_from!(Struct, Union, Variant for VariantDef);

impl VariantDef {
pub fn fields(self, db: &dyn HirDatabase) -> Vec<Field> {
match self {
VariantDef::Struct(it) => it.fields(db),
VariantDef::Union(it) => it.fields(db),
VariantDef::EnumVariant(it) => it.fields(db),
VariantDef::Variant(it) => it.fields(db),
}
}

pub fn module(self, db: &dyn HirDatabase) -> Module {
match self {
VariantDef::Struct(it) => it.module(db),
VariantDef::Union(it) => it.module(db),
VariantDef::EnumVariant(it) => it.module(db),
VariantDef::Variant(it) => it.module(db),
}
}

pub fn name(&self, db: &dyn HirDatabase) -> Name {
match self {
VariantDef::Struct(s) => s.name(db),
VariantDef::Union(u) => u.name(db),
VariantDef::EnumVariant(e) => e.name(db),
VariantDef::Variant(e) => e.name(db),
}
}

pub(crate) fn variant_data(self, db: &dyn HirDatabase) -> Arc<VariantData> {
match self {
VariantDef::Struct(it) => it.variant_data(db),
VariantDef::Union(it) => it.variant_data(db),
VariantDef::EnumVariant(it) => it.variant_data(db),
VariantDef::Variant(it) => it.variant_data(db),
}
}
}
Expand Down Expand Up @@ -1095,7 +1091,7 @@ pub enum GenericDef {
Impl(Impl),
// enum variants cannot have generics themselves, but their parent enums
// can, and this makes some code easier to write
EnumVariant(EnumVariant),
Variant(Variant),
// consts can have type parameters from their parents (i.e. associated consts of traits)
Const(Const),
}
Expand All @@ -1105,7 +1101,7 @@ impl_from!(
Trait,
TypeAlias,
Impl,
EnumVariant,
Variant,
Const
for GenericDef
);
Expand Down Expand Up @@ -1847,7 +1843,7 @@ pub struct Callable {
pub enum CallableKind {
Function(Function),
TupleStruct(Struct),
TupleEnumVariant(EnumVariant),
TupleEnumVariant(Variant),
Closure,
}

Expand Down
Loading