summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-parser.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2025-06-17 21:36:10 -0700
committerGitHub <noreply@github.com>2025-06-17 21:36:10 -0700
commit4d517794eaac7dfe6196e9a36d709d66c5720492 (patch)
treea7e65d8307b4e25f2a7bafcc9a2de1666c8b689e /source/slang/slang-parser.cpp
parentb9799e6137fb1d173cefd823521bb70b09ac435a (diff)
LanguageServer: Enhance auto completion for override. (#7465)
* Add additional completion keywords. * LanguageServer: Enhance auto completion for `override`.
Diffstat (limited to 'source/slang/slang-parser.cpp')
-rw-r--r--source/slang/slang-parser.cpp18
1 files changed, 16 insertions, 2 deletions
diff --git a/source/slang/slang-parser.cpp b/source/slang/slang-parser.cpp
index 9727140f3..a019f97c4 100644
--- a/source/slang/slang-parser.cpp
+++ b/source/slang/slang-parser.cpp
@@ -1443,8 +1443,7 @@ static NameLoc ParseDeclName(Parser* parser)
}
else
{
- nameToken = parser->ReadToken(TokenType::Identifier);
- return NameLoc(nameToken);
+ return expectIdentifier(parser);
}
}
@@ -2037,6 +2036,7 @@ static RefPtr<Declarator> parseDirectAbstractDeclarator(
switch (parser->tokenReader.peekTokenType())
{
case TokenType::Identifier:
+ case TokenType::CompletionRequest:
{
auto nameDeclarator = new NameDeclarator();
nameDeclarator->flavor = Declarator::Flavor::name;
@@ -5048,6 +5048,20 @@ static DeclBase* ParseDeclWithModifiers(
decl->loc = loc;
}
break;
+ case TokenType::CompletionRequest:
+ {
+ if (modifiers.hasModifier<OverrideModifier>())
+ {
+ auto resultDecl = parser->astBuilder->create<EmptyDecl>();
+ resultDecl->nameAndLoc = expectIdentifier(parser);
+ decl = resultDecl;
+ }
+ else
+ {
+ decl = ParseDeclaratorDecl(parser, containerDecl, modifiers);
+ }
+ }
+ break;
// If nothing else matched, we try to parse an "ordinary" declarator-based declaration
default:
decl = ParseDeclaratorDecl(parser, containerDecl, modifiers);