Commit a9662aef authored by Christian Kamm's avatar Christian Kamm

Add files missing from 02b7eacf

parent f0680840
#include "qmljsscopeastpath.h"
#include "parser/qmljsast_p.h"
using namespace QmlJS;
using namespace AST;
ScopeAstPath::ScopeAstPath(Document::Ptr doc)
: _doc(doc)
{
}
QList<Node *> ScopeAstPath::operator()(quint32 offset)
{
_result.clear();
_offset = offset;
if (_doc)
Node::accept(_doc->ast(), this);
return _result;
}
void ScopeAstPath::accept(Node *node)
{ Node::acceptChild(node, this); }
bool ScopeAstPath::preVisit(Node *node)
{
if (Statement *stmt = node->statementCast()) {
return containsOffset(stmt->firstSourceLocation(), stmt->lastSourceLocation());
} else if (ExpressionNode *exp = node->expressionCast()) {
return containsOffset(exp->firstSourceLocation(), exp->lastSourceLocation());
} else if (UiObjectMember *ui = node->uiObjectMemberCast()) {
return containsOffset(ui->firstSourceLocation(), ui->lastSourceLocation());
}
return true;
}
bool ScopeAstPath::visit(UiObjectDefinition *node)
{
_result.append(node);
Node::accept(node->initializer, this);
return false;
}
bool ScopeAstPath::visit(UiObjectBinding *node)
{
_result.append(node);
Node::accept(node->initializer, this);
return false;
}
bool ScopeAstPath::visit(FunctionDeclaration *node)
{
return visit(static_cast<FunctionExpression *>(node));
}
bool ScopeAstPath::visit(FunctionExpression *node)
{
Node::accept(node->formals, this);
_result.append(node);
Node::accept(node->body, this);
return false;
}
bool ScopeAstPath::containsOffset(SourceLocation start, SourceLocation end)
{
return _offset >= start.begin() && _offset <= end.end();
}
#ifndef QMLJSSCOPEASTPATH_H
#define QMLJSSCOPEASTPATH_H
#include "qmljs_global.h"
#include "parser/qmljsastvisitor_p.h"
#include "qmljsdocument.h"
namespace QmlJS {
class QMLJS_EXPORT ScopeAstPath: protected AST::Visitor
{
public:
ScopeAstPath(Document::Ptr doc);
QList<AST::Node *> operator()(quint32 offset);
protected:
void accept(AST::Node *node);
using Visitor::visit;
virtual bool preVisit(AST::Node *node);
virtual bool visit(AST::UiObjectDefinition *node);
virtual bool visit(AST::UiObjectBinding *node);
virtual bool visit(AST::FunctionDeclaration *node);
virtual bool visit(AST::FunctionExpression *node);
private:
bool containsOffset(AST::SourceLocation start, AST::SourceLocation end);
QList<AST::Node *> _result;
Document::Ptr _doc;
quint32 _offset;
};
} // namespace QmlJS
#endif // QMLJSSCOPEASTPATH_H
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment