normalizeLocationResult function

List<LspLocation> normalizeLocationResult(
  1. Object? result
)

Normalizes a textDocument/definition-family result: accepts null, Location, Location[], LocationLink, or LocationLink[] and returns a flat location list (omp's normalizeLocationResult, reduced).

Implementation

List<LspLocation> normalizeLocationResult(Object? result) {
  List<LspLocation> convert(Object? item) {
    if (item is! Map<String, dynamic>) return const [];
    // LocationLink: {targetUri, targetRange, targetSelectionRange?}.
    if (item.containsKey('targetUri')) {
      final selection = item['targetSelectionRange'] ?? item['targetRange'];
      if (selection is! Map<String, dynamic>) return const [];
      return [
        LspLocation(
          uri: item['targetUri'] as String,
          range: LspRange.fromJson(selection),
        ),
      ];
    }
    if (item['uri'] is String && item['range'] is Map<String, dynamic>) {
      return [LspLocation.fromJson(item)];
    }
    return const [];
  }

  if (result is List) {
    return [for (final item in result) ...convert(item)];
  }
  return convert(result);
}