InlayHint.fromLsp constructor

InlayHint.fromLsp(
  1. Map<String, dynamic> data
)

Creates an InlayHint from LSP response data

Implementation

factory InlayHint.fromLsp(Map<String, dynamic> data) {
  final position = data['position'] as Map<String, dynamic>;
  final kind = data['kind'] as int? ?? 1;
  final label = data['label'];
  final paddingRight = data['paddingRight'] as bool? ?? false;
  final paddingLeft = data['paddingLeft'] as bool? ?? false;

  String text;
  Map<String, dynamic>? location;

  if (label is List && label.isNotEmpty) {
    final parts = <String>[];
    for (final part in label) {
      if (part is Map<String, dynamic>) {
        parts.add(part['value'] as String? ?? '');
        if (part.containsKey('location')) {
          location = part['location'] as Map<String, dynamic>?;
        }
      } else if (part is String) {
        parts.add(part);
      }
    }
    text = parts.join();
  } else if (label is String) {
    text = label;
  } else {
    text = '';
  }

  return InlayHint(
    line: position['line'] as int,
    column: position['character'] as int,
    text: text,
    kind: kind == 1 ? InlayHintKind.type : InlayHintKind.parameter,
    paddingRight: paddingRight,
    paddingLeft: paddingLeft,
    location: location,
  );
}