From 9092ef7992b685b122c4e593f2ad3ee545c1f0c4 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Mon, 7 Aug 2017 11:17:21 +0200 Subject: [PATCH] C++: Do not insert matching } within string Regression from commit a6aa287720112c70c1363bcb46d55d438fe57eac C++: Fine-tune auto insertion of '}' Change-Id: I3ede8c7a1e3c73708d5d5a59c314e4b4596976b2 Reviewed-by: Ivan Donchevskii Reviewed-by: Christian Stenger --- src/libs/cplusplus/MatchingText.cpp | 5 +++++ tests/unit/unittest/matchingtext-test.cpp | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/src/libs/cplusplus/MatchingText.cpp b/src/libs/cplusplus/MatchingText.cpp index e2f04e4f0f2..447c91ea591 100644 --- a/src/libs/cplusplus/MatchingText.cpp +++ b/src/libs/cplusplus/MatchingText.cpp @@ -326,6 +326,11 @@ static bool allowAutoClosingBrace(const QTextCursor &cursor, int prevState; const Tokens tokens = getTokens(cursor, prevState); + + const Token token = tokenAtPosition(tokens, cursor.positionInBlock()); + if (token.isStringLiteral()) + return false; + if (isAfterNamespaceDefinition(tokens, cursor.positionInBlock())) return false; diff --git a/tests/unit/unittest/matchingtext-test.cpp b/tests/unit/unittest/matchingtext-test.cpp index d5bfcaddefe..c07bfec49a9 100644 --- a/tests/unit/unittest/matchingtext-test.cpp +++ b/tests/unit/unittest/matchingtext-test.cpp @@ -256,4 +256,11 @@ TEST_F(MatchingText, ContextAllowsAutoParentheses_CurlyBrace_NotBeforeNestedName ASSERT_FALSE(MT::contextAllowsAutoParentheses(document.cursor, "{")); } +TEST_F(MatchingText, ContextAllowsAutoParentheses_CurlyBrace_NotWithinString) +{ + const Document document("\"a@b\""); + + ASSERT_FALSE(MT::contextAllowsAutoParentheses(document.cursor, "{")); +} + } // anonymous