Skip to content

Commit e666744

Browse files
author
iclsrc
committed
Merge from 'main' to 'sycl-web'
2 parents 3837d6d + 6663330 commit e666744

File tree

347 files changed

+12198
-3670
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

347 files changed

+12198
-3670
lines changed

clang-tools-extra/clangd/ClangdLSPServer.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -510,6 +510,11 @@ void ClangdLSPServer::onInitialize(const InitializeParams &Params,
510510
"semanticTokens request, choosing the latter (no notifications).");
511511
Opts.TheiaSemanticHighlighting = false;
512512
}
513+
if (Opts.TheiaSemanticHighlighting) {
514+
log("Using legacy semanticHighlights notification, which will be removed "
515+
"in clangd 13. Clients should use the standard semanticTokens "
516+
"request instead.");
517+
}
513518

514519
if (Params.rootUri && *Params.rootUri)
515520
Opts.WorkspaceRoot = std::string(Params.rootUri->file());

clang-tools-extra/clangd/Config.h

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,13 @@ struct Config {
9090
struct {
9191
bool SuppressAll = false;
9292
llvm::StringSet<> Suppress;
93+
94+
/// Configures what clang-tidy checks to run and options to use with them.
95+
struct {
96+
// A comma-seperated list of globs specify which clang-tidy checks to run.
97+
std::string Checks;
98+
llvm::StringMap<std::string> CheckOptions;
99+
} ClangTidy;
93100
} Diagnostics;
94101

95102
/// Style of the codebase.
@@ -99,14 +106,6 @@ struct Config {
99106
// ::). All nested namespaces are affected as well.
100107
std::vector<std::string> FullyQualifiedNamespaces;
101108
} Style;
102-
103-
/// Configures what clang-tidy checks to run and options to use with them.
104-
struct {
105-
// A comma-seperated list of globs to specify which clang-tidy checks to
106-
// run.
107-
std::string Checks;
108-
llvm::StringMap<std::string> CheckOptions;
109-
} ClangTidy;
110109
};
111110

112111
} // namespace clangd

clang-tools-extra/clangd/ConfigCompile.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,6 @@ struct FragmentCompiler {
189189
compile(std::move(F.CompileFlags));
190190
compile(std::move(F.Index));
191191
compile(std::move(F.Diagnostics));
192-
compile(std::move(F.ClangTidy));
193192
}
194193

195194
void compile(Fragment::IfBlock &&F) {
@@ -379,6 +378,8 @@ struct FragmentCompiler {
379378
for (llvm::StringRef N : Normalized)
380379
C.Diagnostics.Suppress.insert(N);
381380
});
381+
382+
compile(std::move(F.ClangTidy));
382383
}
383384

384385
void compile(Fragment::StyleBlock &&F) {
@@ -422,7 +423,7 @@ struct FragmentCompiler {
422423
CurSpec += Str;
423424
}
424425

425-
void compile(Fragment::ClangTidyBlock &&F) {
426+
void compile(Fragment::DiagnosticsBlock::ClangTidyBlock &&F) {
426427
std::string Checks;
427428
for (auto &CheckGlob : F.Add)
428429
appendTidyCheckSpec(Checks, CheckGlob, true);
@@ -433,8 +434,9 @@ struct FragmentCompiler {
433434
if (!Checks.empty())
434435
Out.Apply.push_back(
435436
[Checks = std::move(Checks)](const Params &, Config &C) {
436-
C.ClangTidy.Checks.append(
437-
Checks, C.ClangTidy.Checks.empty() ? /*skip comma*/ 1 : 0,
437+
C.Diagnostics.ClangTidy.Checks.append(
438+
Checks,
439+
C.Diagnostics.ClangTidy.Checks.empty() ? /*skip comma*/ 1 : 0,
438440
std::string::npos);
439441
});
440442
if (!F.CheckOptions.empty()) {
@@ -445,8 +447,8 @@ struct FragmentCompiler {
445447
Out.Apply.push_back(
446448
[CheckOptions = std::move(CheckOptions)](const Params &, Config &C) {
447449
for (auto &StringPair : CheckOptions)
448-
C.ClangTidy.CheckOptions.insert_or_assign(StringPair.first,
449-
StringPair.second);
450+
C.Diagnostics.ClangTidy.CheckOptions.insert_or_assign(
451+
StringPair.first, StringPair.second);
450452
});
451453
}
452454
}

clang-tools-extra/clangd/ConfigFragment.h

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,29 @@ struct Fragment {
203203
/// (e.g. by disabling a clang-tidy check, or the -Wunused compile flag).
204204
/// This often has other advantages, such as skipping some analysis.
205205
std::vector<Located<std::string>> Suppress;
206+
207+
/// Controls how clang-tidy will run over the code base.
208+
///
209+
/// The settings are merged with any settings found in .clang-tidy
210+
/// configiration files with these ones taking precedence.
211+
struct ClangTidyBlock {
212+
std::vector<Located<std::string>> Add;
213+
/// List of checks to disable.
214+
/// Takes precedence over Add. To enable all llvm checks except include
215+
/// order:
216+
/// Add: llvm-*
217+
/// Remove: llvm-include-onder
218+
std::vector<Located<std::string>> Remove;
219+
220+
/// A Key-Value pair list of options to pass to clang-tidy checks
221+
/// These take precedence over options specified in clang-tidy
222+
/// configuration files. Example:
223+
/// CheckOptions:
224+
/// readability-braces-around-statements.ShortStatementLines: 2
225+
std::vector<std::pair<Located<std::string>, Located<std::string>>>
226+
CheckOptions;
227+
};
228+
ClangTidyBlock ClangTidy;
206229
};
207230
DiagnosticsBlock Diagnostics;
208231

@@ -215,30 +238,6 @@ struct Fragment {
215238
std::vector<Located<std::string>> FullyQualifiedNamespaces;
216239
};
217240
StyleBlock Style;
218-
219-
/// Controls how clang-tidy will run over the code base.
220-
///
221-
/// The settings are merged with any settings found in .clang-tidy
222-
/// configiration files with these ones taking precedence.
223-
// FIXME: move this to Diagnostics.Tidy.
224-
struct ClangTidyBlock {
225-
std::vector<Located<std::string>> Add;
226-
/// List of checks to disable.
227-
/// Takes precedence over Add. To enable all llvm checks except include
228-
/// order:
229-
/// Add: llvm-*
230-
/// Remove: llvm-include-onder
231-
std::vector<Located<std::string>> Remove;
232-
233-
/// A Key-Value pair list of options to pass to clang-tidy checks
234-
/// These take precedence over options specified in clang-tidy configuration
235-
/// files. Example:
236-
/// CheckOptions:
237-
/// readability-braces-around-statements.ShortStatementLines: 2
238-
std::vector<std::pair<Located<std::string>, Located<std::string>>>
239-
CheckOptions;
240-
};
241-
ClangTidyBlock ClangTidy;
242241
};
243242

244243
} // namespace config

clang-tools-extra/clangd/ConfigYAML.cpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ class Parser {
6262
Dict.handle("CompileFlags", [&](Node &N) { parse(F.CompileFlags, N); });
6363
Dict.handle("Index", [&](Node &N) { parse(F.Index, N); });
6464
Dict.handle("Style", [&](Node &N) { parse(F.Style, N); });
65-
Dict.handle("ClangTidy", [&](Node &N) { parse(F.ClangTidy, N); });
65+
Dict.handle("Diagnostics", [&](Node &N) { parse(F.Diagnostics, N); });
6666
Dict.parse(N);
6767
return !(N.failed() || HadError);
6868
}
@@ -110,7 +110,17 @@ class Parser {
110110
Dict.parse(N);
111111
}
112112

113-
void parse(Fragment::ClangTidyBlock &F, Node &N) {
113+
void parse(Fragment::DiagnosticsBlock &F, Node &N) {
114+
DictParser Dict("Diagnostics", this);
115+
Dict.handle("Suppress", [&](Node &N) {
116+
if (auto Values = scalarValues(N))
117+
F.Suppress = std::move(*Values);
118+
});
119+
Dict.handle("ClangTidy", [&](Node &N) { parse(F.ClangTidy, N); });
120+
Dict.parse(N);
121+
}
122+
123+
void parse(Fragment::DiagnosticsBlock::ClangTidyBlock &F, Node &N) {
114124
DictParser Dict("ClangTidy", this);
115125
Dict.handle("Add", [&](Node &N) {
116126
if (auto Values = scalarValues(N))

clang-tools-extra/clangd/ParsedAST.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -316,8 +316,8 @@ ParsedAST::build(llvm::StringRef Filename, const ParseInputs &Inputs,
316316
Check->registerMatchers(&CTFinder);
317317
}
318318

319-
ASTDiags.setLevelAdjuster([&, &Cfg(Config::current())](
320-
DiagnosticsEngine::Level DiagLevel,
319+
const Config& Cfg = Config::current();
320+
ASTDiags.setLevelAdjuster([&](DiagnosticsEngine::Level DiagLevel,
321321
const clang::Diagnostic &Info) {
322322
if (Cfg.Diagnostics.SuppressAll ||
323323
isBuiltinDiagnosticSuppressed(Info.getID(), Cfg.Diagnostics.Suppress))

clang-tools-extra/clangd/Protocol.cpp

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,21 @@
2727

2828
namespace clang {
2929
namespace clangd {
30+
namespace {
31+
32+
// Helper that doesn't treat `null` and absent fields as failures.
33+
template <typename T>
34+
bool mapOptOrNull(const llvm::json::Value &Params, llvm::StringLiteral Prop,
35+
T &Out, llvm::json::Path P) {
36+
auto *O = Params.getAsObject();
37+
assert(O);
38+
auto *V = O->get(Prop);
39+
// Field is missing or null.
40+
if (!V || V->getAsNull().hasValue())
41+
return true;
42+
return fromJSON(*V, Out, P.field(Prop));
43+
}
44+
} // namespace
3045

3146
char LSPError::ID;
3247

@@ -490,7 +505,7 @@ bool fromJSON(const llvm::json::Value &Params, DidChangeTextDocumentParams &R,
490505
return O && O.map("textDocument", R.textDocument) &&
491506
O.map("contentChanges", R.contentChanges) &&
492507
O.map("wantDiagnostics", R.wantDiagnostics) &&
493-
O.mapOptional("forceRebuild", R.forceRebuild);
508+
mapOptOrNull(Params, "forceRebuild", R.forceRebuild, P);
494509
}
495510

496511
bool fromJSON(const llvm::json::Value &E, FileChangeType &Out,
@@ -580,10 +595,10 @@ bool fromJSON(const llvm::json::Value &Params, Diagnostic &R,
580595
llvm::json::Path P) {
581596
llvm::json::ObjectMapper O(Params, P);
582597
return O && O.map("range", R.range) && O.map("message", R.message) &&
583-
O.mapOptional("severity", R.severity) &&
584-
O.mapOptional("category", R.category) &&
585-
O.mapOptional("code", R.code) && O.mapOptional("source", R.source);
586-
return true;
598+
mapOptOrNull(Params, "severity", R.severity, P) &&
599+
mapOptOrNull(Params, "category", R.category, P) &&
600+
mapOptOrNull(Params, "code", R.code, P) &&
601+
mapOptOrNull(Params, "source", R.source, P);
587602
}
588603

589604
llvm::json::Value toJSON(const PublishDiagnosticsParams &PDP) {
@@ -818,7 +833,7 @@ bool fromJSON(const llvm::json::Value &Params, CompletionContext &R,
818833
llvm::json::ObjectMapper O(Params, P);
819834
int TriggerKind;
820835
if (!O || !O.map("triggerKind", TriggerKind) ||
821-
!O.mapOptional("triggerCharacter", R.triggerCharacter))
836+
!mapOptOrNull(Params, "triggerCharacter", R.triggerCharacter, P))
822837
return false;
823838
R.triggerKind = static_cast<CompletionTriggerKind>(TriggerKind);
824839
return true;
@@ -1121,8 +1136,8 @@ bool fromJSON(const llvm::json::Value &Params, ConfigurationSettings &S,
11211136
llvm::json::ObjectMapper O(Params, P);
11221137
if (!O)
11231138
return true; // 'any' type in LSP.
1124-
return O.mapOptional("compilationDatabaseChanges",
1125-
S.compilationDatabaseChanges);
1139+
return mapOptOrNull(Params, "compilationDatabaseChanges",
1140+
S.compilationDatabaseChanges, P);
11261141
}
11271142

11281143
bool fromJSON(const llvm::json::Value &Params, InitializationOptions &Opts,
@@ -1133,8 +1148,8 @@ bool fromJSON(const llvm::json::Value &Params, InitializationOptions &Opts,
11331148

11341149
return fromJSON(Params, Opts.ConfigSettings, P) &&
11351150
O.map("compilationDatabasePath", Opts.compilationDatabasePath) &&
1136-
O.mapOptional("fallbackFlags", Opts.fallbackFlags) &&
1137-
O.mapOptional("clangdFileStatus", Opts.FileStatus);
1151+
mapOptOrNull(Params, "fallbackFlags", Opts.fallbackFlags, P) &&
1152+
mapOptOrNull(Params, "clangdFileStatus", Opts.FileStatus, P);
11381153
}
11391154

11401155
bool fromJSON(const llvm::json::Value &E, TypeHierarchyDirection &Out,
@@ -1190,10 +1205,11 @@ bool fromJSON(const llvm::json::Value &Params, TypeHierarchyItem &I,
11901205
return O && O.map("name", I.name) && O.map("kind", I.kind) &&
11911206
O.map("uri", I.uri) && O.map("range", I.range) &&
11921207
O.map("selectionRange", I.selectionRange) &&
1193-
O.mapOptional("detail", I.detail) &&
1194-
O.mapOptional("deprecated", I.deprecated) &&
1195-
O.mapOptional("parents", I.parents) &&
1196-
O.mapOptional("children", I.children) && O.mapOptional("data", I.data);
1208+
mapOptOrNull(Params, "detail", I.detail, P) &&
1209+
mapOptOrNull(Params, "deprecated", I.deprecated, P) &&
1210+
mapOptOrNull(Params, "parents", I.parents, P) &&
1211+
mapOptOrNull(Params, "children", I.children, P) &&
1212+
mapOptOrNull(Params, "data", I.data, P);
11971213
}
11981214

11991215
bool fromJSON(const llvm::json::Value &Params,
@@ -1238,7 +1254,7 @@ bool fromJSON(const llvm::json::Value &Params, CallHierarchyItem &I,
12381254
return O && O.map("name", I.name) && O.map("kind", I.kind) &&
12391255
O.map("uri", I.uri) && O.map("range", I.range) &&
12401256
O.map("selectionRange", I.selectionRange) &&
1241-
O.mapOptional("data", I.data);
1257+
mapOptOrNull(Params, "data", I.data, P);
12421258
}
12431259

12441260
bool fromJSON(const llvm::json::Value &Params,

clang-tools-extra/clangd/TidyProvider.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ TidyProvider disableUnusableChecks(llvm::ArrayRef<std::string> ExtraBadChecks) {
255255

256256
TidyProviderRef provideClangdConfig() {
257257
return [](tidy::ClangTidyOptions &Opts, llvm::StringRef) {
258-
const auto &CurTidyConfig = Config::current().ClangTidy;
258+
const auto &CurTidyConfig = Config::current().Diagnostics.ClangTidy;
259259
if (!CurTidyConfig.Checks.empty())
260260
mergeCheckList(Opts.Checks, CurTidyConfig.Checks);
261261

clang-tools-extra/clangd/unittests/ConfigCompileTests.cpp

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -259,32 +259,36 @@ TEST_F(ConfigCompileTests, DiagnosticSuppression) {
259259
}
260260

261261
TEST_F(ConfigCompileTests, Tidy) {
262-
Frag.ClangTidy.Add.emplace_back("bugprone-use-after-move");
263-
Frag.ClangTidy.Add.emplace_back("llvm-*");
264-
Frag.ClangTidy.Remove.emplace_back("llvm-include-order");
265-
Frag.ClangTidy.Remove.emplace_back("readability-*");
266-
Frag.ClangTidy.CheckOptions.emplace_back(
262+
auto &Tidy = Frag.Diagnostics.ClangTidy;
263+
Tidy.Add.emplace_back("bugprone-use-after-move");
264+
Tidy.Add.emplace_back("llvm-*");
265+
Tidy.Remove.emplace_back("llvm-include-order");
266+
Tidy.Remove.emplace_back("readability-*");
267+
Tidy.CheckOptions.emplace_back(
267268
std::make_pair(std::string("StrictMode"), std::string("true")));
268-
Frag.ClangTidy.CheckOptions.emplace_back(std::make_pair(
269+
Tidy.CheckOptions.emplace_back(std::make_pair(
269270
std::string("example-check.ExampleOption"), std::string("0")));
270271
EXPECT_TRUE(compileAndApply());
271272
EXPECT_EQ(
272-
Conf.ClangTidy.Checks,
273+
Conf.Diagnostics.ClangTidy.Checks,
273274
"bugprone-use-after-move,llvm-*,-llvm-include-order,-readability-*");
274-
EXPECT_EQ(Conf.ClangTidy.CheckOptions.size(), 2U);
275-
EXPECT_EQ(Conf.ClangTidy.CheckOptions.lookup("StrictMode"), "true");
276-
EXPECT_EQ(Conf.ClangTidy.CheckOptions.lookup("example-check.ExampleOption"),
275+
EXPECT_EQ(Conf.Diagnostics.ClangTidy.CheckOptions.size(), 2U);
276+
EXPECT_EQ(Conf.Diagnostics.ClangTidy.CheckOptions.lookup("StrictMode"),
277+
"true");
278+
EXPECT_EQ(Conf.Diagnostics.ClangTidy.CheckOptions.lookup(
279+
"example-check.ExampleOption"),
277280
"0");
278281
EXPECT_THAT(Diags.Diagnostics, IsEmpty());
279282
}
280283

281284
TEST_F(ConfigCompileTests, TidyBadChecks) {
282-
Frag.ClangTidy.Add.emplace_back("unknown-check");
283-
Frag.ClangTidy.Remove.emplace_back("*");
284-
Frag.ClangTidy.Remove.emplace_back("llvm-includeorder");
285+
auto &Tidy = Frag.Diagnostics.ClangTidy;
286+
Tidy.Add.emplace_back("unknown-check");
287+
Tidy.Remove.emplace_back("*");
288+
Tidy.Remove.emplace_back("llvm-includeorder");
285289
EXPECT_TRUE(compileAndApply());
286290
// Ensure bad checks are stripped from the glob.
287-
EXPECT_EQ(Conf.ClangTidy.Checks, "-*");
291+
EXPECT_EQ(Conf.Diagnostics.ClangTidy.Checks, "-*");
288292
EXPECT_THAT(
289293
Diags.Diagnostics,
290294
ElementsAre(

clang-tools-extra/clangd/unittests/ConfigYAMLTests.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,11 @@ CompileFlags: { Add: [foo, bar] }
6060
Index:
6161
Background: Skip
6262
---
63-
ClangTidy:
64-
CheckOptions:
65-
IgnoreMacros: true
66-
example-check.ExampleOption: 0
63+
Diagnostics:
64+
ClangTidy:
65+
CheckOptions:
66+
IgnoreMacros: true
67+
example-check.ExampleOption: 0
6768
)yaml";
6869
auto Results = Fragment::parseYAML(YAML, "config.yaml", Diags.callback());
6970
EXPECT_THAT(Diags.Diagnostics, IsEmpty());
@@ -77,7 +78,7 @@ CompileFlags: { Add: [foo, bar] }
7778

7879
ASSERT_TRUE(Results[2].Index.Background);
7980
EXPECT_EQ("Skip", *Results[2].Index.Background.getValue());
80-
EXPECT_THAT(Results[3].ClangTidy.CheckOptions,
81+
EXPECT_THAT(Results[3].Diagnostics.ClangTidy.CheckOptions,
8182
ElementsAre(PairVal("IgnoreMacros", "true"),
8283
PairVal("example-check.ExampleOption", "0")));
8384
}

0 commit comments

Comments
 (0)