Correctly pass zig_exe_path to document_store initialization

This commit is contained in:
Alexandros Naskos 2021-03-31 16:26:55 +03:00
parent cfae9b4d13
commit 5e8e14fc08
No known key found for this signature in database
GPG Key ID: 02BF2E72B0EA32D2
2 changed files with 30 additions and 19 deletions

View File

@ -237,7 +237,7 @@ fn newDocument(self: *DocumentStore, uri: []const u8, text: []u8) anyerror!*Hand
defer build_file.close(); defer build_file.close();
// Calculate build file's URI // Calculate build file's URI
var candidate_path = try std.mem.concat(self.allocator, u8, &[_][]const u8{ curr_path, "build.zig" }); var candidate_path = try std.mem.concat(self.allocator, u8, &.{ curr_path, "build.zig" });
defer self.allocator.free(candidate_path); defer self.allocator.free(candidate_path);
const build_file_uri = try URI.fromPath(self.allocator, candidate_path); const build_file_uri = try URI.fromPath(self.allocator, candidate_path);
errdefer self.allocator.free(build_file_uri); errdefer self.allocator.free(build_file_uri);
@ -569,13 +569,22 @@ pub fn resolveImport(self: *DocumentStore, handle: *Handle, import_str: []const
return self.getHandle(final_uri).?; return self.getHandle(final_uri).?;
} }
} }
// The URI must be somewhere in the import_uris or the package uris
// The URI must be somewhere in the import_uris const handle_uri = find_uri: {
const handle_uri = for (handle.import_uris) |uri| { for (handle.import_uris) |uri| {
if (std.mem.eql(u8, uri, final_uri)) { if (std.mem.eql(u8, uri, final_uri)) {
break uri; break :find_uri uri;
} }
} else return null; }
if (handle.associated_build_file) |bf| {
for (bf.packages.items) |pkg| {
if (std.mem.eql(u8, pkg.uri, final_uri)) {
break :find_uri pkg.uri;
}
}
}
return null;
};
// New import. // New import.
// Check if the import is already opened by others. // Check if the import is already opened by others.
@ -597,16 +606,15 @@ pub fn resolveImport(self: *DocumentStore, handle: *Handle, import_str: []const
}; };
defer file.close(); defer file.close();
const size = std.math.cast(usize, try file.getEndPos()) catch std.math.maxInt(usize);
{ {
const file_contents = try allocator.alloc(u8, size); const file_contents = file.readToEndAlloc(allocator, std.math.maxInt(usize)) catch |err| switch (err) {
errdefer allocator.free(file_contents); error.OutOfMemory => return error.OutOfMemory,
else => {
file.reader().readNoEof(file_contents) catch {
log.debug("Could not read from file {s}", .{file_path}); log.debug("Could not read from file {s}", .{file_path});
return null; return null;
},
}; };
errdefer allocator.free(file_contents);
// Add to import table of current handle. // Add to import table of current handle.
try handle.imports_used.append(self.allocator, handle_uri); try handle.imports_used.append(self.allocator, handle_uri);

View File

@ -1719,7 +1719,6 @@ pub fn main() anyerror!void {
// Read the configuration, if any. // Read the configuration, if any.
const config_parse_options = std.json.ParseOptions{ .allocator = allocator }; const config_parse_options = std.json.ParseOptions{ .allocator = allocator };
var config = Config{}; var config = Config{};
var config_had_null_zig_path = config.zig_exe_path == null;
defer std.json.parseFree(Config, config, config_parse_options); defer std.json.parseFree(Config, config, config_parse_options);
config_read: { config_read: {
@ -1742,8 +1741,6 @@ pub fn main() anyerror!void {
} }
// Find the zig executable in PATH // Find the zig executable in PATH
var zig_exe_path: ?[]const u8 = null;
find_zig: { find_zig: {
if (config.zig_exe_path) |exe_path| { if (config.zig_exe_path) |exe_path| {
if (std.fs.path.isAbsolute(exe_path)) not_valid: { if (std.fs.path.isAbsolute(exe_path)) not_valid: {
@ -1827,7 +1824,13 @@ pub fn main() anyerror!void {
break :blk try std.fs.path.resolve(allocator, &[_][]const u8{ cache_dir_path, "zls" }); break :blk try std.fs.path.resolve(allocator, &[_][]const u8{ cache_dir_path, "zls" });
}; };
try document_store.init(allocator, zig_exe_path, build_runner_path, build_runner_cache_path, config.zig_lib_path); try document_store.init(
allocator,
config.zig_exe_path,
build_runner_path,
build_runner_cache_path,
config.zig_lib_path,
);
defer document_store.deinit(); defer document_store.deinit();
// This JSON parser is passed to processJsonRpc and reset. // This JSON parser is passed to processJsonRpc and reset.