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
1702543d
Commit
1702543d
authored
Jul 19, 2010
by
Roberto Raggi
Browse files
Added a simple quickfix to declare local variable.
parent
87001994
Changes
2
Hide whitespace changes
Inline
Side-by-side
src/plugins/cppeditor/cppquickfix.cpp
View file @
1702543d
...
...
@@ -1492,6 +1492,66 @@ private:
Symbol
*
fwdClass
;
};
class
AddLocalDeclarationOp
:
public
CppQuickFixOperation
{
public:
AddLocalDeclarationOp
(
TextEditor
::
BaseTextEditor
*
editor
)
:
CppQuickFixOperation
(
editor
),
binaryAST
(
0
)
{
}
virtual
QString
description
()
const
{
return
QApplication
::
translate
(
"CppTools::QuickFix"
,
"Add local declaration"
);
}
virtual
int
match
(
const
QList
<
AST
*>
&
path
)
{
for
(
int
index
=
path
.
size
()
-
1
;
index
!=
-
1
;
--
index
)
{
if
(
BinaryExpressionAST
*
binary
=
path
.
at
(
index
)
->
asBinaryExpression
())
{
if
(
binary
->
left_expression
&&
binary
->
right_expression
&&
tokenAt
(
binary
->
binary_op_token
).
is
(
T_EQUAL
))
{
if
(
isCursorOn
(
binary
->
left_expression
)
&&
binary
->
left_expression
->
asSimpleName
()
!=
0
)
{
SimpleNameAST
*
nameAST
=
binary
->
left_expression
->
asSimpleName
();
if
(
context
().
lookup
(
nameAST
->
name
,
scopeAt
(
nameAST
->
firstToken
())).
isEmpty
())
{
binaryAST
=
binary
;
typeOfExpression
.
init
(
document
(),
snapshot
(),
context
().
bindings
());
return
index
;
}
}
}
}
}
return
-
1
;
}
virtual
void
createChanges
()
{
const
QList
<
LookupItem
>
result
=
typeOfExpression
(
textOf
(
binaryAST
->
right_expression
),
scopeAt
(
binaryAST
->
firstToken
()),
TypeOfExpression
::
Preprocess
);
if
(
!
result
.
isEmpty
())
{
Overview
oo
;
QString
ty
=
oo
(
result
.
first
().
type
());
if
(
!
ty
.
isEmpty
())
{
const
QChar
ch
=
ty
.
at
(
ty
.
size
()
-
1
);
if
(
ch
.
isLetterOrNumber
()
||
ch
==
QLatin1Char
(
' '
)
||
ch
==
QLatin1Char
(
'>'
))
ty
+=
QLatin1Char
(
' '
);
Utils
::
ChangeSet
changes
;
changes
.
insert
(
startOf
(
binaryAST
),
ty
);
refactoringChanges
()
->
changeFile
(
fileName
(),
changes
);
}
}
}
private:
TypeOfExpression
typeOfExpression
;
BinaryExpressionAST
*
binaryAST
;
};
}
// end of anonymous namespace
...
...
@@ -1551,6 +1611,13 @@ const Snapshot &CppQuickFixOperation::snapshot() const
const
CPlusPlus
::
LookupContext
&
CppQuickFixOperation
::
context
()
const
{
return
_refactoringChanges
->
context
();
}
CPlusPlus
::
Scope
*
CppQuickFixOperation
::
scopeAt
(
unsigned
index
)
const
{
unsigned
line
,
column
;
document
()
->
translationUnit
()
->
getTokenStartPosition
(
index
,
&
line
,
&
column
);
return
document
()
->
scopeAt
(
line
,
column
);
}
const
CPlusPlus
::
Token
&
CppQuickFixOperation
::
tokenAt
(
unsigned
index
)
const
{
return
_document
->
translationUnit
()
->
tokenAt
(
index
);
}
...
...
@@ -1693,6 +1760,7 @@ QList<TextEditor::QuickFixOperation::Ptr> CppQuickFixFactory::quickFixOperations
QSharedPointer
<
ConvertNumericToDecimal
>
convertNumericToDecimal
(
new
ConvertNumericToDecimal
(
editor
));
QSharedPointer
<
CompleteSwitchCaseStatement
>
completeSwitchCaseStatement
(
new
CompleteSwitchCaseStatement
(
editor
));
QSharedPointer
<
FixForwardDeclarationOp
>
fixForwardDeclarationOp
(
new
FixForwardDeclarationOp
(
editor
));
QSharedPointer
<
AddLocalDeclarationOp
>
addLocalDeclarationOp
(
new
AddLocalDeclarationOp
(
editor
));
QSharedPointer
<
DeclFromDef
>
declFromDef
(
new
DeclFromDef
(
editor
));
quickFixOperations
.
append
(
rewriteLogicalAndOp
);
...
...
@@ -1710,6 +1778,7 @@ QList<TextEditor::QuickFixOperation::Ptr> CppQuickFixFactory::quickFixOperations
quickFixOperations
.
append
(
convertNumericToDecimal
);
quickFixOperations
.
append
(
completeSwitchCaseStatement
);
quickFixOperations
.
append
(
fixForwardDeclarationOp
);
quickFixOperations
.
append
(
addLocalDeclarationOp
);
#if 0
quickFixOperations.append(declFromDef);
...
...
src/plugins/cppeditor/cppquickfix.h
View file @
1702543d
...
...
@@ -81,6 +81,8 @@ protected:
const
CPlusPlus
::
Token
&
tokenAt
(
unsigned
index
)
const
;
CPlusPlus
::
Scope
*
scopeAt
(
unsigned
index
)
const
;
int
startOf
(
unsigned
index
)
const
;
int
startOf
(
const
CPlusPlus
::
AST
*
ast
)
const
;
int
endOf
(
unsigned
index
)
const
;
...
...
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