Skip to content

Format on save and go to definition ar very slow with the Zig extension on Windows #45420

@Zablas

Description

@Zablas

Reproduction steps

  1. Start Zed.
  2. Make sure format on save is enabled in the editor settings.
  3. Open a Zig project.
  4. Slightly edit a file.
  5. Save the file.

Current vs. Expected behavior

Current: it takes several seconds to format the file before it is saved.
Expected: it should save the file a lot faster.

Problem seems to be Windows only.

Zed version and system specs

Zed 0.217.3
80433cb
0.217.3+stable.105.80433cb239e868271457ac376673a5f75bc4adb1

OS: Windows 11
Processor AMD Ryzen 7 8845HS w/ Radeon 780M Graphics (3.80 GHz)
Installed RAM 32,0 GB (28,8 GB usable)
System type 64-bit operating system, x64-based processor

Attach Zed log file

Zed.log

// Send:
{"jsonrpc":"2.0","id":8,"method":"textDocument/documentHighlight","params":{"textDocument":{"uri":"file:///C:/zigsrc/ZedTests/src/main.zig"},"position":{"line":15,"character":11}}}

// Receive:
{"jsonrpc":"2.0","id":8,"result":null}

// Send:
{"jsonrpc":"2.0","id":9,"method":"textDocument/codeAction","params":{"textDocument":{"uri":"file:///C:/zigsrc/ZedTests/src/main.zig"},"range":{"start":{"line":15,"character":11},"end":{"line":15,"character":11}},"context":{"diagnostics":[],"only":["quickfix","refactor","source","source.organizeImports","source.fixAll"]}}}

// Send:
{"jsonrpc":"2.0","method":"$/cancelRequest","params":{"id":9}}

// Send:
{"jsonrpc":"2.0","id":10,"method":"textDocument/documentHighlight","params":{"textDocument":{"uri":"file:///C:/zigsrc/ZedTests/src/main.zig"},"position":{"line":19,"character":19}}}

// Receive:
{"jsonrpc":"2.0","id":10,"result":null}

// Send:
{"jsonrpc":"2.0","id":11,"method":"textDocument/codeAction","params":{"textDocument":{"uri":"file:///C:/zigsrc/ZedTests/src/main.zig"},"range":{"start":{"line":19,"character":19},"end":{"line":19,"character":19}},"context":{"diagnostics":[],"only":["quickfix","refactor","source","source.organizeImports","source.fixAll"]}}}

// Receive:
{"jsonrpc":"2.0","id":9,"result":[{"title":"organize @import","kind":"source.organizeImports","isPreferred":true,"edit":{"changes":{"file:///c:/zigsrc/ZedTests/src/main.zig":[{"range":{"start":{"line":0,"character":0},"end":{"line":0,"character":0}},"newText":"const std = @import("std");\n\nconst ZedTests = @import("ZedTests");\n\n"},{"range":{"start":{"line":0,"character":0},"end":{"line":1,"character":0}},"newText":""},{"range":{"start":{"line":1,"character":0},"end":{"line":3,"character":0}},"newText":""}]}}}]}

// Send:
{"jsonrpc":"2.0","method":"textDocument/didChange","params":{"textDocument":{"uri":"file:///C:/zigsrc/ZedTests/src/main.zig","version":1},"contentChanges":[{"range":{"start":{"line":19,"character":18},"end":{"line":19,"character":19}},"text":""}]}}

// Send:
{"jsonrpc":"2.0","method":"$/cancelRequest","params":{"id":11}}

// Send:
{"jsonrpc":"2.0","id":12,"method":"textDocument/documentHighlight","params":{"textDocument":{"uri":"file:///C:/zigsrc/ZedTests/src/main.zig"},"position":{"line":19,"character":18}}}

// Send:
{"jsonrpc":"2.0","id":13,"method":"textDocument/codeAction","params":{"textDocument":{"uri":"file:///C:/zigsrc/ZedTests/src/main.zig"},"range":{"start":{"line":19,"character":18},"end":{"line":19,"character":18}},"context":{"diagnostics":[],"only":["quickfix","refactor","source","source.organizeImports","source.fixAll"]}}}

// Receive:
{"jsonrpc":"2.0","id":11,"result":[{"title":"organize @import","kind":"source.organizeImports","isPreferred":true,"edit":{"changes":{"file:///c:/zigsrc/ZedTests/src/main.zig":[{"range":{"start":{"line":0,"character":0},"end":{"line":0,"character":0}},"newText":"const std = @import("std");\n\nconst ZedTests = @import("ZedTests");\n\n"},{"range":{"start":{"line":0,"character":0},"end":{"line":1,"character":0}},"newText":""},{"range":{"start":{"line":1,"character":0},"end":{"line":3,"character":0}},"newText":""}]}}}]}

// Receive:
{"jsonrpc":"2.0","id":12,"result":null}

// Send:
{"jsonrpc":"2.0","method":"textDocument/didChange","params":{"textDocument":{"uri":"file:///C:/zigsrc/ZedTests/src/main.zig","version":2},"contentChanges":[{"range":{"start":{"line":17,"character":32},"end":{"line":18,"character":8}},"text":""},{"range":{"start":{"line":17,"character":45},"end":{"line":18,"character":8}},"text":" "},{"range":{"start":{"line":17,"character":55},"end":{"line":18,"character":5}},"text":"))"}]}}

// Send:
{"jsonrpc":"2.0","method":"$/cancelRequest","params":{"id":13}}

// Send:
{"jsonrpc":"2.0","method":"workspace/didChangeWatchedFiles","params":{"changes":[{"uri":"file:///C:/zigsrc/ZedTests/src/main.zig","type":2}]}}

// Send:
{"jsonrpc":"2.0","method":"textDocument/didSave","params":{"textDocument":{"uri":"file:///C:/zigsrc/ZedTests/src/main.zig"}}}

// Send:
{"jsonrpc":"2.0","id":14,"method":"textDocument/codeAction","params":{"textDocument":{"uri":"file:///C:/zigsrc/ZedTests/src/main.zig"},"range":{"start":{"line":17,"character":57},"end":{"line":17,"character":57}},"context":{"diagnostics":[],"only":["quickfix","refactor","source","source.organizeImports","source.fixAll"]}}}

// Receive:
{"jsonrpc":"2.0","method":"textDocument/publishDiagnostics","params":{"uri":"file:///c:/zigsrc/ZedTests/src/main.zig","diagnostics":[]}}

// Send:
{"jsonrpc":"2.0","method":"$/cancelRequest","params":{"id":14}}

// Send:
{"jsonrpc":"2.0","id":15,"method":"textDocument/documentHighlight","params":{"textDocument":{"uri":"file:///C:/zigsrc/ZedTests/src/main.zig"},"position":{"line":15,"character":11}}}

// Send:
{"jsonrpc":"2.0","id":16,"method":"textDocument/codeAction","params":{"textDocument":{"uri":"file:///C:/zigsrc/ZedTests/src/main.zig"},"range":{"start":{"line":15,"character":11},"end":{"line":15,"character":11}},"context":{"diagnostics":[],"only":["quickfix","refactor","source","source.organizeImports","source.fixAll"]}}}

// Receive:
{"jsonrpc":"2.0","id":13,"result":[{"title":"organize @import","kind":"source.organizeImports","isPreferred":true,"edit":{"changes":{"file:///c:/zigsrc/ZedTests/src/main.zig":[{"range":{"start":{"line":0,"character":0},"end":{"line":0,"character":0}},"newText":"const std = @import("std");\n\nconst ZedTests = @import("ZedTests");\n\n"},{"range":{"start":{"line":0,"character":0},"end":{"line":1,"character":0}},"newText":""},{"range":{"start":{"line":1,"character":0},"end":{"line":3,"character":0}},"newText":""}]}}}]}

// Send:
{"jsonrpc":"2.0","method":"textDocument/didChange","params":{"textDocument":{"uri":"file:///C:/zigsrc/ZedTests/src/main.zig","version":3},"contentChanges":[{"range":{"start":{"line":15,"character":10},"end":{"line":15,"character":11}},"text":""}]}}

// Send:
{"jsonrpc":"2.0","method":"$/cancelRequest","params":{"id":15}}

// Send:
{"jsonrpc":"2.0","method":"$/cancelRequest","params":{"id":16}}

// Send:
{"jsonrpc":"2.0","id":17,"method":"textDocument/documentHighlight","params":{"textDocument":{"uri":"file:///C:/zigsrc/ZedTests/src/main.zig"},"position":{"line":15,"character":10}}}

// Send:
{"jsonrpc":"2.0","id":18,"method":"textDocument/codeAction","params":{"textDocument":{"uri":"file:///C:/zigsrc/ZedTests/src/main.zig"},"range":{"start":{"line":15,"character":10},"end":{"line":15,"character":10}},"context":{"diagnostics":[],"only":["quickfix","refactor","source","source.organizeImports","source.fixAll"]}}}

// Receive:
{"jsonrpc":"2.0","method":"textDocument/publishDiagnostics","params":{"uri":"file:///c:/zigsrc/ZedTests/src/main.zig","diagnostics":[]}}

// Receive:
{"jsonrpc":"2.0","id":15,"result":null}

// Send:
{"jsonrpc":"2.0","id":19,"method":"textDocument/definition","params":{"textDocument":{"uri":"file:///C:/zigsrc/ZedTests/src/main.zig"},"position":{"line":17,"character":56}}}

// Send:
{"jsonrpc":"2.0","method":"$/cancelRequest","params":{"id":19}}

// Send:
{"jsonrpc":"2.0","method":"$/cancelRequest","params":{"id":17}}

// Send:
{"jsonrpc":"2.0","method":"$/cancelRequest","params":{"id":18}}

// Send:
{"jsonrpc":"2.0","id":20,"method":"textDocument/documentHighlight","params":{"textDocument":{"uri":"file:///C:/zigsrc/ZedTests/src/main.zig"},"position":{"line":17,"character":56}}}

// Send:
{"jsonrpc":"2.0","id":21,"method":"textDocument/hover","params":{"textDocument":{"uri":"file:///C:/zigsrc/ZedTests/src/main.zig"},"position":{"line":17,"character":56}}}

// Send:
{"jsonrpc":"2.0","id":22,"method":"textDocument/codeAction","params":{"textDocument":{"uri":"file:///C:/zigsrc/ZedTests/src/main.zig"},"range":{"start":{"line":17,"character":56},"end":{"line":17,"character":56}},"context":{"diagnostics":[],"only":["quickfix","refactor","source","source.organizeImports","source.fixAll"]}}}

// Send:
{"jsonrpc":"2.0","method":"textDocument/didChange","params":{"textDocument":{"uri":"file:///C:/zigsrc/ZedTests/src/main.zig","version":4},"contentChanges":[{"range":{"start":{"line":17,"character":56},"end":{"line":17,"character":56}},"text":","}]}}

// Send:
{"jsonrpc":"2.0","method":"$/cancelRequest","params":{"id":20}}

// Send:
{"jsonrpc":"2.0","method":"$/cancelRequest","params":{"id":21}}

// Send:
{"jsonrpc":"2.0","method":"$/cancelRequest","params":{"id":22}}

// Receive:
{"jsonrpc":"2.0","id":14,"result":[{"title":"organize @import","kind":"source.organizeImports","isPreferred":true,"edit":{"changes":{"file:///c:/zigsrc/ZedTests/src/main.zig":[{"range":{"start":{"line":0,"character":0},"end":{"line":0,"character":0}},"newText":"const std = @import("std");\n\nconst ZedTests = @import("ZedTests");\n\n"},{"range":{"start":{"line":0,"character":0},"end":{"line":1,"character":0}},"newText":""},{"range":{"start":{"line":1,"character":0},"end":{"line":3,"character":0}},"newText":""}]}}}]}

// Send:
{"jsonrpc":"2.0","id":23,"method":"textDocument/documentHighlight","params":{"textDocument":{"uri":"file:///C:/zigsrc/ZedTests/src/main.zig"},"position":{"line":17,"character":57}}}

// Send:
{"jsonrpc":"2.0","id":24,"method":"textDocument/definition","params":{"textDocument":{"uri":"file:///C:/zigsrc/ZedTests/src/main.zig"},"position":{"line":17,"character":56}}}

// Send:
{"jsonrpc":"2.0","id":25,"method":"textDocument/codeAction","params":{"textDocument":{"uri":"file:///C:/zigsrc/ZedTests/src/main.zig"},"range":{"start":{"line":17,"character":57},"end":{"line":17,"character":57}},"context":{"diagnostics":[],"only":["quickfix","refactor","source","source.organizeImports","source.fixAll"]}}}

// Send:
{"jsonrpc":"2.0","method":"workspace/didChangeWatchedFiles","params":{"changes":[{"uri":"file:///C:/zigsrc/ZedTests/src/main.zig","type":2}]}}

// Send:
{"jsonrpc":"2.0","method":"textDocument/didSave","params":{"textDocument":{"uri":"file:///C:/zigsrc/ZedTests/src/main.zig"}}}

// Send:
{"jsonrpc":"2.0","method":"$/cancelRequest","params":{"id":24}}

// Receive:
{"jsonrpc":"2.0","id":16,"result":[{"title":"organize @import","kind":"source.organizeImports","isPreferred":true,"edit":{"changes":{"file:///c:/zigsrc/ZedTests/src/main.zig":[{"range":{"start":{"line":0,"character":0},"end":{"line":0,"character":0}},"newText":"const std = @import("std");\n\nconst ZedTests = @import("ZedTests");\n\n"},{"range":{"start":{"line":0,"character":0},"end":{"line":1,"character":0}},"newText":""},{"range":{"start":{"line":1,"character":0},"end":{"line":3,"character":0}},"newText":""}]}}}]}

// Receive:
{"jsonrpc":"2.0","id":17,"result":null}

// Receive:
{"jsonrpc":"2.0","id":20,"result":null}

// Receive:
{"jsonrpc":"2.0","id":19,"result":null}

// Receive:
{"jsonrpc":"2.0","id":21,"result":null}

// Send:
{"jsonrpc":"2.0","method":"textDocument/didChange","params":{"textDocument":{"uri":"file:///C:/zigsrc/ZedTests/src/main.zig","version":5},"contentChanges":[{"range":{"start":{"line":13,"character":20},"end":{"line":14,"character":8}},"text":""},{"range":{"start":{"line":13,"character":24},"end":{"line":14,"character":8}},"text":" "},{"range":{"start":{"line":13,"character":27},"end":{"line":13,"character":27}},"text":");\n try std.testing.expectEqual(\n @as(i32, 42),\n list.pop(),"},{"range":{"start":{"line":18,"character":0},"end":{"line":19,"character":0}},"text":""}]}}

// Send:
{"jsonrpc":"2.0","method":"$/cancelRequest","params":{"id":25}}

// Send:
{"jsonrpc":"2.0","method":"workspace/didChangeWatchedFiles","params":{"changes":[{"uri":"file:///C:/zigsrc/ZedTests/src/main.zig","type":2}]}}

// Send:
{"jsonrpc":"2.0","method":"textDocument/didSave","params":{"textDocument":{"uri":"file:///C:/zigsrc/ZedTests/src/main.zig"}}}

// Send:
{"jsonrpc":"2.0","id":26,"method":"textDocument/codeAction","params":{"textDocument":{"uri":"file:///C:/zigsrc/ZedTests/src/main.zig"},"range":{"start":{"line":18,"character":0},"end":{"line":18,"character":0}},"context":{"diagnostics":[],"only":["quickfix","refactor","source","source.organizeImports","source.fixAll"]}}}

// Receive:
{"jsonrpc":"2.0","method":"textDocument/publishDiagnostics","params":{"uri":"file:///c:/zigsrc/ZedTests/src/main.zig","diagnostics":[]}}

Relevant Zed settings

settings.json

{
"use_on_type_format": false,
"languages": {
"Zig": {
"use_on_type_format": false,
"format_on_save": "on",
"formatter": {
"external": {
"command": "zig",
"arguments": ["fmt", "--stdin"],
},
},
"language_servers": ["zls"],
"code_actions_on_format": {
"source.fixAll": false,
"source.organizeImports": false,
},
},
},
"lsp": {
"zls": {
"binary": {
"path": "C:\zigsrc\zls\zls\zig-out\bin\zls.exe",
},
"settings": {
"zls": {},
},
},
},
}

Relevant Keymap

keymap.json

[
{
"context": "Workspace",
"bindings": {
// "shift shift": "file_finder::Toggle"
}
},
{
"context": "Editor && vim_mode == insert",
"bindings": {
// "j k": "vim::NormalBefore"
}
}
]

(for AI issues) Model provider details

No response

If you are using WSL on Windows, what flavor of Linux are you using?

None

Metadata

Metadata

Assignees

Labels

area:languages/zigZig programming language supportfrequency:uncommonBugs that happen for a small subset of users, special configurations, rare circumstances, etcpriority:P3Papercuts, minor issues with a clear workaround, cosmetic bugs

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions