diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2021-09-23 14:42:13 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2021-09-24 11:25:27 +0200 |
commit | d9bad33ad2cd0e49e22c82f8d05422274cbbf1c8 (patch) | |
tree | 69627530b7bf7497ea20577f672cc67be1c554d8 | |
parent | a4c432bc007d515b843b30765dfa0b82851255b9 (diff) |
shiboken6: Improve message for a mismatched global function
Output a list of candidates with matching name in case some type
was misspelt.
Change-Id: Ie763a912d02907d562f3feeb2eba44e811d80118
Reviewed-by: Christian Tismer <tismer@stackless.com>
-rw-r--r-- | sources/shiboken6/ApiExtractor/abstractmetabuilder.cpp | 20 | ||||
-rw-r--r-- | sources/shiboken6/ApiExtractor/messages.cpp | 8 | ||||
-rw-r--r-- | sources/shiboken6/ApiExtractor/messages.h | 3 |
3 files changed, 27 insertions, 4 deletions
diff --git a/sources/shiboken6/ApiExtractor/abstractmetabuilder.cpp b/sources/shiboken6/ApiExtractor/abstractmetabuilder.cpp index 4ef6132e1..32c7e99fd 100644 --- a/sources/shiboken6/ApiExtractor/abstractmetabuilder.cpp +++ b/sources/shiboken6/ApiExtractor/abstractmetabuilder.cpp @@ -417,6 +417,22 @@ FileModelItem AbstractMetaBuilderPrivate::buildDom(QByteArrayList arguments, return result; } +// List of candidates for a mismatched added global function. +static QStringList functionCandidates(const AbstractMetaFunctionCList &list, + const QString &signature) +{ + QString name = signature; + const int parenPos = name.indexOf(u'('); + if (parenPos > 0) + name.truncate(parenPos); + QStringList result; + for (const auto &func : list) { + if (name == func->name()) + result += func->minimalSignature(); + } + return result; +} + void AbstractMetaBuilderPrivate::traverseDom(const FileModelItem &dom) { const TypeDatabase *types = TypeDatabase::instance(); @@ -549,8 +565,10 @@ void AbstractMetaBuilderPrivate::traverseDom(const FileModelItem &dom) } } if (!ok) { + const QStringList candidates = functionCandidates(m_globalFunctions, + signatures.constFirst()); qCWarning(lcShiboken, "%s", - qPrintable(msgGlobalFunctionNotDefined(fte, signature))); + qPrintable(msgGlobalFunctionNotDefined(fte, signature, candidates))); } } } else if (entry->isEnum() && entry->generateCode()) { diff --git a/sources/shiboken6/ApiExtractor/messages.cpp b/sources/shiboken6/ApiExtractor/messages.cpp index 796d18c4b..d851a02e0 100644 --- a/sources/shiboken6/ApiExtractor/messages.cpp +++ b/sources/shiboken6/ApiExtractor/messages.cpp @@ -311,12 +311,16 @@ QString msgTypeNotDefined(const TypeEntry *entry) } QString msgGlobalFunctionNotDefined(const FunctionTypeEntry *fte, - const QString &signature) + const QString &signature, + const QStringList &candidates) { QString result; QTextStream str(&result); str << fte->sourceLocation() << "Global function '" << signature - << "' is specified in typesystem, but not defined. " << msgCompilationError; + << "' is specified in typesystem, but not defined."; + if (!candidates.isEmpty()) + str << " Candidates are: " << candidates.join(u", "_qs); + str << ' ' << msgCompilationError; return result; } diff --git a/sources/shiboken6/ApiExtractor/messages.h b/sources/shiboken6/ApiExtractor/messages.h index cc8c00d02..8c924aa86 100644 --- a/sources/shiboken6/ApiExtractor/messages.h +++ b/sources/shiboken6/ApiExtractor/messages.h @@ -103,7 +103,8 @@ QString msgSkippingField(const VariableModelItem &field, const QString &classNam QString msgTypeNotDefined(const TypeEntry *entry); QString msgGlobalFunctionNotDefined(const FunctionTypeEntry *fte, - const QString &signature); + const QString &signature, + const QStringList &candidates); QString msgStrippingArgument(const FunctionModelItem &f, int i, const QString &originalSignature, |