forked from qt-creator/qt-creator
		
	Clang: Use line and column instead of offset for diagnostics
Offsets can be get wrong because of the utf8 <-> utf16 differences. Line and columns are not that sensitive to it. Change-Id: I2e3e8c000621b6d694a4ada6df176f29427794f5 Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
This commit is contained in:
		
				
					committed by
					
						
						Nikolai Kosjar
					
				
			
			
				
	
			
			
			
						parent
						
							a4231de01c
						
					
				
				
					commit
					19d9dc0ce3
				
			@@ -170,18 +170,37 @@ void ClangEditorDocumentProcessor::updateCodeWarnings(const QVector<ClangBackEnd
 | 
			
		||||
        emit codeWarningsUpdated(revision(), codeWarnings);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
namespace {
 | 
			
		||||
 | 
			
		||||
static QList<TextEditor::BlockRange>
 | 
			
		||||
toTextEditorBlocks(const QVector<ClangBackEnd::SourceRangeContainer> &ifdefedOutRanges)
 | 
			
		||||
int positionInText(QTextDocument *textDocument,
 | 
			
		||||
                   const ClangBackEnd::SourceLocationContainer &sourceLocationContainer)
 | 
			
		||||
{
 | 
			
		||||
    auto textBlock = textDocument->findBlockByNumber(int(sourceLocationContainer.line()) - 1);
 | 
			
		||||
 | 
			
		||||
    return textBlock.position() + int(sourceLocationContainer.column()) - 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TextEditor::BlockRange
 | 
			
		||||
toTextEditorBlock(QTextDocument *textDocument,
 | 
			
		||||
                  const ClangBackEnd::SourceRangeContainer &sourceRangeContainer)
 | 
			
		||||
{
 | 
			
		||||
    return TextEditor::BlockRange(positionInText(textDocument, sourceRangeContainer.start()),
 | 
			
		||||
                                  positionInText(textDocument, sourceRangeContainer.end()));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QList<TextEditor::BlockRange>
 | 
			
		||||
toTextEditorBlocks(QTextDocument *textDocument,
 | 
			
		||||
                   const QVector<ClangBackEnd::SourceRangeContainer> &ifdefedOutRanges)
 | 
			
		||||
{
 | 
			
		||||
    QList<TextEditor::BlockRange> blockRanges;
 | 
			
		||||
    blockRanges.reserve(ifdefedOutRanges.size());
 | 
			
		||||
 | 
			
		||||
    for (const auto &range : ifdefedOutRanges)
 | 
			
		||||
        blockRanges.append(TextEditor::BlockRange(range.start().offset(),range.end().offset()));
 | 
			
		||||
        blockRanges.append(toTextEditorBlock(textDocument, range));
 | 
			
		||||
 | 
			
		||||
    return blockRanges;
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ClangEditorDocumentProcessor::updateHighlighting(
 | 
			
		||||
        const QVector<ClangBackEnd::HighlightingMarkContainer> &highlightingMarks,
 | 
			
		||||
@@ -189,7 +208,7 @@ void ClangEditorDocumentProcessor::updateHighlighting(
 | 
			
		||||
        uint documentRevision)
 | 
			
		||||
{
 | 
			
		||||
    if (documentRevision == revision()) {
 | 
			
		||||
        const auto skippedPreprocessorBlocks = toTextEditorBlocks(skippedPreprocessorRanges);
 | 
			
		||||
        const auto skippedPreprocessorBlocks = toTextEditorBlocks(textDocument(), skippedPreprocessorRanges);
 | 
			
		||||
        emit ifdefedOutBlocksUpdated(documentRevision, skippedPreprocessorBlocks);
 | 
			
		||||
 | 
			
		||||
        m_semanticHighlighter.setHighlightingRunner(
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user