royqh1979 / RedPanda-CPP

A light-weight C/C++ IDE based on Qt
GNU General Public License v3.0
987 stars 107 forks source link

如果把 lambda 表达式 赋值给一个 auto 变量,那么编辑器不会提示 lambda 表达式的形参 #292

Closed West-Pavilion closed 7 months ago

West-Pavilion commented 7 months ago

如果把 lambda 表达式 赋值给一个 auto 变量,那么编辑器不会提示 lambda 表达式的形参

有时候,定义了一个 lambda 表达式 后并不想要立即使用它,于是会考虑将其保存在一个 auto 类型的变量中。

然而,如果把 lambda 表达式 赋值给一个 auto 变量,并且该 lambda 表达式 中包含形参时,会发现编辑器不会在 lambda 表达式的函数体内提示其所声明的形参,编辑器似乎忽略了其所声明的形参的存在。如果不把 lambda 表达式 赋值给一个变量,则编辑器可以正确提示其所声明的形参。

参考如下代码:

#include <iostream>

/* 如果把 lambda 表达式 赋值给一个 auto 变量,那么编辑器不会提示 lambda 表达式的形参 */

int main(){
    auto print = [](const std::string& s){
//      s.
        std::cout << s;
    };
    std::string str("如果把 lambda 表达式 赋值给一个 auto 变量,"
    "编辑器就不会提示其形参\n");
    print(str);

//  如果不将 lambda 表达式 赋值给一个 auto 变量,则编辑器可以正常提示其形参
    [](const std::string& s){
//      s.
        std::cout << s;
    }(str);
}

实际效果图:

屏幕截图(279) 如上图,lambda 表达式 带赋值的情况下不支持智能补全提示

屏幕截图(280) 如上图,如果 lambda 表达式 不带赋值,那么编辑器能够给出正确的智能补全提示

下面是对应的测试代码:

如果把 lambda 表达式 赋值给一个 auto 变量,那么编辑器不会提示 lambda 表达式的形参.zip

West-Pavilion commented 7 months ago

该 issue 已于 小熊猫C++ 2.27.2486 处理,现在小熊猫C++ 已经支持赋值语句内定义的 lambda 表达式的形参识别及补全提示了