QmlJSTools::SemanticInfo SemanticInfoUpdater::makeNewSemanticInfo(const QmlJS::Document::Ptr &doc, const QmlJS::Snapshot &snapshot) { using namespace QmlJS; QmlJSTools::SemanticInfo semanticInfo; semanticInfo.document = doc; semanticInfo.snapshot = snapshot; ModelManagerInterface *modelManager = ModelManagerInterface::instance(); Link link(semanticInfo.snapshot, modelManager->defaultVContext(doc->language(), doc), modelManager->builtins(doc)); semanticInfo.context = link(doc, &semanticInfo.semanticMessages); ScopeChain *scopeChain = new ScopeChain(doc, semanticInfo.context); semanticInfo.setRootScopeChain(QSharedPointer<const ScopeChain>(scopeChain)); if (doc->language() == Dialect::Json) { Utils::JsonSchema *schema = QmlJSEditorPlugin::jsonManager()->schemaForFile(doc->fileName()); if (schema) { JsonCheck jsonChecker(doc); semanticInfo.staticAnalysisMessages = jsonChecker(schema); } } else { Check checker(doc, semanticInfo.context); semanticInfo.staticAnalysisMessages = checker(); } return semanticInfo; }
static bool checkIfEditorIsQtQuick(Core::IEditor *editor) { if (isQmlFile(Core::EditorManager::currentEditor())) { QmlJS::Document::Ptr document = QmlJS::ModelManagerInterface::instance()->snapshot().document( Core::EditorManager::currentEditor()->document()->filePath()); if (!document.isNull()) return document->language() == QmlJS::Language::QmlQtQuick1 || document->language() == QmlJS::Language::QmlQtQuick2 || document->language() == QmlJS::Language::Qml; } return false; }
void QmlJSTextEditorWidget::onDocumentUpdated(QmlJS::Document::Ptr doc) { if (editorDocument()->filePath() != doc->fileName()) return; if (doc->editorRevision() != editorRevision()) { // Maybe a dependency changed and our semantic info is now outdated. // Ignore 0-revision documents though, we get them when a file is initially opened // in an editor. if (doc->editorRevision() != 0) updateSemanticInfo(); return; } //qDebug() << doc->fileName() << "was reparsed"; if (doc->ast()) { // got a correctly parsed (or recovered) file. m_futureSemanticInfoRevision = doc->editorRevision(); m_semanticInfoUpdater->update(doc, m_modelManager->snapshot()); setExtraSelections(CodeWarningsSelection, QList<QTextEdit::ExtraSelection>()); } else if (Document::isFullySupportedLanguage(doc->language())) { // show parsing errors QList<QTextEdit::ExtraSelection> selections; appendExtraSelectionsForMessages(&selections, doc->diagnosticMessages(), document()); setExtraSelections(CodeWarningsSelection, selections); } else { setExtraSelections(CodeWarningsSelection, QList<QTextEdit::ExtraSelection>()); } }