Skip to content

Instantly share code, notes, and snippets.

@deadalusai
Last active June 7, 2025 14:53
Show Gist options
  • Save deadalusai/9e13e36d61ec7fb72148 to your computer and use it in GitHub Desktop.
Save deadalusai/9e13e36d61ec7fb72148 to your computer and use it in GitHub Desktop.
VS Code tasks.json for Rust/Cargo
/*
Before using this tasks.json you may like to consider trying one of the following VS Code extensions:
rust-analyzer
Marketplace: https://marketplace.visualstudio.com/items?itemName=matklad.rust-analyzer
Source: https://github.com/rust-analyzer/rust-analyzer
rls
Marketplace: https://marketplace.visualstudio.com/items?itemName=rust-lang.rust
Source: https://github.com/rust-lang/rls-vscode
*/
// Available variables which can be used inside of strings.
// ${workspaceRoot}: the root folder of the team
// ${file}: the current opened file
// ${fileBasename}: the current opened file's basename
// ${fileDirname}: the current opened file's dirname
// ${fileExtname}: the current opened file's extension
// ${cwd}: the current working directory of the spawned process
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"args": ["build", "-v"],
"command": "cargo",
"group": "build",
"problemMatcher": [
{
"owner": "rust",
"fileLocation": ["relative", "${workspaceRoot}"],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(\\d+):(\\d+)\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"endLine": 4,
"endColumn": 5,
"severity": 6,
"message": 7
}
}
]
},
{
"label": "clean",
"args": ["clean"],
"command": "cargo",
"presentation": {
"reveal": "always"
}
},
{
"label": "run",
"args": ["run", "-v"],
"command": "cargo",
"presentation": {
"reveal": "always"
},
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": [
{
"owner": "rust",
"fileLocation": ["relative", "${workspaceRoot}"],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(\\d+):(\\d+)\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"endLine": 4,
"endColumn": 5,
"severity": 6,
"message": 7
}
}
]
},
{
"label": "test",
"args": ["test"],
"command": "cargo",
"presentation": {
"reveal": "always"
},
"group": {
"kind": "z",
"isDefault": false
},
"problemMatcher": [
{
"owner": "rust",
"fileLocation": ["relative", "${workspaceRoot}"],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(\\d+):(\\d+)\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"endLine": 4,
"endColumn": 5,
"severity": 6,
"message": 7
}
},
{
"owner": "rust",
"fileLocation": ["relative", "${workspaceRoot}"],
"severity": "error",
"pattern": {
"regexp": "^.*panicked\\s+at\\s+'(.*)',\\s+(.*):(\\d+)$",
"message": 1,
"file": 2,
"line": 3
}
}
]
},
{
"label": "bench",
"args": ["bench"],
"command": "cargo",
"presentation": {
"reveal": "always"
},
"group": "test",
"problemMatcher": [
{
"owner": "rust",
"fileLocation": ["relative", "${workspaceRoot}"],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(\\d+):(\\d+)\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"endLine": 4,
"endColumn": 5,
"severity": 6,
"message": 7
}
},
{
"owner": "rust",
"fileLocation": ["relative", "${workspaceRoot}"],
"severity": "error",
"pattern": {
"regexp": "^.*panicked\\s+at\\s+'(.*)',\\s+(.*):(\\d+)$",
"message": 1,
"file": 2,
"line": 3
}
}
]
}
]
}
@wonbyte
Copy link

wonbyte commented Jun 18, 2021

i see got it!

@epenabella
Copy link

use --manifest-path

image

@rehierl
Copy link

rehierl commented Jun 7, 2025

(On Linux Mint) I find the tasks in the $project/.vscode/tasks.json files quite useful. After all, VS code allows to set keyboard shortcuts (Ctrl+K) to open the task selection popup (Ctrl+P / Tasks: RunTask) and to re-run the last task (Ctrl+P / Tasks: Rerun Last Task). Same with $project/.vscode/launch.json - just hit F5 to start debugging. In a project with plenty of source files it tends to get a little tedious having to find the entry point, and then to click on Codelens' links - i.e. "Run" or "Debug".

@mbartelsm

  • In the build and run tasks, you can now use "$rustc" instead of the regex in the "problemMatcher" property.
  • More alternatives will be shown in the auto-completion popup when you enter the problem matcher's value - i.e. $rust-panic, $rustc, $rustc-json, $rustc-watch.
  • The "test" task complains about a missing "type" property, which should most likely be "type": "cargo",
  • In the "test" task the linter complains about the "kind" property in the "group" object - only "build", "test" or "none" are allowed.
{//- $project/.vscode/tasks.json
  {//- run "cargo test"
    "label": "test",
    "group": "test",
    "type": "cargo",
    "command": "test",
    "args": [],
    "presentation": {
      "reveal": "always"
    },
    "problemMatcher": ...,
  }
}

@epenabella

Thanks for the hints on launch.json. However, the following also seems to work.

{//- $project/.vscode/launch.json
  "version": "0.2.0",
  "configurations": [
    {
      "name": "debug rust",
      "type": "lldb",
      "request": "launch",
      "preLaunchTask": "build",//- name of the task in tasks.json
      "program": "${workspaceFolder}/target/debug/rust-test",
      "args": [],
      "cwd": "${workspaceFolder}",
      "console": "integratedTerminal",
    },
  ]
}

Anyways, thanks to all for this gist!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment