Skip to content

Commit e8c2afa

Browse files
committed
fixed all tests
1 parent a917bea commit e8c2afa

File tree

7 files changed

+217
-8
lines changed

7 files changed

+217
-8
lines changed

clang-tools-extra/clangd/Diagnostics.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -832,8 +832,8 @@ void StoreDiags::HandleDiagnostic(DiagnosticsEngine::Level DiagLevel,
832832
LastDiagOriginallyError = OriginallyError;
833833
if (!Info.getFixItHints().empty())
834834
AddFix(true /* try to invent a message instead of repeating the diag */);
835-
if (Fixer) {
836-
auto ExtraFixes = Fixer(*LastDiag, Info);
835+
if (MainFixer) {
836+
auto ExtraFixes = MainFixer(*LastDiag, Info);
837837
LastDiag->Fixes.insert(LastDiag->Fixes.end(), ExtraFixes.begin(),
838838
ExtraFixes.end());
839839
}
@@ -851,8 +851,8 @@ void StoreDiags::HandleDiagnostic(DiagnosticsEngine::Level DiagLevel,
851851
return;
852852

853853
// Give include-fixer a chance to replace a note with a fix.
854-
if (Fixer) {
855-
auto ReplacementFixes = Fixer(*LastDiag, Info);
854+
if (NoteFixer) {
855+
auto ReplacementFixes = NoteFixer(*LastDiag, Info);
856856
if (!ReplacementFixes.empty()) {
857857
assert(Info.getNumFixItHints() == 0 &&
858858
"Include-fixer replaced a note with clang fix-its attached!");

clang-tools-extra/clangd/Diagnostics.h

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -147,15 +147,18 @@ class StoreDiags : public DiagnosticConsumer {
147147
const clang::Diagnostic &Info) override;
148148

149149
/// When passed a main diagnostic, returns fixes to add to it.
150+
using MainDiagFixer =
151+
std::function<std::vector<Fix>(const Diag &, const clang::Diagnostic &)>;
150152
/// When passed a note diagnostic, returns fixes to replace it with.
151-
using DiagFixer =
153+
using NoteDiagFixer =
152154
std::function<std::vector<Fix>(const Diag &, const clang::Diagnostic &)>;
153155
using LevelAdjuster = std::function<DiagnosticsEngine::Level(
154156
DiagnosticsEngine::Level, const clang::Diagnostic &)>;
155157
using DiagCallback =
156158
std::function<void(const clang::Diagnostic &, clangd::Diag &)>;
157159
/// If set, possibly adds fixes for diagnostics using \p Fixer.
158-
void contributeFixes(DiagFixer Fixer) { this->Fixer = Fixer; }
160+
void contributeMainDiagFixes(MainDiagFixer Fixer) { this->MainFixer = Fixer; }
161+
void contributeNoteDiagFixes(NoteDiagFixer Fixer) { this->NoteFixer = Fixer; }
159162
/// If set, this allows the client of this class to adjust the level of
160163
/// diagnostics, such as promoting warnings to errors, or ignoring
161164
/// diagnostics.
@@ -167,7 +170,8 @@ class StoreDiags : public DiagnosticConsumer {
167170
private:
168171
void flushLastDiag();
169172

170-
DiagFixer Fixer = nullptr;
173+
MainDiagFixer MainFixer = nullptr;
174+
NoteDiagFixer NoteFixer = nullptr;
171175
LevelAdjuster Adjuster = nullptr;
172176
DiagCallback DiagCB = nullptr;
173177
std::vector<Diag> Output;

clang-tools-extra/clangd/ParsedAST.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -656,7 +656,7 @@ ParsedAST::build(llvm::StringRef Filename, const ParseInputs &Inputs,
656656
: Symbol::Include;
657657
FixIncludes.emplace(Filename, Inserter, *Inputs.Index,
658658
/*IndexRequestLimit=*/5, Directive);
659-
ASTDiags.contributeFixes(
659+
ASTDiags.contributeMainDiagFixes(
660660
[&FixIncludes, &CTContext](const Diag &Diag,
661661
const clang::Diagnostic &Info) {
662662
auto Fixes = std::vector<Fix>();
@@ -666,6 +666,11 @@ ParsedAST::build(llvm::StringRef Filename, const ParseInputs &Inputs,
666666
Fixes.insert(Fixes.end(), IncludeFixes.begin(), IncludeFixes.end());
667667
return Fixes;
668668
});
669+
ASTDiags.contributeNoteDiagFixes(
670+
[&FixIncludes](const Diag &Diag,
671+
const clang::Diagnostic &Info) {
672+
return FixIncludes->fix(Diag.Severity, Info);
673+
});
669674
Clang->setExternalSemaSource(FixIncludes->unresolvedNameRecorder());
670675
}
671676
}

clang-tools-extra/clangd/test/fixits-codeaction-documentchanges.test

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,53 @@
5454
# CHECK-NEXT: {
5555
# CHECK-NEXT: "edits": [
5656
# CHECK-NEXT: {
57+
# CHECK-NEXT: "newText": "// NOLINTNEXTLINE(clang-diagnostic-parentheses)\n",
58+
# CHECK-NEXT: "range": {
59+
# CHECK-NEXT: "end": {
60+
# CHECK-NEXT: "character": 0,
61+
# CHECK-NEXT: "line": 0
62+
# CHECK-NEXT: },
63+
# CHECK-NEXT: "start": {
64+
# CHECK-NEXT: "character": 0,
65+
# CHECK-NEXT: "line": 0
66+
# CHECK-NEXT: }
67+
# CHECK-NEXT: }
68+
# CHECK-NEXT: }
69+
# CHECK-NEXT: ],
70+
# CHECK-NEXT: "textDocument": {
71+
# CHECK-NEXT: "uri": "file:///clangd-test/foo.c",
72+
# CHECK-NEXT: "version": 1
73+
# CHECK-NEXT: }
74+
# CHECK-NEXT: }
75+
# CHECK-NEXT: ]
76+
# CHECK-NEXT: },
77+
# CHECK-NEXT: "kind": "quickfix",
78+
# CHECK-NEXT: "title": "ignore [clang-diagnostic-parentheses] for this line"
79+
# CHECK-NEXT: },
80+
# CHECK-NEXT: {
81+
# CHECK-NEXT: "diagnostics": [
82+
# CHECK-NEXT: {
83+
# CHECK-NEXT: "code": "-Wparentheses",
84+
# CHECK-NEXT: "message": "Using the result of an assignment as a condition without parentheses (fixes available)",
85+
# CHECK-NEXT: "range": {
86+
# CHECK-NEXT: "end": {
87+
# CHECK-NEXT: "character": 37,
88+
# CHECK-NEXT: "line": 0
89+
# CHECK-NEXT: },
90+
# CHECK-NEXT: "start": {
91+
# CHECK-NEXT: "character": 32,
92+
# CHECK-NEXT: "line": 0
93+
# CHECK-NEXT: }
94+
# CHECK-NEXT: },
95+
# CHECK-NEXT: "severity": 2,
96+
# CHECK-NEXT: "source": "clang"
97+
# CHECK-NEXT: }
98+
# CHECK-NEXT: ],
99+
# CHECK-NEXT: "edit": {
100+
# CHECK-NEXT: "documentChanges": [
101+
# CHECK-NEXT: {
102+
# CHECK-NEXT: "edits": [
103+
# CHECK-NEXT: {
57104
# CHECK-NEXT: "newText": "(",
58105
# CHECK-NEXT: "range": {
59106
# CHECK-NEXT: "end": {

clang-tools-extra/clangd/test/fixits-codeaction.test

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,47 @@
5151
# CHECK-NEXT: ],
5252
# CHECK-NEXT: "edit": {
5353
# CHECK-NEXT: "changes": {
54+
# CHECK-NEXT: "file:///clangd-test/foo.c": [
55+
# CHECK-NEXT: {
56+
# CHECK-NEXT: "newText": "// NOLINTNEXTLINE(clang-diagnostic-parentheses)\n",
57+
# CHECK-NEXT: "range": {
58+
# CHECK-NEXT: "end": {
59+
# CHECK-NEXT: "character": 0,
60+
# CHECK-NEXT: "line": 0
61+
# CHECK-NEXT: },
62+
# CHECK-NEXT: "start": {
63+
# CHECK-NEXT: "character": 0,
64+
# CHECK-NEXT: "line": 0
65+
# CHECK-NEXT: }
66+
# CHECK-NEXT: }
67+
# CHECK-NEXT: }
68+
# CHECK-NEXT: ]
69+
# CHECK-NEXT: }
70+
# CHECK-NEXT: },
71+
# CHECK-NEXT: "kind": "quickfix",
72+
# CHECK-NEXT: "title": "ignore [clang-diagnostic-parentheses] for this line"
73+
# CHECK-NEXT: },
74+
# CHECK-NEXT: {
75+
# CHECK-NEXT: "diagnostics": [
76+
# CHECK-NEXT: {
77+
# CHECK-NEXT: "code": "-Wparentheses",
78+
# CHECK-NEXT: "message": "Using the result of an assignment as a condition without parentheses (fixes available)",
79+
# CHECK-NEXT: "range": {
80+
# CHECK-NEXT: "end": {
81+
# CHECK-NEXT: "character": 37,
82+
# CHECK-NEXT: "line": 0
83+
# CHECK-NEXT: },
84+
# CHECK-NEXT: "start": {
85+
# CHECK-NEXT: "character": 32,
86+
# CHECK-NEXT: "line": 0
87+
# CHECK-NEXT: }
88+
# CHECK-NEXT: },
89+
# CHECK-NEXT: "severity": 2,
90+
# CHECK-NEXT: "source": "clang"
91+
# CHECK-NEXT: }
92+
# CHECK-NEXT: ],
93+
# CHECK-NEXT: "edit": {
94+
# CHECK-NEXT: "changes": {
5495
# CHECK-NEXT: "file://{{.*}}/foo.c": [
5596
# CHECK-NEXT: {
5697
# CHECK-NEXT: "newText": "(",

clang-tools-extra/clangd/test/fixits-command-documentchanges.test

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,37 @@
3737
# CHECK-NEXT: {
3838
# CHECK-NEXT: "edits": [
3939
# CHECK-NEXT: {
40+
# CHECK-NEXT: "newText": "// NOLINTNEXTLINE(clang-diagnostic-parentheses)\n",
41+
# CHECK-NEXT: "range": {
42+
# CHECK-NEXT: "end": {
43+
# CHECK-NEXT: "character": 0,
44+
# CHECK-NEXT: "line": 0
45+
# CHECK-NEXT: },
46+
# CHECK-NEXT: "start": {
47+
# CHECK-NEXT: "character": 0,
48+
# CHECK-NEXT: "line": 0
49+
# CHECK-NEXT: }
50+
# CHECK-NEXT: }
51+
# CHECK-NEXT: }
52+
# CHECK-NEXT: ],
53+
# CHECK-NEXT: "textDocument": {
54+
# CHECK-NEXT: "uri": "file:///clangd-test/foo.c",
55+
# CHECK-NEXT: "version": 0
56+
# CHECK-NEXT: }
57+
# CHECK-NEXT: }
58+
# CHECK-NEXT: ]
59+
# CHECK-NEXT: }
60+
# CHECK-NEXT: ],
61+
# CHECK-NEXT: "command": "clangd.applyFix",
62+
# CHECK-NEXT: "title": "Apply fix: ignore [clang-diagnostic-parentheses] for this line"
63+
# CHECK-NEXT: },
64+
# CHECK-NEXT: {
65+
# CHECK-NEXT: "arguments": [
66+
# CHECK-NEXT: {
67+
# CHECK-NEXT: "documentChanges": [
68+
# CHECK-NEXT: {
69+
# CHECK-NEXT: "edits": [
70+
# CHECK-NEXT: {
4071
# CHECK-NEXT: "newText": "(",
4172
# CHECK-NEXT: "range": {
4273
# CHECK-NEXT: "end": {
@@ -119,6 +150,37 @@
119150
# CHECK-NEXT: {
120151
# CHECK-NEXT: "edits": [
121152
# CHECK-NEXT: {
153+
# CHECK-NEXT: "newText": "// NOLINTNEXTLINE(clang-diagnostic-parentheses)\n",
154+
# CHECK-NEXT: "range": {
155+
# CHECK-NEXT: "end": {
156+
# CHECK-NEXT: "character": 0,
157+
# CHECK-NEXT: "line": 0
158+
# CHECK-NEXT: },
159+
# CHECK-NEXT: "start": {
160+
# CHECK-NEXT: "character": 0,
161+
# CHECK-NEXT: "line": 0
162+
# CHECK-NEXT: }
163+
# CHECK-NEXT: }
164+
# CHECK-NEXT: }
165+
# CHECK-NEXT: ],
166+
# CHECK-NEXT: "textDocument": {
167+
# CHECK-NEXT: "uri": "file:///clangd-test/foo.c",
168+
# CHECK-NEXT: "version": 0
169+
# CHECK-NEXT: }
170+
# CHECK-NEXT: }
171+
# CHECK-NEXT: ]
172+
# CHECK-NEXT: }
173+
# CHECK-NEXT: ],
174+
# CHECK-NEXT: "command": "clangd.applyFix",
175+
# CHECK-NEXT: "title": "Apply fix: ignore [clang-diagnostic-parentheses] for this line"
176+
# CHECK-NEXT: },
177+
# CHECK-NEXT: {
178+
# CHECK-NEXT: "arguments": [
179+
# CHECK-NEXT: {
180+
# CHECK-NEXT: "documentChanges": [
181+
# CHECK-NEXT: {
182+
# CHECK-NEXT: "edits": [
183+
# CHECK-NEXT: {
122184
# CHECK-NEXT: "newText": "(",
123185
# CHECK-NEXT: "range": {
124186
# CHECK-NEXT: "end": {

clang-tools-extra/clangd/test/fixits-command.test

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,31 @@
3434
# CHECK-NEXT: "arguments": [
3535
# CHECK-NEXT: {
3636
# CHECK-NEXT: "changes": {
37+
# CHECK-NEXT: "file:///clangd-test/foo.c": [
38+
# CHECK-NEXT: {
39+
# CHECK-NEXT: "newText": "// NOLINTNEXTLINE(clang-diagnostic-parentheses)\n",
40+
# CHECK-NEXT: "range": {
41+
# CHECK-NEXT: "end": {
42+
# CHECK-NEXT: "character": 0,
43+
# CHECK-NEXT: "line": 0
44+
# CHECK-NEXT: },
45+
# CHECK-NEXT: "start": {
46+
# CHECK-NEXT: "character": 0,
47+
# CHECK-NEXT: "line": 0
48+
# CHECK-NEXT: }
49+
# CHECK-NEXT: }
50+
# CHECK-NEXT: }
51+
# CHECK-NEXT: ]
52+
# CHECK-NEXT: }
53+
# CHECK-NEXT: }
54+
# CHECK-NEXT: ],
55+
# CHECK-NEXT: "command": "clangd.applyFix",
56+
# CHECK-NEXT: "title": "Apply fix: ignore [clang-diagnostic-parentheses] for this line"
57+
# CHECK-NEXT: },
58+
# CHECK-NEXT: {
59+
# CHECK-NEXT: "arguments": [
60+
# CHECK-NEXT: {
61+
# CHECK-NEXT: "changes": {
3762
# CHECK-NEXT: "file://{{.*}}/foo.c": [
3863
# CHECK-NEXT: {
3964
# CHECK-NEXT: "newText": "(",
@@ -104,6 +129,31 @@
104129
# CHECK-NEXT: "arguments": [
105130
# CHECK-NEXT: {
106131
# CHECK-NEXT: "changes": {
132+
# CHECK-NEXT: "file:///clangd-test/foo.c": [
133+
# CHECK-NEXT: {
134+
# CHECK-NEXT: "newText": "// NOLINTNEXTLINE(clang-diagnostic-parentheses)\n",
135+
# CHECK-NEXT: "range": {
136+
# CHECK-NEXT: "end": {
137+
# CHECK-NEXT: "character": 0,
138+
# CHECK-NEXT: "line": 0
139+
# CHECK-NEXT: },
140+
# CHECK-NEXT: "start": {
141+
# CHECK-NEXT: "character": 0,
142+
# CHECK-NEXT: "line": 0
143+
# CHECK-NEXT: }
144+
# CHECK-NEXT: }
145+
# CHECK-NEXT: }
146+
# CHECK-NEXT: ]
147+
# CHECK-NEXT: }
148+
# CHECK-NEXT: }
149+
# CHECK-NEXT: ],
150+
# CHECK-NEXT: "command": "clangd.applyFix",
151+
# CHECK-NEXT: "title": "Apply fix: ignore [clang-diagnostic-parentheses] for this line"
152+
# CHECK-NEXT: },
153+
# CHECK-NEXT: {
154+
# CHECK-NEXT: "arguments": [
155+
# CHECK-NEXT: {
156+
# CHECK-NEXT: "changes": {
107157
# CHECK-NEXT: "file://{{.*}}/foo.c": [
108158
# CHECK-NEXT: {
109159
# CHECK-NEXT: "newText": "(",

0 commit comments

Comments
 (0)