Greetings,

I'm working with Nicolas Arnaud-Cormos on developing a scripting interface to 
Qt Creator[1]. Our hope is to lower the bar for automating tasks.

I'm currently trying to get my hands on the AST for a given file, so I e.g. can 
tell which method and class I'm in. I have some trouble getting a valid AST, 
despite hours of browsing the code. 

Here is what I currently have:

I believe that my luck is made, as soon as I can get something valid out of 
ASTPath::operator(), which returns a list of AST*, so I'm working backwards 
from that.

    // Fetch information about line, coumn and file name
    Core::IEditor* editor = Core::EditorManager::instance()->currentEditor();
    const int line = editor->currentLine();
    const int column = editor->currentColumn();
    const QString fileName = editor->document()->fileName();

    // Fetch document content
    QFile file(editor->document()->fileName());
    file.open(QFile::ReadOnly);
    const QByteArray content = file.readAll();

    // Get a Document pointer
    CPlusPlus::Snapshot snapshot = 
CPlusPlus::CppModelManagerInterface::instance()->snapshot();
    CPlusPlus::Document::Ptr document = snapshot.documentFromSource(content, 
fileName);
    const bool ok = document->parse(CPlusPlus::Document::ParseTranlationUnit);

    // OK, I'm desperate, so lets wait a bit in case something needs to 
initialize asyncronic
    QTime time;
    time.start();
    while ( time.elapsed() < 2000 )
        qApp->processEvents(QEventLoop::AllEvents, 100);


    // Give me an AST, please
    QList<AST *> path = ASTPath(document)(editor->currentLine(), 
editor->currentColumn());

    qDebug("Result:\nFileName: %s\nColumn: %d\nLine: %d\nParsed OK: %d\nLength 
of result from ASTPath: %d", qPrintable(fileName), column, line, ok, 
path.count());

Now, I try to execute this code on a C++ file loaded from a valid QMake 
project. The result is:
Result:
FileName: 
/home/blackie/Klaralv/training-material/addon/dialogs/sol-orderform/orderform.cpp
Column: 25
Line: 28
Parsed OK: 1
Length of result from ASTPath: 0

Everything seems OK, still I don't get any AST's back.

Any hints on what I do wrong, or even better on how to do it right would be 
greatly appreciated.

Kind Regards
Jesper.

[1] http://qt-project.org/wiki/Scripting
-- 
Jesper K. Pedersen | [email protected]
Training Director and Senior Software Engineer
Klarälvdalens Datakonsult AB, a KDAB Group company
Tel. Direct: +45 5146 8464, Sweden (HQ) +46-563-540090
KDAB - Qt Experts - Platform-independent software solutions
_______________________________________________
Qt-creator mailing list
[email protected]
http://lists.qt-project.org/mailman/listinfo/qt-creator

Reply via email to