Zig NEWS

Setting up Visual Studio Code for writing Zig

Jarred Sumner on November 13, 2021

If you're googling VSCode development environment Zig, this post should help. The first step is downloading & installing Zig. Insta...
Collapse
 
guidorice profile image
guidorice

Just noticed: the amazing zls now supports both formatting and syntax hi-lighting!

Collapse
 
dxps profile image
dxps

Just started this journey.
In a VSCode setup, besides having "ZLS for VSCode" extension installed, is there any option to have also formatting and syntax hightlighting, please?
Thanks.

Collapse
 
guidorice profile image
guidorice • Edited

@dxps
I should add, don't forget to do zls config and go through the setup options.

$ zls config
Welcome to the ZLS configuration wizard!
      *
       |\
      /* \
      |  *\
    _/_*___|_    x
      | @ @     /
     @     \   /
      \__-/   /

? Should this configuration be system-wide? (y/n) > n
Found zig executable '/usr/local/bin/zig' in PATH.
? Which code editor do you use? (select one)

  - VSCode
  - Sublime
  - Kate
  - Neovim
  - Vim8
  - Emacs
  - Doom
  - Other

> VSCode
? Do you want to enable snippets? (y/n) > y
? Do you want to enable style warnings? (y/n) > y
? Do you want to enable semantic highlighting? (y/n) > y
? Do you want to enable .* and .? completions? (y/n) > y
Writing config to /Users/alex/Library/Application Support/zls.json ... successful.



To use ZLS in Visual Studio Code, install the 'ZLS for VSCode' extension from 
'https://github.com/zigtools/zls-vscode/releases' or via the extensions menu.
Then, open VSCode's 'settings.json' file, and add:

"zigLanguageClient.path": "[command_or_path_to_zls]"

Thank you for choosing ZLS!
Enter fullscreen mode Exit fullscreen mode
Thread Thread
 
dxps profile image
dxps

Yeah, found it and just did that.
Reloaded and restarted VSCode. Now, there seems to be some syntax highlighting (just on brackets), but no formatting on save.

Thread Thread
 
guidorice profile image
guidorice

@dxps If you run the Format Document command in VSCode it should run zig fmt behind the scenes. Then you can toggle on the general VSCode preference: Editor: Format On Save.

Thread Thread
 
dxps profile image
dxps

Just found out that in the ZLS output ("output" vscode pane), whenever I do save it throws a "need to run as root or suid".
Gotta go to sleep, it's late here, i'll solve it tomorrow.

Thanks again for the help! Really appreciate it!

Thread Thread
 
guidorice profile image
guidorice

Oh wow: i have never seen that error. Cheers I'm sure you'll get it sorted.

Thread Thread
 
dxps profile image
dxps

Issue solved.

I had to do chmod a+x {path/to}/zls
(instead of just chmod +x ...).

Collapse
 
guidorice profile image
guidorice

@dxps zls actually does all that already for VSCode! github.com/zigtools/zls#features

Thread Thread
 
dxps profile image
dxps

Apparently it doesn't in my case.
And the only setting that I have it the (full) path to zls, as required.
Thanks for the quick feedback, Alex!
I'll see if I can find the root cause of it.

Thread Thread
 
guidorice profile image
guidorice

@dxps ah gotcha. Maybe try going through the zls config setup. Also it may be necessary match your zls with your zig version. For example I am running zig 0.9.1 and zls 0.9.0.

Collapse
 
batiati profile image
Rafael Batiati

Very nice post! I would love to know more about setting up VSCode for debuging Zig with gdb/lldb.

Collapse
 
fabioarnold profile image
Fabio Arnold

You can use Microsoft's C++ extension for debugging. When you hit F5 (Launch) in VS Code a wizard should pop up to guide you in creating a launch.json file for your project. Here's an old post of mine on how to do that on Windows: dev.to/fabioarnold/setup-zig-for-g...

One more exception: macOS arm64 isn't yet supported by Microsoft's debugging extension. I found CodeLLDB to be a good replacement.

Collapse
 
kristoff profile image
Loris Cro

I've seen somebody make this work, it required adding a tiny little bit of scripting to vscode (mainly to know where the test executable gets saved) and then it would work very easily, IIRC.

Collapse
 
guidorice profile image
guidorice • Edited

I am using Zig + VSCode on MacOS with this LLDB extension vadimcn.vscode-lldb.
marketplace.visualstudio.com/items...
Some things are a bit unintuitive, like const values are displayed as <no location, value may have been optimized out>, but it basically seems to work.

One thing I have not solved though, is how to run the debugger on tests. How does one generate a test executable for debugging? Basically want to be able to launch an executable that is that same as: zig build test

Also found this article but YMMV, I didn't have any success with that other debugger.
dev.to/watzon/debugging-zig-with-v...

@kristoff @batiati

Thread Thread
 
guidorice profile image
guidorice • Edited

Figured it out: to run the test executable in a debugger, first run zig build test, then a test executable will be in the cache dir:

$ find zig-cache -name test
zig-cache/o/31202ceebbfdf2cf8ee2be9565e64183/test
Enter fullscreen mode Exit fullscreen mode

An example launch.json using the CodeLLDB extension:

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "lldb",
            "request": "launch",
            "name": "Debug test runner",
            "program": "${workspaceFolder}/zig-cache/o/31202ceebbfdf2cf8ee2be9565e64183/test",
            "args": ["src/main.zig"],
            "cwd": "${workspaceFolder}"
        }
    ]
}
Enter fullscreen mode Exit fullscreen mode

Now try hitting some breakpoints in your tests- it works for me.

Thread Thread
 
drew profile image
Drew

Tried this today, but there's nothing in there called test. Have you found a solution that works with 0.11?