diff options
| author | Yong He <yonghe@outlook.com> | 2025-07-29 07:35:58 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-29 14:35:58 +0000 |
| commit | 855b1a262f3a769d44765e78f94e566d875b9286 (patch) | |
| tree | ea41db3717f55aa5032b1f04d71729a452ec68b2 /source/slang/slang-ast-print.cpp | |
| parent | ea6f8551ad38f2bcc32b542fd52ce17f3829cbeb (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-ast-print.cpp')
| -rw-r--r-- | source/slang/slang-ast-print.cpp | 47 |
1 files changed, 30 insertions, 17 deletions
diff --git a/source/slang/slang-ast-print.cpp b/source/slang/slang-ast-print.cpp index ee747a4c2..1f7478662 100644 --- a/source/slang/slang-ast-print.cpp +++ b/source/slang/slang-ast-print.cpp @@ -1313,12 +1313,34 @@ void ASTPrinter::_addDeclPathRec(const DeclRef<Decl>& declRef, Index depth) else if (depth > 0) { // Write out the generic parameters (only if the depth allows it) - addGenericParams(parentGenericDeclRef); + addGenericParams(parentGenericDeclRef, nullptr); } } } -void ASTPrinter::addGenericParams(const DeclRef<GenericDecl>& genericDeclRef) +struct ParamScope +{ + StringBuilder* sb; + List<Range<Index>>* paramRanges; + Index rangeStart; + ParamScope(StringBuilder* inSb, List<Range<Index>>* outParamRanges) + : sb(inSb), paramRanges(outParamRanges) + { + rangeStart = sb->getLength(); + } + ~ParamScope() + { + if (paramRanges) + { + Index rangeEnd = sb->getLength(); + paramRanges->add(makeRange<Index>(rangeStart, rangeEnd)); + } + } +}; + +void ASTPrinter::addGenericParams( + const DeclRef<GenericDecl>& genericDeclRef, + List<Range<Index>>* outParamRanges) { auto& sb = m_builder; @@ -1331,7 +1353,7 @@ void ASTPrinter::addGenericParams(const DeclRef<GenericDecl>& genericDeclRef) if (!first) sb << ", "; first = false; - + ParamScope paramScope(&sb, outParamRanges); { ScopePart scopePart(this, Part::Type::GenericParamType); sb << getText(genericTypeParam.getName()); @@ -1342,7 +1364,7 @@ void ASTPrinter::addGenericParams(const DeclRef<GenericDecl>& genericDeclRef) if (!first) sb << ", "; first = false; - + ParamScope paramScope(&sb, outParamRanges); { ScopePart scopePart(this, Part::Type::GenericParamValueType); addType(getType(m_astBuilder, genericValParam)); @@ -1358,6 +1380,7 @@ void ASTPrinter::addGenericParams(const DeclRef<GenericDecl>& genericDeclRef) if (!first) sb << ", "; first = false; + ParamScope paramScope(&sb, outParamRanges); { ScopePart scopePart(this, Part::Type::GenericParamType); sb << "each "; @@ -1383,8 +1406,6 @@ void ASTPrinter::addDeclParams(const DeclRef<Decl>& declRef, List<Range<Index>>* bool first = true; for (auto paramDeclRef : getParameters(m_astBuilder, funcDeclRef)) { - auto rangeStart = sb.getLength(); - ParamDecl* paramDecl = paramDeclRef.getDecl(); auto paramType = getType(m_astBuilder, paramDeclRef); @@ -1393,9 +1414,10 @@ void ASTPrinter::addDeclParams(const DeclRef<Decl>& declRef, List<Range<Index>>* if (!first) { sb << ", "; - rangeStart += 2; } + ParamScope paramScope(&sb, outParamRange); + // Type part. { ScopePart scopePart(this, Part::Type::ParamType); @@ -1442,11 +1464,6 @@ void ASTPrinter::addDeclParams(const DeclRef<Decl>& declRef, List<Range<Index>>* sb << " = "; addExpr(paramDecl->initExpr); } - - auto rangeEnd = sb.getLength(); - - if (outParamRange) - outParamRange->add(makeRange<Index>(rangeStart, rangeEnd)); first = false; }; if (auto typePack = as<ConcreteTypePack>(paramType)) @@ -1467,11 +1484,7 @@ void ASTPrinter::addDeclParams(const DeclRef<Decl>& declRef, List<Range<Index>>* } else if (auto genericDeclRef = declRef.as<GenericDecl>()) { - addGenericParams(genericDeclRef); - - addDeclParams( - m_astBuilder->getMemberDeclRef(genericDeclRef, genericDeclRef.getDecl()->inner), - outParamRange); + addGenericParams(genericDeclRef, outParamRange); } else { |
