@@ -8,19 +8,23 @@ const Client = @import("Client.zig");
88const lsp = @import ("lsp" );
99
1010pub fn reduce (
11+ io : std.Io ,
1112 allocator : std.mem.Allocator ,
13+ environ_map : * const std.process.Environ.Map ,
1214 mode : * Mode ,
1315 config : * const Fuzzer.Config ,
1416 seed : u64 ,
1517 progress_node : std.Progress.Node ,
1618) ! void {
1719 var client : Client = try .init (
20+ io ,
1821 allocator ,
22+ environ_map ,
1923 config .zls_path ,
2024 config .zig_env .zig_exe ,
21- .Pipe ,
25+ .pipe ,
2226 );
23- errdefer _ = client .child_process .kill () catch @panic ( "failed to kill ZLS process" );
27+ errdefer client .child_process .kill (io );
2428
2529 try client .initialize ();
2630
@@ -29,6 +33,7 @@ pub fn reduce(
2933
3034 var keep_running_stderr : std .atomic .Value (bool ) = .init (true );
3135 const stderr_thread : std.Thread = try .spawn (.{}, readStderr , .{
36+ io ,
3237 allocator ,
3338 client .child_process .stderr .? ,
3439 & stderr ,
@@ -40,9 +45,9 @@ pub fn reduce(
4045 }
4146
4247 var rand : std.Random.DefaultPrng = .init (seed );
43- var text_document : lsp.types.TextDocumentItem = .{
48+ var text_document : lsp.types.TextDocument = .{
4449 .uri = client .text_document_uri ,
45- .languageId = "zig" ,
50+ .languageId = .{ . custom_value = "zig" } ,
4651 .version = 0 ,
4752 .text = "" ,
4853 };
@@ -62,28 +67,30 @@ pub fn reduce(
6267
6368 text_document .version += 1 ;
6469 try client .transport ().writeNotification (
70+ io ,
6571 allocator ,
6672 "textDocument/didChange" ,
67- lsp .types .DidChangeTextDocumentParams ,
73+ lsp .types .TextDocument . DidChangeParams ,
6874 .{
6975 .textDocument = .{ .uri = text_document .uri , .version = text_document .version },
70- .contentChanges = &[1 ]lsp.types.TextDocumentContentChangeEvent {
71- .{ .literal_1 = .{ .text = text_document .text } },
76+ .contentChanges = &[1 ]lsp.types.TextDocument.ContentChangeEvent {
77+ .{ .text_document_content_change_whole_document = .{ .text = text_document .text } },
7278 },
7379 },
7480 .{ .emit_null_optional_fields = false },
7581 );
7682 }
7783
7884 const id , const json_message = try utils .fuzzFeatureRandom (
79- client . transport () ,
85+ io ,
8086 allocator ,
87+ client .transport (),
8188 text_document ,
8289 rand .random (),
8390 );
8491 errdefer allocator .free (json_message );
8592
86- utils .waitForResponseToRequest (client . allocator , client .transport (), id ) catch | err | switch (err ) {
93+ utils .waitForResponseToRequest (io , allocator , client .transport (), id ) catch | err | switch (err ) {
8794 error .EndOfStream = > break json_message ,
8895 else = > | e | return e ,
8996 };
@@ -98,6 +105,8 @@ pub fn reduce(
98105 else
99106 stderr .items ;
100107
108+ const now : std.Io.Timestamp = .now (io , .awake );
109+
101110 if (config .rpc ) {
102111 var data = [_ ][]const u8 {
103112 std .mem .asBytes (&@as (u32 , @intCast (
@@ -109,7 +118,7 @@ pub fn reduce(
109118 2 + processed_stderr .len ,
110119 ))),
111120
112- std .mem .asBytes (& std . time . milliTimestamp ()),
121+ std .mem .asBytes (& now . toMilliseconds ()),
113122
114123 std .mem .asBytes (&@as (u8 , @intCast (config .zig_env .version .len ))),
115124 config .zig_env .version ,
@@ -127,22 +136,22 @@ pub fn reduce(
127136 processed_stderr ,
128137 };
129138
130- var file_writer = std .fs .File .stdout ().writer (&.{});
139+ var file_writer = std .Io .File .stdout ().writer (io , &.{});
131140 try file_writer .interface .writeVecAll (& data );
132141 } else {
133- var logs_dir = try std .fs . cwd ().makeOpenPath ( "saved_logs" , .{});
134- defer logs_dir .close ();
142+ var logs_dir = try std .Io . Dir . cwd ().createDirPathOpen ( io , "saved_logs" , .{});
143+ defer logs_dir .close (io );
135144
136145 const file_name = std .fmt .hex (seed ) ++ ".md" ;
137- const entry_file = try logs_dir .createFile (file_name , .{});
138- defer entry_file .close ();
146+ const entry_file = try logs_dir .createFile (io , file_name , .{});
147+ defer entry_file .close (io );
139148
140- var file_writer = entry_file .writer (&.{});
149+ var file_writer = entry_file .writer (io , &.{});
141150
142151 var timestamp_buf : [32 ]u8 = undefined ;
143152 var data = [_ ][]const u8 {
144153 "timestamp: " ,
145- try std .fmt .bufPrint (& timestamp_buf , "{d}" , .{std . time . milliTimestamp () }),
154+ try std .fmt .bufPrint (& timestamp_buf , "{d}" , .{now }),
146155 "\n " ,
147156 "zig version: " ,
148157 config .zig_env .version ,
@@ -164,14 +173,17 @@ pub fn reduce(
164173}
165174
166175fn readStderr (
176+ io : std.Io ,
167177 allocator : std.mem.Allocator ,
168- stderr : std.fs .File ,
178+ stderr : std.Io .File ,
169179 out : * std .ArrayList (u8 ),
170180 keep_running : * std .atomic .Value (bool ),
171181) void {
172182 var buffer : [4096 ]u8 = undefined ;
183+ var reader = stderr .reader (io , & buffer );
184+ var aw : std.Io.Writer.Allocating = .fromArrayList (allocator , out );
185+ defer aw .deinit ();
173186 while (keep_running .load (.acquire )) {
174- const amt = stderr .read (& buffer ) catch break ;
175- out .appendSlice (allocator , buffer [0.. amt ]) catch break ;
187+ _ = reader .interface .streamRemaining (& aw .writer ) catch break ;
176188 }
177189}
0 commit comments