Skip to content

Commit db88f5a

Browse files
committed
Merge from 'main' to 'sycl-web' (#23)
2 parents e35eaad + b9c7754 commit db88f5a

File tree

1,016 files changed

+106533
-15805
lines changed

Some content is hidden

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

1,016 files changed

+106533
-15805
lines changed

clang-tools-extra/clang-tidy/ClangTidyCheck.cpp

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include "llvm/ADT/StringRef.h"
1212
#include "llvm/Support/Error.h"
1313
#include "llvm/Support/WithColor.h"
14+
#include "llvm/Support/YAMLParser.h"
1415
#include "llvm/Support/raw_ostream.h"
1516

1617
namespace clang {
@@ -108,13 +109,14 @@ ClangTidyCheck::OptionsView::getLocalOrGlobal(StringRef LocalName) const {
108109

109110
static llvm::Expected<bool> getAsBool(StringRef Value,
110111
const llvm::Twine &LookupName) {
111-
if (Value == "true")
112-
return true;
113-
if (Value == "false")
114-
return false;
115-
bool Result;
116-
if (!Value.getAsInteger(10, Result))
117-
return Result;
112+
113+
if (llvm::Optional<bool> Parsed = llvm::yaml::parseBool(Value))
114+
return *Parsed;
115+
// To maintain backwards compatability, we support parsing numbers as
116+
// booleans, even though its not supported in YAML.
117+
long long Number;
118+
if (!Value.getAsInteger(10, Number))
119+
return Number != 0;
118120
return llvm::make_error<UnparseableIntegerOptionError>(LookupName.str(),
119121
Value.str(), true);
120122
}

clang-tools-extra/clangd/ConfigCompile.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#include "ConfigFragment.h"
2929
#include "ConfigProvider.h"
3030
#include "Features.inc"
31+
#include "TidyProvider.h"
3132
#include "support/Logger.h"
3233
#include "support/Trace.h"
3334
#include "llvm/ADT/None.h"
@@ -349,13 +350,19 @@ struct FragmentCompiler {
349350

350351
void appendTidyCheckSpec(std::string &CurSpec,
351352
const Located<std::string> &Arg, bool IsPositive) {
352-
StringRef Str = *Arg;
353+
StringRef Str = StringRef(*Arg).trim();
353354
// Don't support negating here, its handled if the item is in the Add or
354355
// Remove list.
355356
if (Str.startswith("-") || Str.contains(',')) {
356357
diag(Error, "Invalid clang-tidy check name", Arg.Range);
357358
return;
358359
}
360+
if (!Str.contains('*') && !isRegisteredTidyCheck(Str)) {
361+
diag(Warning,
362+
llvm::formatv("clang-tidy check '{0}' was not found", Str).str(),
363+
Arg.Range);
364+
return;
365+
}
359366
CurSpec += ',';
360367
if (!IsPositive)
361368
CurSpec += '-';

clang-tools-extra/clangd/ConfigYAML.cpp

Lines changed: 55 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,29 @@ using llvm::yaml::Node;
2424
using llvm::yaml::ScalarNode;
2525
using llvm::yaml::SequenceNode;
2626

27+
llvm::Optional<llvm::StringRef>
28+
bestGuess(llvm::StringRef Search,
29+
llvm::ArrayRef<llvm::StringRef> AllowedValues) {
30+
unsigned MaxEdit = (Search.size() + 1) / 3;
31+
if (!MaxEdit)
32+
return llvm::None;
33+
llvm::Optional<llvm::StringRef> Result;
34+
for (const auto &AllowedValue : AllowedValues) {
35+
unsigned EditDistance = Search.edit_distance(AllowedValue, true, MaxEdit);
36+
// We can't do better than an edit distance of 1, so just return this and
37+
// save computing other values.
38+
if (EditDistance == 1U)
39+
return AllowedValue;
40+
if (EditDistance == MaxEdit && !Result) {
41+
Result = AllowedValue;
42+
} else if (EditDistance < MaxEdit) {
43+
Result = AllowedValue;
44+
MaxEdit = EditDistance;
45+
}
46+
}
47+
return Result;
48+
}
49+
2750
class Parser {
2851
llvm::SourceMgr &SM;
2952
bool HadError = false;
@@ -167,6 +190,7 @@ class Parser {
167190
return;
168191
}
169192
llvm::SmallSet<std::string, 8> Seen;
193+
llvm::SmallVector<Located<std::string>, 0> UnknownKeys;
170194
// We *must* consume all items, even on error, or the parser will assert.
171195
for (auto &KV : llvm::cast<MappingNode>(N)) {
172196
auto *K = KV.getKey();
@@ -198,9 +222,30 @@ class Parser {
198222
Warn = UnknownHandler(
199223
Located<std::string>(**Key, K->getSourceRange()), *Value);
200224
if (Warn)
201-
Outer->warning("Unknown " + Description + " key " + **Key, *K);
225+
UnknownKeys.push_back(std::move(*Key));
202226
}
203227
}
228+
if (!UnknownKeys.empty())
229+
warnUnknownKeys(UnknownKeys, Seen);
230+
}
231+
232+
private:
233+
void warnUnknownKeys(llvm::ArrayRef<Located<std::string>> UnknownKeys,
234+
const llvm::SmallSet<std::string, 8> &SeenKeys) const {
235+
llvm::SmallVector<llvm::StringRef> UnseenKeys;
236+
for (const auto &KeyAndHandler : Keys)
237+
if (!SeenKeys.count(KeyAndHandler.first.str()))
238+
UnseenKeys.push_back(KeyAndHandler.first);
239+
240+
for (const Located<std::string> &UnknownKey : UnknownKeys)
241+
if (auto BestGuess = bestGuess(*UnknownKey, UnseenKeys))
242+
Outer->warning("Unknown " + Description + " key '" + *UnknownKey +
243+
"'; did you mean '" + *BestGuess + "'?",
244+
UnknownKey.Range);
245+
else
246+
Outer->warning("Unknown " + Description + " key '" + *UnknownKey +
247+
"'",
248+
UnknownKey.Range);
204249
}
205250
};
206251

@@ -238,16 +283,20 @@ class Parser {
238283
}
239284

240285
// Report a "hard" error, reflecting a config file that can never be valid.
241-
void error(const llvm::Twine &Msg, const Node &N) {
286+
void error(const llvm::Twine &Msg, llvm::SMRange Range) {
242287
HadError = true;
243-
SM.PrintMessage(N.getSourceRange().Start, llvm::SourceMgr::DK_Error, Msg,
244-
N.getSourceRange());
288+
SM.PrintMessage(Range.Start, llvm::SourceMgr::DK_Error, Msg, Range);
289+
}
290+
void error(const llvm::Twine &Msg, const Node &N) {
291+
return error(Msg, N.getSourceRange());
245292
}
246293

247294
// Report a "soft" error that could be caused by e.g. version skew.
295+
void warning(const llvm::Twine &Msg, llvm::SMRange Range) {
296+
SM.PrintMessage(Range.Start, llvm::SourceMgr::DK_Warning, Msg, Range);
297+
}
248298
void warning(const llvm::Twine &Msg, const Node &N) {
249-
SM.PrintMessage(N.getSourceRange().Start, llvm::SourceMgr::DK_Warning, Msg,
250-
N.getSourceRange());
299+
return warning(Msg, N.getSourceRange());
251300
}
252301
};
253302

0 commit comments

Comments
 (0)