diff --git a/prisma-fmt/src/hover.rs b/prisma-fmt/src/hover.rs index c6069793714..8061fff4a31 100644 --- a/prisma-fmt/src/hover.rs +++ b/prisma-fmt/src/hover.rs @@ -107,6 +107,20 @@ fn hover(ctx: HoverContext<'_>) -> Option { None, )) } + SchemaPosition::Enum(enm_id, EnumPosition::Value(value_id, EnumValuePosition::Name(name))) => { + let value = ctx + .db + .walk((ctx.initiating_file_id, enm_id)) + .value(value_id) + .ast_value(); + + Some(format_hover_content( + value.documentation().unwrap_or_default(), + "value", + name, + None, + )) + } // --- Block Field Types --- SchemaPosition::Model(model_id, ModelPosition::Field(field_id, FieldPosition::Type(name))) => { @@ -189,7 +203,7 @@ fn format_hover_content( "model" | "enum" | "view" | "type" => { format!("```prisma\n{variant} {name} {{{field}}}\n```{fancy_line_break}{relation_kind}") } - "field" => format!("```prisma\n{name}\n```{fancy_line_break}"), + "field" | "value" => format!("```prisma\n{name}\n```{fancy_line_break}"), _ => "".to_owned(), }; let full_signature = format!("{prisma_display}{documentation}"); diff --git a/prisma-fmt/tests/hover/scenarios/value_from_enum_value_name/result.json b/prisma-fmt/tests/hover/scenarios/value_from_enum_value_name/result.json new file mode 100644 index 00000000000..2f8ef36c7f2 --- /dev/null +++ b/prisma-fmt/tests/hover/scenarios/value_from_enum_value_name/result.json @@ -0,0 +1,6 @@ +{ + "contents": { + "kind": "markdown", + "value": "```prisma\nRedPanda\n```\n___\nRedpandas are super cute." + } +} \ No newline at end of file diff --git a/prisma-fmt/tests/hover/scenarios/value_from_enum_value_name/schema.prisma b/prisma-fmt/tests/hover/scenarios/value_from_enum_value_name/schema.prisma new file mode 100644 index 00000000000..8b339228b78 --- /dev/null +++ b/prisma-fmt/tests/hover/scenarios/value_from_enum_value_name/schema.prisma @@ -0,0 +1,15 @@ +generator js { + provider = "prisma-client-js" +} + +datasource db { + provider = "mongodb" + url = env("DATABASE_URL") +} + +/// enum doc +enum Pet { + /// Redpandas are super cute. + RedP<|>anda + Cat +} diff --git a/prisma-fmt/tests/hover/tests.rs b/prisma-fmt/tests/hover/tests.rs index dc9f8779dac..f243b6d8bf3 100644 --- a/prisma-fmt/tests/hover/tests.rs +++ b/prisma-fmt/tests/hover/tests.rs @@ -21,4 +21,5 @@ scenarios! { model_from_block_name model_from_view_type one_to_many_self_relation + value_from_enum_value_name } diff --git a/psl/schema-ast/src/ast/find_at_position/enum.rs b/psl/schema-ast/src/ast/find_at_position/enum.rs index f9048bb4e41..4749d4833a1 100644 --- a/psl/schema-ast/src/ast/find_at_position/enum.rs +++ b/psl/schema-ast/src/ast/find_at_position/enum.rs @@ -79,7 +79,9 @@ pub enum EnumValuePosition<'ast> { impl<'ast> EnumValuePosition<'ast> { fn new(value: &'ast ast::EnumValue, position: usize) -> EnumValuePosition<'ast> { - if value.name.span().contains(position) {} + if value.name.span().contains(position) { + return EnumValuePosition::Name(value.name()); + } for (attr_idx, attr) in value.attributes.iter().enumerate() { if attr.span().contains(position) { // We can't go by Span::contains() because we also care about the empty space