diff options
Diffstat (limited to 'sources/shiboken6/ApiExtractor/codesnip.cpp')
| -rw-r--r-- | sources/shiboken6/ApiExtractor/codesnip.cpp | 73 |
1 files changed, 61 insertions, 12 deletions
diff --git a/sources/shiboken6/ApiExtractor/codesnip.cpp b/sources/shiboken6/ApiExtractor/codesnip.cpp index e2cd5eb35..255b9a392 100644 --- a/sources/shiboken6/ApiExtractor/codesnip.cpp +++ b/sources/shiboken6/ApiExtractor/codesnip.cpp @@ -34,31 +34,80 @@ QString TemplateInstance::expandCode() const } // ---------------------- CodeSnipFragment -QString CodeSnipFragment::code() const + +static QString fragmentToCodeHelper(const QString &c) { - return m_instance ? m_instance->expandCode() : m_code; + return c; } -// ---------------------- CodeSnipAbstract -QString CodeSnipAbstract::code() const +static QString fragmentToCodeHelper(const TemplateInstance &p) { - QString res; - for (const CodeSnipFragment &codeFrag : codeList) - res.append(codeFrag.code()); + return p.expandCode(); +} - return res; +static QString fragmentToCode(const CodeSnipFragment &codeFrag) +{ + return std::visit([](auto f) { return fragmentToCodeHelper(f); }, codeFrag); +} + +static bool isEmptyFragmentHelper(const QString &c) +{ + return c.isEmpty(); +} + +static bool isEmptyFragmentHelper(const TemplateInstance &) +{ + return false; +} + +static bool isEmptyFragment(const CodeSnipFragment &codeFrag) +{ + return std::visit([](auto f) { return isEmptyFragmentHelper(f); }, codeFrag); +} + +static void formatDebugHelper(QDebug &d, const QString &code) +{ + const auto lines = QStringView{code}.split(u'\n'); + for (qsizetype i = 0, size = lines.size(); i < size; ++i) { + if (i) + d << "\\n"; + d << lines.at(i).trimmed(); + } +} + +static void formatDebugHelper(QDebug &d, const TemplateInstance &t) +{ + d << "template=\"" << t.name() << '"'; +} + +QDebug operator<<(QDebug d, const CodeSnipFragment &codeFrag) +{ + QDebugStateSaver saver(d); + d.noquote(); + d.nospace(); + std::visit([&d](auto f) { formatDebugHelper(d, f); }, codeFrag); + return d; } +// ---------------------- CodeSnipAbstract + void CodeSnipAbstract::addCode(const QString &code) { - codeList.append(CodeSnipFragment(fixSpaces(code))); + m_codeList.emplace_back(CodeSnipFragment(fixSpaces(code))); +} + +QString CodeSnipAbstract::code() const +{ + QString res; + for (const auto &codeFrag : m_codeList) + res.append(fragmentToCode(codeFrag)); + return res; } void CodeSnipAbstract::purgeEmptyFragments() { - auto end = std::remove_if(codeList.begin(), codeList.end(), - [](const CodeSnipFragment &f) { return f.isEmpty(); }); - codeList.erase(end, codeList.end()); + auto end = std::remove_if(m_codeList.begin(), m_codeList.end(), isEmptyFragment); + m_codeList.erase(end, m_codeList.end()); } QRegularExpression CodeSnipAbstract::placeHolderRegex(int index) |
