ballerina-platform / lsp4intellij

This language client library provides language server protocol support for IntelliJ IDEA and other Jetbrains IDEs.
Apache License 2.0
428 stars 104 forks source link

Fix code completion issue on the document start offset #352

Closed ThemiraChathumina closed 3 months ago

ThemiraChathumina commented 3 months ago

Purpose

When typing at the start of a document (offset 0), the code completion feature does not capture the initial characters typed. Consequently, accepting a completion suggestion results in it being incorrectly appended to the initially typed text. This fix aims to ensure that suggestions are accurately based on the entire text entered and are inserted correctly. Related to https://github.com/ballerina-platform/lsp4intellij/issues/351

Approach

Change the function public String getCompletionPrefix(Editor editor, int offset) In the original implementation, the function scans backwards from the offset until it encounters a delimiter. If no delimiter is found, it returns an empty string. However, at the start of the document where there are no preceding delimiters, this approach results in an empty string being returned, failing to capture the text initially typed. To address this, the function should be adjusted to return the captured characters up to the point where a delimiter is encountered, or, if at the start of the document where no delimiters are present, return the text from the start to the current offset.

Change the function public void prepareAndRunSnippet(String insertText) An IDE error throws when trying to insert a suggestion that is not a code snippet from this function. Therefore, if the insertText does not align with recognized code snippet patterns, the function should return immediately, avoiding further processing.