diff options
author | David Schulz <david.schulz@qt.io> | 2017-07-26 11:12:32 +0200 |
---|---|---|
committer | David Schulz <david.schulz@qt.io> | 2017-07-27 07:49:16 +0000 |
commit | 2c5186253fbd7189a1e4b211bed70ceb2204723d (patch) | |
tree | 11565a4e98a269450bac9ddbfb79bb45a61a4a36 | |
parent | c7abc41d97223b7d3033d149f26076dcefcf33e5 (diff) | |
download | qt-creator-2c5186253fbd7189a1e4b211bed70ceb2204723d.tar.gz |
QMakePM: Use generalized KeywordsCompletionProvider
Change-Id: Iaa6476be9285d814e4357b861c8fd00f1c9adc1c
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
5 files changed, 283 insertions, 351 deletions
diff --git a/src/plugins/qmakeprojectmanager/profilecompletionassist.cpp b/src/plugins/qmakeprojectmanager/profilecompletionassist.cpp index c1abcc2a6f..b30ff1ce18 100644 --- a/src/plugins/qmakeprojectmanager/profilecompletionassist.cpp +++ b/src/plugins/qmakeprojectmanager/profilecompletionassist.cpp @@ -24,330 +24,282 @@ ****************************************************************************/ #include "profilecompletionassist.h" -#include "qmakeprojectmanagerconstants.h" -#include <texteditor/codeassist/assistinterface.h> -#include <texteditor/codeassist/keywordscompletionassist.h> -#include <texteditor/texteditorconstants.h> +#include "texteditor/codeassist/keywordscompletionassist.h" -#include <coreplugin/id.h> - -using namespace QmakeProjectManager::Internal; -using namespace TextEditor; - - -static const char *const variableKeywords[] = { - "CCFLAG", - "CLEAN_DEPS", - "CONFIG", - "DEFINES", - "DEF_FILE", - "DEPENDPATH", - "DEPLOYMENT", - "DEPLOYMENT_PLUGIN", - "DESTDIR", - "DESTDIR_TARGET", - "DISTFILES", - "DLLDESTDIR", - "DSP_TEMPLATE", - "FORMS", - "FORMS3", - "GUID", - "HEADERS", - "ICON", - "INCLUDEPATH", - "INSTALLS", - "LEXIMPLS", - "LEXOBJECTS", - "LEXSOURCES", - "LIBS", - "LITERAL_HASH", - "MAKEFILE", - "MAKEFILE_GENERATOR", - "MOBILITY", - "MOC_DIR", - "OBJECTIVE_HEADERS", - "OBJECTIVE_SOURCES", - "OBJECTS", - "OBJECTS_DIR", - "OBJMOC", - "OTHER_FILES", - "OUT_PWD", - "PKGCONFIG", - "POST_TARGETDEPS", - "PRECOMPILED_HEADER", - "PRE_TARGETDEPS", - "PWD", - "QMAKE", - "QMAKESPEC", - "QMAKE_APP_FLAG", - "QMAKE_APP_OR_DLL", - "QMAKE_AR_CMD", - "QMAKE_BUNDLE_DATA", - "QMAKE_BUNDLE_EXTENSION", - "QMAKE_CC", - "QMAKE_CFLAGS", - "QMAKE_CFLAGS_DEBUG", - "QMAKE_CFLAGS_MT", - "QMAKE_CFLAGS_MT_DBG", - "QMAKE_CFLAGS_MT_DLL", - "QMAKE_CFLAGS_MT_DLLDBG", - "QMAKE_CFLAGS_RELEASE", - "QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO", - "QMAKE_CFLAGS_SHLIB", - "QMAKE_CFLAGS_THREAD", - "QMAKE_CFLAGS_WARN_OFF", - "QMAKE_CFLAGS_WARN_ON", - "QMAKE_CLEAN", - "QMAKE_CXX", - "QMAKE_CXXFLAGS", - "QMAKE_CXXFLAGS_DEBUG", - "QMAKE_CXXFLAGS_MT", - "QMAKE_CXXFLAGS_MT_DBG", - "QMAKE_CXXFLAGS_MT_DLL", - "QMAKE_CXXFLAGS_MT_DLLDBG", - "QMAKE_CXXFLAGS_RELEASE", - "QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO", - "QMAKE_CXXFLAGS_SHLIB", - "QMAKE_CXXFLAGS_THREAD", - "QMAKE_CXXFLAGS_WARN_OFF", - "QMAKE_CXXFLAGS_WARN_ON", - "QMAKE_DISTCLEAN", - "QMAKE_EXTENSION_SHLIB", - "QMAKE_EXTRA_COMPILERS", - "QMAKE_EXTRA_TARGETS", - "QMAKE_EXT_CPP", - "QMAKE_EXT_H", - "QMAKE_EXT_LEX", - "QMAKE_EXT_MOC", - "QMAKE_EXT_OBJ", - "QMAKE_EXT_PRL", - "QMAKE_EXT_UI", - "QMAKE_EXT_YACC", - "QMAKE_FAILED_REQUIREMENTS", - "QMAKE_FRAMEWORK_BUNDLE_NAME", - "QMAKE_FRAMEWORK_VERSION", - "QMAKE_INCDIR", - "QMAKE_INCDIR_EGL", - "QMAKE_INCDIR_OPENGL", - "QMAKE_INCDIR_OPENGL_ES1", - "QMAKE_INCDIR_OPENGL_ES2", - "QMAKE_INCDIR_OPENVG", - "QMAKE_INCDIR_QT", - "QMAKE_INCDIR_THREAD", - "QMAKE_INCDIR_X11", - "QMAKE_INFO_PLIST", - "QMAKE_LFLAGS", - "QMAKE_LFLAGS_CONSOLE", - "QMAKE_LFLAGS_CONSOLE_DLL", - "QMAKE_LFLAGS_DEBUG", - "QMAKE_LFLAGS_PLUGIN", - "QMAKE_LFLAGS_QT_DLL", - "QMAKE_LFLAGS_RELEASE", - "QMAKE_LFLAGS_RPATH", - "QMAKE_LFLAGS_SHAPP", - "QMAKE_LFLAGS_SHLIB", - "QMAKE_LFLAGS_SONAME", - "QMAKE_LFLAGS_THREAD", - "QMAKE_LFLAGS_WINDOWS", - "QMAKE_LFLAGS_WINDOWS_DLL", - "QMAKE_LIBDIR", - "QMAKE_LIBDIR_EGL", - "QMAKE_LIBDIR_FLAGS", - "QMAKE_LIBDIR_OPENGL", - "QMAKE_LIBDIR_OPENVG", - "QMAKE_LIBDIR_QT", - "QMAKE_LIBDIR_X11", - "QMAKE_LIBS", - "QMAKE_LIBS_CONSOLE", - "QMAKE_LIBS_EGL", - "QMAKE_LIBS_OPENGL", - "QMAKE_LIBS_OPENGL_ES1", - "QMAKE_LIBS_OPENGL_ES2", - "QMAKE_LIBS_OPENGL_QT", - "QMAKE_LIBS_OPENVG", - "QMAKE_LIBS_QT", - "QMAKE_LIBS_QT_DLL", - "QMAKE_LIBS_QT_OPENGL", - "QMAKE_LIBS_QT_THREAD", - "QMAKE_LIBS_RT", - "QMAKE_LIBS_RTMT", - "QMAKE_LIBS_THREAD", - "QMAKE_LIBS_WINDOWS", - "QMAKE_LIBS_X11", - "QMAKE_LIBS_X11SM", - "QMAKE_LIB_FLAG", - "QMAKE_LINK", - "QMAKE_LINK_SHLIB_CMD", - "QMAKE_LN_SHLIB", - "QMAKE_MACOSX_DEPLOYMENT_TARGET", - "QMAKE_MAC_SDK", - "QMAKE_MAKEFILE", - "QMAKE_MOC_SRC", - "QMAKE_POST_LINK", - "QMAKE_PRE_LINK", - "QMAKE_PROJECT_NAME", - "QMAKE_QMAKE", - "QMAKE_QT_DLL", - "QMAKE_RESOURCE_FLAGS", - "QMAKE_RPATH", - "QMAKE_RPATHDIR", - "QMAKE_RUN_CC", - "QMAKE_RUN_CC_IMP", - "QMAKE_RUN_CXX", - "QMAKE_RUN_CXX_IMP", - "QMAKE_TARGET", - "QMAKE_UIC", - "QT", - "QTPLUGIN", - "QT_MAJOR_VERSION", - "QT_MINOR_VERSION", - "QT_PATCH_VERSION", - "QT_VERSION", - "RCC_DIR", - "RC_FILE", - "REQUIRES", - "RESOURCES", - "RES_FILE", - "RSS_RULES", - "SIGNATURE_FILE", - "SOURCES", - "SRCMOC", - "STATECHARTS", - "SUBDIRS", - "TARGET", - "TEMPLATE", - "TRANSLATIONS", - "UICIMPLS", - "UICOBJECTS", - "UI_DIR", - "UI_HEADERS_DIR", - "UI_SOURCES_DIR", - "VERSION", - "VERSION_PE_HEADER", - "VER_MAJ", - "VER_MIN", - "VER_PAT", - "VPATH", - "YACCIMPLS", - "YACCOBJECTS", - "YACCSOURCES", - "_PRO_FILE_", - "_PRO_FILE_PWD_", - 0 -}; - -static const char *const functionKeywords[] = { - "CONFIG", - "absolute_path", - "basename", - "cache", - "cat", - "clean_path", - "clear", - "contains", - "count", - "debug", - "defined", - "dirname", - "enumerate_vars", - "equals", - "error", - "escape_expand", - "eval", - "exists", - "export", - "files", - "find", - "first", - "for", - "format_number", - "fromfile", - "getenv", - "greaterThan", - "if", - "include", - "infile", - "isActiveConfig", - "isEmpty", - "isEqual", - "join", - "last", - "lessThan", - "list", - "load", - "log", - "lower", - "member", - "message", - "mkpath", - "packagesExist", - "parseJson", - "prompt", - "quote", - "re_escape", - "relative_path", - "replace", - "requires", - "resolve_depends", - "reverse", - "section", - "shadowed", - "shell_path", - "shell_quote", - "size", - "sort_depends", - "split", - "sprintf", - "system", - "system_path", - "system_quote", - "title", - "touch", - "unique", - "unset", - "upper", - "val_escape", - "warning", - "write_file", - 0 -}; - -// ------------------------------- -// ProFileCompletionAssistProvider -// ------------------------------- -void ProFileCompletionAssistProvider::init() -{ - for (uint i = 0; i < sizeof variableKeywords / sizeof variableKeywords[0] - 1; i++) - m_variables.append(QLatin1String(variableKeywords[i])); - for (uint i = 0; i < sizeof functionKeywords / sizeof functionKeywords[0] - 1; i++) - m_functions.append(QLatin1String(functionKeywords[i])); -} - -ProFileCompletionAssistProvider::~ProFileCompletionAssistProvider() -{ -} - -IAssistProcessor *ProFileCompletionAssistProvider::createProcessor() const -{ - if (m_variables.isEmpty()) - const_cast<ProFileCompletionAssistProvider *>(this)->init(); - TextEditor::Keywords keywords = TextEditor::Keywords(m_variables, m_functions, QMap<QString, QStringList>()); - auto processor = new KeywordsCompletionAssistProcessor(keywords); - processor->setSnippetGroup(TextEditor::Constants::TEXT_SNIPPET_GROUP_ID); - return processor; -} - -QStringList ProFileCompletionAssistProvider::variables() const -{ - if (m_variables.isEmpty()) - const_cast<ProFileCompletionAssistProvider *>(this)->init(); - return m_variables; -} - -QStringList ProFileCompletionAssistProvider::functions() const +const TextEditor::Keywords &QmakeProjectManager::Internal::qmakeKeywords() { - if (m_functions.isEmpty()) - const_cast<ProFileCompletionAssistProvider *>(this)->init(); - return m_functions; + static TextEditor::Keywords keywords( + QStringList{ // variables + "CCFLAG", + "CLEAN_DEPS", + "CONFIG", + "DEFINES", + "DEF_FILE", + "DEPENDPATH", + "DEPLOYMENT", + "DEPLOYMENT_PLUGIN", + "DESTDIR", + "DESTDIR_TARGET", + "DISTFILES", + "DLLDESTDIR", + "DSP_TEMPLATE", + "FORMS", + "FORMS3", + "GUID", + "HEADERS", + "ICON", + "INCLUDEPATH", + "INSTALLS", + "LEXIMPLS", + "LEXOBJECTS", + "LEXSOURCES", + "LIBS", + "LITERAL_HASH", + "MAKEFILE", + "MAKEFILE_GENERATOR", + "MOBILITY", + "MOC_DIR", + "OBJECTIVE_HEADERS", + "OBJECTIVE_SOURCES", + "OBJECTS", + "OBJECTS_DIR", + "OBJMOC", + "OTHER_FILES", + "OUT_PWD", + "PKGCONFIG", + "POST_TARGETDEPS", + "PRECOMPILED_HEADER", + "PRE_TARGETDEPS", + "PWD", + "QMAKE", + "QMAKESPEC", + "QMAKE_APP_FLAG", + "QMAKE_APP_OR_DLL", + "QMAKE_AR_CMD", + "QMAKE_BUNDLE_DATA", + "QMAKE_BUNDLE_EXTENSION", + "QMAKE_CC", + "QMAKE_CFLAGS", + "QMAKE_CFLAGS_DEBUG", + "QMAKE_CFLAGS_MT", + "QMAKE_CFLAGS_MT_DBG", + "QMAKE_CFLAGS_MT_DLL", + "QMAKE_CFLAGS_MT_DLLDBG", + "QMAKE_CFLAGS_RELEASE", + "QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO", + "QMAKE_CFLAGS_SHLIB", + "QMAKE_CFLAGS_THREAD", + "QMAKE_CFLAGS_WARN_OFF", + "QMAKE_CFLAGS_WARN_ON", + "QMAKE_CLEAN", + "QMAKE_CXX", + "QMAKE_CXXFLAGS", + "QMAKE_CXXFLAGS_DEBUG", + "QMAKE_CXXFLAGS_MT", + "QMAKE_CXXFLAGS_MT_DBG", + "QMAKE_CXXFLAGS_MT_DLL", + "QMAKE_CXXFLAGS_MT_DLLDBG", + "QMAKE_CXXFLAGS_RELEASE", + "QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO", + "QMAKE_CXXFLAGS_SHLIB", + "QMAKE_CXXFLAGS_THREAD", + "QMAKE_CXXFLAGS_WARN_OFF", + "QMAKE_CXXFLAGS_WARN_ON", + "QMAKE_DISTCLEAN", + "QMAKE_EXTENSION_SHLIB", + "QMAKE_EXTRA_COMPILERS", + "QMAKE_EXTRA_TARGETS", + "QMAKE_EXT_CPP", + "QMAKE_EXT_H", + "QMAKE_EXT_LEX", + "QMAKE_EXT_MOC", + "QMAKE_EXT_OBJ", + "QMAKE_EXT_PRL", + "QMAKE_EXT_UI", + "QMAKE_EXT_YACC", + "QMAKE_FAILED_REQUIREMENTS", + "QMAKE_FRAMEWORK_BUNDLE_NAME", + "QMAKE_FRAMEWORK_VERSION", + "QMAKE_INCDIR", + "QMAKE_INCDIR_EGL", + "QMAKE_INCDIR_OPENGL", + "QMAKE_INCDIR_OPENGL_ES1", + "QMAKE_INCDIR_OPENGL_ES2", + "QMAKE_INCDIR_OPENVG", + "QMAKE_INCDIR_QT", + "QMAKE_INCDIR_THREAD", + "QMAKE_INCDIR_X11", + "QMAKE_INFO_PLIST", + "QMAKE_LFLAGS", + "QMAKE_LFLAGS_CONSOLE", + "QMAKE_LFLAGS_CONSOLE_DLL", + "QMAKE_LFLAGS_DEBUG", + "QMAKE_LFLAGS_PLUGIN", + "QMAKE_LFLAGS_QT_DLL", + "QMAKE_LFLAGS_RELEASE", + "QMAKE_LFLAGS_RPATH", + "QMAKE_LFLAGS_SHAPP", + "QMAKE_LFLAGS_SHLIB", + "QMAKE_LFLAGS_SONAME", + "QMAKE_LFLAGS_THREAD", + "QMAKE_LFLAGS_WINDOWS", + "QMAKE_LFLAGS_WINDOWS_DLL", + "QMAKE_LIBDIR", + "QMAKE_LIBDIR_EGL", + "QMAKE_LIBDIR_FLAGS", + "QMAKE_LIBDIR_OPENGL", + "QMAKE_LIBDIR_OPENVG", + "QMAKE_LIBDIR_QT", + "QMAKE_LIBDIR_X11", + "QMAKE_LIBS", + "QMAKE_LIBS_CONSOLE", + "QMAKE_LIBS_EGL", + "QMAKE_LIBS_OPENGL", + "QMAKE_LIBS_OPENGL_ES1", + "QMAKE_LIBS_OPENGL_ES2", + "QMAKE_LIBS_OPENGL_QT", + "QMAKE_LIBS_OPENVG", + "QMAKE_LIBS_QT", + "QMAKE_LIBS_QT_DLL", + "QMAKE_LIBS_QT_OPENGL", + "QMAKE_LIBS_QT_THREAD", + "QMAKE_LIBS_RT", + "QMAKE_LIBS_RTMT", + "QMAKE_LIBS_THREAD", + "QMAKE_LIBS_WINDOWS", + "QMAKE_LIBS_X11", + "QMAKE_LIBS_X11SM", + "QMAKE_LIB_FLAG", + "QMAKE_LINK", + "QMAKE_LINK_SHLIB_CMD", + "QMAKE_LN_SHLIB", + "QMAKE_MACOSX_DEPLOYMENT_TARGET", + "QMAKE_MAC_SDK", + "QMAKE_MAKEFILE", + "QMAKE_MOC_SRC", + "QMAKE_POST_LINK", + "QMAKE_PRE_LINK", + "QMAKE_PROJECT_NAME", + "QMAKE_QMAKE", + "QMAKE_QT_DLL", + "QMAKE_RESOURCE_FLAGS", + "QMAKE_RPATH", + "QMAKE_RPATHDIR", + "QMAKE_RUN_CC", + "QMAKE_RUN_CC_IMP", + "QMAKE_RUN_CXX", + "QMAKE_RUN_CXX_IMP", + "QMAKE_TARGET", + "QMAKE_UIC", + "QT", + "QTPLUGIN", + "QT_MAJOR_VERSION", + "QT_MINOR_VERSION", + "QT_PATCH_VERSION", + "QT_VERSION", + "RCC_DIR", + "RC_FILE", + "REQUIRES", + "RESOURCES", + "RES_FILE", + "RSS_RULES", + "SIGNATURE_FILE", + "SOURCES", + "SRCMOC", + "STATECHARTS", + "SUBDIRS", + "TARGET", + "TEMPLATE", + "TRANSLATIONS", + "UICIMPLS", + "UICOBJECTS", + "UI_DIR", + "UI_HEADERS_DIR", + "UI_SOURCES_DIR", + "VERSION", + "VERSION_PE_HEADER", + "VER_MAJ", + "VER_MIN", + "VER_PAT", + "VPATH", + "YACCIMPLS", + "YACCOBJECTS", + "YACCSOURCES", + "_PRO_FILE_", + "_PRO_FILE_PWD_"}, + QStringList{ // functions + "CONFIG", + "absolute_path", + "basename", + "cache", + "cat", + "clean_path", + "clear", + "contains", + "count", + "debug", + "defined", + "dirname", + "enumerate_vars", + "equals", + "error", + "escape_expand", + "eval", + "exists", + "export", + "files", + "find", + "first", + "for", + "format_number", + "fromfile", + "getenv", + "greaterThan", + "if", + "include", + "infile", + "isActiveConfig", + "isEmpty", + "isEqual", + "join", + "last", + "lessThan", + "list", + "load", + "log", + "lower", + "member", + "message", + "mkpath", + "packagesExist", + "parseJson", + "prompt", + "quote", + "re_escape", + "relative_path", + "replace", + "requires", + "resolve_depends", + "reverse", + "section", + "shadowed", + "shell_path", + "shell_quote", + "size", + "sort_depends", + "split", + "sprintf", + "system", + "system_path", + "system_quote", + "title", + "touch", + "unique", + "unset", + "upper", + "val_escape", + "warning", + "write_file"}); + return keywords; } diff --git a/src/plugins/qmakeprojectmanager/profilecompletionassist.h b/src/plugins/qmakeprojectmanager/profilecompletionassist.h index 76c77a95f0..85ffec0dfd 100644 --- a/src/plugins/qmakeprojectmanager/profilecompletionassist.h +++ b/src/plugins/qmakeprojectmanager/profilecompletionassist.h @@ -25,29 +25,11 @@ #pragma once -#include <texteditor/codeassist/completionassistprovider.h> - -#include <QStringList> - +namespace TextEditor { class Keywords; } namespace QmakeProjectManager { namespace Internal { -class ProFileCompletionAssistProvider : public TextEditor::CompletionAssistProvider -{ - Q_OBJECT - -public: - void init(); - ~ProFileCompletionAssistProvider(); - - TextEditor::IAssistProcessor *createProcessor() const override; - QStringList variables() const; - QStringList functions() const; - -private: - QStringList m_variables; - QStringList m_functions; -}; +const TextEditor::Keywords &qmakeKeywords(); } // namespace Internal } // namespace QmakeProjectManager diff --git a/src/plugins/qmakeprojectmanager/profileeditor.cpp b/src/plugins/qmakeprojectmanager/profileeditor.cpp index ada9054589..97c119c456 100644 --- a/src/plugins/qmakeprojectmanager/profileeditor.cpp +++ b/src/plugins/qmakeprojectmanager/profileeditor.cpp @@ -182,16 +182,14 @@ ProFileEditorFactory::ProFileEditorFactory() setDocumentCreator(createProFileDocument); setEditorWidgetCreator([]() { return new ProFileEditorWidget; }); - ProFileCompletionAssistProvider *pcap = new ProFileCompletionAssistProvider; - setCompletionAssistProvider(pcap); + setCompletionAssistProvider(new KeywordsCompletionAssistProvider(qmakeKeywords())); setCommentDefinition(Utils::CommentDefinition::HashStyle); setEditorActionHandlers(TextEditorActionHandler::UnCommentSelection | TextEditorActionHandler::JumpToFileUnderCursor); - Keywords keywords(pcap->variables(), pcap->functions(), QMap<QString, QStringList>()); - addHoverHandler(new ProFileHoverHandler(keywords)); - setSyntaxHighlighterCreator([keywords]() { return new ProFileHighlighter(keywords); }); + addHoverHandler(new ProFileHoverHandler); + setSyntaxHighlighterCreator([]() { return new ProFileHighlighter; }); const QString defaultOverlay = QLatin1String(ProjectExplorer::Constants::FILEOVERLAY_QT); Core::FileIconProvider::registerIconOverlayForSuffix( diff --git a/src/plugins/qmakeprojectmanager/profilehighlighter.cpp b/src/plugins/qmakeprojectmanager/profilehighlighter.cpp index 0cbfb09b2e..85752474d3 100644 --- a/src/plugins/qmakeprojectmanager/profilehighlighter.cpp +++ b/src/plugins/qmakeprojectmanager/profilehighlighter.cpp @@ -53,7 +53,7 @@ static TextStyle styleForFormat(int format) } ProFileHighlighter::ProFileHighlighter(const Keywords &keywords) - : m_keywords(keywords) + : m_keywords(qmakeKeywords()) { setTextFormatCategories(NumProfileFormats, styleForFormat); } diff --git a/src/plugins/qmakeprojectmanager/profilehoverhandler.cpp b/src/plugins/qmakeprojectmanager/profilehoverhandler.cpp index 3c9c3962e8..dfbee9bb66 100644 --- a/src/plugins/qmakeprojectmanager/profilehoverhandler.cpp +++ b/src/plugins/qmakeprojectmanager/profilehoverhandler.cpp @@ -39,8 +39,8 @@ using namespace Core; namespace QmakeProjectManager { namespace Internal { -ProFileHoverHandler::ProFileHoverHandler(const TextEditor::Keywords &keywords) - : m_keywords(keywords) +ProFileHoverHandler::ProFileHoverHandler() + : m_keywords(qmakeKeywords()) { } |