blob: 96aa6132de663e8e5d25c73528ab820932a1a996 [file] [log] [blame]
import 'package:analysis_server/lsp_protocol/protocol.dart';
extension CodeActionExtensions on CodeAction {
/// A helper to assert (and return) that a this [CodeAction] is a
/// [CodeActionLiteral] and not just a bare [Command].
CodeActionLiteral get asCodeActionLiteral {
return map(
(literal) => literal,
(command) =>
throw 'Expected CodeActionLiteral, but got Command (${command.title})',
);
}
/// A helper to assert (and return) that a this [CodeAction] is just a
/// bare [Command] and not a [CodeActionLiteral].
Command get asCommand {
return map(
(literal) =>
throw 'Expected Command, but got CodeAction literal (${literal.title})',
(command) => command,
);
}
/// Whether this [CodeAction] is a [CodeActionLiteral].
bool get isCodeActionLiteral {
return map(
(_) => true, // literal
(_) => false, // command
);
}
/// Whether this [CodeAction] is a [Command].
bool get isCommand {
return map(
(_) => false, // literal
(_) => true, // command
);
}
}
extension RangeExtension on Range {
/// Checks whether the range covers [position] (inclusive).
bool containsPosition(Position position) {
// On an earlier line.
if (position.line < start.line) {
return false;
}
// On start line, but before start character.
if (position.line == start.line && position.character < start.character) {
return false;
}
// On end line, but after end character.
if (position.line == end.line && position.character > end.character) {
return false;
}
// On a later line.
if (position.line > end.line) {
return false;
}
return true;
}
}