Visual Studio 的 'Format document' 无法识别 Q_FOREACH 宏
Visual Studio's 'Format document' doesn't recognize Q_FOREACH macro
我注意到 Qt 的 Q_FOREACH
宏与 Visual Studio 的某些功能配合不佳:
IntelliSense 将其检测为函数声明:每个 Q_FOREACH
在 class 查看器中显示为 function/method。幸运的是 this answer 解决了这个问题。
代码格式化也将其检测为函数声明(编辑 > 高级 > 格式化文档)。比如我现在的格式样式:
void foo() {
Q_FOREACH (auto action, actions){ (action);
}
for (int i = 0; i < 10; ++i) { (i);
}
}
格式为
void foo()
{
Q_FOREACH(auto action, actions)
{
(action);
}
for (int i = 0; i < 10; ++i) {
(i);
}
}
而不是
void foo()
{
Q_FOREACH (auto action, actions) {
(action);
}
for (int i = 0; i < 10; ++i) {
(i);
}
}
有什么办法可以解决吗?用于解决与 IntelliSense 相关的第一个问题的 cpp.hint 提示已经应用,对格式没有帮助。
PS:我正在使用 Visual Studio Professional 2017 并使用 Visual Studio 2017 版插件 2.1.1(测试版 10.03.2017,下载自 https://download.qt.io/development_releases/vsaddin/).
更新: 为了提供一些额外的上下文,我们刚刚开始从 VS 2010 迁移到 VS 2017。目前我们只迁移了 IDE,工具集仍在 2010 年,其中自然替代 C++11 range-for 不适用于该版本的 C++ 编译器。
据了解,该团队的一些成员一直在使用 AStyle (and its VS plugin) 进行代码格式化,以或多或少可以接受的方式处理这种情况(以及其他与 Qt 相关的事情)。我开始研究迁移到本机代码格式化程序的可能性并发现了这一点,这就是我发布这个问题的原因。
没有解决我问题的相关问题:
- Broken indentation for Qt-specific constructions in Visual Studio
是的。解决方法很简单:不要使用那个宏。这是不必要的。请改用 range-for。你想写:
void foo()
{
for (auto action : actions)
action->doSomething();
}
我注意到 Qt 的 Q_FOREACH
宏与 Visual Studio 的某些功能配合不佳:
IntelliSense 将其检测为函数声明:每个
Q_FOREACH
在 class 查看器中显示为 function/method。幸运的是 this answer 解决了这个问题。代码格式化也将其检测为函数声明(编辑 > 高级 > 格式化文档)。比如我现在的格式样式:
void foo() { Q_FOREACH (auto action, actions){ (action); } for (int i = 0; i < 10; ++i) { (i); } }
格式为
void foo() { Q_FOREACH(auto action, actions) { (action); } for (int i = 0; i < 10; ++i) { (i); } }
而不是
void foo() { Q_FOREACH (auto action, actions) { (action); } for (int i = 0; i < 10; ++i) { (i); } }
有什么办法可以解决吗?用于解决与 IntelliSense 相关的第一个问题的 cpp.hint 提示已经应用,对格式没有帮助。
PS:我正在使用 Visual Studio Professional 2017 并使用 Visual Studio 2017 版插件 2.1.1(测试版 10.03.2017,下载自 https://download.qt.io/development_releases/vsaddin/).
更新: 为了提供一些额外的上下文,我们刚刚开始从 VS 2010 迁移到 VS 2017。目前我们只迁移了 IDE,工具集仍在 2010 年,其中自然替代 C++11 range-for 不适用于该版本的 C++ 编译器。
据了解,该团队的一些成员一直在使用 AStyle (and its VS plugin) 进行代码格式化,以或多或少可以接受的方式处理这种情况(以及其他与 Qt 相关的事情)。我开始研究迁移到本机代码格式化程序的可能性并发现了这一点,这就是我发布这个问题的原因。
没有解决我问题的相关问题:
- Broken indentation for Qt-specific constructions in Visual Studio
是的。解决方法很简单:不要使用那个宏。这是不必要的。请改用 range-for。你想写:
void foo()
{
for (auto action : actions)
action->doSomething();
}