forked from qt-creator/qt-creator
CMakePM: Add cache variables to code completion
Change-Id: I5ac4fcf3ca7755ab52ffecafd83922e4e380363e Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
@@ -158,6 +158,11 @@ static int findPathStart(const AssistInterface *interface)
|
|||||||
return ++pos;
|
return ++pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct MarkDownAssitProposalItem : public AssistProposalItem
|
||||||
|
{
|
||||||
|
Qt::TextFormat detailFormat() const override { return Qt::MarkdownText; }
|
||||||
|
};
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
static QList<AssistProposalItemInterface *> generateList(const T &words, const QIcon &icon)
|
static QList<AssistProposalItemInterface *> generateList(const T &words, const QIcon &icon)
|
||||||
{
|
{
|
||||||
@@ -172,11 +177,6 @@ static QList<AssistProposalItemInterface *> generateList(const T &words, const Q
|
|||||||
static QList<AssistProposalItemInterface *> generateList(const QMap<QString, FilePath> &words,
|
static QList<AssistProposalItemInterface *> generateList(const QMap<QString, FilePath> &words,
|
||||||
const QIcon &icon)
|
const QIcon &icon)
|
||||||
{
|
{
|
||||||
struct MarkDownAssitProposalItem : public AssistProposalItem
|
|
||||||
{
|
|
||||||
Qt::TextFormat detailFormat() const override { return Qt::MarkdownText; }
|
|
||||||
};
|
|
||||||
|
|
||||||
QList<AssistProposalItemInterface *> list;
|
QList<AssistProposalItemInterface *> list;
|
||||||
for (auto it = words.cbegin(); it != words.cend(); ++it) {
|
for (auto it = words.cbegin(); it != words.cend(); ++it) {
|
||||||
MarkDownAssitProposalItem *item = new MarkDownAssitProposalItem();
|
MarkDownAssitProposalItem *item = new MarkDownAssitProposalItem();
|
||||||
@@ -189,6 +189,55 @@ static QList<AssistProposalItemInterface *> generateList(const QMap<QString, Fil
|
|||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static QList<AssistProposalItemInterface *> generateList(
|
||||||
|
const CMakeConfig &cache,
|
||||||
|
const QIcon &icon,
|
||||||
|
const QList<AssistProposalItemInterface *> &existingList)
|
||||||
|
{
|
||||||
|
QHash<QString, AssistProposalItemInterface *> hash;
|
||||||
|
for (const auto &item : existingList)
|
||||||
|
hash.insert(item->text(), item);
|
||||||
|
|
||||||
|
auto makeDetail = [](const CMakeConfigItem &item) {
|
||||||
|
QString detail = QString("### %1 (cache)").arg(QString::fromUtf8(item.key));
|
||||||
|
|
||||||
|
if (!item.documentation.isEmpty())
|
||||||
|
detail.append(QString("\n%1\n").arg(QString::fromUtf8(item.documentation)));
|
||||||
|
else
|
||||||
|
detail.append("\n");
|
||||||
|
|
||||||
|
const QString value = item.toString();
|
||||||
|
if (!value.isEmpty())
|
||||||
|
detail.append(QString("\n```\n%1\n```\n").arg(value));
|
||||||
|
|
||||||
|
return detail;
|
||||||
|
};
|
||||||
|
|
||||||
|
QList<AssistProposalItemInterface *> list;
|
||||||
|
for (auto it = cache.cbegin(); it != cache.cend(); ++it) {
|
||||||
|
if (it->isAdvanced || it->isUnset || it->type == CMakeConfig::Type::INTERNAL)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
QString text = QString::fromUtf8(it->key);
|
||||||
|
if (!hash.contains(text)) {
|
||||||
|
MarkDownAssitProposalItem *item = new MarkDownAssitProposalItem();
|
||||||
|
item->setText(text);
|
||||||
|
item->setDetail(makeDetail(*it));
|
||||||
|
item->setIcon(icon);
|
||||||
|
list << item;
|
||||||
|
} else {
|
||||||
|
auto item = static_cast<AssistProposalItem *>(hash.value(text));
|
||||||
|
|
||||||
|
QString detail = item->detail();
|
||||||
|
detail.append("\n");
|
||||||
|
detail.append(makeDetail(*it));
|
||||||
|
|
||||||
|
item->setDetail(detail);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
static int addFilePathItems(const AssistInterface *interface,
|
static int addFilePathItems(const AssistInterface *interface,
|
||||||
QList<AssistProposalItemInterface *> &items,
|
QList<AssistProposalItemInterface *> &items,
|
||||||
int symbolStartPos)
|
int symbolStartPos)
|
||||||
@@ -499,6 +548,7 @@ IAssistProposal *CMakeFileCompletionAssist::doPerform(const PerformInputDataPtr
|
|||||||
items.append(generateList(data->projectVariables, m_projectVariableIcon));
|
items.append(generateList(data->projectVariables, m_projectVariableIcon));
|
||||||
items.append(generateList(data->findPackageVariables, m_projectVariableIcon));
|
items.append(generateList(data->findPackageVariables, m_projectVariableIcon));
|
||||||
items.append(generateList(localVariables, m_variableIcon));
|
items.append(generateList(localVariables, m_variableIcon));
|
||||||
|
items.append(generateList(cmakeConfiguration, m_variableIcon, items));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (functionName == "if" || functionName == "elseif" || functionName == "cmake_policy")
|
if (functionName == "if" || functionName == "elseif" || functionName == "cmake_policy")
|
||||||
@@ -559,6 +609,7 @@ IAssistProposal *CMakeFileCompletionAssist::doPerform(const PerformInputDataPtr
|
|||||||
items.append(generateList(data->keywords.variables, m_variableIcon));
|
items.append(generateList(data->keywords.variables, m_variableIcon));
|
||||||
items.append(generateList(data->projectVariables, m_projectVariableIcon));
|
items.append(generateList(data->projectVariables, m_projectVariableIcon));
|
||||||
items.append(generateList(localVariables, m_variableIcon));
|
items.append(generateList(localVariables, m_variableIcon));
|
||||||
|
items.append(generateList(cmakeConfiguration, m_variableIcon, items));
|
||||||
items.append(generateList(data->findPackageVariables, m_projectVariableIcon));
|
items.append(generateList(data->findPackageVariables, m_projectVariableIcon));
|
||||||
|
|
||||||
items.append(generateList(data->keywords.properties, m_propertyIcon));
|
items.append(generateList(data->keywords.properties, m_propertyIcon));
|
||||||
|
|||||||
@@ -84,3 +84,8 @@ set_target_properties(completion PROPERTIES
|
|||||||
# here completion for "WIN32|" should popup WIN32_EXECUTABLE
|
# here completion for "WIN32|" should popup WIN32_EXECUTABLE
|
||||||
#WIN32
|
#WIN32
|
||||||
)
|
)
|
||||||
|
|
||||||
|
include(JustACacheVariable)
|
||||||
|
# here code completion for "if (JUST|" should complete with if (JUST_A_CACHE_VARIABLE
|
||||||
|
# as a tooltip containing the description
|
||||||
|
#if (JUST
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
set(JUST_A_CACHE_VARIABLE ON CACHE BOOL "This was set from cmake/JustACacheVariable" FORCE)
|
||||||
Reference in New Issue
Block a user