Skip to content

Commit 5ff89d8

Browse files
committed
fix: Don't return inlay hints outside requested range
1 parent 9923b00 commit 5ff89d8

File tree

2 files changed

+28
-24
lines changed

2 files changed

+28
-24
lines changed

crates/ide/src/inlay_hints.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,9 @@ pub(crate) fn inlay_hints(
112112
}
113113
hints(event);
114114
}
115+
if let Some(range_limit) = range_limit {
116+
acc.retain(|hint| range_limit.contains_range(hint.range));
117+
}
115118
acc
116119
}
117120

crates/ide/src/inlay_hints/bind_pat.rs

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -391,36 +391,37 @@ fn main() {
391391
#[test]
392392
fn check_hint_range_limit() {
393393
let fixture = r#"
394-
//- minicore: fn, sized
395-
fn foo() -> impl Fn() { loop {} }
396-
fn foo1() -> impl Fn(f64) { loop {} }
397-
fn foo2() -> impl Fn(f64, f64) { loop {} }
398-
fn foo3() -> impl Fn(f64, f64) -> u32 { loop {} }
399-
fn foo4() -> &'static dyn Fn(f64, f64) -> u32 { loop {} }
400-
fn foo5() -> &'static dyn Fn(&'static dyn Fn(f64, f64) -> u32, f64) -> u32 { loop {} }
401-
fn foo6() -> impl Fn(f64, f64) -> u32 + Sized { loop {} }
402-
fn foo7() -> *const (impl Fn(f64, f64) -> u32 + Sized) { loop {} }
403-
404-
fn main() {
405-
let foo = foo();
406-
let foo = foo1();
407-
let foo = foo2();
408-
// ^^^ impl Fn(f64, f64)
409-
let foo = foo3();
410-
// ^^^ impl Fn(f64, f64) -> u32
411-
let foo = foo4();
412-
let foo = foo5();
413-
let foo = foo6();
414-
let foo = foo7();
415-
}
416-
"#;
394+
//- minicore: fn, sized
395+
fn foo() -> impl Fn() { loop {} }
396+
fn foo1() -> impl Fn(f64) { loop {} }
397+
fn foo2() -> impl Fn(f64, f64) { loop {} }
398+
fn foo3() -> impl Fn(f64, f64) -> u32 { loop {} }
399+
fn foo4() -> &'static dyn Fn(f64, f64) -> u32 { loop {} }
400+
fn foo5() -> &'static dyn Fn(&'static dyn Fn(f64, f64) -> u32, f64) -> u32 { loop {} }
401+
fn foo6() -> impl Fn(f64, f64) -> u32 + Sized { loop {} }
402+
fn foo7() -> *const (impl Fn(f64, f64) -> u32 + Sized) { loop {} }
403+
404+
fn main() {
405+
let foo = foo();
406+
let foo = foo1();
407+
let foo = foo2();
408+
// ^^^ impl Fn(f64, f64)
409+
let foo = foo3();
410+
// ^^^ impl Fn(f64, f64) -> u32
411+
let foo = foo4();
412+
// ^^^ &dyn Fn(f64, f64) -> u32
413+
let foo = foo5();
414+
let foo = foo6();
415+
let foo = foo7();
416+
}
417+
"#;
417418
let (analysis, file_id) = fixture::file(fixture);
418419
let expected = extract_annotations(&analysis.file_text(file_id).unwrap());
419420
let inlay_hints = analysis
420421
.inlay_hints(
421422
&InlayHintsConfig { type_hints: true, ..DISABLED_CONFIG },
422423
file_id,
423-
Some(TextRange::new(TextSize::from(500), TextSize::from(600))),
424+
Some(TextRange::new(TextSize::from(491), TextSize::from(640))),
424425
)
425426
.unwrap();
426427
let actual =

0 commit comments

Comments
 (0)