blob: 6262f313522dc06307f58861124b9b3d5ab3c764 [file] [log] [blame]
{
// This is a checked-in VSCode workspace configuration file that can be used
// instead of directly opening $FUCHSIA_DIR in VSCode.
//
// It's an opt-in workspace configuration that contains settings for:
// - vscode itself
// - LSP settings for working correctly with the fuchsia.git checkout
// - etc.
//
// In terms of precedence, VSCode uses the following order in which settings
// are applied (merged together).
//
// 0) default settings
// 1) user's settings
// 2) remote machine settings
// 3) workspace settings (this file)
// 4) workspace folder settings
//
//
// For details, see:
// https://code.visualstudio.com/docs/getstarted/settings#_settings-precedence
////////
// VSCode Workspace Contents
//
// These are the workspace folders, and general VSCode workspace
// configuration itself.
//
// See https://code.visualstudio.com/docs/editor/workspaces for more
// information on this section of the file.
"folders": [
{
// The whole project directory.
"path": "."
}
],
////////
// Recommended Extensions for VSCode and Fuchsia
//
"extensions": {
"recommendations": [
// Fuchsia's own VSCode extension. Provides ZXDB support, a log view, and
// default target selection.
"fuchsia-authors.vscode-fuchsia",
// Fuchsia's own FIDL LSP extension
"fuchsia-authors.language-fidl",
// The official LSP for Rust, rust-analyzer.
"rust-lang.rust-analyzer",
// The GN language server from Microsoft
"msedge-dev.gnls",
// The official Clang LSP for C/C++.
"llvm-vs-code-extensions.vscode-clangd",
// Provides GN syntax highlighting.
"npclaudiu.vscode-gn",
// Supports inserting and formatting C/C++ include guards as required
// in Fuchsia.
"akiramiyakoda.cppincludeguard",
// Adds JSON5 syntax highlighting (including *.cml files).
"mrmlnc.vscode-json5",
// Linkifies Fuchsia URLs (components, bugs, etc.)
"RichKadel.fuchsiaware",
// Adds coverage gutters for `fx coverage`.
"ryanluker.vscode-coverage-gutters",
],
"unwantedRecommendations": [
// Conflicts with vscode-clangd intellisense, and vscode-clangd is the
// preferred C++ extension.
"ms-vscode.cpptools",
// Redundant and conflicts with gnls, which is preferred.
"persidskiy.vscode-gnformat",
// Superseded by vscode-fuchsia, which provides zxdb support.
"fuchsia-authors.zxdb",
]
},
"settings": {
////////
// Extra file associations (patterns to languages)
"files.associations": {
"*.cml": "json5",
"*.inc": "cpp",
// Golden files
"*.c.golden": "c",
"*.cc.golden": "cpp",
"*.cml.golden": "json5",
"*.dart.golden": "dart",
"*.fidl.golden": "fidl",
"*.gn.golden": "gn",
"*.go.golden": "go",
"*.h.golden": "cpp",
"*.json.golden": "json",
"*.md.golden": "markdown",
"*.rs.golden": "rust",
"*.yaml.golden": "yaml",
},
////////
// Dart
//
"dart.sdkPath": "${workspaceFolder}/prebuilt/third_party/dart/linux-x64",
////////
// Rust
//
// This works around an OOM issue with the vscode extension-host's
// implementation of file-watching.
// see: https://github.com/rust-lang/rust-analyzer/issues/12572
// see: https://github.com/microsoft/vscode/issues/153154
"rust-analyzer.files.watcher": "server",
"rust-analyzer.server.path": "${workspaceFolder}/prebuilt/third_party/rust/linux-x64/bin/rust-analyzer",
// Use clippy.
"rust-analyzer.check.overrideCommand": [
"${workspaceFolder}/scripts/fx",
"clippy",
"--raw",
"--all"
],
// Remap the diagnostics results from RA to handle the change in working dir
// from the workspace root to the root_build_dir in GN/Ninja.
"rust-analyzer.diagnostics.remapPrefix": {
"../../": "${workspaceFolder}",
},
////////
// C/C++
// Formats C/C++ include guards to match Fuchsia style.
"C/C++ Include Guard.Comment Style": "Line",
"C/C++ Include Guard.Macro Type": "Filepath",
"C/C++ Include Guard.Suffix": "_H_",
"C/C++ Include Guard.Spaces After Endif": 2,
////////
// Go
"go.goroot": "${workspaceFolder}/prebuilt/third_party/go/linux-x64",
"gopls": {
// Restrict directories that gopls will search in, otherwise it can fail
// with "Exhausted" after one million files.
"build.directoryFilters": [
"-.cache",
"-.cipd",
"-.git",
"-.jiri_root",
"-out",
"-prebuilt",
],
// Used over specifying a build tag so that cgo is also aware.
"build.env": {
"GOOS": "fuchsia",
},
},
////////
// Bazel
//
"bazel.enableCodeLens": true,
// See: https://github.com/bazelbuild/vscode-bazel/issues/236
//"bazel.executable": "${workspaceFolder}/tools/devshell/bazel",
////////
// VSCode file exclusions (marked as hidden in the Workspace Explorer)
"files.exclude": {
"**/.DS_Store": true,
"**/.cipd": true,
"**/.git": true,
"**/__pycache__": true,
},
// sub repos managed by jiri are listed in .gitignore, so make sure that
// they are not hidden.
"explorer.excludeGitIgnore": false,
////////
// Files that are excluding from file-watching notifications
"files.watcherExclude": {
"**/.DS_Store": true,
"**/.cipd": true,
".jiri_root/goma_cache/**": true,
".jiri_root/update_history*/**": true,
"out/**": true,
".cache/**": true,
},
// This significantly speeds up search and avoids polluting results with
// build output, third party code, and prebuilt binaries.
"search.useIgnoreFiles": true,
// Don't follow symlinks (into other parts of the tree)
"search.followSymlinks": false,
////////
// Code coverage
"coverage-gutters.coverageBaseDir": ".",
"coverage-gutters.showLineCoverage": true,
"coverage-gutters.coverageFileNames": [ "lcov.info" ],
// Disable task auto-detection for supported project configuration files
// (e.g. NPM's project.json). This significantly speeds up task running.
"task.autoDetect": "off",
},
// Tasks run with the "Tasks: Run Task" command (bind a shortcut!).
"tasks": {
"version": "2.0.0",
"tasks": [
{
"label": "Fuchsia: fx build",
"type": "shell",
"command": "fx build",
"problemMatcher": [],
},
{
"label": "Fuchsia: fx build (Rust problem matcher)",
"type": "shell",
"command": "fx build",
"problemMatcher": [
{
"base": "$rustc-watch",
// Error file paths are relative to a build directory. The names
// are arbitrary.
"fileLocation": [
"relative",
"${workspaceFolder}/a/b"
],
}
],
},
{
// This task requires the ms-vscode.cpptools extension.
"label": "Fuchsia: fx build (C++ problem matcher)",
"type": "shell",
"command": "fx build",
"problemMatcher": [
{
"base": "$gcc",
// Error file paths are relative to a build directory. The names
// are arbitrary.
"fileLocation": [
"relative",
"${workspaceFolder}/a/b"
],
}
],
},
{
"label": "Fuchsia: fx serve",
"type": "shell",
"command": "fx serve",
"problemMatcher": []
},
{
"label": "Fuchsia: fx ota",
"type": "shell",
"command": "fx ota",
"problemMatcher": []
},
{
"label": "Fuchsia: ffx doctor",
"type": "shell",
"command": "ffx doctor",
"problemMatcher": []
},
{
"label": "Fuchsia: fx flash",
"type": "shell",
"command": "fx flash",
"problemMatcher": []
},
{
"label": "Fuchsia: ffx emu start",
"type": "shell",
"command": "ffx emu start",
"problemMatcher": []
},
{
"label": "Fuchsia: ffx emu start --headless",
"type": "shell",
"command": "ffx emu start --headless",
"problemMatcher": []
},
{
"label": "Fuchsia: ffx emu stop",
"type": "shell",
"command": "ffx emu stop",
"problemMatcher": []
},
{
"label": "Fuchsia: ffx component list",
"type": "shell",
"command": "ffx component list",
"problemMatcher": []
},
{
"label": "Fuchsia: ffx component list --only",
"type": "shell",
"command": "ffx component list --only ${input:COMPONENT_LIST_ONLY}",
"problemMatcher": []
},
{
"label": "Fuchsia: ffx component show",
"type": "shell",
"command": "ffx component show ${input:COMPONENT_FILTER}",
"problemMatcher": []
},
{
"label": "Fuchsia: ffx component doctor",
"type": "shell",
"command": "ffx component doctor ${input:TARGET_MONIKER}",
"problemMatcher": []
},
{
"label": "Fuchsia: ffx component run",
"type": "shell",
"command": "ffx component run ${input:TARGET_MONIKER} ${input:COMPONENT_URL}",
"problemMatcher": []
},
{
"label": "Fuchsia: ffx component stop",
"type": "shell",
"command": "ffx component stop ${input:TARGET_MONIKER}",
"problemMatcher": []
},
{
"label": "Fuchsia: ffx component reload",
"type": "shell",
"command": "ffx component reload ${input:TARGET_MONIKER}",
"problemMatcher": []
},
{
"label": "Fuchsia: ffx component destroy",
"type": "shell",
"command": "ffx component destroy ${input:TARGET_MONIKER}",
"problemMatcher": []
},
{
"label": "Fuchsia: fx test",
"type": "shell",
"command": "fx test ${input:TEST_NAME}",
"problemMatcher": []
},
{
"label": "Fuchsia: fx coverage",
"type": "shell",
"command": "fx coverage --lcov-output-path ${workspaceFolder}/lcov.info ${input:TEST_NAME}",
"problemMatcher": []
},
{
"label": "Fuchsia: jiri upload",
"type": "shell",
"command": "jiri upload",
"problemMatcher": [],
},
{
"label": "Fuchsia: jiri update",
"type": "shell",
"command": "jiri update",
"problemMatcher": [],
},
],
"inputs": [
{
"id": "TEST_NAME",
"type": "promptString",
"description": "Test name"
},
{
"id": "TARGET_MONIKER",
"type": "promptString",
"description": "TARGET_MONIKER: The destination moniker of a new component instance. The moniker must include a component collection on the path. E.g. '/core/ffx-laboratory:hello-world'"
},
{
"id": "COMPONENT_URL",
"type": "promptString",
"description": "COMPONENT_URL: The resource location of a component. E.g. 'fuchsia-pkg://fuchsia.com/hello-world#meta/hello-world-cpp.cm'"
},
{
"id": "COMPONENT_FILTER",
"type": "promptString",
"description": "COMPONENT_FILTER: URL or moniker of component instance. Partial matches allowed."
},
{
"id": "COMPONENT_LIST_ONLY",
"type": "promptString",
"description": "--only: cmx, cml, running, stopped, ancestor:foo, descendant:foo, relatives:foo"
},
]
}
}