forked from qt-creator/qt-creator
Add flag for semantic highlighter to set diagnostics.
If the semantic highlighter does not take care of setting showing the wiggly lines for diagnostics in the editor, the model manager will do. Change-Id: Ie69fb798dd53d60ddca1668b8f586266a0daca4b Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com>
This commit is contained in:
@@ -1099,8 +1099,6 @@ void CppModelManager::updateEditor(Document::Ptr doc)
|
||||
blockRanges.append(TextEditor::BaseTextEditorWidget::BlockRange(block.begin(), block.end()));
|
||||
}
|
||||
|
||||
QList<QTextEdit::ExtraSelection> selections;
|
||||
|
||||
// set up the format for the errors
|
||||
QTextCharFormat errorFormat;
|
||||
errorFormat.setUnderlineStyle(QTextCharFormat::WaveUnderline);
|
||||
@@ -1111,47 +1109,51 @@ void CppModelManager::updateEditor(Document::Ptr doc)
|
||||
warningFormat.setUnderlineStyle(QTextCharFormat::WaveUnderline);
|
||||
warningFormat.setUnderlineColor(Qt::darkYellow);
|
||||
|
||||
QSet<int> lines;
|
||||
QList<Document::DiagnosticMessage> messages = doc->diagnosticMessages();
|
||||
messages += extraDiagnostics(doc->fileName());
|
||||
foreach (const Document::DiagnosticMessage &m, messages) {
|
||||
if (m.fileName() != fileName)
|
||||
continue;
|
||||
else if (lines.contains(m.line()))
|
||||
continue;
|
||||
|
||||
lines.insert(m.line());
|
||||
|
||||
QTextEdit::ExtraSelection sel;
|
||||
if (m.isWarning())
|
||||
sel.format = warningFormat;
|
||||
else
|
||||
sel.format = errorFormat;
|
||||
|
||||
QTextCursor c(ed->document()->findBlockByNumber(m.line() - 1));
|
||||
const QString text = c.block().text();
|
||||
for (int i = 0; i < text.size(); ++i) {
|
||||
if (! text.at(i).isSpace()) {
|
||||
c.setPosition(c.position() + i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
c.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor);
|
||||
sel.cursor = c;
|
||||
sel.format.setToolTip(m.text());
|
||||
selections.append(sel);
|
||||
}
|
||||
|
||||
QList<Editor> todo;
|
||||
foreach (const Editor &e, todo) {
|
||||
foreach (const Editor &e, m_todo) {
|
||||
if (e.textEditor != textEditor)
|
||||
todo.append(e);
|
||||
}
|
||||
|
||||
Editor e;
|
||||
|
||||
if (m_highlightingFactory->hightlighterHandlesDiagnostics()) {
|
||||
e.updateSelections = false;
|
||||
} else {
|
||||
QSet<int> lines;
|
||||
QList<Document::DiagnosticMessage> messages = doc->diagnosticMessages();
|
||||
messages += extraDiagnostics(doc->fileName());
|
||||
foreach (const Document::DiagnosticMessage &m, messages) {
|
||||
if (m.fileName() != fileName)
|
||||
continue;
|
||||
else if (lines.contains(m.line()))
|
||||
continue;
|
||||
|
||||
lines.insert(m.line());
|
||||
|
||||
QTextEdit::ExtraSelection sel;
|
||||
if (m.isWarning())
|
||||
sel.format = warningFormat;
|
||||
else
|
||||
sel.format = errorFormat;
|
||||
|
||||
QTextCursor c(ed->document()->findBlockByNumber(m.line() - 1));
|
||||
const QString text = c.block().text();
|
||||
for (int i = 0; i < text.size(); ++i) {
|
||||
if (! text.at(i).isSpace()) {
|
||||
c.setPosition(c.position() + i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
c.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor);
|
||||
sel.cursor = c;
|
||||
sel.format.setToolTip(m.text());
|
||||
e.selections.append(sel);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
e.revision = ed->document()->revision();
|
||||
e.textEditor = textEditor;
|
||||
e.selections = selections;
|
||||
e.ifdefedOutBlocks = blockRanges;
|
||||
todo.append(e);
|
||||
m_todo = todo;
|
||||
@@ -1180,8 +1182,9 @@ void CppModelManager::updateEditorSelections()
|
||||
else if (editor->document()->revision() != ed.revision)
|
||||
continue; // outdated
|
||||
|
||||
editor->setExtraSelections(TextEditor::BaseTextEditorWidget::CodeWarningsSelection,
|
||||
ed.selections);
|
||||
if (ed.updateSelections)
|
||||
editor->setExtraSelections(TextEditor::BaseTextEditorWidget::CodeWarningsSelection,
|
||||
ed.selections);
|
||||
|
||||
editor->setIfdefedOutBlocks(ed.ifdefedOutBlocks);
|
||||
}
|
||||
|
Reference in New Issue
Block a user