Skip to content
Snippets Groups Projects
Commit ce3a90fc authored by Roberto Raggi's avatar Roberto Raggi
Browse files

Highlight namespaces.

parent cedaebc3
No related branches found
No related tags found
No related merge requests found
......@@ -273,40 +273,33 @@ bool CheckUndefinedSymbols::warning(AST *ast, const QString &text)
return false;
}
bool CheckUndefinedSymbols::visit(UsingDirectiveAST *ast)
bool CheckUndefinedSymbols::visit(NamespaceAST *ast)
{
checkNamespace(ast->name);
return false;
if (ast->identifier_token) {
const Token &tok = tokenAt(ast->identifier_token);
if (! tok.generated()) {
unsigned line, column;
getTokenStartPosition(ast->identifier_token, &line, &column);
Use use(line, column, tok.length());
_typeUsages.append(use);
}
}
return true;
}
bool CheckUndefinedSymbols::visit(SimpleDeclarationAST *)
bool CheckUndefinedSymbols::visit(UsingDirectiveAST *)
{
return true;
}
bool CheckUndefinedSymbols::visit(NamedTypeSpecifierAST *ast)
bool CheckUndefinedSymbols::visit(SimpleDeclarationAST *)
{
#if 0
if (ast->name) {
unsigned line, column;
getTokenStartPosition(ast->name->firstToken(), &line, &column);
// ### use the potential types.
Scope *enclosingScope = _context.thisDocument()->scopeAt(line, column);
const QList<Symbol *> candidates = _context.lookup(ast->name->name, enclosingScope);
Symbol *ty = 0;
foreach (Symbol *c, candidates) {
if (c->isTypedef() || c->isClass() || c->isEnum()
|| c->isForwardClassDeclaration() || c->isTypenameArgument())
ty = c;
}
if (! ty)
warning(ast->name, QCoreApplication::translate("CheckUndefinedSymbols", "Expected a type-name"));
}
#endif
return true;
}
bool CheckUndefinedSymbols::visit(NamedTypeSpecifierAST *)
{
return true;
}
......@@ -330,7 +323,7 @@ void CheckUndefinedSymbols::checkNamespace(NameAST *name)
warning(line, column, QCoreApplication::translate("CheckUndefinedSymbols", "Expected a namespace-name"), length);
}
bool CheckUndefinedSymbols::visit(SimpleNameAST *ast)
void CheckUndefinedSymbols::checkName(NameAST *ast)
{
if (ast->name) {
const QByteArray id = QByteArray::fromRawData(ast->name->identifier()->chars(), // ### move
......@@ -345,25 +338,17 @@ bool CheckUndefinedSymbols::visit(SimpleNameAST *ast)
addTypeUsage(candidates, ast);
}
}
}
bool CheckUndefinedSymbols::visit(SimpleNameAST *ast)
{
checkName(ast);
return true;
}
bool CheckUndefinedSymbols::visit(TemplateIdAST *ast)
{
if (ast->name) {
const QByteArray id = QByteArray::fromRawData(ast->name->identifier()->chars(), // ### move
ast->name->identifier()->size());
if (_potentialTypes.contains(id)) {
Scope *scope = CollectTypes::findScope(tokenAt(ast->firstToken()).offset, _scopes); // ### move
if (! scope)
scope = _context.thisDocument()->globalSymbols();
ClassOrNamespace *b = _context.lookupType(ast->name, scope);
addTypeUsage(b, ast);
}
}
checkName(ast);
return true;
}
......@@ -446,7 +431,13 @@ void CheckUndefinedSymbols::addTypeUsage(const QList<Symbol *> &candidates, Name
const unsigned length = tok.length();
foreach (Symbol *c, candidates) {
if (c->isTypedef() || c->isClass() || c->isEnum() || c->isForwardClassDeclaration() || c->isTypenameArgument()) {
if (c->isUsingDeclaration()) // skip using declarations...
continue;
else if (c->isUsingNamespaceDirective()) // ... and using namespace directives.
continue;
else if (c->isTypedef() || c->isNamespace() ||
c->isClass() || c->isEnum() ||
c->isForwardClassDeclaration() || c->isTypenameArgument()) {
Use use(line, column, length);
_typeUsages.append(use);
//qDebug() << "added use" << oo(ast->name) << line << column << length;
......
......@@ -62,10 +62,12 @@ protected:
bool warning(unsigned line, unsigned column, const QString &text, unsigned length = 0);
bool warning(AST *ast, const QString &text);
void checkName(NameAST *ast);
void checkNamespace(NameAST *name);
void addTypeUsage(ClassOrNamespace *b, NameAST *ast);
void addTypeUsage(const QList<Symbol *> &candidates, NameAST *ast);
virtual bool visit(NamespaceAST *);
virtual bool visit(UsingDirectiveAST *);
virtual bool visit(SimpleDeclarationAST *);
virtual bool visit(NamedTypeSpecifierAST *);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment