summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-parser.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2025-07-29 07:35:58 -0700
committerGitHub <noreply@github.com>2025-07-29 14:35:58 +0000
commit855b1a262f3a769d44765e78f94e566d875b9286 (patch)
treeea41db3717f55aa5032b1f04d71729a452ec68b2 /source/slang/slang-parser.cpp
parentea6f8551ad38f2bcc32b542fd52ce17f3829cbeb (diff)
[Language Server]: Show signature help on generic parameters. (#7913)
* Show signature help on generic parameters. * Fix. * Update tests. * slang-test: make vvl error go through stderr. * update slang-rhi * Update slang-rhi
Diffstat (limited to 'source/slang/slang-parser.cpp')
-rw-r--r--source/slang/slang-parser.cpp21
1 files changed, 17 insertions, 4 deletions
diff --git a/source/slang/slang-parser.cpp b/source/slang/slang-parser.cpp
index 891db2867..7f7c39929 100644
--- a/source/slang/slang-parser.cpp
+++ b/source/slang/slang-parser.cpp
@@ -2356,14 +2356,27 @@ static Expr* parseGenericApp(Parser* parser, Expr* base)
genericApp->loc = base->loc;
genericApp->functionExpr = base;
- parser->ReadToken(TokenType::OpLess);
+ auto opLess = parser->ReadToken(TokenType::OpLess);
+ genericApp->argumentDelimeterLocs.add(opLess.loc);
parser->genericDepth++;
- // For now assume all generics have at least one argument
- genericApp->arguments.add(_parseGenericArg(parser));
- while (AdvanceIf(parser, TokenType::Comma))
+
+ for (;;)
{
+ if (parser->LookAheadToken(TokenType::OpGreater) ||
+ parser->LookAheadToken(TokenType::OpRsh))
+ break;
genericApp->arguments.add(_parseGenericArg(parser));
+ if (parser->LookAheadToken(TokenType::Comma))
+ {
+ auto commaToken = parser->ReadToken(TokenType::Comma);
+ genericApp->argumentDelimeterLocs.add(commaToken.loc);
+ }
+ else
+ {
+ break;
+ }
}
+ genericApp->argumentDelimeterLocs.add(parser->tokenReader.peekLoc());
parser->genericDepth--;
if (parser->tokenReader.peekToken().type == TokenType::OpRsh)