microsoft / microsoft/vscode-cpptools

VcFormat setting C_Cpp.vcFormat.indent.lambdaBracesWhenParameter:true not respected when lambda has non trivial capture

Open
#8,382 5 comments 5 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Feature: Code Formatting Language Service more votes needed Visual Studio
Dominant language
TypeScript
Stars
6.2k
Forks
1.7k
Avg merge
14h 46m
Merged PRs (30d)
61

Description

lmabda_indent
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

  1. Ensure vcFormat is the cpp formatter
  2. 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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.