diff options
Diffstat (limited to 'src/server/imports.odin')
| -rw-r--r-- | src/server/imports.odin | 30 |
1 files changed, 24 insertions, 6 deletions
diff --git a/src/server/imports.odin b/src/server/imports.odin index cd2271d..4da5a86 100644 --- a/src/server/imports.odin +++ b/src/server/imports.odin @@ -1,17 +1,35 @@ package server +import "core:log" import "core:mem" import "core:odin/ast" +import "base:runtime" -fix_imports :: proc(document: ^Document) { - arena: mem.Arena - mem.arena_init(&arena, make([]byte, mem.Megabyte * 25)) - defer delete(arena.data) +find_unused_imports :: proc(document: ^Document, allocator := context.temp_allocator) -> []Package { + arena: runtime.Arena - context.allocator = mem.arena_allocator(&arena) + _ = runtime.arena_init(&arena, mem.Megabyte * 40, runtime.default_allocator()) - symbols_and_nodes := resolve_entire_file(document, .None) + defer runtime.arena_destroy(&arena) + context.allocator = runtime.arena_allocator(&arena) + symbols_and_nodes := resolve_entire_file_cached(document) + + pkgs := make(map[string]bool, context.temp_allocator) + + for _, v in symbols_and_nodes { + pkgs[v.symbol.pkg] = true + } + + unused := make([dynamic]Package, allocator) + + for imp in document.imports { + if imp.name not_in pkgs { + append(&unused, imp) + } + } + + return unused[:] } |