blob: 23807525ee64092188d05c2f769aa90fac2e99bf [file] [log] [blame]
// Copyright (c) 2026, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:analyzer/dart/analysis/results.dart' as engine;
import 'package:analyzer/dart/analysis/session.dart' as engine;
import 'package:analyzer/diagnostic/diagnostic.dart' as engine;
import 'package:analyzer/source/line_info.dart';
import 'package:analyzer_plugin/protocol/protocol_common.dart';
/// Create a DiagnosticMessage based on an [engine.DiagnosticMessage].
DiagnosticMessage? newDiagnosticMessage(
engine.DiagnosticMessage message,
engine.AnalysisSession session, {
LineInfo? lineInfo,
}) {
var file = message.filePath;
var offset = message.offset;
var length = message.length;
if (lineInfo == null) {
var messageResult = session.getFile(message.filePath);
if (messageResult is engine.FileResult) {
lineInfo = messageResult.lineInfo;
}
}
// If we don't have line info, we can't create a DiagnosticMessage.
// If the diagnostic has other messages they may show but we skip this one.
if (lineInfo == null) {
assert(false, 'Could not get LineInfo for "$file"');
return null;
}
var startLocation = lineInfo.getLocation(offset);
var startLine = startLocation.lineNumber;
var startColumn = startLocation.columnNumber;
var endLocation = lineInfo.getLocation(offset + length);
var endLine = endLocation.lineNumber;
var endColumn = endLocation.columnNumber;
return DiagnosticMessage(
message.messageText(includeUrl: true),
Location(
file,
offset,
length,
startLine,
startColumn,
endLine: endLine,
endColumn: endColumn,
),
);
}