{
// Note!
// Set the "chromeOutputDir" input string below, then run
// "0-set_chrome_output_directory" to set the `current_link` symbolic link
// (see below).
"version": "2.0.0",
"runner": "terminal",
// The default problem matcher matches build output, which is useful for most tasks.
"problemMatcher": [
// Matches output from clang.
{
"owner": "cpp",
"fileLocation": ["relative", "${config:chrome.outputDir}"],
"pattern": {
"regexp": "^(gen/.*):(\\d+):(\\d+):\\s+(warning|\\w*\\s?error):\\s+(.*)$",
"file": 1, "line": 2, "column": 3, "severity": 4, "message": 5
}
},
{
"owner": "cpp",
"fileLocation": ["relative", "${workspaceFolder}"],
"pattern": {
"regexp": "^../../(.*):(\\d+):(\\d+):\\s+(warning|\\w*\\s?error):\\s+(.*)$",
"file": 1, "line": 2, "column": 3, "severity": 4, "message": 5
}
},
// Matches output from clang-cl / msvc.
{
"owner": "cpp",
"fileLocation": [
"relative",
"${config:chrome.outputDir}"
],
"pattern": {
"regexp": "^(gen/.*)\\((\\d+),(\\d+)\\):\\s+(warning|\\w*\\s?error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
},
{
"owner": "cpp",
"fileLocation": [
"relative",
"${workspaceFolder}"
],
"pattern": {
"regexp": "^../../(.*)\\((\\d+),(\\d+)\\):\\s+(warning|\\w*\\s?error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
},
{
"owner": "cpp",
"fileLocation": ["relative", "${config:chrome.outputDir}"],
"pattern": {
"regexp": "^(gen/.*?):(.*):\\s+(warning|\\w*\\s?error):\\s+(.*)$",
"file": 1, "severity": 3, "message": 4
}
},
{
"owner": "cpp",
"fileLocation": ["relative", "${workspaceFolder}"],
"pattern": {
"regexp": "^../../(.*?):(.*):\\s+(warning|\\w*\\s?error):\\s+(.*)$",
"file": 1, "severity": 3, "message": 4
}
}
],
"options": {
// It's important to set the CWD to the output directory so that file paths
// are linked correctly in the terminal output.
"cwd": "${config:chrome.outputDir}"
},
"inputs": [
{
// See 'Set Chrome Output Directory'.
"type": "pickString",
"id": "chromeOutputDir",
"description": "Chrome output directory:",
// Configure this to point to all the output directories you use (as a
// relative path from ${workspaceFolder}).
"options": [
"out/Debug",
"out/Release"
]
},
{
"type": "promptString",
"id": "gtestFilter",
"description": "Filter for 4-test_current_file_with_filter",
"default": "*"
}
],
"tasks": [
// Set the Chrome output directory to be used in future task runs.
// This uses a symbolic link to remember the current output directory.
// If you want to use this, make sure chrome.outputDir is configured to
// point to the link created at ${workspaceFolder}/out/current_link.
// Alternatively:
// * If you want to be prompted for the output directory each
// time you run a command, replace
// ${config:chrome.outputDir}
// with
// ${input:chromeOutputDir}
// everywhere in this file.
//
// * If you want to have different tasks for different output directories,
// just create duplicate tasks and hard-code the output directory used.
{
"label": "0-set_chrome_output_directory",
"command": "rm -f ${workspaceFolder}/out/current_link; ln -s ${workspaceFolder}/${input:chromeOutputDir} ${workspaceFolder}/out/current_link",
"type": "shell",
// The default problem matcher doesn't make sense here, so remove it.
"problemMatcher": [],
"options": {
"cwd": "${workspaceFolder}"
}
},
// Some general-purpose build and test tasks. These all inherit the
// problemMatcher at the top of the file.
{
"label": "1-build_chrome",
"type": "shell",
"command": "autoninja",
"args": ["-C", "${config:chrome.outputDir}", "chrome"],
"group": "test"
},
{
"label": "2-build_all",
"type": "shell",
"command": "autoninja",
"args": ["-C", "${config:chrome.outputDir}"]
},
{
"label": "3-test_current_file",
"type": "shell",
"command": "${workspaceFolder}/tools/autotest.py",
"args": ["-C", "${config:chrome.outputDir}", "--run-all", "${file}"]
},
{
"label": "4-test_current_file_with_filter",
"type": "shell",
"command": "${workspaceFolder}/tools/autotest.py",
"args": ["-C", "${config:chrome.outputDir}", "--gtest_filter", "${input:gtestFilter}", "${file}"]
},
{
"label": "5-test_current_line",
"type": "shell",
"command": "${workspaceFolder}/tools/autotest.py",
"args": ["-C", "${config:chrome.outputDir}", "--line", "${lineNumber}", "${file}"]
},
{
"label": "6-test_current_directory",
"type": "shell",
"command": "${workspaceFolder}/tools/autotest.py",
"args": ["-C", "${config:chrome.outputDir}", "--run-all", "${fileDirname}"]
},
{
"label": "7-build_current_file",
"type": "shell",
"command": "compile_single_file",
"args": ["--build-dir=${config:chrome.outputDir}", "--file-path=${file}"]
},
// Some more specific build tasks, which hard-code the output directory.
{
"label": "8-build_chrome_debug",
"type": "shell",
"command": "autoninja",
"args": ["-C", "${workspaceFolder}/out/Debug", "chrome"]
},
{
"label": "9-build_chrome_release",
"type": "shell",
"command": "autoninja",
"args": ["-C", "${workspaceFolder}/out/Release", "chrome"]
},
{
"label": "10-build_test_debug",
"type": "shell",
"command": "autoninja",
"args": ["-C", "${workspaceFolder}/out/Debug", "unit_tests", "components_unittests", "browser_tests", "extensions_unittests", "ash_unittests"]
},
{
"label": "11-generate_compile_commands",
"type": "shell",
"command": "${workspaceFolder}/tools/clang/scripts/generate_compdb.py",
"args": ["-p", "${config:chrome.outputDir}", ">", "${workspaceFolder}/compile_commands.json"]
}
]
}