getCompletions method

Future<List<LspCompletion>> getCompletions(
  1. int line,
  2. int character
)

This method is used to get completions at a specific position in the document.

This method is used internally by the CodeCrafter, calling this with appropriate parameters will returns a List of LspCompletion.

Implementation

Future<List<LspCompletion>> getCompletions(int line, int character) async {
  List<LspCompletion> completion = [];
  final response = await _sendRequest(
    method: 'textDocument/completion',
    params: _commonParams(line, character),
  );
  try {
    final result = response['result'];
    if (result == null) return completion;

    final items = result['items'];
    if (items == null || items is! List) return completion;

    for (var item in items) {
      final importUris = item['data']?['importUris'];
      final List<String>? importUriList = importUris != null
          ? (importUris as List).map((e) => e.toString()).toList()
          : null;

      completion.add(
        LspCompletion(
          label: item['label'],
          itemType: CompletionItemType.values.firstWhere(
            (type) => type.value == item['kind'],
            orElse: () => CompletionItemType.text,
          ),
          importUri: importUriList,
          reference: item["data"]?["ref"],
        ),
      );
    }
  } on Exception catch (e) {
    debugPrint("An Error Occured: $e");
  }
  return completion;
}