pokeplatinum/docs/editor_setup/visual_studio_code.md

119 lines
5.0 KiB
Markdown

# Editor Setup: Visual Studio Code
This document assumes that you have a functioning install of [Visual Studio
Code][vscode] and are familiar with installing extensions via the
[Marketplace][vscode-marketplace].
## Table of Contents
<!--toc:start-->
- [Install the Microsoft C/C++ Extensions](#install-the-microsoft-cc-extensions)
- [Generate the Compilation Database](#generate-the-compilation-database)
- [Configure C/C++ Project Properties](#configure-cc-project-properties)
- [Optional: Add Language Support for Meson](#optional-add-language-support-for-meson)
- [Advanced: Use `clangd` for C/C++ Integration](#advanced-use-clangd-for-cc-integration)
<!--toc:end-->
## Install the Microsoft C/C++ Extensions
If you have not already, install [Microsoft's C/C++ extension][vscode-cpptools]
to add language support for C and C++ to Visual Studio Code. This extension will
enable rich completions and symbol navigation while editing C and C++ code. It
will also integrate automated code-formatting using `clang-format`, following
the configuration outlined in the `.clang-format` file at the root of the
project. For further details on the extension's features, refer to [the official
documentation][vscode-cpp-ide].
In the following sections, we will configure this extension to integrate with
`pokeplatinum`'s toolchain.
## Generate the Compilation Database
If you have not already, generate the compilation database by invoking the
following from the root of the project:
```bash
python tools/devtools/gen_compile_commands.py
```
You should now see a file named `compile_commands.json` in the root of the
project. This file will be used to instruct the `clangd` language server on how
to compile individual source files.
## Configure C/C++ Project Properties
The C/C++ extension reads configuration for a project from the file
`.vscode/c_cpp_properties.json`. The `.vscode` folder should already be present
in the root of your project. In that folder, create the `c_cpp_properties.json`
file, if it is not already present. The following configuration can be used as a
starting point:
```json
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/build/**",
"${workspaceFolder}/include/**"
],
"forcedInclude": [ "${workspaceFolder}/include/pch/global_pch.h" ],
"defines": [ "SDK_ARM9", "BOOL=int" ],
"compilerPath": "/usr/bin/arm-none-eabi-gcc",
"cStandard": "c99",
"cppStandard": "c++17",
"intelliSenseMode": "linux-gcc-arm",
"compileCommands": "${workspaceFolder}/compile_commands.json"
}
],
"version": 4
}
```
To ensure that the configuration loads correctly in your editor, replace the
`name` and `intelliSenseMode` properties according to the values specified in
the following table for specific platforms:
| Platform | `name` | `intelliSenseMode` |
| --------------- | --------- | ------------------ |
| Windows - MSYS2 | `Windows` | `windows-gcc-arm` |
| Windows - WSL1 | `Windows` | `windows-gcc-arm` |
| Windows - WSL2 | `Linux` | `linux-gcc-arm` |
| Linux | `Linux` | `linux-gcc-arm` |
| macOS | `macOS` | `macos-gcc-arm64` |
> [!NOTE]
> Visual Studio Code may take a long time to initialize Intellisense when first
> opening the repository, during which time the application may appear to be
> unresponsive. This is expected, as it attempts to build a complete database of
> symbols declared within the project. This unresponsiveness should only apply
> to the first time that a source file is opened within the project; future
> start-up times should be much faster.
## Optional: Add Language Support for Meson
The [Meson extension][vscode-meson] for Visual Studio Code will provide support
for the Meson build-system language. With direct configuration for the project
supplied by the generated `compile_commands.json`, this extension is largely
useful for syntax highlighting and code snippets used when making modifications
to the build configuration.
> [!WARNING]
> If prompted, do **NOT** use this extension to configure IntelliSense, as it
> may override previous configuration!
## Advanced: Use `clangd` for C/C++ Integration
If desired, a user may install [the LLVM `clangd` extension][vscode-clangd]
instead of the Microsoft C/C++ extension. Unlike the Microsoft-branded
extension, the `clangd` extension will build its symbol database incrementally;
this can provide a more immediately-responsive editing experience when first
opening a project source file at the cost of a higher memory footprint.
[vscode]: https://code.visualstudio.com/
[vscode-marketplace]: https://code.visualstudio.com/docs/editor/extension-marketplace
[vscode-cpptools]: https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools
[vscode-cpp-ide]: https://code.visualstudio.com/docs/cpp/cpp-ide
[vscode-meson]: https://marketplace.visualstudio.com/items?itemName=mesonbuild.mesonbuild
[vscode-clangd]: https://marketplace.visualstudio.com/items?itemName=llvm-vs-code-extensions.vscode-clangd