blob: 5179104a4ae0755c4c91ac9f4da703aa6942e2d9 [file] [log] [blame]
// Copyright (c) 2019, 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.
/// A diagnostic, as defined by the [Diagnostic Design Guidelines][guidelines]:
///
/// > An indication of a specific problem at a specific location within the
/// > source code being processed by a development tool.
///
/// Clients may not extend, implement or mix-in this class.
///
/// [guidelines]: ../doc/diagnostics.md
abstract class Diagnostic {
/// A list of messages that provide context for understanding the problem
/// being reported. The list will be empty if there are no such messages.
List<DiagnosticMessage> get contextMessages;
/// A description of how to fix the problem, or `null` if there is no such
/// description.
String? get correctionMessage;
/// A message describing what is wrong and why.
DiagnosticMessage get problemMessage;
/// The severity associated with the diagnostic.
Severity get severity;
}
/// A single message associated with a [Diagnostic], consisting of the text of
/// the message and the location associated with it.
///
/// Clients may not extend, implement or mix-in this class.
abstract class DiagnosticMessage {
/// The absolute and normalized path of the file associated with this message.
String get filePath;
/// The length of the source range associated with this message.
int get length;
/// Gets the text of the message.
///
/// This getter exists for backwards compatibility with code that was written
/// prior to the addition of URLs to diagnostic messages. New clients should
/// use `messageText` instead.
@Deprecated('Use messageText(includeUrl: true) instead')
String get message;
/// The zero-based offset from the start of the file to the beginning of the
/// source range associated with this message.
int get offset;
/// The URL associated with this diagnostic message, if any.
String? get url;
/// Gets the text of the message.
///
/// If [includeUrl] is `true`, and this diagnostic message has an associated
/// URL, it is included in the returned value in a human-readable way.
/// Clients that wish to present URLs as simple text can do this. If
/// [includeUrl] is `false`, no URL is included in the returned value.
/// Clients that have a special mechanism for presenting URLs (e.g. as a
/// clickable link) should do this and then consult the [url] getter to access
/// the URL.
String messageText({required bool includeUrl});
}
/// An indication of the severity of a [Diagnostic].
enum Severity { error, warning, info }