forked from qt-creator/qt-creator
Added highlighting for locals in ObjC methods.
This commit is contained in:
@@ -201,14 +201,24 @@ public:
|
|||||||
bool hasD;
|
bool hasD;
|
||||||
bool hasQ;
|
bool hasQ;
|
||||||
|
|
||||||
void operator()(FunctionDefinitionAST *ast)
|
void operator()(DeclarationAST *ast)
|
||||||
{
|
{
|
||||||
localUses.clear();
|
localUses.clear();
|
||||||
|
|
||||||
if (ast && ast->symbol) {
|
if (!ast)
|
||||||
_functionScope = ast->symbol->members();
|
return;
|
||||||
|
|
||||||
|
if (FunctionDefinitionAST *def = ast->asFunctionDefinition()) {
|
||||||
|
if (def->symbol) {
|
||||||
|
_functionScope = def->symbol->members();
|
||||||
accept(ast);
|
accept(ast);
|
||||||
}
|
}
|
||||||
|
} else if (ObjCMethodDeclarationAST *decl = ast->asObjCMethodDeclaration()) {
|
||||||
|
if (decl->method_prototype->symbol) {
|
||||||
|
_functionScope = decl->method_prototype->symbol->members();
|
||||||
|
accept(ast);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@@ -392,7 +402,7 @@ class FunctionDefinitionUnderCursor: protected ASTVisitor
|
|||||||
{
|
{
|
||||||
unsigned _line;
|
unsigned _line;
|
||||||
unsigned _column;
|
unsigned _column;
|
||||||
FunctionDefinitionAST *_functionDefinition;
|
DeclarationAST *_functionDefinition;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
FunctionDefinitionUnderCursor(TranslationUnit *translationUnit)
|
FunctionDefinitionUnderCursor(TranslationUnit *translationUnit)
|
||||||
@@ -400,7 +410,7 @@ public:
|
|||||||
_line(0), _column(0)
|
_line(0), _column(0)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
FunctionDefinitionAST *operator()(AST *ast, unsigned line, unsigned column)
|
DeclarationAST *operator()(AST *ast, unsigned line, unsigned column)
|
||||||
{
|
{
|
||||||
_functionDefinition = 0;
|
_functionDefinition = 0;
|
||||||
_line = line;
|
_line = line;
|
||||||
@@ -416,22 +426,34 @@ protected:
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
else if (FunctionDefinitionAST *def = ast->asFunctionDefinition()) {
|
else if (FunctionDefinitionAST *def = ast->asFunctionDefinition()) {
|
||||||
unsigned startLine, startColumn;
|
return checkDeclaration(def);
|
||||||
unsigned endLine, endColumn;
|
}
|
||||||
getTokenStartPosition(def->firstToken(), &startLine, &startColumn);
|
|
||||||
getTokenEndPosition(def->lastToken() - 1, &endLine, &endColumn);
|
|
||||||
|
|
||||||
if (_line > startLine || (_line == startLine && _column >= startColumn)) {
|
else if (ObjCMethodDeclarationAST *method = ast->asObjCMethodDeclaration()) {
|
||||||
if (_line < endLine || (_line == endLine && _column < endColumn)) {
|
if (method->function_body)
|
||||||
_functionDefinition = def;
|
return checkDeclaration(method);
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool checkDeclaration(DeclarationAST *ast)
|
||||||
|
{
|
||||||
|
unsigned startLine, startColumn;
|
||||||
|
unsigned endLine, endColumn;
|
||||||
|
getTokenStartPosition(ast->firstToken(), &startLine, &startColumn);
|
||||||
|
getTokenEndPosition(ast->lastToken() - 1, &endLine, &endColumn);
|
||||||
|
|
||||||
|
if (_line > startLine || (_line == startLine && _column >= startColumn)) {
|
||||||
|
if (_line < endLine || (_line == endLine && _column < endColumn)) {
|
||||||
|
_functionDefinition = ast;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class ProcessDeclarators: protected ASTVisitor
|
class ProcessDeclarators: protected ASTVisitor
|
||||||
@@ -2195,7 +2217,7 @@ SemanticInfo SemanticHighlighter::semanticInfo(const Source &source)
|
|||||||
AST *ast = translationUnit->ast();
|
AST *ast = translationUnit->ast();
|
||||||
|
|
||||||
FunctionDefinitionUnderCursor functionDefinitionUnderCursor(translationUnit);
|
FunctionDefinitionUnderCursor functionDefinitionUnderCursor(translationUnit);
|
||||||
FunctionDefinitionAST *currentFunctionDefinition = functionDefinitionUnderCursor(ast, source.line, source.column);
|
DeclarationAST *currentFunctionDefinition = functionDefinitionUnderCursor(ast, source.line, source.column);
|
||||||
|
|
||||||
FindLocalUses useTable(translationUnit);
|
FindLocalUses useTable(translationUnit);
|
||||||
useTable(currentFunctionDefinition);
|
useTable(currentFunctionDefinition);
|
||||||
|
|||||||
Reference in New Issue
Block a user