forked from qt-creator/qt-creator
Merge remote-tracking branch 'origin/14.0'
Conflicts: cmake/QtCreatorIDEBranding.cmake qbs/modules/qtc/qtc.qbs src/plugins/qmljseditor/qmljseditordocument.cpp Change-Id: Ibef70b4c0eba5ccd5da7b05ca2bd3a9e8ee1cc0c
This commit is contained in:
@@ -263,7 +263,7 @@ void handleInactiveRegions(LanguageClient::Client *client, const JsonRpcMessage
|
||||
const QList<Range> inactiveRegions = params->inactiveRegions();
|
||||
QList<BlockRange> ifdefedOutBlocks;
|
||||
for (const Range &r : inactiveRegions) {
|
||||
const int startPos = r.start().toPositionInDocument(doc->document());
|
||||
const int startPos = Position(r.start().line(), 0).toPositionInDocument(doc->document());
|
||||
const int endPos = r.end().toPositionInDocument(doc->document()) + 1;
|
||||
ifdefedOutBlocks.emplaceBack(startPos, endPos);
|
||||
}
|
||||
|
||||
@@ -177,10 +177,11 @@ void ClangToolsPlugin::registerAnalyzeActions()
|
||||
widget->toolBar()->addWidget(button);
|
||||
const auto toolsMenu = new QMenu(widget);
|
||||
button->setMenu(toolsMenu);
|
||||
for (const auto &toolInfo : {std::make_pair(ClangTidyTool::instance(),
|
||||
Constants::RUN_CLANGTIDY_ON_CURRENT_FILE),
|
||||
std::make_pair(ClazyTool::instance(),
|
||||
Constants::RUN_CLAZY_ON_CURRENT_FILE)}) {
|
||||
for (const auto &toolInfo :
|
||||
{std::pair<ClangTool *, Utils::Id>(
|
||||
ClangTidyTool::instance(), Constants::RUN_CLANGTIDY_ON_CURRENT_FILE),
|
||||
std::pair<ClangTool *, Utils::Id>(
|
||||
ClazyTool::instance(), Constants::RUN_CLAZY_ON_CURRENT_FILE)}) {
|
||||
ClangTool * const tool = toolInfo.first;
|
||||
Command * const cmd = ActionManager::command(toolInfo.second);
|
||||
QAction *const action = toolsMenu->addAction(tool->name(), [editor, tool] {
|
||||
|
||||
@@ -226,7 +226,8 @@ CMakeBuildStep::CMakeBuildStep(BuildStepList *bsl, Id id) :
|
||||
|
||||
useStaging.setSettingsKey(USE_STAGING_KEY);
|
||||
useStaging.setLabel(Tr::tr("Stage for installation"), BoolAspect::LabelPlacement::AtCheckBox);
|
||||
useStaging.setDefaultValue(supportsStageForInstallation(kit()));
|
||||
useStaging.setDefaultValue(supportsStageForInstallation(kit()) && !isCleanStep());
|
||||
useStaging.setEnabled(!isCleanStep());
|
||||
|
||||
stagingDir.setSettingsKey(STAGING_DIR_KEY);
|
||||
stagingDir.setLabelText(Tr::tr("Staging directory:"));
|
||||
@@ -522,6 +523,11 @@ void CMakeBuildStep::setBuildPreset(const QString &preset)
|
||||
QWidget *CMakeBuildStep::createConfigWidget()
|
||||
{
|
||||
auto updateDetails = [this] {
|
||||
const bool haveCleanTarget = m_buildTargets.contains(cleanTarget());
|
||||
useStaging.setEnabled(!haveCleanTarget);
|
||||
if (useStaging() && haveCleanTarget)
|
||||
useStaging.setValue(false);
|
||||
|
||||
ProcessParameters param;
|
||||
setupProcessParameters(¶m);
|
||||
param.setCommandLine(cmakeCommand());
|
||||
|
||||
@@ -1239,6 +1239,7 @@ void CMakeBuildSystem::clearCMakeCache()
|
||||
path.removeRecursively();
|
||||
|
||||
emit configurationCleared();
|
||||
emitParsingFinished(false);
|
||||
}
|
||||
|
||||
void CMakeBuildSystem::combineScanAndParse(bool restoredFromBackup)
|
||||
|
||||
@@ -46,6 +46,19 @@ namespace CMakeProjectManager::Internal {
|
||||
|
||||
static Q_LOGGING_CATEGORY(cmInputLog, "qtc.cmake.import", QtWarningMsg);
|
||||
|
||||
class ToolchainDescriptionEx
|
||||
{
|
||||
public:
|
||||
Utils::FilePath compilerPath;
|
||||
Utils::Id language;
|
||||
QString originalTargetTriple;
|
||||
|
||||
operator ProjectExplorer::ToolchainDescription() const
|
||||
{
|
||||
return ProjectExplorer::ToolchainDescription{compilerPath, language};
|
||||
}
|
||||
};
|
||||
|
||||
struct DirectoryData
|
||||
{
|
||||
// Project Stuff:
|
||||
@@ -64,7 +77,7 @@ struct DirectoryData
|
||||
QString toolset;
|
||||
FilePath sysroot;
|
||||
QtProjectImporter::QtVersionData qt;
|
||||
QVector<ToolchainDescription> toolchains;
|
||||
QVector<ToolchainDescriptionEx> toolchains;
|
||||
QVariant debugger;
|
||||
};
|
||||
|
||||
@@ -321,12 +334,30 @@ static CMakeConfig configurationFromPresetProbe(
|
||||
const PresetsDetails::ConfigurePreset &configurePreset)
|
||||
{
|
||||
const FilePath cmakeListTxt = importPath / Constants::CMAKE_LISTS_TXT;
|
||||
cmakeListTxt.writeFileContents(QByteArray("cmake_minimum_required(VERSION 3.15)\n"
|
||||
"\n"
|
||||
"project(preset-probe)\n"
|
||||
"set(CMAKE_C_COMPILER \"${CMAKE_C_COMPILER}\" CACHE FILEPATH \"\" FORCE)\n"
|
||||
"set(CMAKE_CXX_COMPILER \"${CMAKE_CXX_COMPILER}\" CACHE FILEPATH \"\" FORCE)\n"
|
||||
"\n"));
|
||||
cmakeListTxt.writeFileContents(QByteArray(R"(
|
||||
cmake_minimum_required(VERSION 3.15)
|
||||
|
||||
project(preset-probe)
|
||||
|
||||
foreach (file_path_value
|
||||
CMAKE_C_COMPILER CMAKE_CXX_COMPILER CMAKE_SYSROOT QT_HOST_PATH CMAKE_MAKE_PROGRAM)
|
||||
if (${file_path_value})
|
||||
set(${file_path_value} "${${file_path_value}}" CACHE FILEPATH "" FORCE)
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
foreach (path_value CMAKE_PREFIX_PATH CMAKE_FIND_ROOT_PATH)
|
||||
if (${path_value})
|
||||
set(${path_value} "${${path_value}}" CACHE PATH "" FORCE)
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
foreach (string_value CMAKE_C_COMPILER_TARGET CMAKE_CXX_COMPILER_TARGET)
|
||||
if (${string_value})
|
||||
set(${string_value} "${${string_value}}" CACHE STRING "" FORCE)
|
||||
endif()
|
||||
endforeach()
|
||||
)"));
|
||||
|
||||
Process cmake;
|
||||
cmake.setDisableUnixTerminal();
|
||||
@@ -574,9 +605,9 @@ static QMakeAndCMakePrefixPath qtInfoFromCMakeCache(const CMakeConfig &config,
|
||||
return {qmakeLocation, resultedPrefixPath};
|
||||
}
|
||||
|
||||
static QVector<ToolchainDescription> extractToolchainsFromCache(const CMakeConfig &config)
|
||||
static QVector<ToolchainDescriptionEx> extractToolchainsFromCache(const CMakeConfig &config)
|
||||
{
|
||||
QVector<ToolchainDescription> result;
|
||||
QVector<ToolchainDescriptionEx> result;
|
||||
bool haveCCxxCompiler = false;
|
||||
for (const CMakeConfigItem &i : config) {
|
||||
if (!i.key.startsWith("CMAKE_") || !i.key.endsWith("_COMPILER"))
|
||||
@@ -593,7 +624,10 @@ static QVector<ToolchainDescription> extractToolchainsFromCache(const CMakeConfi
|
||||
}
|
||||
else
|
||||
languageId = Id::fromName(language);
|
||||
result.append({FilePath::fromUtf8(i.value), languageId});
|
||||
result.append(
|
||||
{FilePath::fromUtf8(i.value),
|
||||
languageId,
|
||||
config.stringValueOf("CMAKE_" + language + "_COMPILER_TARGET")});
|
||||
}
|
||||
|
||||
if (!haveCCxxCompiler) {
|
||||
@@ -612,10 +646,14 @@ static QVector<ToolchainDescription> extractToolchainsFromCache(const CMakeConfi
|
||||
const FilePath linker = config.filePathValueOf("CMAKE_LINKER");
|
||||
if (!linker.isEmpty()) {
|
||||
const FilePath compilerPath = linker.parentDir();
|
||||
result.append({compilerPath.pathAppended(cCompilerName),
|
||||
ProjectExplorer::Constants::C_LANGUAGE_ID});
|
||||
result.append({compilerPath.pathAppended(cxxCompilerName),
|
||||
ProjectExplorer::Constants::CXX_LANGUAGE_ID});
|
||||
result.append(
|
||||
{compilerPath.pathAppended(cCompilerName),
|
||||
ProjectExplorer::Constants::C_LANGUAGE_ID,
|
||||
{}});
|
||||
result.append(
|
||||
{compilerPath.pathAppended(cxxCompilerName),
|
||||
ProjectExplorer::Constants::CXX_LANGUAGE_ID,
|
||||
{}});
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1052,7 +1090,7 @@ bool CMakeProjectImporter::matchKit(void *directoryData, const Kit *k) const
|
||||
|
||||
const bool compilersMatch = [k, data] {
|
||||
const QList<Id> allLanguages = ToolchainManager::allLanguages();
|
||||
for (const ToolchainDescription &tcd : data->toolchains) {
|
||||
for (const ToolchainDescriptionEx &tcd : data->toolchains) {
|
||||
if (!Utils::contains(allLanguages,
|
||||
[&tcd](const Id &language) { return language == tcd.language; }))
|
||||
continue;
|
||||
@@ -1065,7 +1103,7 @@ bool CMakeProjectImporter::matchKit(void *directoryData, const Kit *k) const
|
||||
}();
|
||||
const bool noCompilers = [k, data] {
|
||||
const QList<Id> allLanguages = ToolchainManager::allLanguages();
|
||||
for (const ToolchainDescription &tcd : data->toolchains) {
|
||||
for (const ToolchainDescriptionEx &tcd : data->toolchains) {
|
||||
if (!Utils::contains(allLanguages,
|
||||
[&tcd](const Id &language) { return language == tcd.language; }))
|
||||
continue;
|
||||
@@ -1117,7 +1155,7 @@ Kit *CMakeProjectImporter::createKit(void *directoryData) const
|
||||
|
||||
SysRootKitAspect::setSysRoot(k, data->sysroot);
|
||||
|
||||
for (const ToolchainDescription &cmtcd : data->toolchains) {
|
||||
for (const ToolchainDescriptionEx &cmtcd : data->toolchains) {
|
||||
const ToolchainData tcd = findOrCreateToolchains(cmtcd);
|
||||
QTC_ASSERT(!tcd.tcs.isEmpty(), continue);
|
||||
|
||||
@@ -1126,7 +1164,11 @@ Kit *CMakeProjectImporter::createKit(void *directoryData) const
|
||||
addTemporaryData(ToolchainKitAspect::id(), tc->id(), k);
|
||||
}
|
||||
|
||||
ToolchainKitAspect::setToolchain(k, tcd.tcs.at(0));
|
||||
Toolchain* toolchain = tcd.tcs.at(0);
|
||||
if (!cmtcd.originalTargetTriple.isEmpty())
|
||||
toolchain->setExplicitCodeModelTargetTriple(cmtcd.originalTargetTriple);
|
||||
|
||||
ToolchainKitAspect::setToolchain(k, toolchain);
|
||||
}
|
||||
|
||||
if (!data->cmakePresetDisplayname.isEmpty()) {
|
||||
@@ -1335,7 +1377,7 @@ void CMakeProjectImporterTest::testCMakeProjectImporterToolchain()
|
||||
config.append(CMakeConfigItem(key.toUtf8(), value.toUtf8()));
|
||||
}
|
||||
|
||||
const QVector<ToolchainDescription> tcs = extractToolchainsFromCache(config);
|
||||
const QVector<ToolchainDescriptionEx> tcs = extractToolchainsFromCache(config);
|
||||
QCOMPARE(tcs.count(), expectedLanguages.count());
|
||||
for (int i = 0; i < tcs.count(); ++i) {
|
||||
QCOMPARE(tcs.at(i).language, expectedLanguages.at(i));
|
||||
|
||||
@@ -542,6 +542,7 @@ public:
|
||||
void positionShow(const TextEditorWidget *editorWidget);
|
||||
|
||||
void updateTooltip(DebuggerEngine *engine);
|
||||
void updateTooltip2(DebuggerEngine *engine);
|
||||
|
||||
void setState(DebuggerTooltipState newState);
|
||||
void destroy();
|
||||
@@ -660,6 +661,11 @@ DebuggerToolTipHolder::DebuggerToolTipHolder(const DebuggerToolTipContext &conte
|
||||
// after normal WatchModel update.
|
||||
|
||||
void DebuggerToolTipHolder::updateTooltip(DebuggerEngine *engine)
|
||||
{
|
||||
QTimer::singleShot(0, [this, engine] { updateTooltip2(engine); });
|
||||
}
|
||||
|
||||
void DebuggerToolTipHolder::updateTooltip2(DebuggerEngine *engine)
|
||||
{
|
||||
widget->setEngine(engine);
|
||||
|
||||
|
||||
@@ -992,12 +992,12 @@ IosToolTaskAdapter::IosToolTaskAdapter() {}
|
||||
|
||||
void IosToolTaskAdapter::start()
|
||||
{
|
||||
task()->m_iosToolHandler = new IosToolHandler(Internal::IosDeviceType(task()->m_deviceType));
|
||||
connect(task()->m_iosToolHandler, &IosToolHandler::finished, this, [this] {
|
||||
task()->m_iosToolHandler->deleteLater();
|
||||
task()->m_iosToolHandler.reset(new IosToolHandler(Internal::IosDeviceType(task()->m_deviceType)));
|
||||
connect(task()->m_iosToolHandler.get(), &IosToolHandler::finished, this, [this] {
|
||||
task()->m_iosToolHandler.release()->deleteLater();
|
||||
emit done(Tasking::DoneResult::Success);
|
||||
});
|
||||
task()->m_startHandler(task()->m_iosToolHandler);
|
||||
task()->m_startHandler(task()->m_iosToolHandler.get());
|
||||
}
|
||||
|
||||
} // namespace Ios
|
||||
|
||||
@@ -82,7 +82,7 @@ public:
|
||||
|
||||
private:
|
||||
friend class IosToolTaskAdapter;
|
||||
IosToolHandler *m_iosToolHandler = nullptr;
|
||||
std::unique_ptr<IosToolHandler> m_iosToolHandler;
|
||||
StartHandler m_startHandler;
|
||||
Internal::IosDeviceType m_deviceType = Internal::IosDeviceType::IosDevice;
|
||||
};
|
||||
|
||||
@@ -480,6 +480,11 @@ QmlJSEditorDocumentPrivate::QmlJSEditorDocumentPrivate(QmlJSEditorDocument *pare
|
||||
this, &QmlJSEditorDocumentPrivate::onDocumentUpdated);
|
||||
connect(QmllsSettingsManager::instance(), &QmllsSettingsManager::settingsChanged,
|
||||
this, &QmlJSEditorDocumentPrivate::settingsChanged);
|
||||
connect(
|
||||
modelManager,
|
||||
&ModelManagerInterface::projectInfoUpdated,
|
||||
this,
|
||||
&QmlJSEditorDocumentPrivate::settingsChanged);
|
||||
|
||||
// semantic info
|
||||
m_semanticInfoUpdater = new SemanticInfoUpdater();
|
||||
@@ -749,7 +754,7 @@ static FilePath qmllsForFile(const FilePath &file, QmlJS::ModelManagerInterface
|
||||
< QmlJsEditingSettings::mininumQmllsVersion) {
|
||||
return {};
|
||||
}
|
||||
return pInfo.qmllsPath;
|
||||
return pInfo.qmllsPath.exists() ? pInfo.qmllsPath : Utils::FilePath();
|
||||
}
|
||||
|
||||
void QmlJSEditorDocumentPrivate::settingsChanged()
|
||||
|
||||
@@ -2339,6 +2339,13 @@ void TextEditorWidget::selectWordUnderCursor()
|
||||
setMultiTextCursor(cursor);
|
||||
}
|
||||
|
||||
void TextEditorWidget::clearSelection()
|
||||
{
|
||||
MultiTextCursor cursor = multiTextCursor();
|
||||
cursor.clearSelection();
|
||||
setMultiTextCursor(cursor);
|
||||
}
|
||||
|
||||
void TextEditorWidget::showContextMenu()
|
||||
{
|
||||
QTextCursor tc = textCursor();
|
||||
@@ -4259,6 +4266,10 @@ void TextEditorWidgetPrivate::registerActions()
|
||||
.setContext(m_editorContext)
|
||||
.addOnTriggered([this] { q->selectWordUnderCursor(); })
|
||||
.setScriptable(true);
|
||||
ActionBuilder(this, CLEAR_SELECTION)
|
||||
.setContext(m_editorContext)
|
||||
.addOnTriggered([this] { q->clearSelection(); })
|
||||
.setScriptable(true);
|
||||
|
||||
ActionBuilder(this, GOTO_DOCUMENT_START)
|
||||
.setContext(m_editorContext)
|
||||
@@ -4769,8 +4780,11 @@ void TextEditorWidgetPrivate::highlightSearchResults(const QTextBlock &block, co
|
||||
break;
|
||||
if (m_findFlags & FindWholeWords) {
|
||||
auto posAtWordSeparator = [](const QString &text, int idx) {
|
||||
if (idx < 0 || idx >= text.length())
|
||||
return false;
|
||||
if (idx < 0)
|
||||
return QTC_GUARD(idx == -1);
|
||||
int textLength = text.length();
|
||||
if (idx >= textLength)
|
||||
return QTC_GUARD(idx == textLength);
|
||||
const QChar c = text.at(idx);
|
||||
return !c.isLetterOrNumber() && c != QLatin1Char('_');
|
||||
};
|
||||
|
||||
@@ -430,6 +430,7 @@ public:
|
||||
virtual bool selectBlockUp();
|
||||
virtual bool selectBlockDown();
|
||||
void selectWordUnderCursor();
|
||||
void clearSelection();
|
||||
|
||||
void showContextMenu();
|
||||
|
||||
|
||||
@@ -143,6 +143,7 @@ const char GOTO_BLOCK_END_WITH_SELECTION[] = "TextEditor.GotoBlockEndWithSelecti
|
||||
const char SELECT_BLOCK_UP[] = "TextEditor.SelectBlockUp";
|
||||
const char SELECT_BLOCK_DOWN[] = "TextEditor.SelectBlockDown";
|
||||
const char SELECT_WORD_UNDER_CURSOR[] = "TextEditor.SelectWordUnderCursor";
|
||||
const char CLEAR_SELECTION[] = "TextEditor.ClearSelection";
|
||||
const char VIEW_PAGE_UP[] = "TextEditor.viewPageUp";
|
||||
const char VIEW_PAGE_DOWN[] = "TextEditor.viewPageDown";
|
||||
const char VIEW_LINE_UP[] = "TextEditor.viewLineUp";
|
||||
|
||||
@@ -544,6 +544,8 @@ void TextEditorPlugin::createEditorCommands()
|
||||
.setDefaultKeySequence(QKeySequence(Tr::tr("Ctrl+Shift+Alt+U")))
|
||||
.addToContainer(M_EDIT_ADVANCED, G_EDIT_BLOCKS);
|
||||
TextActionBuilder(this, SELECT_WORD_UNDER_CURSOR).setText(Tr::tr("Select Word Under Cursor"));
|
||||
TextActionBuilder(this, CLEAR_SELECTION)
|
||||
.setText(QCoreApplication::translate("QtC::Terminal", "Clear Selection"));
|
||||
|
||||
TextActionBuilder(this, GOTO_DOCUMENT_START).setText(Tr::tr("Go to Document Start"));
|
||||
TextActionBuilder(this, GOTO_DOCUMENT_END).setText(Tr::tr("Go to Document End"));
|
||||
|
||||
Reference in New Issue
Block a user