forked from qt-creator/qt-creator
completion: enable multiple completors for different use cases.
Introduce CompletionPolicy enum, use 'TextCompletion' for the new plain text completion, and 'SemanticCompletion' or 'QuickFixCompletion' for the existing cases. Reviewed-by: Erik Verbruggen
This commit is contained in:
@@ -510,7 +510,7 @@ int CodeCompletion::startPosition() const
|
||||
bool CodeCompletion::shouldRestartCompletion()
|
||||
{ return m_restartCompletion; }
|
||||
|
||||
bool CodeCompletion::supportsEditor(TextEditor::ITextEditable *editor)
|
||||
bool CodeCompletion::supportsEditor(TextEditor::ITextEditable *editor) const
|
||||
{
|
||||
if (qobject_cast<QmlJSTextEditor *>(editor->widget()))
|
||||
return true;
|
||||
@@ -518,6 +518,11 @@ bool CodeCompletion::supportsEditor(TextEditor::ITextEditable *editor)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CodeCompletion::supportsPolicy(TextEditor::CompletionPolicy policy) const
|
||||
{
|
||||
return policy == TextEditor::SemanticCompletion;
|
||||
}
|
||||
|
||||
bool CodeCompletion::triggersCompletion(TextEditor::ITextEditable *editor)
|
||||
{
|
||||
if (maybeTriggersCompletion(editor)) {
|
||||
|
||||
@@ -69,7 +69,8 @@ public:
|
||||
virtual TextEditor::ITextEditable *editor() const;
|
||||
virtual int startPosition() const;
|
||||
virtual bool shouldRestartCompletion();
|
||||
virtual bool supportsEditor(TextEditor::ITextEditable *editor);
|
||||
virtual bool supportsEditor(TextEditor::ITextEditable *editor) const;
|
||||
virtual bool supportsPolicy(TextEditor::CompletionPolicy policy) const;
|
||||
virtual bool triggersCompletion(TextEditor::ITextEditable *editor);
|
||||
virtual int startCompletion(TextEditor::ITextEditable *editor);
|
||||
virtual void completions(QList<TextEditor::CompletionItem> *completions);
|
||||
|
||||
@@ -272,13 +272,11 @@ void QmlJSEditorPlugin::initializeEditor(QmlJSEditor::QmlJSTextEditor *editor)
|
||||
|
||||
TextEditor::TextEditorSettings::instance()->initializeEditor(editor);
|
||||
|
||||
// auto completion
|
||||
connect(editor, SIGNAL(requestAutoCompletion(TextEditor::ITextEditable*, bool)),
|
||||
TextEditor::CompletionSupport::instance(), SLOT(autoComplete(TextEditor::ITextEditable*, bool)));
|
||||
|
||||
// quick fix
|
||||
connect(editor, SIGNAL(requestQuickFix(TextEditor::ITextEditable*)),
|
||||
this, SLOT(quickFix(TextEditor::ITextEditable*)));
|
||||
// auto completion and quick fix
|
||||
connect(editor,
|
||||
SIGNAL(requestCompletion(TextEditor::ITextEditable*,TextEditor::CompletionPolicy,bool)),
|
||||
TextEditor::CompletionSupport::instance(),
|
||||
SLOT(autoComplete(TextEditor::ITextEditable*,TextEditor::CompletionPolicy,bool)));
|
||||
}
|
||||
|
||||
void QmlJSEditorPlugin::followSymbolUnderCursor()
|
||||
@@ -340,7 +338,8 @@ void QmlJSEditorPlugin::quickFixNow()
|
||||
// ### FIXME: m_quickFixTimer->start(QUICKFIX_INTERVAL);
|
||||
m_quickFixTimer->stop();
|
||||
} else {
|
||||
TextEditor::CompletionSupport::instance()->quickFix(m_currentTextEditable);
|
||||
TextEditor::CompletionSupport::instance()
|
||||
->complete(m_currentTextEditable, TextEditor::QuickFixCompletion, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -141,11 +141,16 @@ QmlJSQuickFixCollector::~QmlJSQuickFixCollector()
|
||||
{
|
||||
}
|
||||
|
||||
bool QmlJSQuickFixCollector::supportsEditor(TextEditor::ITextEditable *editable)
|
||||
bool QmlJSQuickFixCollector::supportsEditor(TextEditor::ITextEditable *editable) const
|
||||
{
|
||||
return qobject_cast<QmlJSTextEditor *>(editable->widget()) != 0;
|
||||
}
|
||||
|
||||
bool QmlJSQuickFixCollector::supportsPolicy(TextEditor::CompletionPolicy policy) const
|
||||
{
|
||||
return policy == TextEditor::QuickFixCompletion;
|
||||
}
|
||||
|
||||
TextEditor::QuickFixState *QmlJSQuickFixCollector::initializeCompletion(TextEditor::BaseTextEditor *editor)
|
||||
{
|
||||
if (QmlJSTextEditor *qmljsEditor = qobject_cast<QmlJSTextEditor *>(editor)) {
|
||||
|
||||
@@ -152,7 +152,8 @@ public:
|
||||
QmlJSQuickFixCollector();
|
||||
virtual ~QmlJSQuickFixCollector();
|
||||
|
||||
virtual bool supportsEditor(TextEditor::ITextEditable *editor);
|
||||
virtual bool supportsEditor(TextEditor::ITextEditable *editor) const;
|
||||
virtual bool supportsPolicy(TextEditor::CompletionPolicy policy) const;
|
||||
virtual TextEditor::QuickFixState *initializeCompletion(TextEditor::BaseTextEditor *editor);
|
||||
|
||||
virtual QList<TextEditor::QuickFixFactory *> quickFixFactories() const;
|
||||
|
||||
Reference in New Issue
Block a user