Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Tobias Hunger
qt-creator
Commits
1862282b
Commit
1862282b
authored
Aug 31, 2010
by
Christian Kamm
Browse files
C++ indenter: Fix nested array/struct initializers.
parent
16367a03
Changes
2
Hide whitespace changes
Inline
Side-by-side
src/plugins/cpptools/cppcodeformatter.cpp
View file @
1862282b
...
...
@@ -1008,6 +1008,9 @@ void QtStyleCodeFormatter::onEnter(int newState, int *indentDepth, int *savedInd
const
int
tokenPosition
=
column
(
tk
.
begin
());
const
bool
firstToken
=
(
tokenIndex
()
==
0
);
const
bool
lastToken
=
(
tokenIndex
()
==
tokenCount
()
-
1
);
int
nextTokenStart
=
0
;
if
(
!
lastToken
)
nextTokenStart
=
column
(
tokenAt
(
tokenIndex
()
+
1
).
begin
());
switch
(
newState
)
{
case
namespace_start
:
...
...
@@ -1136,10 +1139,14 @@ void QtStyleCodeFormatter::onEnter(int newState, int *indentDepth, int *savedInd
break
;
case
brace_list_open
:
if
(
parentState
.
type
!=
initializer
)
*
indentDepth
=
parentState
.
savedIndentDepth
+
m_indentSize
;
else
if
(
lastToken
)
{
*
savedIndentDepth
=
state
(
1
).
savedIndentDepth
;
if
(
!
lastToken
)
{
if
(
parentState
.
type
==
initializer
)
*
savedIndentDepth
=
tokenPosition
;
*
indentDepth
=
nextTokenStart
;
}
else
{
// avoid existing continuation indents
if
(
parentState
.
type
==
initializer
)
*
savedIndentDepth
=
state
(
1
).
savedIndentDepth
;
*
indentDepth
=
*
savedIndentDepth
+
m_indentSize
;
}
break
;
...
...
@@ -1256,6 +1263,7 @@ void QtStyleCodeFormatter::adjustIndent(const QList<CPlusPlus::Token> &tokens, i
}
else
if
(
topState
.
type
!=
defun_open
&&
topState
.
type
!=
block_open
&&
topState
.
type
!=
substatement_open
&&
topState
.
type
!=
brace_list_open
&&
!
topWasMaybeElse
)
{
*
indentDepth
=
topState
.
savedIndentDepth
;
}
...
...
tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp
View file @
1862282b
...
...
@@ -46,6 +46,7 @@ private Q_SLOTS:
void
functionReturnType
();
void
streamOp
();
void
blockStmtInIf
();
void
nestedInitializer
();
};
struct
Line
{
...
...
@@ -613,9 +614,9 @@ void tst_CodeFormatter::braceList()
<<
Line
(
" b = 4"
)
<<
Line
(
" };"
)
<<
Line
(
"void foo () {"
)
<<
Line
(
" int
[]
a = { foo, bar, "
)
<<
Line
(
" car };"
)
<<
Line
(
" int
[]
a = {"
)
<<
Line
(
" int a
[]
= { foo, bar, "
)
<<
Line
(
"
car };"
)
<<
Line
(
" int a
[]
= {"
)
<<
Line
(
" a, b,"
)
<<
Line
(
" c"
)
<<
Line
(
" };"
)
...
...
@@ -837,6 +838,36 @@ void tst_CodeFormatter::blockStmtInIf()
checkIndent
(
data
);
}
void
tst_CodeFormatter
::
nestedInitializer
()
{
QList
<
Line
>
data
;
data
<<
Line
(
"SomeStruct v[] = {"
)
<<
Line
(
" {2}, {3},"
)
<<
Line
(
" {4}, {5},"
)
<<
Line
(
"};"
)
<<
Line
(
"S v[] = {{1}, {2},"
)
<<
Line
(
" {3}, {4},"
)
<<
Line
(
" };"
)
<<
Line
(
"SomeStruct v[] = {"
)
<<
Line
(
" {"
)
<<
Line
(
" {2, 3,"
)
<<
Line
(
" 4, 5},"
)
<<
Line
(
" {1},"
)
<<
Line
(
" }"
)
<<
Line
(
"};"
)
<<
Line
(
"SomeStruct v[] = {{{2, 3},"
)
<<
Line
(
" {4, 5}"
)
<<
Line
(
" },"
)
<<
Line
(
" {{2, 3},"
)
<<
Line
(
" {4, 5},"
)
<<
Line
(
" }"
)
<<
Line
(
" };"
)
<<
Line
(
"int i;"
)
;
checkIndent
(
data
);
}
QTEST_APPLESS_MAIN
(
tst_CodeFormatter
)
#include
"tst_codeformatter.moc"
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment