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