Files
sdk/pkg/analysis_server/test/utils/lsp_protocol_extensions.dart
Danny Tuppeny 9ad2074691 [analysis_server] Add tests for primary constructors in LSP workspace symbols
Primary constructor bodies do not currently show up here. The primary constructor entry in the results navigates to the declaration.

Change-Id: I321bd4dfa5a98635987b165575d0f683a437e129
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/473340
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Commit-Queue: Samuel Rawlins <srawlins@google.com>
2026-01-16 10:07:25 -08:00

73 lines
1.8 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 PositionExtension on Position {
String toText() => '${line + 1}:${character + 1}';
}
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;
}
String toText() => '${start.toText()}-${end.toText()}';
}