QmlJS: Complete trailing / in file name completion.

Also restart completion when a directory was completed.
This commit is contained in:
Christian Kamm
2011-04-28 09:20:53 +02:00
parent d7d23226ba
commit ba14c46a5e

View File

@@ -635,6 +635,13 @@ bool CodeCompletion::completeUrl(const QString &relativeBasePath, const QString
return completeFileName(relativeBasePath, fileName); return completeFileName(relativeBasePath, fileName);
} }
class FileNameCompletion
{
public:
bool isDirectory;
};
Q_DECLARE_METATYPE(FileNameCompletion)
bool CodeCompletion::completeFileName(const QString &relativeBasePath, const QString &fileName, bool CodeCompletion::completeFileName(const QString &relativeBasePath, const QString &fileName,
const QStringList &patterns) const QStringList &patterns)
{ {
@@ -657,6 +664,11 @@ bool CodeCompletion::completeFileName(const QString &relativeBasePath, const QSt
TextEditor::CompletionItem item(this); TextEditor::CompletionItem item(this);
item.text += fileName; item.text += fileName;
FileNameCompletion extraData;
extraData.isDirectory = dirIterator.fileInfo().isDir();
if (extraData.isDirectory)
item.text += QLatin1Char('/');
item.data = QVariant::fromValue(extraData);
// ### Icon for file completions // ### Icon for file completions
item.icon = iconForColor(Qt::darkBlue); item.icon = iconForColor(Qt::darkBlue);
m_completions.append(item); m_completions.append(item);
@@ -1028,7 +1040,7 @@ void CodeCompletion::complete(const TextEditor::CompletionItem &item, QChar type
QString toInsert = item.text; QString toInsert = item.text;
if (QmlJSTextEditorWidget *edit = qobject_cast<QmlJSTextEditorWidget *>(m_editor->widget())) { if (QmlJSTextEditorWidget *edit = qobject_cast<QmlJSTextEditorWidget *>(m_editor->widget())) {
if (item.data.isValid()) { if (item.data.canConvert<QString>()) {
QTextCursor tc = edit->textCursor(); QTextCursor tc = edit->textCursor();
tc.setPosition(m_startPosition, QTextCursor::KeepAnchor); tc.setPosition(m_startPosition, QTextCursor::KeepAnchor);
toInsert = item.data.toString(); toInsert = item.data.toString();
@@ -1061,6 +1073,8 @@ void CodeCompletion::complete(const TextEditor::CompletionItem &item, QChar type
if (toInsert.endsWith(QLatin1Char('.'))) if (toInsert.endsWith(QLatin1Char('.')))
m_restartCompletion = true; m_restartCompletion = true;
if (item.data.canConvert<FileNameCompletion>() && item.data.value<FileNameCompletion>().isDirectory)
m_restartCompletion = true;
} }
bool CodeCompletion::partiallyComplete(const QList<TextEditor::CompletionItem> &completionItems) bool CodeCompletion::partiallyComplete(const QList<TextEditor::CompletionItem> &completionItems)