Only refresh packages when saving a build.zig file, not on any change

This commit is contained in:
Alexandros Naskos 2020-06-03 11:32:05 +03:00
parent ef95c76e45
commit 9392c4032c
2 changed files with 23 additions and 11 deletions

View File

@ -410,6 +410,19 @@ fn refreshDocument(self: *DocumentStore, handle: *Handle, zig_lib_path: ?[]const
} }
} }
pub fn applySave(self: *DocumentStore, handle: *Handle) !void {
if (handle.is_build_file) |build_file| {
loadPackages(.{
.build_file = build_file,
.allocator = self.allocator,
.build_runner_path = self.build_runner_path,
.zig_exe_path = self.zig_exe_path.?,
}) catch |err| {
std.debug.warn("Failed to load packages of build file {} (error: {})\n", .{ build_file.uri, err });
};
}
}
pub fn applyChanges( pub fn applyChanges(
self: *DocumentStore, self: *DocumentStore,
handle: *Handle, handle: *Handle,
@ -469,16 +482,6 @@ pub fn applyChanges(
} }
try self.refreshDocument(handle, zig_lib_path); try self.refreshDocument(handle, zig_lib_path);
if (handle.is_build_file) |build_file| {
loadPackages(.{
.build_file = build_file,
.allocator = self.allocator,
.build_runner_path = self.build_runner_path,
.zig_exe_path = self.zig_exe_path.?,
}) catch |err| {
std.debug.warn("Failed to load packages of build file {} (error: {})\n", .{ build_file.uri, err });
};
}
} }
pub fn uriFromImportStr( pub fn uriFromImportStr(

View File

@ -742,7 +742,16 @@ fn processJsonRpc(parser: *std.json.Parser, json: []const u8, config: Config) !v
const local_config = configFromUriOr(uri, config); const local_config = configFromUriOr(uri, config);
try document_store.applyChanges(handle, content_changes, local_config.zig_lib_path); try document_store.applyChanges(handle, content_changes, local_config.zig_lib_path);
try publishDiagnostics(handle.*, local_config); try publishDiagnostics(handle.*, local_config);
} else if (std.mem.eql(u8, method, "textDocument/didSave") or std.mem.eql(u8, method, "textDocument/willSave")) { } else if (std.mem.eql(u8, method, "textDocument/didSave")) {
const text_document = params.getValue("textDocument").?.Object;
const uri = text_document.getValue("uri").?.String;
const handle = document_store.getHandle(uri) orelse {
std.debug.warn("Trying to save non existent document {}", .{uri});
return;
};
try document_store.applySave(handle);
} else if (std.mem.eql(u8, method, "textDocument/willSave")) {
// noop // noop
} else if (std.mem.eql(u8, method, "textDocument/didClose")) { } else if (std.mem.eql(u8, method, "textDocument/didClose")) {
const document = params.getValue("textDocument").?.Object; const document = params.getValue("textDocument").?.Object;