Commit 547912af authored by Roberto Raggi's avatar Roberto Raggi
Browse files

Speed up contextAllowsAutoParentheses().

Look at the token under cursor only if the current character is a brace or a quote.
parent e3188417
......@@ -726,6 +726,28 @@ bool QmlTextEditor::contextAllowsAutoParentheses(const QTextCursor &cursor, cons
if (! textToInsert.isEmpty())
ch = textToInsert.at(0);
switch (ch.unicode()) {
case '\'':
case '"':
case '(':
case '[':
case '{':
case ')':
case ']':
case '}':
case ';':
break;
default:
if (ch.isNull())
break;
return false;
} // end of switch
const QString blockText = cursor.block().text();
const int blockState = blockStartState(cursor.block());
......@@ -736,8 +758,12 @@ bool QmlTextEditor::contextAllowsAutoParentheses(const QTextCursor &cursor, cons
int tokenIndex = tokens.size() - 1;
for (; tokenIndex != -1; --tokenIndex) {
const QScriptIncrementalScanner::Token &token = tokens.at(tokenIndex);
if (pos >= token.begin() && pos <= token.end())
break;
if (pos >= token.begin()) {
if (pos < token.end())
break;
else if (pos == token.end() && token.is(QScriptIncrementalScanner::Token::Comment))
break;
}
}
if (tokenIndex != -1) {
......@@ -760,27 +786,7 @@ bool QmlTextEditor::contextAllowsAutoParentheses(const QTextCursor &cursor, cons
} // end of switch
}
switch (ch.unicode()) {
case '\'':
case '"':
case '(':
case '[':
case '{':
case ')':
case ']':
case '}':
case ';':
return true;
default:
if (ch.isNull())
return true;
} // end of switch
return false;
return true;
}
bool QmlTextEditor::isInComment(const QTextCursor &) const
......
......@@ -409,8 +409,34 @@ bool ScriptEditor::contextAllowsAutoParentheses(const QTextCursor &cursor, const
if (! textToInsert.isEmpty())
ch = textToInsert.at(0);
switch (ch.unicode()) {
case '\'':
case '"':
case '(':
case '[':
case '{':
case ')':
case ']':
case '}':
case ';':
break;
default:
if (ch.isNull())
break;
return false;
} // end of switch
const QString blockText = cursor.block().text();
const int blockState = cursor.block().userState() & 0xFF;
int blockState = cursor.block().userState();
if (blockState == -1)
blockState = 0;
else
blockState = blockState & 0xFF;
QScriptIncrementalScanner tokenize;
const QList<QScriptIncrementalScanner::Token> tokens = tokenize(blockText, blockState);
......@@ -419,8 +445,12 @@ bool ScriptEditor::contextAllowsAutoParentheses(const QTextCursor &cursor, const
int tokenIndex = tokens.size() - 1;
for (; tokenIndex != -1; --tokenIndex) {
const QScriptIncrementalScanner::Token &token = tokens.at(tokenIndex);
if (pos >= token.begin() && pos <= token.end())
break;
if (pos >= token.begin()) {
if (pos < token.end())
break;
else if (pos == token.end() && token.is(QScriptIncrementalScanner::Token::Comment))
break;
}
}
if (tokenIndex != -1) {
......@@ -443,27 +473,7 @@ bool ScriptEditor::contextAllowsAutoParentheses(const QTextCursor &cursor, const
} // end of switch
}
switch (ch.unicode()) {
case '\'':
case '"':
case '(':
case '[':
case '{':
case ')':
case ']':
case '}':
case ';':
return true;
default:
if (ch.isNull())
return true;
} // end of switch
return false;
return true;
}
bool ScriptEditor::isInComment(const QTextCursor &) const
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment