From 4d517794eaac7dfe6196e9a36d709d66c5720492 Mon Sep 17 00:00:00 2001 From: Yong He Date: Tue, 17 Jun 2025 21:36:10 -0700 Subject: LanguageServer: Enhance auto completion for override. (#7465) * Add additional completion keywords. * LanguageServer: Enhance auto completion for `override`. --- source/slang/slang-language-server.cpp | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) (limited to 'source/slang/slang-language-server.cpp') 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 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 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 == "[" || -- cgit v1.2.3