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
Marco Bubke
flatpak-qt-creator
Commits
74ed3e8a
Commit
74ed3e8a
authored
Jul 06, 2010
by
Christian Kamm
Browse files
C++ indenter: Add more functions to manage the indenter state.
parent
7528b2c6
Changes
3
Hide whitespace changes
Inline
Side-by-side
src/plugins/cpptools/cppcodeformatter.cpp
View file @
74ed3e8a
...
...
@@ -455,6 +455,8 @@ void CodeFormatter::updateStateUntil(const QTextBlock &endBlock)
{
QStack
<
State
>
previousState
=
initialState
();
QTextBlock
it
=
endBlock
.
document
()
->
firstBlock
();
// find the first block that needs recalculation
for
(;
it
.
isValid
()
&&
it
!=
endBlock
;
it
=
it
.
next
())
{
TextBlockUserData
*
userData
=
BaseTextDocumentLayout
::
userData
(
it
);
CppCodeFormatterData
*
cppData
=
static_cast
<
CppCodeFormatterData
*>
(
userData
->
codeFormatterData
());
...
...
@@ -469,10 +471,47 @@ void CodeFormatter::updateStateUntil(const QTextBlock &endBlock)
previousState
=
cppData
->
m_endState
;
}
if
(
it
==
endBlock
)
return
;
// update everthing until endBlock
for
(;
it
.
isValid
()
&&
it
!=
endBlock
;
it
=
it
.
next
())
{
//qDebug() << "recalc line" << it.blockNumber() + 1;
recalculateStateAfter
(
it
);
}
// invalidate everything below by marking the state in endBlock as invalid
TextBlockUserData
*
userData
=
BaseTextDocumentLayout
::
userData
(
endBlock
);
CppCodeFormatterData
*
cppData
=
static_cast
<
CppCodeFormatterData
*>
(
userData
->
codeFormatterData
());
if
(
cppData
)
cppData
->
setBlockRevision
(
-
1
);
}
void
CodeFormatter
::
updateLineStateChange
(
const
QTextBlock
&
block
)
{
if
(
!
block
.
isValid
())
return
;
QStack
<
State
>
oldEndState
;
TextBlockUserData
*
userData
=
BaseTextDocumentLayout
::
userData
(
block
);
CppCodeFormatterData
*
cppData
=
static_cast
<
CppCodeFormatterData
*>
(
userData
->
codeFormatterData
());
if
(
cppData
)
oldEndState
=
cppData
->
m_endState
;
recalculateStateAfter
(
block
);
if
(
oldEndState
.
isEmpty
()
||
oldEndState
!=
cppData
->
m_endState
)
{
// invalidate everything below by marking the next block's state as invalid
QTextBlock
next
=
block
.
next
();
if
(
!
next
.
isValid
())
return
;
userData
=
BaseTextDocumentLayout
::
userData
(
next
);
cppData
=
static_cast
<
CppCodeFormatterData
*>
(
userData
->
codeFormatterData
());
if
(
cppData
)
cppData
->
setBlockRevision
(
-
1
);
}
}
CodeFormatter
::
State
CodeFormatter
::
state
(
int
belowTop
)
const
...
...
src/plugins/cpptools/cppcodeformatter.h
View file @
74ed3e8a
...
...
@@ -28,7 +28,13 @@ public:
CodeFormatter
();
virtual
~
CodeFormatter
();
// updates all states up until block if necessary
// it is safe to call indentFor on block afterwards
void
updateStateUntil
(
const
QTextBlock
&
block
);
// calculates the state change introduced by changing a single line
void
updateLineStateChange
(
const
QTextBlock
&
block
);
int
indentFor
(
const
QTextBlock
&
block
);
void
setTabSize
(
int
tabSize
);
...
...
tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp
View file @
74ed3e8a
...
...
@@ -89,17 +89,17 @@ void checkIndent(QList<Line> data, int style = 0)
formatter
.
setIndentDeclarationBraces
(
true
);
}
formatter
.
updateStateUntil
(
document
.
lastBlock
());
int
i
=
0
;
foreach
(
const
Line
&
l
,
data
)
{
QTextBlock
b
=
document
.
findBlockByLineNumber
(
i
);
if
(
l
.
expectedIndent
!=
-
1
)
{
int
actualIndent
=
formatter
.
indentFor
(
document
.
findBlockByLineNumber
(
i
)
);
int
actualIndent
=
formatter
.
indentFor
(
b
);
if
(
actualIndent
!=
l
.
expectedIndent
)
{
QFAIL
(
QString
(
"Wrong indent in line %1 with text '%2', expected indent %3, got %4"
).
arg
(
QString
::
number
(
i
+
1
),
l
.
line
,
QString
::
number
(
l
.
expectedIndent
),
QString
::
number
(
actualIndent
)).
toLatin1
().
constData
());
}
}
formatter
.
updateLineStateChange
(
b
);
++
i
;
}
}
...
...
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