ide/inlay_hints/
ra_fixture.rs

1//! Injected inlay hints for `#[rust_analyzer::rust_fixture]`.
2
3use 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);