在 Visual Studio Code 中为 Mako 生成 C++ 代码高亮显示的方法

问题描述 投票:0回答:0

我经常使用 Mako 模板 在我的项目中自动编写重复的 C++ 代码,例如大型 switch 语句和测试代码。

Mako 是一种与原始 C++ 代码混合的嵌入式语言。从功能的角度来看,它确实工作得很好,在许多情况下,它是 C++ 预处理器和 C++ 模板化系统的一种更好的替代品。

但是突出显示是一个问题。假设我有一个源代码

switch_table.cpp
,我想用 Mako 实现自动化,如下图所示。以百分比
%
标记开头的线是Mako线。在这种特殊情况下,他们做了一个简单的循环,生成 N 个 switch case 语句。

您可以看到波浪线指向 Mako 行,因为它们不是有效的 C++ 代码。这很麻烦。

如果我将文件名切换为将 Mako 扩展名为

switch_table.mako
,我会正确突出显示 Mako 行,但不是 C++ 行,大多数都是。更糟。

我现在的问题是——我可以有一种模式可以结合两种突出显示模式——标准的 vscode c++ 突出显示与扩展混合吗?或者,是否有扩展可以做到这一点?或者,如果可以提供一个正则表达式,让 vscode c++ 荧光笔忽略所有以百分比标记开头的行,我会很高兴。

关于如何解决这个麻烦有什么想法吗?

谢谢!

这是整个代码块,因此您可以测试:

<%
def genargs(n): 
    return ",".join([ "args[%d]" % j for j in range(n) ])
%>

#include <vector>
#include <limits>

namespace trivial {

template <size_t N, typename... Args>
struct FnType {
    using Call = typename FnType<N - 1, double, Args...>::Call;
};

template <typename... Args>
struct FnType<0, Args...> {
    typedef double (*Call)(Args...);
};

double callfn(void* fn, const std::vector<double>& args) {
    switch (args.size()) {
% for row in range(MAXARGS+1):
        case ${row}: return FnType<${row}>::Call(fn)(${genargs(row)}); break;
% endfor
    }
    return std::numeric_limits<double>::quiet_NaN();
}

} // namespace trivial
visual-studio-code vscode-extensions mako
© www.soinside.com 2019 - 2024. All rights reserved.