Start implementing usingnamespace
This commit is contained in:
		
							parent
							
								
									d7ccf6a3c2
								
							
						
					
					
						commit
						7495aab28b
					
				@ -2056,7 +2056,7 @@ fn iterateSymbolsGlobalInternal(
 | 
				
			|||||||
                try callback(context, DeclWithHandle{ .decl = &entry.value, .handle = handle });
 | 
					                try callback(context, DeclWithHandle{ .decl = &entry.value, .handle = handle });
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // for (scope.uses) |use| {
 | 
					            // for (Index) |use| {
 | 
				
			||||||
            //     if (std.mem.indexOfScalar(*ast.Node.Use, use_trail.items, use) != null) continue;
 | 
					            //     if (std.mem.indexOfScalar(*ast.Node.Use, use_trail.items, use) != null) continue;
 | 
				
			||||||
            //     try use_trail.append(use);
 | 
					            //     try use_trail.append(use);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -2270,7 +2270,7 @@ pub const DocumentScope = struct {
 | 
				
			|||||||
                scope.range.start,
 | 
					                scope.range.start,
 | 
				
			||||||
                scope.range.end,
 | 
					                scope.range.end,
 | 
				
			||||||
                {},
 | 
					                {},
 | 
				
			||||||
                // scope.uses.len,
 | 
					                scope.uses.len,
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var decl_it = scope.decls.iterator();
 | 
					            var decl_it = scope.decls.iterator();
 | 
				
			||||||
@ -2286,7 +2286,7 @@ pub const DocumentScope = struct {
 | 
				
			|||||||
    pub fn deinit(self: DocumentScope, allocator: *std.mem.Allocator) void {
 | 
					    pub fn deinit(self: DocumentScope, allocator: *std.mem.Allocator) void {
 | 
				
			||||||
        for (self.scopes) |*scope| {
 | 
					        for (self.scopes) |*scope| {
 | 
				
			||||||
            scope.decls.deinit();
 | 
					            scope.decls.deinit();
 | 
				
			||||||
            // allocator.free(scope.uses);
 | 
					            allocator.free(scope.uses);
 | 
				
			||||||
            allocator.free(scope.tests);
 | 
					            allocator.free(scope.tests);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        allocator.free(self.scopes);
 | 
					        allocator.free(self.scopes);
 | 
				
			||||||
@ -2308,7 +2308,7 @@ pub const Scope = struct {
 | 
				
			|||||||
    range: SourceRange,
 | 
					    range: SourceRange,
 | 
				
			||||||
    decls: std.StringHashMap(Declaration),
 | 
					    decls: std.StringHashMap(Declaration),
 | 
				
			||||||
    tests: []const ast.Node.Index,
 | 
					    tests: []const ast.Node.Index,
 | 
				
			||||||
    // uses: []const *ast.Node.Data,
 | 
					    uses: []const ast.Node.Index,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    data: Data,
 | 
					    data: Data,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@ -2417,26 +2417,25 @@ fn makeScopeInternal(
 | 
				
			|||||||
        (try scopes.addOne(allocator)).* = .{
 | 
					        (try scopes.addOne(allocator)).* = .{
 | 
				
			||||||
            .range = nodeSourceRange(tree, node_idx),
 | 
					            .range = nodeSourceRange(tree, node_idx),
 | 
				
			||||||
            .decls = std.StringHashMap(Declaration).init(allocator),
 | 
					            .decls = std.StringHashMap(Declaration).init(allocator),
 | 
				
			||||||
            // .uses = &[0]*ast.Node.Use{},
 | 
					            .uses = &.{},
 | 
				
			||||||
            .tests = &.{},
 | 
					            .tests = &.{},
 | 
				
			||||||
            .data = .{ .container = node_idx },
 | 
					            .data = .{ .container = node_idx },
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
        const scope_idx = scopes.items.len - 1;
 | 
					        const scope_idx = scopes.items.len - 1;
 | 
				
			||||||
        // var uses = std.ArrayList(*ast.Node.Use).init(allocator);
 | 
					        var uses = std.ArrayList(ast.Node.Index).init(allocator);
 | 
				
			||||||
        var tests = std.ArrayList(ast.Node.Index).init(allocator);
 | 
					        var tests = std.ArrayList(ast.Node.Index).init(allocator);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        errdefer {
 | 
					        errdefer {
 | 
				
			||||||
            scopes.items[scope_idx].decls.deinit();
 | 
					            scopes.items[scope_idx].decls.deinit();
 | 
				
			||||||
            // uses.deinit();
 | 
					            uses.deinit();
 | 
				
			||||||
            tests.deinit();
 | 
					            tests.deinit();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        for (ast_decls) |decl| {
 | 
					        for (ast_decls) |decl| {
 | 
				
			||||||
            // @TODO: Implement using namespace
 | 
					            if (tags[decl] == .@"usingnamespace") {
 | 
				
			||||||
            // if (decl.castTag(.Use)) |use| {
 | 
					                try uses.append(decl);
 | 
				
			||||||
            //     try uses.append(use);
 | 
					                continue;
 | 
				
			||||||
            //     continue;
 | 
					            }
 | 
				
			||||||
            // }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
            try makeScopeInternal(allocator, scopes, error_completions, enum_completions, tree, decl);
 | 
					            try makeScopeInternal(allocator, scopes, error_completions, enum_completions, tree, decl);
 | 
				
			||||||
            const name = getDeclName(tree, decl) orelse continue;
 | 
					            const name = getDeclName(tree, decl) orelse continue;
 | 
				
			||||||
@ -2512,7 +2511,7 @@ fn makeScopeInternal(
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        scopes.items[scope_idx].tests = tests.toOwnedSlice();
 | 
					        scopes.items[scope_idx].tests = tests.toOwnedSlice();
 | 
				
			||||||
        // scopes.items[scope_idx].uses = uses.toOwnedSlice();
 | 
					        scopes.items[scope_idx].uses = uses.toOwnedSlice();
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -2524,7 +2523,7 @@ fn makeScopeInternal(
 | 
				
			|||||||
            (try scopes.addOne(allocator)).* = .{
 | 
					            (try scopes.addOne(allocator)).* = .{
 | 
				
			||||||
                .range = nodeSourceRange(tree, node_idx),
 | 
					                .range = nodeSourceRange(tree, node_idx),
 | 
				
			||||||
                .decls = std.StringHashMap(Declaration).init(allocator),
 | 
					                .decls = std.StringHashMap(Declaration).init(allocator),
 | 
				
			||||||
                // .uses = &[0]*ast.Node.Use{},
 | 
					                .uses = &.{},
 | 
				
			||||||
                .tests = &.{},
 | 
					                .tests = &.{},
 | 
				
			||||||
                .data = .{ .function = node_idx },
 | 
					                .data = .{ .function = node_idx },
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
@ -2562,7 +2561,7 @@ fn makeScopeInternal(
 | 
				
			|||||||
                        .end = tree.tokenLocation(0, last_token).line_start,
 | 
					                        .end = tree.tokenLocation(0, last_token).line_start,
 | 
				
			||||||
                    },
 | 
					                    },
 | 
				
			||||||
                    .decls = std.StringHashMap(Declaration).init(allocator),
 | 
					                    .decls = std.StringHashMap(Declaration).init(allocator),
 | 
				
			||||||
                    // .uses = &[0]*ast.Node.Use{},
 | 
					                    .uses = &.{},
 | 
				
			||||||
                    .tests = &.{},
 | 
					                    .tests = &.{},
 | 
				
			||||||
                    .data = .other,
 | 
					                    .data = .other,
 | 
				
			||||||
                };
 | 
					                };
 | 
				
			||||||
@ -2573,16 +2572,16 @@ fn makeScopeInternal(
 | 
				
			|||||||
            (try scopes.addOne(allocator)).* = .{
 | 
					            (try scopes.addOne(allocator)).* = .{
 | 
				
			||||||
                .range = nodeSourceRange(tree, node_idx),
 | 
					                .range = nodeSourceRange(tree, node_idx),
 | 
				
			||||||
                .decls = std.StringHashMap(Declaration).init(allocator),
 | 
					                .decls = std.StringHashMap(Declaration).init(allocator),
 | 
				
			||||||
                // .uses = &[0]*ast.Node.Use{},
 | 
					                .uses = &.{},
 | 
				
			||||||
                .tests = &.{},
 | 
					                .tests = &.{},
 | 
				
			||||||
                .data = .{ .block = node_idx },
 | 
					                .data = .{ .block = node_idx },
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
            var scope_idx = scopes.items.len - 1;
 | 
					            var scope_idx = scopes.items.len - 1;
 | 
				
			||||||
            // var uses = std.ArrayList(*ast.Node.Use).init(allocator);
 | 
					            var uses = std.ArrayList(ast.Node.Index).init(allocator);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            errdefer {
 | 
					            errdefer {
 | 
				
			||||||
                scopes.items[scope_idx].decls.deinit();
 | 
					                scopes.items[scope_idx].decls.deinit();
 | 
				
			||||||
                // uses.deinit();
 | 
					                uses.deinit();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            const statements: []const ast.Node.Index = switch (node) {
 | 
					            const statements: []const ast.Node.Index = switch (node) {
 | 
				
			||||||
@ -2601,6 +2600,11 @@ fn makeScopeInternal(
 | 
				
			|||||||
            };
 | 
					            };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            for (statements) |idx| {
 | 
					            for (statements) |idx| {
 | 
				
			||||||
 | 
					                if (tags[idx] == .@"usingnamespace") {
 | 
				
			||||||
 | 
					                    try uses.append(idx);
 | 
				
			||||||
 | 
					                    continue;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                try makeScopeInternal(allocator, scopes, error_completions, enum_completions, tree, idx);
 | 
					                try makeScopeInternal(allocator, scopes, error_completions, enum_completions, tree, idx);
 | 
				
			||||||
                if (varDecl(tree, idx)) |var_decl| {
 | 
					                if (varDecl(tree, idx)) |var_decl| {
 | 
				
			||||||
                    const name = tree.tokenSlice(var_decl.ast.mut_token + 1);
 | 
					                    const name = tree.tokenSlice(var_decl.ast.mut_token + 1);
 | 
				
			||||||
@ -2610,7 +2614,7 @@ fn makeScopeInternal(
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // scopes.items[scope_idx].uses = uses.toOwnedSlice();
 | 
					            scopes.items[scope_idx].uses = uses.toOwnedSlice();
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        .@"comptime", .@"nosuspend" => {
 | 
					        .@"comptime", .@"nosuspend" => {
 | 
				
			||||||
@ -2630,7 +2634,7 @@ fn makeScopeInternal(
 | 
				
			|||||||
                        .end = tree.tokenLocation(0, tree.lastToken(if_node.ast.then_expr)).line_end,
 | 
					                        .end = tree.tokenLocation(0, tree.lastToken(if_node.ast.then_expr)).line_end,
 | 
				
			||||||
                    },
 | 
					                    },
 | 
				
			||||||
                    .decls = std.StringHashMap(Declaration).init(allocator),
 | 
					                    .decls = std.StringHashMap(Declaration).init(allocator),
 | 
				
			||||||
                    // .uses = &[0]*ast.Node.Use{},
 | 
					                    .uses = &.{},
 | 
				
			||||||
                    .tests = &.{},
 | 
					                    .tests = &.{},
 | 
				
			||||||
                    .data = .other,
 | 
					                    .data = .other,
 | 
				
			||||||
                };
 | 
					                };
 | 
				
			||||||
@ -2660,7 +2664,7 @@ fn makeScopeInternal(
 | 
				
			|||||||
                            .end = tree.tokenLocation(0, tree.lastToken(if_node.ast.else_expr)).line_end,
 | 
					                            .end = tree.tokenLocation(0, tree.lastToken(if_node.ast.else_expr)).line_end,
 | 
				
			||||||
                        },
 | 
					                        },
 | 
				
			||||||
                        .decls = std.StringHashMap(Declaration).init(allocator),
 | 
					                        .decls = std.StringHashMap(Declaration).init(allocator),
 | 
				
			||||||
                        // .uses = &[0]*ast.Node.Use{},
 | 
					                        .uses = &.{},
 | 
				
			||||||
                        .tests = &.{},
 | 
					                        .tests = &.{},
 | 
				
			||||||
                        .data = .other,
 | 
					                        .data = .other,
 | 
				
			||||||
                    };
 | 
					                    };
 | 
				
			||||||
@ -2690,7 +2694,7 @@ fn makeScopeInternal(
 | 
				
			|||||||
                        .end = tree.tokenLocation(0, tree.lastToken(node_idx)).line_end,
 | 
					                        .end = tree.tokenLocation(0, tree.lastToken(node_idx)).line_end,
 | 
				
			||||||
                    },
 | 
					                    },
 | 
				
			||||||
                    .decls = std.StringHashMap(Declaration).init(allocator),
 | 
					                    .decls = std.StringHashMap(Declaration).init(allocator),
 | 
				
			||||||
                    // .uses = &[0]*ast.Node.Use{},
 | 
					                    .uses = &.{},
 | 
				
			||||||
                    .tests = &.{},
 | 
					                    .tests = &.{},
 | 
				
			||||||
                    .data = .other,
 | 
					                    .data = .other,
 | 
				
			||||||
                };
 | 
					                };
 | 
				
			||||||
@ -2707,7 +2711,7 @@ fn makeScopeInternal(
 | 
				
			|||||||
                        .end = tree.tokenLocation(0, tree.lastToken(while_node.ast.then_expr)).line_end,
 | 
					                        .end = tree.tokenLocation(0, tree.lastToken(while_node.ast.then_expr)).line_end,
 | 
				
			||||||
                    },
 | 
					                    },
 | 
				
			||||||
                    .decls = std.StringHashMap(Declaration).init(allocator),
 | 
					                    .decls = std.StringHashMap(Declaration).init(allocator),
 | 
				
			||||||
                    // .uses = &[0]*ast.Node.Use{},
 | 
					                    .uses = &.{},
 | 
				
			||||||
                    .tests = &.{},
 | 
					                    .tests = &.{},
 | 
				
			||||||
                    .data = .other,
 | 
					                    .data = .other,
 | 
				
			||||||
                };
 | 
					                };
 | 
				
			||||||
@ -2736,7 +2740,7 @@ fn makeScopeInternal(
 | 
				
			|||||||
                            .end = tree.tokenLocation(0, tree.lastToken(while_node.ast.else_expr)).line_end,
 | 
					                            .end = tree.tokenLocation(0, tree.lastToken(while_node.ast.else_expr)).line_end,
 | 
				
			||||||
                        },
 | 
					                        },
 | 
				
			||||||
                        .decls = std.StringHashMap(Declaration).init(allocator),
 | 
					                        .decls = std.StringHashMap(Declaration).init(allocator),
 | 
				
			||||||
                        // .uses = &[0]*ast.Node.Use{},
 | 
					                        .uses = &.{},
 | 
				
			||||||
                        .tests = &.{},
 | 
					                        .tests = &.{},
 | 
				
			||||||
                        .data = .other,
 | 
					                        .data = .other,
 | 
				
			||||||
                    };
 | 
					                    };
 | 
				
			||||||
@ -2763,7 +2767,7 @@ fn makeScopeInternal(
 | 
				
			|||||||
                        .end = tree.tokenLocation(0, tree.lastToken(switch_case.ast.target_expr)).line_end,
 | 
					                        .end = tree.tokenLocation(0, tree.lastToken(switch_case.ast.target_expr)).line_end,
 | 
				
			||||||
                    },
 | 
					                    },
 | 
				
			||||||
                    .decls = std.StringHashMap(Declaration).init(allocator),
 | 
					                    .decls = std.StringHashMap(Declaration).init(allocator),
 | 
				
			||||||
                    // .uses = &[0]*ast.Node.Use{},
 | 
					                    .uses = &.{},
 | 
				
			||||||
                    .tests = &.{},
 | 
					                    .tests = &.{},
 | 
				
			||||||
                    .data = .other,
 | 
					                    .data = .other,
 | 
				
			||||||
                };
 | 
					                };
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user