From d696a91cf6d468d53c2ad98d1660c0f9cc4fc930 Mon Sep 17 00:00:00 2001 From: M Mahrous Date: Tue, 3 Sep 2024 17:02:36 +0200 Subject: [PATCH] [IMP] server: eval odoo test common form import + diagnostic --- server/src/core/import_resolver.rs | 29 +++++++++++++++++++++++++- server/src/core/python_arch_builder.rs | 2 +- server/src/core/python_arch_eval.rs | 2 +- server/src/core/python_validator.rs | 4 ++-- 4 files changed, 32 insertions(+), 5 deletions(-) diff --git a/server/src/core/import_resolver.rs b/server/src/core/import_resolver.rs index 078ecd1..f53788f 100644 --- a/server/src/core/import_resolver.rs +++ b/server/src/core/import_resolver.rs @@ -1,4 +1,5 @@ use glob::glob; +use lsp_types::{Diagnostic, DiagnosticSeverity, DiagnosticTag, NumberOrString, Position, Range}; use tracing::error; use std::rc::Rc; use std::cell::RefCell; @@ -21,7 +22,29 @@ pub struct ImportResult { pub range: TextRange, } -pub fn resolve_import_stmt(session: &mut SessionInfo, source_file_symbol: &Rc>, from_stmt: Option<&Identifier>, name_aliases: &[Alias], level: Option, from_range: &TextRange) -> Vec { +fn resolve_import_stmt_hook(alias: &Alias, from_symbol: &Option>>, session: &mut SessionInfo, source_file_symbol: &Rc>, from_stmt: Option<&Identifier>, level: Option, from_range: &TextRange, diagnostics: &mut Option<&mut Vec>) -> Option{ + if alias.name.as_str() == "Form" && (*(from_symbol.as_ref().unwrap())).borrow().get_tree().0 == vec!["odoo", "tests", "common"]{ + let mut results = resolve_import_stmt(session, source_file_symbol, Some(&Identifier::new(S!("odoo.tests"), from_stmt.unwrap().range)), &[alias.clone()], level, from_range, &mut None); + if let Some(diagnostic) = diagnostics.as_mut() { + diagnostic.push( + Diagnostic::new( + Range::new(Position::new(alias.range.start().to_u32(), 0), Position::new(alias.range.end().to_u32(), 0)), + Some(DiagnosticSeverity::WARNING), + Some(NumberOrString::String(S!("OLS20006"))), + Some(EXTENSION_NAME.to_string()), + S!("Deprecation Warning: Since 17.0: odoo.tests.common.Form is deprecated, use odoo.tests.Form"), + None, + Some(vec![DiagnosticTag::DEPRECATED]), + ) + ); + } + results.pop() + } else { + None + } +} + +pub fn resolve_import_stmt(session: &mut SessionInfo, source_file_symbol: &Rc>, from_stmt: Option<&Identifier>, name_aliases: &[Alias], level: Option, from_range: &TextRange, diagnostics: &mut Option<&mut Vec>) -> Vec { //A: search base of different imports let _source_file_symbol_lock = source_file_symbol.borrow_mut(); let file_tree = _resolve_packages( @@ -55,6 +78,10 @@ pub fn resolve_import_stmt(session: &mut SessionInfo, source_file_symbol: &Rc