microsoft / microsoft/vscode-cpptools
VcFormat setting C_Cpp.vcFormat.indent.lambdaBracesWhenParameter:true not respected when lambda has non trivial capture
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 6.2k
- Forks
- 1.7k
- Avg merge
- 14h 46m
- Merged PRs (30d)
- 61
Description

Bug type: Language Service
Describe the bug
If a lambda used as a parameter to a function has a capture list with an non trivial assignment, [q = p + 1], the lambda body is not indented properly. "C_Cpp.vcFormat.indent.lambdaBracesWhenParameter": true is the default value, so it is expected that parameter lambdas have their bodies indented.
- OS and Version: Ubuntu 18.04.6
- VS Code Version: 1.61.2
- C/C++ Extension Version:1.7.1
- Other extensions you installed (and if the issue persists after disabling them): all other extensions are disabled
Steps to reproduce
- Ensure vcFormat is the cpp formatter
- format code in the sample below
Expected behavior
parameter lambdas that have non trivial capture lists should be indented relative to the function in which they are a parameter
Code sample and logs
#include <future>
void test()
{
int q = 1;
int p = 8;
std::async(
[q]() mutable
{
// indented
});
std::async(
[q = p + 1]()
{
// not indented
});
}
Configurations in c_cpp_properties.json
n/a
settings.json
{
"C_Cpp.formatting": "vcFormat"
}
By the way there is a similar (opposite?) bug in visual studio, not sure if it's relevant:
https://developercommunity.visualstudio.com/t/visual-studio-may-indent-lambda-braces-despite-for/1004592
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the provided C++ sample and the C_Cpp.formatting setting configured to vcFormat, then compare formatting for the simple and non-trivial lambda captures. Done means parameter lambdas with non-trivial capture lists have their bodies indented relative to the containing function.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp
- Domain
- tooling
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100