diff --git a/src/analyze.rs b/src/analyze.rs
index b7709b8..b125ecd 100644
--- a/src/analyze.rs
+++ b/src/analyze.rs
@@ -6,7 +6,7 @@ use tree_sitter::{Node, QueryCursor};
use odoo_lsp::{
index::interner,
- model::{FieldKind, ModelName},
+ model::ModelName,
utils::{ByteRange, Erase, PreTravel, RangeExt},
ImStr,
};
@@ -323,13 +323,10 @@ impl Backend {
};
let ident = String::from_utf8_lossy(ident);
let ident = interner.get_or_intern(ident.as_ref());
- let entry = self.populate_field_names(model, &[])?;
- let entry = block_on(entry);
- let field = entry.fields.as_ref()?.get(&ident.into())?;
- match field.kind {
- FieldKind::Relational(model) => Some(Type::Model(interner.resolve(&model).into())),
- FieldKind::Value => None,
- }
+ block_on(self.index.models.populate_field_names(model, &[])?);
+ let relation =
+ block_on(self.index.models.normalize_field_relation(ident.into(), model.into()))?;
+ Some(Type::Model(interner.resolve(&relation).into()))
}
_ => None,
}
diff --git a/src/backend.rs b/src/backend.rs
index 2fea47f..c09af59 100644
--- a/src/backend.rs
+++ b/src/backend.rs
@@ -232,7 +232,7 @@ impl Backend {
}
let model_key = interner().get_or_intern(&model);
let range = char_range_to_lsp_range(range, rope).ok_or_else(|| diagnostic!("range"))?;
- let Some(entry) = self.populate_field_names(model_key.into(), &[]) else {
+ let Some(entry) = self.index.models.populate_field_names(model_key.into(), &[]) else {
return Ok(());
};
let entry = entry.await;
@@ -373,7 +373,7 @@ impl Backend {
pub async fn jump_def_field_name(&self, field: &str, model: &str) -> miette::Result