| { |
| // 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", |
| }, |
| |
| |
| //////// |
| // 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", |
| |
| // Use clippy for checkOnSave, if checkOnSave is enabled. |
| "rust-analyzer.checkOnSave.overrideCommand": [ |
| "./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 |
| |
| "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", |
| ] |
| }, |
| |
| //////// |
| // 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" |
| }, |
| ] |
| } |
| } |