/**************************************************************************** ** ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of Qt Creator. ** ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Digia. For licensing terms and ** conditions see http://qt.digia.com/licensing. For further information ** use the contact form at http://qt.digia.com/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Digia gives you certain additional ** rights. These rights are described in the Digia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ****************************************************************************/ #include "profilecompletionassist.h" #include "qmakeprojectmanagerconstants.h" #include 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_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_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", "VER_MAJ", "VER_MIN", "VER_PAT", "VPATH", "YACCIMPLS", "YACCOBJECTS", "YACCSOURCES", "_PRO_FILE_", "_PRO_FILE_PWD_", 0 }; static const char *const functionKeywords[] = { "basename", "contains", "count", "dirname", "error", "eval", "exists", "find", "for", "include", "infile", "isEmpty", "join", "member", "message", "packagesExist", "prompt", "quote", "replace", "sprintf", "system", "unique", "warning", 0 }; // ------------------------------- // ProFileCompletionAssistProvider // ------------------------------- ProFileCompletionAssistProvider::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() { } bool ProFileCompletionAssistProvider::supportsEditor(const Core::Id &editorId) const { return editorId == QmakeProjectManager::Constants::PROFILE_EDITOR_ID; } IAssistProcessor *ProFileCompletionAssistProvider::createProcessor() const { if (m_variables.isEmpty()) const_cast(this)->init(); TextEditor::Keywords keywords = TextEditor::Keywords(m_variables, m_functions, QMap()); return new KeywordsCompletionAssistProcessor(keywords); } QStringList ProFileCompletionAssistProvider::variables() const { if (m_variables.isEmpty()) const_cast(this)->init(); return m_variables; } QStringList ProFileCompletionAssistProvider::functions() const { if (m_functions.isEmpty()) const_cast(this)->init(); return m_functions; }