summaryrefslogtreecommitdiffstats
path: root/src/qdoc/qmlcodeparser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qdoc/qmlcodeparser.cpp')
-rw-r--r--src/qdoc/qmlcodeparser.cpp226
1 files changed, 0 insertions, 226 deletions
diff --git a/src/qdoc/qmlcodeparser.cpp b/src/qdoc/qmlcodeparser.cpp
deleted file mode 100644
index e89290bf4..000000000
--- a/src/qdoc/qmlcodeparser.cpp
+++ /dev/null
@@ -1,226 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the tools applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qmlcodeparser.h"
-
-#include "node.h"
-#include "qmlvisitor.h"
-
-#ifndef QT_NO_DECLARATIVE
-# include <private/qqmljsast_p.h>
-#endif
-#include <qdebug.h>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- Constructs the QML code parser.
- */
-QmlCodeParser::QmlCodeParser()
-#ifndef QT_NO_DECLARATIVE
- : m_lexer(nullptr), m_parser(nullptr)
-#endif
-{
-}
-
-/*!
- Initializes the code parser base class.
- Also creates a lexer and parser from QQmlJS.
- */
-void QmlCodeParser::initializeParser()
-{
- CodeParser::initializeParser();
-
-#ifndef QT_NO_DECLARATIVE
- m_lexer = new QQmlJS::Lexer(&m_engine);
- m_parser = new QQmlJS::Parser(&m_engine);
-#endif
-}
-
-/*!
- Terminates the QML code parser. Deletes the lexer and parser
- created by the constructor.
- */
-void QmlCodeParser::terminateParser()
-{
-#ifndef QT_NO_DECLARATIVE
- delete m_lexer;
- delete m_parser;
-#endif
-}
-
-/*!
- Returns "QML".
- */
-QString QmlCodeParser::language()
-{
- return "QML";
-}
-
-/*!
- Returns a string list containing "*.qml". This is the only
- file type parsed by the QMLN parser.
- */
-QStringList QmlCodeParser::sourceFileNameFilter()
-{
- return QStringList() << "*.qml";
-}
-
-/*!
- Parses the source file at \a filePath and inserts the contents
- into the database. The \a location is used for error reporting.
-
- If it can't open the file at \a filePath, it reports an error
- and returns without doing anything.
- */
-void QmlCodeParser::parseSourceFile(const Location &location, const QString &filePath)
-{
- QFile in(filePath);
- m_currentFile = filePath;
- if (!in.open(QIODevice::ReadOnly)) {
- location.error(QStringLiteral("Cannot open QML file '%1'").arg(filePath));
- m_currentFile.clear();
- return;
- }
-
-#ifndef QT_NO_DECLARATIVE
- QString document = in.readAll();
- in.close();
-
- Location fileLocation(filePath);
-
- QString newCode = document;
- extractPragmas(newCode);
- m_lexer->setCode(newCode, 1);
-
- if (m_parser->parse()) {
- QQmlJS::AST::UiProgram *ast = m_parser->ast();
- QmlDocVisitor visitor(filePath, newCode, &m_engine, topicCommands() + commonMetaCommands(),
- topicCommands());
- QQmlJS::AST::Node::accept(ast, &visitor);
- if (visitor.hasError()) {
- qDebug().nospace() << qPrintable(filePath) << ": Could not analyze QML file. "
- << "The output is incomplete.";
- }
- }
- const auto &messages = m_parser->diagnosticMessages();
- for (const auto &msg : messages) {
- qDebug().nospace() << qPrintable(filePath) << ':'
- << msg.loc.startLine << ": QML syntax error at col "
- << msg.loc.startColumn
- << ": " << qPrintable(msg.message);
- }
- m_currentFile.clear();
-#else
- location.warning("QtDeclarative not installed; cannot parse QML or JS.");
-#endif
-}
-
-static QSet<QString> topicCommands_;
-/*!
- Returns the set of strings representing the topic commands.
- */
-const QSet<QString> &QmlCodeParser::topicCommands()
-{
- if (topicCommands_.isEmpty()) {
- topicCommands_ << COMMAND_VARIABLE << COMMAND_QMLCLASS << COMMAND_QMLTYPE
- << COMMAND_QMLPROPERTY << COMMAND_QMLPROPERTYGROUP // mws 13/03/2019
- << COMMAND_QMLATTACHEDPROPERTY << COMMAND_QMLSIGNAL
- << COMMAND_QMLATTACHEDSIGNAL << COMMAND_QMLMETHOD
- << COMMAND_QMLATTACHEDMETHOD << COMMAND_QMLBASICTYPE << COMMAND_JSTYPE
- << COMMAND_JSPROPERTY << COMMAND_JSPROPERTYGROUP // mws 13/03/2019
- << COMMAND_JSATTACHEDPROPERTY << COMMAND_JSSIGNAL << COMMAND_JSATTACHEDSIGNAL
- << COMMAND_JSMETHOD << COMMAND_JSATTACHEDMETHOD << COMMAND_JSBASICTYPE;
- }
- return topicCommands_;
-}
-
-#ifndef QT_NO_DECLARATIVE
-/*!
- Copy and paste from src/declarative/qml/qdeclarativescriptparser.cpp.
- This function blanks out the section of the \a str beginning at \a idx
- and running for \a n characters.
-*/
-static void replaceWithSpace(QString &str, int idx, int n)
-{
- QChar *data = str.data() + idx;
- const QChar space(QLatin1Char(' '));
- for (int ii = 0; ii < n; ++ii)
- *data++ = space;
-}
-
-/*!
- Copy & paste from src/declarative/qml/qdeclarativescriptparser.cpp,
- then modified to return no values.
-
- Searches for ".pragma <value>" declarations within \a script.
- Currently supported pragmas are: library
-*/
-void QmlCodeParser::extractPragmas(QString &script)
-{
- const QString pragma(QLatin1String("pragma"));
-
- QQmlJS::Lexer l(nullptr);
- l.setCode(script, 0);
-
- int token = l.lex();
-
- while (true) {
- if (token != QQmlJSGrammar::T_DOT)
- return;
-
- int startOffset = l.tokenOffset();
- int startLine = l.tokenStartLine();
-
- token = l.lex();
-
- if (token != QQmlJSGrammar::T_IDENTIFIER || l.tokenStartLine() != startLine
- || script.mid(l.tokenOffset(), l.tokenLength()) != pragma)
- return;
-
- token = l.lex();
-
- if (token != QQmlJSGrammar::T_IDENTIFIER || l.tokenStartLine() != startLine)
- return;
-
- QString pragmaValue = script.mid(l.tokenOffset(), l.tokenLength());
- int endOffset = l.tokenLength() + l.tokenOffset();
-
- token = l.lex();
- if (l.tokenStartLine() == startLine)
- return;
-
- if (pragmaValue == QLatin1String("library"))
- replaceWithSpace(script, startOffset, endOffset - startOffset);
- else
- return;
- }
-}
-#endif
-
-QT_END_NAMESPACE