aboutsummaryrefslogtreecommitdiff
path: root/src/server/caches.odin
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/caches.odin')
-rw-r--r--src/server/caches.odin25
1 files changed, 21 insertions, 4 deletions
diff --git a/src/server/caches.odin b/src/server/caches.odin
index f1cdc2e..a65de48 100644
--- a/src/server/caches.odin
+++ b/src/server/caches.odin
@@ -25,14 +25,31 @@ FileResolveCache :: struct {
@(thread_local)
file_resolve_cache: FileResolveCache
-resolve_entire_file_cached :: proc(document: ^Document) -> map[uintptr]SymbolAndNode {
- if document.uri.uri not_in file_resolve_cache.files {
- file_resolve_cache.files[document.uri.uri] = FileResolve {
+resolve_entire_file_cached :: proc(document: ^Document) -> FileResolve {
+
+ file, cashed := file_resolve_cache.files[document.uri.uri]
+
+ if !cashed {
+ file = {
symbols = resolve_entire_file(document, .None, virtual.arena_allocator(document.allocator)),
}
+ file_resolve_cache.files[document.uri.uri] = file
+ }
+
+ return file
+}
+
+resolve_ranged_file_cached :: proc(document: ^Document, range: common.Range, allocator := context.allocator) -> FileResolve {
+
+ file, cashed := file_resolve_cache.files[document.uri.uri]
+
+ if !cashed {
+ file = {
+ symbols = resolve_ranged_file(document, range, allocator),
+ }
}
- return file_resolve_cache.files[document.uri.uri].symbols
+ return file
}
BuildCache :: struct {