diff --git a/src/plugins/texteditor/codeassist/keywordscompletionassist.cpp b/src/plugins/texteditor/codeassist/keywordscompletionassist.cpp
index 3c2ff5a1fc59615570cea0a5e02f1758fdb3967b..25553033cd5f2112442ce22671e78fd34dc34f34 100644
--- a/src/plugins/texteditor/codeassist/keywordscompletionassist.cpp
+++ b/src/plugins/texteditor/codeassist/keywordscompletionassist.cpp
@@ -31,6 +31,7 @@
 #include <texteditor/codeassist/genericproposalmodel.h>
 #include <texteditor/completionsettings.h>
 #include <texteditor/texteditorsettings.h>
+#include <texteditor/texteditorconstants.h>
 #include <texteditor/texteditor.h>
 
 #include <utils/algorithm.h>
@@ -243,4 +244,22 @@ KeywordsCompletionAssistProcessor::generateProposalList(const QStringList &words
     });
 }
 
+KeywordsCompletionAssistProvider::KeywordsCompletionAssistProvider(const Keywords &keyWords,
+                                                                   const QString &snippetGroup)
+    : m_keyWords(keyWords)
+    , m_snippetGroup(snippetGroup)
+{ }
+
+IAssistProvider::RunType KeywordsCompletionAssistProvider::runType() const
+{
+    return Synchronous;
+}
+
+IAssistProcessor *KeywordsCompletionAssistProvider::createProcessor() const
+{
+    auto processor = new KeywordsCompletionAssistProcessor(m_keyWords);
+    processor->setSnippetGroup(m_snippetGroup);
+    return processor;
+}
+
 } // namespace TextEditor
diff --git a/src/plugins/texteditor/codeassist/keywordscompletionassist.h b/src/plugins/texteditor/codeassist/keywordscompletionassist.h
index f65e726022a6fda6cce74c35e858d078949f9f9b..f14b33cc5841468298bea15da2e7cb1e1abf3b47 100644
--- a/src/plugins/texteditor/codeassist/keywordscompletionassist.h
+++ b/src/plugins/texteditor/codeassist/keywordscompletionassist.h
@@ -28,8 +28,11 @@
 #include "iassistprocessor.h"
 #include "assistproposalitem.h"
 #include "ifunctionhintproposalmodel.h"
+#include "completionassistprovider.h"
 #include "../snippets/snippetassistcollector.h"
 
+#include "texteditor/texteditorconstants.h"
+
 namespace TextEditor {
 
 class AssistInterface;
@@ -38,8 +41,8 @@ class TEXTEDITOR_EXPORT Keywords
 {
 public:
     Keywords() = default;
-    Keywords(const QStringList &variables, const QStringList &functions,
-             const QMap<QString, QStringList> &functionArgs);
+    Keywords(const QStringList &variables, const QStringList &functions = QStringList(),
+             const QMap<QString, QStringList> &functionArgs = QMap<QString, QStringList>());
     bool isVariable(const QString &word) const;
     bool isFunction(const QString &word) const;
 
@@ -79,6 +82,21 @@ private:
     QStringList m_functionSymbols;
 };
 
+class TEXTEDITOR_EXPORT KeywordsCompletionAssistProvider : public CompletionAssistProvider
+{
+public:
+    KeywordsCompletionAssistProvider(const Keywords &keyWords = Keywords(),
+            const QString &snippetGroup = Constants::TEXT_SNIPPET_GROUP_ID);
+
+    // IAssistProvider interface
+    RunType runType() const override;
+    IAssistProcessor *createProcessor() const override;
+
+private:
+    Keywords m_keyWords;
+    QString m_snippetGroup;
+};
+
 class TEXTEDITOR_EXPORT KeywordsCompletionAssistProcessor : public IAssistProcessor
 {
 public:
diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp
index d2990d1f2ac8de97712042f6f7f3c1a042ae1b41..d395656da66845a48f4258377e098f80486b5532 100644
--- a/src/plugins/texteditor/texteditor.cpp
+++ b/src/plugins/texteditor/texteditor.cpp
@@ -57,6 +57,7 @@
 #include <texteditor/codeassist/assistinterface.h>
 #include <texteditor/codeassist/codeassistant.h>
 #include <texteditor/codeassist/completionassistprovider.h>
+#include <texteditor/codeassist/keywordscompletionassist.h>
 #include <texteditor/generichighlighter/context.h>
 #include <texteditor/generichighlighter/highlightdefinition.h>
 #include <texteditor/generichighlighter/highlighter.h>
@@ -8263,6 +8264,7 @@ void TextEditorFactory::setParenthesesMatchingEnabled(bool on)
 
 IEditor *TextEditorFactory::createEditor()
 {
+    static KeywordsCompletionAssistProvider basicSnippetProvider;
     TextDocumentPtr doc(d->m_documentCreator());
 
     if (d->m_indenterCreator)
@@ -8271,7 +8273,8 @@ IEditor *TextEditorFactory::createEditor()
     if (d->m_syntaxHighlighterCreator)
         doc->setSyntaxHighlighter(d->m_syntaxHighlighterCreator());
 
-    doc->setCompletionAssistProvider(d->m_completionAssistProvider);
+    doc->setCompletionAssistProvider(d->m_completionAssistProvider ? d->m_completionAssistProvider
+                                                                   : &basicSnippetProvider);
 
     return d->createEditorHelper(doc);
 }