Skip to content

Commit fe79c93

Browse files
committed
Add InlayHintOptions
1 parent 64410e0 commit fe79c93

File tree

2 files changed

+17
-7
lines changed

2 files changed

+17
-7
lines changed

clang-tools-extra/clangd/InlayHints.cpp

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -415,12 +415,14 @@ struct Callee {
415415
class InlayHintVisitor : public RecursiveASTVisitor<InlayHintVisitor> {
416416
public:
417417
InlayHintVisitor(std::vector<InlayHint> &Results, ParsedAST &AST,
418-
const Config &Cfg, std::optional<Range> RestrictRange)
418+
const Config &Cfg, std::optional<Range> RestrictRange,
419+
InlayHintOptions HintOptions)
419420
: Results(Results), AST(AST.getASTContext()), Tokens(AST.getTokens()),
420421
Cfg(Cfg), RestrictRange(std::move(RestrictRange)),
421422
MainFileID(AST.getSourceManager().getMainFileID()),
422423
Resolver(AST.getHeuristicResolver()),
423-
TypeHintPolicy(this->AST.getPrintingPolicy()) {
424+
TypeHintPolicy(this->AST.getPrintingPolicy()),
425+
HintOptions(HintOptions) {
424426
bool Invalid = false;
425427
llvm::StringRef Buf =
426428
AST.getSourceManager().getBufferData(MainFileID, &Invalid);
@@ -1127,7 +1129,6 @@ class InlayHintVisitor : public RecursiveASTVisitor<InlayHintVisitor> {
11271129
// Otherwise, the hint shouldn't be shown.
11281130
std::optional<Range> computeBlockEndHintRange(SourceRange BraceRange,
11291131
StringRef OptionalPunctuation) {
1130-
constexpr unsigned HintMinLineLimit = 10;
11311132

11321133
auto &SM = AST.getSourceManager();
11331134
auto [BlockBeginFileId, BlockBeginOffset] =
@@ -1155,7 +1156,7 @@ class InlayHintVisitor : public RecursiveASTVisitor<InlayHintVisitor> {
11551156
auto RBraceLine = SM.getLineNumber(RBraceFileId, RBraceOffset);
11561157

11571158
// Don't show hint on trivial blocks like `class X {};`
1158-
if (BlockBeginLine + HintMinLineLimit - 1 > RBraceLine)
1159+
if (BlockBeginLine + HintOptions.HintMinLineLimit - 1 > RBraceLine)
11591160
return std::nullopt;
11601161

11611162
// This is what we attach the hint to, usually "}" or "};".
@@ -1185,17 +1186,20 @@ class InlayHintVisitor : public RecursiveASTVisitor<InlayHintVisitor> {
11851186
StringRef MainFileBuf;
11861187
const HeuristicResolver *Resolver;
11871188
PrintingPolicy TypeHintPolicy;
1189+
InlayHintOptions HintOptions;
11881190
};
11891191

11901192
} // namespace
11911193

11921194
std::vector<InlayHint> inlayHints(ParsedAST &AST,
1193-
std::optional<Range> RestrictRange) {
1195+
std::optional<Range> RestrictRange,
1196+
InlayHintOptions HintOptions) {
11941197
std::vector<InlayHint> Results;
11951198
const auto &Cfg = Config::current();
11961199
if (!Cfg.InlayHints.Enabled)
11971200
return Results;
1198-
InlayHintVisitor Visitor(Results, AST, Cfg, std::move(RestrictRange));
1201+
InlayHintVisitor Visitor(Results, AST, Cfg, std::move(RestrictRange),
1202+
HintOptions);
11991203
Visitor.TraverseAST(AST.getASTContext());
12001204

12011205
// De-duplicate hints. Duplicates can sometimes occur due to e.g. explicit

clang-tools-extra/clangd/InlayHints.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,16 @@ namespace clang {
2222
namespace clangd {
2323
class ParsedAST;
2424

25+
struct InlayHintOptions {
26+
// Minimum lines for BlockEnd inlay-hints to be shown
27+
int HintMinLineLimit{2};
28+
};
29+
2530
/// Compute and return inlay hints for a file.
2631
/// If RestrictRange is set, return only hints whose location is in that range.
2732
std::vector<InlayHint> inlayHints(ParsedAST &AST,
28-
std::optional<Range> RestrictRange);
33+
std::optional<Range> RestrictRange,
34+
InlayHintOptions HintOptions = {});
2935

3036
} // namespace clangd
3137
} // namespace clang

0 commit comments

Comments
 (0)