aboutsummaryrefslogtreecommitdiff
path: root/src/server/imports.odin
blob: 16deec5c7ebc4f784d893dea45ca01a57c15e8ee (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package server

import "core:mem"

import "base:runtime"

find_unused_imports :: proc(document: ^Document, allocator := context.temp_allocator) -> []Package {
	arena: runtime.Arena

	_ = runtime.arena_init(&arena, mem.Megabyte * 40, runtime.default_allocator())

	defer runtime.arena_destroy(&arena)

	context.allocator = runtime.arena_allocator(&arena)

	symbols_and_nodes := resolve_entire_file(document)

	pkgs := make(map[string]struct{}, context.temp_allocator)

	for _, v in symbols_and_nodes {
		pkgs[v.symbol.pkg] = {}
	}

	unused := make([dynamic]Package, allocator)

	for imp in document.imports {
		if imp.base != "_" && imp.name not_in pkgs {
			append(&unused, imp)
		}
	}

	return unused[:]
}