@@ -381,20 +381,18 @@ maybeDropCxxExplicitObjectParameters(ArrayRef<const ParmVarDecl *> Params) {
381
381
return Params;
382
382
}
383
383
384
- template <typename R, typename P>
385
- std::string joinAndTruncate (R &&Range, size_t MaxLength,
386
- P &&GetAsStringFunction) {
384
+ template <typename R>
385
+ std::string joinAndTruncate (const R &Range, size_t MaxLength) {
387
386
std::string Out;
388
387
llvm::raw_string_ostream OS (Out);
389
388
llvm::ListSeparator Sep (" , " );
390
389
for (auto &&Element : Range) {
391
390
OS << Sep;
392
- auto AsString = GetAsStringFunction (Element);
393
- if (Out.size () + AsString.size () >= MaxLength) {
391
+ if (Out.size () + Element.size () >= MaxLength) {
394
392
OS << " ..." ;
395
393
break ;
396
394
}
397
- OS << AsString ;
395
+ OS << Element ;
398
396
}
399
397
OS.flush ();
400
398
return Out;
@@ -738,11 +736,12 @@ class InlayHintVisitor : public RecursiveASTVisitor<InlayHintVisitor> {
738
736
private:
739
737
using NameVec = SmallVector<StringRef, 8 >;
740
738
741
- void processCall (Callee Callee, SourceRange RParenOrBraceRange ,
739
+ void processCall (Callee Callee, SourceLocation RParenOrBraceLoc ,
742
740
llvm::ArrayRef<const Expr *> Args) {
743
741
assert (Callee.Decl || Callee.Loc );
744
742
745
- if (!Cfg.InlayHints .Parameters || Args.size () == 0 )
743
+ if ((!Cfg.InlayHints .Parameters && !Cfg.InlayHints .DefaultArguments ) ||
744
+ Args.size () == 0 )
746
745
return ;
747
746
748
747
// The parameter name of a move or copy constructor is not very interesting.
@@ -785,9 +784,11 @@ class InlayHintVisitor : public RecursiveASTVisitor<InlayHintVisitor> {
785
784
}
786
785
787
786
StringRef Name = ParameterNames[I];
788
- const bool NameHint = shouldHintName (Args[I], Name);
787
+ const bool NameHint =
788
+ shouldHintName (Args[I], Name) && Cfg.InlayHints .Parameters ;
789
789
const bool ReferenceHint =
790
- shouldHintReference (Params[I], ForwardedParams[I]);
790
+ shouldHintReference (Params[I], ForwardedParams[I]) &&
791
+ Cfg.InlayHints .Parameters ;
791
792
792
793
const bool IsDefault = isa<CXXDefaultArgExpr>(Args[I]);
793
794
HasNonDefaultArgs |= !IsDefault;
@@ -796,9 +797,11 @@ class InlayHintVisitor : public RecursiveASTVisitor<InlayHintVisitor> {
796
797
const auto SourceText = Lexer::getSourceText (
797
798
CharSourceRange::getTokenRange (Params[I]->getDefaultArgRange ()),
798
799
AST.getSourceManager (), AST.getLangOpts ());
799
- const auto Abbrev = SourceText.size () > Cfg.InlayHints .TypeNameLimit
800
- ? " ..."
801
- : SourceText;
800
+ const auto Abbrev =
801
+ (SourceText.size () > Cfg.InlayHints .TypeNameLimit ||
802
+ SourceText.contains (" \n " ))
803
+ ? " ..."
804
+ : SourceText;
802
805
if (NameHint)
803
806
FormattedDefaultArgs.emplace_back (
804
807
llvm::formatv (" {0}: {1}" , Name, Abbrev));
@@ -814,9 +817,8 @@ class InlayHintVisitor : public RecursiveASTVisitor<InlayHintVisitor> {
814
817
815
818
if (!FormattedDefaultArgs.empty ()) {
816
819
std::string Hint =
817
- joinAndTruncate (FormattedDefaultArgs, Cfg.InlayHints .TypeNameLimit ,
818
- [](const auto &E) { return E; });
819
- addInlayHint (RParenOrBraceRange, HintSide::Left,
820
+ joinAndTruncate (FormattedDefaultArgs, Cfg.InlayHints .TypeNameLimit );
821
+ addInlayHint (SourceRange{RParenOrBraceLoc}, HintSide::Left,
820
822
InlayHintKind::DefaultArgument,
821
823
HasNonDefaultArgs ? " , " : " " , Hint, " " );
822
824
}
0 commit comments