clang
20.0.0git
include
clang
Rewrite
Frontend
FixItRewriter.h
Go to the documentation of this file.
1
//===- FixItRewriter.h - Fix-It Rewriter Diagnostic Client ------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
//
9
// This is a diagnostic client adaptor that performs rewrites as
10
// suggested by code modification hints attached to diagnostics. It
11
// then forwards any diagnostics to the adapted diagnostic client.
12
//
13
//===----------------------------------------------------------------------===//
14
15
#ifndef LLVM_CLANG_REWRITE_FRONTEND_FIXITREWRITER_H
16
#define LLVM_CLANG_REWRITE_FRONTEND_FIXITREWRITER_H
17
18
#include "
clang/Basic/Diagnostic.h
"
19
#include "
clang/Basic/LLVM.h
"
20
#include "
clang/Basic/SourceLocation.h
"
21
#include "
clang/Edit/EditedSource.h
"
22
#include "
clang/Rewrite/Core/Rewriter.h
"
23
#include <memory>
24
#include <string>
25
#include <utility>
26
#include <vector>
27
28
namespace
clang
{
29
30
class
LangOptions;
31
class
SourceManager;
32
33
class
FixItOptions
{
34
public
:
35
FixItOptions
() =
default
;
36
virtual
~FixItOptions
();
37
38
/// This file is about to be rewritten. Return the name of the file
39
/// that is okay to write to.
40
///
41
/// \param fd out parameter for file descriptor. After the call it may be set
42
/// to an open file descriptor for the returned filename, or it will be -1
43
/// otherwise.
44
virtual
std::string
RewriteFilename
(
const
std::string &
Filename
,
int
&fd) = 0;
45
46
/// True if files should be updated in place. RewriteFilename is only called
47
/// if this is false.
48
bool
InPlace
=
false
;
49
50
/// Whether to abort fixing a file when not all errors could be fixed.
51
bool
FixWhatYouCan
=
false
;
52
53
/// Whether to only fix warnings and not errors.
54
bool
FixOnlyWarnings
=
false
;
55
56
/// If true, only pass the diagnostic to the actual diagnostic consumer
57
/// if it is an error or a fixit was applied as part of the diagnostic.
58
/// It basically silences warnings without accompanying fixits.
59
bool
Silent
=
false
;
60
};
61
62
class
FixItRewriter
:
public
DiagnosticConsumer
{
63
/// The diagnostics machinery.
64
DiagnosticsEngine
&Diags;
65
66
edit::EditedSource
Editor;
67
68
/// The rewriter used to perform the various code
69
/// modifications.
70
Rewriter
Rewrite;
71
72
/// The diagnostic client that performs the actual formatting
73
/// of error messages.
74
DiagnosticConsumer
*Client;
75
std::unique_ptr<DiagnosticConsumer> Owner;
76
77
/// Turn an input path into an output path. NULL implies overwriting
78
/// the original.
79
FixItOptions
*FixItOpts;
80
81
/// The number of rewriter failures.
82
unsigned
NumFailures = 0;
83
84
/// Whether the previous diagnostic was not passed to the consumer.
85
bool
PrevDiagSilenced =
false
;
86
87
public
:
88
/// Initialize a new fix-it rewriter.
89