yolo: add type function symbols to outline
Questions: - `getDocumentSymbolsInternal`: from looking at the code + cross referencing VSCode Api, looks like its just used to enumerate document symbols (call tree: `documentSymbol()->getDocumentSymbols()->getDocumentSymbolsInternal()`) - sanity check: are there any other places this modification needs to be propogated? - sanity check: specifically so that symbol resolve/rename/goto def/etc aren't broken? - error handling: unsure what the pre/post conditions are of the parse tree when `getDocumentSymbolsInternal` is invoked so there might be superflous guards/checks - any tests to add?
This commit is contained in:
		
							parent
							
								
									08f2638d6a
								
							
						
					
					
						commit
						ca8ca06da9
					
				@ -1809,6 +1809,16 @@ fn getDocumentSymbolsInternal(allocator: std.mem.Allocator, tree: Ast, node: Ast
 | 
				
			|||||||
                if (var_decl.ast.init_node != 0)
 | 
					                if (var_decl.ast.init_node != 0)
 | 
				
			||||||
                    try addOutlineNodes(allocator, tree, var_decl.ast.init_node, &child_context);
 | 
					                    try addOutlineNodes(allocator, tree, var_decl.ast.init_node, &child_context);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					            if (tags[node] == .fn_decl) fn_ch: {
 | 
				
			||||||
 | 
					                const fn_decl = tree.nodes.items(.data)[node];
 | 
				
			||||||
 | 
					                var params: [1]Ast.Node.Index = undefined;
 | 
				
			||||||
 | 
					                const fn_proto = ast.fnProto(tree, fn_decl.lhs, ¶ms) orelse break :fn_ch;
 | 
				
			||||||
 | 
					                if (!isTypeFunction(tree, fn_proto)) break :fn_ch;
 | 
				
			||||||
 | 
					                const ret_stmt = findReturnStatement(tree, fn_proto, fn_decl.rhs) orelse break :fn_ch;
 | 
				
			||||||
 | 
					                const type_decl = tree.nodes.items(.data)[ret_stmt].lhs;
 | 
				
			||||||
 | 
					                if (type_decl != 0)
 | 
				
			||||||
 | 
					                    try addOutlineNodes(allocator, tree, type_decl, &child_context);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
            break :ch children.items;
 | 
					            break :ch children.items;
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user