aboutsummaryrefslogtreecommitdiff
path: root/src/server/imports.odin
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/imports.odin')
-rw-r--r--src/server/imports.odin30
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[:]
}