Fix hover types for for-loops
This commit is contained in:
		
							parent
							
								
									3f6d26679d
								
							
						
					
					
						commit
						658450993a
					
				
							
								
								
									
										18
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										18
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							| @ -662,15 +662,7 @@ dependencies = [ | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "reid-lib" | ||||
| version = "1.0.0-beta.3" | ||||
| dependencies = [ | ||||
|  "llvm-sys", | ||||
|  "thiserror", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "reid-lsp" | ||||
| name = "reid-language-server" | ||||
| version = "0.1.0" | ||||
| dependencies = [ | ||||
|  "dashmap 6.1.0", | ||||
| @ -680,6 +672,14 @@ dependencies = [ | ||||
|  "tower-lsp", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "reid-lib" | ||||
| version = "1.0.0-beta.3" | ||||
| dependencies = [ | ||||
|  "llvm-sys", | ||||
|  "thiserror", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "rustc-demangle" | ||||
| version = "0.1.26" | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| [package] | ||||
| name = "reid-lsp" | ||||
| name = "reid-language-server" | ||||
| version = "0.1.0" | ||||
| edition = "2024" | ||||
| 
 | ||||
|  | ||||
| @ -108,10 +108,10 @@ impl LanguageServer for Backend { | ||||
|                 if let Some(ty) = possible_ty.clone() { | ||||
|                     (Some(range), format!("{}", ty)) | ||||
|                 } else { | ||||
|                     (Some(range), String::from("no type")) | ||||
|                     (Some(range), String::from("None type")) | ||||
|                 } | ||||
|             } else { | ||||
|                 (None, String::from("no token")) | ||||
|                 (None, String::from("no type")) | ||||
|             } | ||||
|         } else { | ||||
|             (None, String::from("no token")) | ||||
| @ -267,7 +267,10 @@ async fn main() { | ||||
| pub fn find_type_in_context(module: &mir::Module, token_idx: usize) -> Option<TypeKind> { | ||||
|     for import in &module.imports { | ||||
|         if import.1.contains(token_idx) { | ||||
|             return None; | ||||
|             return Some(TypeKind::CustomType(mir::CustomTypeKey( | ||||
|                 "d".to_owned(), | ||||
|                 SourceModuleId(1), | ||||
|             ))); | ||||
|         } | ||||
|     } | ||||
|     for typedef in &module.typedefs { | ||||
| @ -342,7 +345,7 @@ pub fn find_type_in_context(module: &mir::Module, token_idx: usize) -> Option<Ty | ||||
| 
 | ||||
| pub fn find_type_in_block(block: &mir::Block, module_id: SourceModuleId, token_idx: usize) -> Option<TypeKind> { | ||||
|     if !block.meta.contains(token_idx) { | ||||
|         return None; | ||||
|         return Some(TypeKind::Bool); | ||||
|     } | ||||
| 
 | ||||
|     for statement in &block.statements { | ||||
| @ -479,7 +482,10 @@ pub fn find_type_in_expr(expr: &mir::Expression, module_id: SourceModuleId, toke | ||||
|             { | ||||
|                 Some(*inner.clone()) | ||||
|             } else { | ||||
|                 None | ||||
|                 Some(TypeKind::CustomType(mir::CustomTypeKey( | ||||
|                     "ä".to_owned(), | ||||
|                     SourceModuleId(1), | ||||
|                 ))) | ||||
|             } | ||||
|         } | ||||
|         mir::ExprKind::CastTo(expression, type_kind) => { | ||||
|  | ||||
| @ -228,33 +228,34 @@ impl ast::Block { | ||||
|                         StmtKind::Let(counter_var.clone(), true, start.process(module_id)), | ||||
|                         counter_range.as_meta(module_id), | ||||
|                     ); | ||||
|                     let statement_range = counter_range.clone() + start.1 + end.1 + block.2; | ||||
| 
 | ||||
|                     let set_new = mir::Statement( | ||||
|                         StmtKind::Set( | ||||
|                             mir::Expression( | ||||
|                                 mir::ExprKind::Variable(counter_var.clone()), | ||||
|                                 counter_range.as_meta(module_id), | ||||
|                                 (start.1 + end.1).as_meta(module_id), | ||||
|                             ), | ||||
|                             mir::Expression( | ||||
|                                 mir::ExprKind::BinOp( | ||||
|                                     mir::BinaryOperator::Add, | ||||
|                                     Box::new(mir::Expression( | ||||
|                                         mir::ExprKind::Variable(counter_var.clone()), | ||||
|                                         counter_range.as_meta(module_id), | ||||
|                                         (start.1 + end.1).as_meta(module_id), | ||||
|                                     )), | ||||
|                                     Box::new(mir::Expression( | ||||
|                                         mir::ExprKind::Literal(mir::Literal::Vague(mir::VagueLiteral::Number(1))), | ||||
|                                         counter_range.as_meta(module_id), | ||||
|                                         (start.1 + end.1).as_meta(module_id), | ||||
|                                     )), | ||||
|                                     mir::TypeKind::Vague(mir::VagueType::Unknown), | ||||
|                                 ), | ||||
|                                 counter_range.as_meta(module_id), | ||||
|                                 (start.1 + end.1).as_meta(module_id), | ||||
|                             ), | ||||
|                         ), | ||||
|                         counter_range.as_meta(module_id), | ||||
|                         (start.1 + end.1).as_meta(module_id), | ||||
|                     ); | ||||
|                     let mut block = block.into_mir(module_id); | ||||
|                     block.statements.push(set_new); | ||||
|                     let mut mir_block = block.into_mir(module_id); | ||||
|                     mir_block.statements.push(set_new); | ||||
|                     let while_statement = mir::Statement( | ||||
|                         StmtKind::While(WhileStatement { | ||||
|                             condition: mir::Expression( | ||||
| @ -262,28 +263,28 @@ impl ast::Block { | ||||
|                                     mir::BinaryOperator::Cmp(mir::CmpOperator::LT), | ||||
|                                     Box::new(mir::Expression( | ||||
|                                         mir::ExprKind::Variable(counter_var), | ||||
|                                         counter_range.as_meta(module_id), | ||||
|                                         (start.1 + end.1).as_meta(module_id), | ||||
|                                     )), | ||||
|                                     Box::new(end.process(module_id)), | ||||
|                                     mir::TypeKind::Vague(mir::VagueType::Unknown), | ||||
|                                 ), | ||||
|                                 counter_range.as_meta(module_id), | ||||
|                                 (start.1 + end.1).as_meta(module_id), | ||||
|                             ), | ||||
|                             block, | ||||
|                             meta: self.2.as_meta(module_id), | ||||
|                             block: mir_block.clone(), | ||||
|                             meta: (start.1 + end.1 + block.2).as_meta(module_id), | ||||
|                         }), | ||||
|                         self.2.as_meta(module_id), | ||||
|                         (start.1 + end.1 + block.2).as_meta(module_id), | ||||
|                     ); | ||||
| 
 | ||||
|                     let inner_scope = StmtKind::Expression(mir::Expression( | ||||
|                         mir::ExprKind::Block(mir::Block { | ||||
|                             statements: vec![let_statement, while_statement], | ||||
|                             return_expression: None, | ||||
|                             meta: counter_range.as_meta(module_id) + end.1.as_meta(module_id), | ||||
|                             meta: statement_range.as_meta(module_id), | ||||
|                         }), | ||||
|                         counter_range.as_meta(module_id) + end.1.as_meta(module_id), | ||||
|                         statement_range.as_meta(module_id), | ||||
|                     )); | ||||
|                     (inner_scope, self.2) | ||||
|                     (inner_scope, statement_range) | ||||
|                 } | ||||
|                 ast::BlockLevelStatement::WhileLoop(expression, block) => ( | ||||
|                     StmtKind::While(WhileStatement { | ||||
| @ -291,7 +292,7 @@ impl ast::Block { | ||||
|                         block: block.into_mir(module_id), | ||||
|                         meta: self.2.as_meta(module_id), | ||||
|                     }), | ||||
|                     self.2, | ||||
|                     expression.1 + block.2, | ||||
|                 ), | ||||
|             }; | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user