ide/inlay_hints/
ra_fixture.rs1use hir::{EditionedFileId, Semantics};
4use ide_db::{RootDatabase, impl_empty_upmap_from_ra_fixture, ra_fixture::UpmapFromRaFixture};
5use syntax::{AstToken, ast};
6
7use crate::{Analysis, InlayHint, InlayHintPosition, InlayHintsConfig, InlayKind, InlayTooltip};
8
9pub(super) fn hints(
10 acc: &mut Vec<InlayHint>,
11 sema: &Semantics<'_, RootDatabase>,
12 file_id: EditionedFileId,
13 config: &InlayHintsConfig<'_>,
14 literal: ast::Literal,
15) -> Option<()> {
16 let file_id = file_id.file_id(sema.db);
17 let literal = ast::String::cast(literal.token())?;
18 let (analysis, fixture_analysis) =
19 Analysis::from_ra_fixture(sema, literal.clone(), &literal, config.minicore)?;
20 for virtual_file_id in fixture_analysis.files() {
21 acc.extend(
22 analysis
23 .inlay_hints(config, virtual_file_id, None)
24 .ok()?
25 .upmap_from_ra_fixture(&fixture_analysis, virtual_file_id, file_id)
26 .ok()?,
27 );
28 }
29 Some(())
30}
31
32impl_empty_upmap_from_ra_fixture!(InlayHintPosition, InlayKind, InlayTooltip);