49e7d4ac83
This updates fixes to return either CodeActionLiterals or Commands based on the capabilities of the client (similar to was done previously for assists). Change-Id: I688cb80aef415d329d65092edba247e5ec7a5a13 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/428783 Reviewed-by: Samuel Rawlins <srawlins@google.com> Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
67 lines
1.7 KiB
Dart
67 lines
1.7 KiB
Dart
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;
|
|
}
|
|
}
|