Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide/src/lib.rs')
-rw-r--r--crates/ide/src/lib.rs14
1 files changed, 13 insertions, 1 deletions
diff --git a/crates/ide/src/lib.rs b/crates/ide/src/lib.rs
index 0066ceed21..5e4d930393 100644
--- a/crates/ide/src/lib.rs
+++ b/crates/ide/src/lib.rs
@@ -73,7 +73,7 @@ use ide_db::{
};
use ide_db::{MiniCore, ra_fixture::RaFixtureAnalysis};
use macros::UpmapFromRaFixture;
-use syntax::{SourceFile, ast};
+use syntax::{AstNode, SourceFile, ast};
use triomphe::Arc;
use view_memory_layout::{RecursiveMemoryLayout, view_memory_layout};
@@ -905,6 +905,18 @@ impl Analysis {
self.with_db(|db| view_memory_layout(db, position))
}
+ pub fn get_failed_obligations(&self, offset: TextSize, file_id: FileId) -> Cancellable<String> {
+ self.with_db(|db| {
+ let sema = Semantics::new(db);
+ let source_file = sema.parse_guess_edition(file_id);
+
+ let Some(token) = source_file.syntax().token_at_offset(offset).next() else {
+ return String::new();
+ };
+ sema.get_failed_obligations(token).unwrap_or_default()
+ })
+ }
+
pub fn editioned_file_id_to_vfs(&self, file_id: hir::EditionedFileId) -> FileId {
file_id.file_id(&self.db)
}