diff --git a/src/plugins/qmleditor/qmleditor.cpp b/src/plugins/qmleditor/qmleditor.cpp
index 432c23de904a1951d7e9b786fa530e298873f1bc..8986f1eaf123c27a4ff72701befd8af0eaa190de 100644
--- a/src/plugins/qmleditor/qmleditor.cpp
+++ b/src/plugins/qmleditor/qmleditor.cpp
@@ -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
diff --git a/src/plugins/qtscripteditor/qtscripteditor.cpp b/src/plugins/qtscripteditor/qtscripteditor.cpp
index 6d235b5f0a254fce6784838cdd847a84511d2563..670c5c747e83849b0747354d85fa8c7116f2a5bf 100644
--- a/src/plugins/qtscripteditor/qtscripteditor.cpp
+++ b/src/plugins/qtscripteditor/qtscripteditor.cpp
@@ -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