Skip to content
This repository was archived by the owner on Nov 1, 2021. It is now read-only.

Commit 83b923e

Browse files
committed
Revert "Added applyAtomicChanges function."
This broke GreenDragon: http://lab.llvm.org:8080/green/job/clang-stage2-cmake-modulesRDA_build/4776/ Reverting this commit and all follow-up commits. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@298967 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent 254d7ae commit 83b923e

File tree

3 files changed

+0
-643
lines changed

3 files changed

+0
-643
lines changed

include/clang/Tooling/Refactoring/AtomicChange.h

Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
#define LLVM_CLANG_TOOLING_REFACTOR_ATOMICCHANGE_H
1717

1818
#include "clang/Basic/SourceManager.h"
19-
#include "clang/Format/Format.h"
2019
#include "clang/Tooling/Core/Replacement.h"
2120
#include "llvm/ADT/StringRef.h"
2221
#include "llvm/Support/Error.h"
@@ -124,39 +123,6 @@ class AtomicChange {
124123
tooling::Replacements Replaces;
125124
};
126125

127-
// Defines specs for applying changes.
128-
struct ApplyChangesSpec {
129-
// If true, cleans up redundant/erroneous code around changed code with
130-
// clang-format's cleanup functionality, e.g. redundant commas around deleted
131-
// parameter or empty namespaces introduced by deletions.
132-
bool Cleanup = true;
133-
134-
format::FormatStyle Style = format::getNoStyle();
135-
136-
// Options for selectively formatting changes with clang-format:
137-
// kAll: Format all changed lines.
138-
// kNone: Don't format anything.
139-
// kViolations: Format lines exceeding the `ColumnLimit` in `Style`.
140-
enum FormatOption { kAll, kNone, kViolations };
141-
142-
FormatOption Format = kNone;
143-
};
144-
145-
/// \brief Applies all AtomicChanges in \p Changes to the \p Code.
146-
///
147-
/// This completely ignores the file path in each change and replaces them with
148-
/// \p FilePath, i.e. callers are responsible for ensuring all changes are for
149-
/// the same file.
150-
///
151-
/// \returns The changed code if all changes are applied successfully;
152-
/// otherwise, an llvm::Error carrying llvm::StringError is returned (the Error
153-
/// message can be converted to string with `llvm::toString()` and the
154-
/// error_code should be ignored).
155-
llvm::Expected<std::string>
156-
applyAtomicChanges(llvm::StringRef FilePath, llvm::StringRef Code,
157-
llvm::ArrayRef<AtomicChange> Changes,
158-
const ApplyChangesSpec &Spec);
159-
160126
} // end namespace tooling
161127
} // end namespace clang
162128

lib/Tooling/Refactoring/AtomicChange.cpp

Lines changed: 0 additions & 179 deletions
Original file line numberDiff line numberDiff line change
@@ -84,116 +84,6 @@ template <> struct MappingTraits<clang::tooling::AtomicChange> {
8484

8585
namespace clang {
8686
namespace tooling {
87-
namespace {
88-
89-
// Returns true if there is any line that violates \p ColumnLimit in range
90-
// [Start, End].
91-
bool violatesColumnLimit(llvm::StringRef Code, unsigned ColumnLimit,
92-
unsigned Start, unsigned End) {
93-
auto StartPos = Code.rfind('\n', Start);
94-
StartPos = (StartPos == llvm::StringRef::npos) ? 0 : StartPos + 1;
95-
96-
auto EndPos = Code.find("\n", End);
97-
if (EndPos == llvm::StringRef::npos)
98-
EndPos = Code.size();
99-
100-
llvm::SmallVector<llvm::StringRef, 8> Lines;
101-
Code.substr(StartPos, EndPos - StartPos).split(Lines, '\n');
102-
for (llvm::StringRef Line : Lines)
103-
if (Line.size() > ColumnLimit)
104-
return true;
105-
return false;
106-
}
107-
108-
std::vector<Range>
109-
getRangesForFormating(llvm::StringRef Code, unsigned ColumnLimit,
110-
ApplyChangesSpec::FormatOption Format,
111-
const clang::tooling::Replacements &Replaces) {
112-
// kNone suppresses formatting entirely.
113-
if (Format == ApplyChangesSpec::kNone)
114-
return {};
115-
std::vector<clang::tooling::Range> Ranges;
116-
// This works assuming that replacements are ordered by offset.
117-
// FIXME: use `getAffectedRanges()` to calculate when it does not include '\n'
118-
// at the end of an insertion in affected ranges.
119-
int Offset = 0;
120-
for (const clang::tooling::Replacement &R : Replaces) {
121-
int Start = R.getOffset() + Offset;
122-
int End = Start + R.getReplacementText().size();
123-
if (!R.getReplacementText().empty() &&
124-
R.getReplacementText().back() == '\n' && R.getLength() == 0 &&
125-
R.getOffset() > 0 && R.getOffset() <= Code.size() &&
126-
Code[R.getOffset() - 1] == '\n')
127-
// If we are inserting at the start of a line and the replacement ends in
128-
// a newline, we don't need to format the subsequent line.
129-
--End;
130-
Offset += R.getReplacementText().size() - R.getLength();
131-
132-
if (Format == ApplyChangesSpec::kAll ||
133-
violatesColumnLimit(Code, ColumnLimit, Start, End))
134-
Ranges.emplace_back(Start, End - Start);
135-
}
136-
return Ranges;
137-
}
138-
139-
inline llvm::Error make_string_error(const llvm::Twine &Message) {
140-
return llvm::make_error<llvm::StringError>(Message,
141-
llvm::inconvertibleErrorCode());
142-
}
143-
144-
// Creates replacements for inserting/deleting #include headers.
145-
llvm::Expected<Replacements>
146-
createReplacementsForHeaders(llvm::StringRef FilePath, llvm::StringRef Code,
147-
llvm::ArrayRef<AtomicChange> Changes,
148-
const format::FormatStyle &Style) {
149-
// Create header insertion/deletion replacements to be cleaned up
150-
// (i.e. converted to real insertion/deletion replacements).
151-
Replacements HeaderReplacements;
152-
for (const auto &Change : Changes) {
153-
for (llvm::StringRef Header : Change.getInsertedHeaders()) {
154-
std::string EscapedHeader =
155-
Header.startswith("<") || Header.startswith("\"")
156-
? Header.str()
157-
: ("\"" + Header + "\"").str();
158-
std::string ReplacementText = "#include " + EscapedHeader;
159-
// Offset UINT_MAX and length 0 indicate that the replacement is a header
160-
// insertion.
161-
llvm::Error Err = HeaderReplacements.add(
162-
tooling::Replacement(FilePath, UINT_MAX, 0, ReplacementText));
163-
if (Err)
164-
return std::move(Err);
165-
}
166-
for (const std::string &Header : Change.getRemovedHeaders()) {
167-
// Offset UINT_MAX and length 1 indicate that the replacement is a header
168-
// deletion.
169-
llvm::Error Err =
170-
HeaderReplacements.add(Replacement(FilePath, UINT_MAX, 1, Header));
171-
if (Err)
172-
return std::move(Err);
173-
}
174-
}
175-
176-
// cleanupAroundReplacements() converts header insertions/deletions into
177-
// actual replacements that add/remove headers at the right location.
178-
return clang::format::cleanupAroundReplacements(Code, HeaderReplacements,
179-
Style);
180-
}
181-
182-
// Combine replacements in all Changes as a `Replacements`. This ignores the
183-
// file path in all replacements and replaces them with \p FilePath.
184-
llvm::Expected<Replacements>
185-
combineReplacementsInChanges(llvm::StringRef FilePath,
186-
llvm::ArrayRef<AtomicChange> Changes) {
187-
Replacements Replaces;
188-
for (const auto &Change : Changes)
189-
for (const auto &R : Change.getReplacements())
190-
if (auto Err = Replaces.add(Replacement(
191-
FilePath, R.getOffset(), R.getLength(), R.getReplacementText())))
192-
return std::move(Err);
193-
return Replaces;
194-
}
195-
196-
} // end namespace
19787

19888
AtomicChange::AtomicChange(const SourceManager &SM,
19989
SourceLocation KeyPosition) {
@@ -278,74 +168,5 @@ void AtomicChange::removeHeader(llvm::StringRef Header) {
278168
RemovedHeaders.push_back(Header);
279169
}
280170

281-
llvm::Expected<std::string>
282-
applyAtomicChanges(llvm::StringRef FilePath, llvm::StringRef Code,
283-
llvm::ArrayRef<AtomicChange> Changes,
284-
const ApplyChangesSpec &Spec) {
285-
llvm::Expected<Replacements> HeaderReplacements =
286-
createReplacementsForHeaders(FilePath, Code, Changes, Spec.Style);
287-
if (!HeaderReplacements)
288-
return make_string_error(
289-
"Failed to create replacements for header changes: " +
290-
llvm::toString(HeaderReplacements.takeError()));
291-
292-
llvm::Expected<Replacements> Replaces =
293-
combineReplacementsInChanges(FilePath, Changes);
294-
if (!Replaces)
295-
return make_string_error("Failed to combine replacements in all changes: " +
296-
llvm::toString(Replaces.takeError()));
297-
298-
Replacements AllReplaces = std::move(*Replaces);
299-
for (const auto &R : *HeaderReplacements) {
300-
llvm::Error Err = AllReplaces.add(R);
301-
if (Err)
302-
return make_string_error(
303-
"Failed to combine existing replacements with header replacements: " +
304-
llvm::toString(std::move(Err)));
305-
}
306-
307-
if (Spec.Cleanup) {
308-
llvm::Expected<Replacements> CleanReplaces =
309-
format::cleanupAroundReplacements(Code, AllReplaces, Spec.Style);
310-
if (!CleanReplaces)
311-
return make_string_error("Failed to cleanup around replacements: " +
312-
llvm::toString(CleanReplaces.takeError()));
313-
AllReplaces = std::move(*CleanReplaces);
314-
}
315-
316-
// Apply all replacements.
317-
llvm::Expected<std::string> ChangedCode =
318-
applyAllReplacements(Code, AllReplaces);
319-
if (!ChangedCode)
320-
return make_string_error("Failed to apply all replacements: " +
321-
llvm::toString(ChangedCode.takeError()));
322-
323-
// Sort inserted headers. This is done even if other formatting is turned off
324-
// as incorrectly sorted headers are always just wrong, it's not a matter of
325-
// taste.
326-
Replacements HeaderSortingReplacements = format::sortIncludes(
327-
Spec.Style, *ChangedCode, AllReplaces.getAffectedRanges(), FilePath);
328-
ChangedCode = applyAllReplacements(*ChangedCode, HeaderSortingReplacements);
329-
if (!ChangedCode)
330-
return make_string_error(
331-
"Failed to apply replacements for sorting includes: " +
332-
llvm::toString(ChangedCode.takeError()));
333-
334-
AllReplaces = AllReplaces.merge(HeaderSortingReplacements);
335-
336-
std::vector<Range> FormatRanges = getRangesForFormating(
337-
*ChangedCode, Spec.Style.ColumnLimit, Spec.Format, AllReplaces);
338-
if (!FormatRanges.empty()) {
339-
Replacements FormatReplacements =
340-
format::reformat(Spec.Style, *ChangedCode, FormatRanges, FilePath);
341-
ChangedCode = applyAllReplacements(*ChangedCode, FormatReplacements);
342-
if (!ChangedCode)
343-
return make_string_error(
344-
"Failed to apply replacements for formatting changed code: " +
345-
llvm::toString(ChangedCode.takeError()));
346-
}
347-
return ChangedCode;
348-
}
349-
350171
} // end namespace tooling
351172
} // end namespace clang

0 commit comments

Comments
 (0)