aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2021-09-23 14:42:13 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2021-09-24 11:25:27 +0200
commitd9bad33ad2cd0e49e22c82f8d05422274cbbf1c8 (patch)
tree69627530b7bf7497ea20577f672cc67be1c554d8
parenta4c432bc007d515b843b30765dfa0b82851255b9 (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.cpp20
-rw-r--r--sources/shiboken6/ApiExtractor/messages.cpp8
-rw-r--r--sources/shiboken6/ApiExtractor/messages.h3
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,