diff options
| author | Yong He <yonghe@outlook.com> | 2025-06-17 21:36:10 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-06-17 21:36:10 -0700 |
| commit | 4d517794eaac7dfe6196e9a36d709d66c5720492 (patch) | |
| tree | a7e65d8307b4e25f2a7bafcc9a2de1666c8b689e /source/slang/slang-language-server.cpp | |
| parent | b9799e6137fb1d173cefd823521bb70b09ac435a (diff) | |
LanguageServer: Enhance auto completion for override. (#7465)
* Add additional completion keywords.
* LanguageServer: Enhance auto completion for `override`.
Diffstat (limited to 'source/slang/slang-language-server.cpp')
| -rw-r--r-- | source/slang/slang-language-server.cpp | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/source/slang/slang-language-server.cpp b/source/slang/slang-language-server.cpp index cd9818f65..6daeb75ad 100644 --- a/source/slang/slang-language-server.cpp +++ b/source/slang/slang-language-server.cpp @@ -1157,15 +1157,17 @@ LanguageServerResult<CompletionResult> LanguageServerCore::completion( } // Ajust cursor position to the beginning of the current/last identifier. + Index firstTokenCharOffset = cursorOffset; cursorOffset--; while (cursorOffset > 0 && _isIdentifierChar(doc->getText()[cursorOffset])) { + firstTokenCharOffset = cursorOffset; cursorOffset--; } // Never show suggestions when the user is typing a number. - if (cursorOffset + 1 >= 0 && cursorOffset + 1 < doc->getText().getLength() && - CharUtil::isDigit(doc->getText()[cursorOffset + 1])) + if (firstTokenCharOffset >= 0 && firstTokenCharOffset < doc->getText().getLength() && + CharUtil::isDigit(doc->getText()[firstTokenCharOffset])) { return std::nullopt; } @@ -1180,12 +1182,32 @@ LanguageServerResult<CompletionResult> LanguageServerCore::completion( version->linkage->contentAssistInfo.cursorCol = utf8Col; Slang::CompletionContext context; context.server = this; - context.cursorOffset = cursorOffset; + context.cursorOffset = firstTokenCharOffset; context.version = version; context.doc = doc.Ptr(); context.canonicalPath = canonicalPath.getUnownedSlice(); context.line = utf8Line; context.col = utf8Col; + Int firstNonWhiteSpace = 0; + auto lineContent = doc->getLine(utf8Line); + while (firstNonWhiteSpace < lineContent.getLength() && + CharUtil::isWhitespace(lineContent[firstNonWhiteSpace])) + firstNonWhiteSpace++; + context.indent = doc->getLine(utf8Line).head(firstNonWhiteSpace); + doc->offsetToLineCol(firstTokenCharOffset, utf8Line, utf8Col); + doc->oneBasedUTF8LocToZeroBasedUTF16Loc( + utf8Line, + utf8Col, + context.requestRange.start.line, + context.requestRange.start.character); + + auto utf8TokenLen = doc->getTokenLength(firstTokenCharOffset); + doc->oneBasedUTF8LocToZeroBasedUTF16Loc( + utf8Line, + utf8Col + utf8TokenLen, + context.requestRange.end.line, + context.requestRange.end.character); + context.commitCharacterBehavior = m_commitCharacterBehavior; if (args.context.triggerKind == kCompletionTriggerKindTriggerCharacter && (args.context.triggerCharacter == " " || args.context.triggerCharacter == "[" || |
