[clang-tools-extra] r189008 - Introducing new tool clang-replace
David Blaikie
dblaikie at gmail.com
Fri Aug 23 14:47:34 PDT 2013
On Fri, Aug 23, 2013 at 2:35 PM, Sean Silva <silvas at purdue.edu> wrote:
>
>
>
> On Thu, Aug 22, 2013 at 9:07 AM, Edwin Vane <edwin.vane at intel.com> wrote:
>>
>> Author: revane
>> Date: Thu Aug 22 08:07:14 2013
>> New Revision: 189008
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=189008&view=rev
>> Log:
>> Introducing new tool clang-replace
>>
>> Introducing new tool 'clang-replace' that finds files containing
>> serialized Replacements and applies those changes after deduplication
>> and detecting conflicts.
>>
>> Currently the tool does not apply changes. It stops just after the
>> deduplication and conflict report phase. Forthcoming patches will
>> complete functionality.
>
>
> I hate to bring this up post-commit (it just came to me now), but I really
> feel `clang-replace` is not the right name for this tool. `clang-replace` is
> not self-documenting and sounds more like a tool for renaming than a tool
> that does what it does now (or will do soon), i.e. deduplicate/apply
> replacements generated by refactoring tools. I feel like this tool should be
> called `clang-apply-replacements` (or something like that).
If we're going to paint this bikeshed I'll mention my colour issues:
This won't always apply 'replacements'. It might also/instead do, say,
insertions (add 'override' everywhere, for example).
clang-apply-changes ? But I like the short tool names, not sure if
clang-apply is too vague. (clang-change? clang-edit? clang-patch?)
>
> -- Sean Silva
>
>
>>
>>
>> Both build systems updated for new tool.
>>
>> Includes a conflict test case.
>>
>> clang-replace added to Doxygen build.
>>
>> Differential Revision: http://llvm-reviews.chandlerc.com/D1424
>>
>>
>> Added:
>> clang-tools-extra/trunk/clang-replace/
>> clang-tools-extra/trunk/clang-replace/ApplyReplacements.cpp
>> clang-tools-extra/trunk/clang-replace/ApplyReplacements.h
>> clang-tools-extra/trunk/clang-replace/CMakeLists.txt
>> clang-tools-extra/trunk/clang-replace/Makefile
>> clang-tools-extra/trunk/clang-replace/tool/
>> clang-tools-extra/trunk/clang-replace/tool/CMakeLists.txt
>> clang-tools-extra/trunk/clang-replace/tool/ClangReplaceMain.cpp
>> clang-tools-extra/trunk/clang-replace/tool/Makefile
>> clang-tools-extra/trunk/test/clang-replace/
>> clang-tools-extra/trunk/test/clang-replace/conflict/
>> clang-tools-extra/trunk/test/clang-replace/conflict.cpp
>> clang-tools-extra/trunk/test/clang-replace/conflict/common.h
>> clang-tools-extra/trunk/test/clang-replace/conflict/expected.txt
>> clang-tools-extra/trunk/test/clang-replace/conflict/file1.yaml
>> clang-tools-extra/trunk/test/clang-replace/conflict/file2.yaml
>> clang-tools-extra/trunk/test/clang-replace/conflict/file3.yaml
>> Modified:
>> clang-tools-extra/trunk/CMakeLists.txt
>> clang-tools-extra/trunk/Makefile
>> clang-tools-extra/trunk/docs/Doxyfile
>> clang-tools-extra/trunk/test/CMakeLists.txt
>>
>> Modified: clang-tools-extra/trunk/CMakeLists.txt
>> URL:
>> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/CMakeLists.txt?rev=189008&r1=189007&r2=189008&view=diff
>>
>> ==============================================================================
>> --- clang-tools-extra/trunk/CMakeLists.txt (original)
>> +++ clang-tools-extra/trunk/CMakeLists.txt Thu Aug 22 08:07:14 2013
>> @@ -1,6 +1,7 @@
>> add_subdirectory(remove-cstr-calls)
>> add_subdirectory(tool-template)
>> add_subdirectory(cpp11-migrate)
>> +add_subdirectory(clang-replace)
>> add_subdirectory(modularize)
>> add_subdirectory(clang-tidy)
>>
>>
>> Modified: clang-tools-extra/trunk/Makefile
>> URL:
>> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/Makefile?rev=189008&r1=189007&r2=189008&view=diff
>>
>> ==============================================================================
>> --- clang-tools-extra/trunk/Makefile (original)
>> +++ clang-tools-extra/trunk/Makefile Thu Aug 22 08:07:14 2013
>> @@ -12,7 +12,7 @@ CLANG_LEVEL := ../..
>> include $(CLANG_LEVEL)/../../Makefile.config
>>
>> PARALLEL_DIRS := remove-cstr-calls tool-template modularize
>> -DIRS := cpp11-migrate clang-tidy unittests
>> +DIRS := cpp11-migrate clang-tidy clang-replace unittests
>>
>> include $(CLANG_LEVEL)/Makefile
>>
>>
>> Added: clang-tools-extra/trunk/clang-replace/ApplyReplacements.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-replace/ApplyReplacements.cpp?rev=189008&view=auto
>>
>> ==============================================================================
>> --- clang-tools-extra/trunk/clang-replace/ApplyReplacements.cpp (added)
>> +++ clang-tools-extra/trunk/clang-replace/ApplyReplacements.cpp Thu Aug 22
>> 08:07:14 2013
>> @@ -0,0 +1,193 @@
>> +//===-- Core/ApplyChangeDescriptions.cpp
>> ----------------------------------===//
>> +//
>> +// The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open Source
>> +// License. See LICENSE.TXT for details.
>> +//
>>
>> +//===----------------------------------------------------------------------===//
>> +///
>> +/// \file
>> +/// \brief This file provides the implementation for finding and applying
>> change
>> +/// description files.
>> +///
>>
>> +//===----------------------------------------------------------------------===//
>> +#include "ApplyReplacements.h"
>> +#include "clang/Basic/LangOptions.h"
>> +#include "clang/Basic/SourceManager.h"
>> +#include "llvm/ADT/ArrayRef.h"
>> +#include "llvm/Support/FileSystem.h"
>> +#include "llvm/Support/MemoryBuffer.h"
>> +#include "llvm/Support/Path.h"
>> +#include "llvm/Support/raw_ostream.h"
>> +
>> +using namespace llvm;
>> +using namespace clang;
>> +
>> +
>> +static void eatDiagnostics(const SMDiagnostic &, void *) {}
>> +
>> +namespace clang {
>> +namespace replace {
>> +
>> +llvm::error_code
>> +collectReplacementsFromDirectory(const llvm::StringRef Directory,
>> + TUReplacements &TUs,
>> + clang::DiagnosticsEngine &Diagnostics) {
>> + using namespace llvm::sys::fs;
>> + using namespace llvm::sys::path;
>> +
>> + error_code ErrorCode;
>> +
>> + for (recursive_directory_iterator I(Directory, ErrorCode), E;
>> + I != E && !ErrorCode; I.increment(ErrorCode)) {
>> + if (filename(I->path())[0] == '.') {
>> + // Indicate not to descend into directories beginning with '.'
>> + I.no_push();
>> + continue;
>> + }
>> +
>> + if (extension(I->path()) != ".yaml")
>> + continue;
>> +
>> + OwningPtr<MemoryBuffer> Out;
>> + error_code BufferError = MemoryBuffer::getFile(I->path(), Out);
>> + if (BufferError) {
>> + errs() << "Error reading " << I->path() << ": " <<
>> BufferError.message()
>> + << "\n";
>> + continue;
>> + }
>> +
>> + yaml::Input YIn(Out->getBuffer());
>> + YIn.setDiagHandler(&eatDiagnostics);
>> + tooling::TranslationUnitReplacements TU;
>> + YIn >> TU;
>> + if (YIn.error()) {
>> + // File doesn't appear to be a header change description. Ignore
>> it.
>> + continue;
>> + }
>> +
>> + // Only keep files that properly parse.
>> + TUs.push_back(TU);
>> + }
>> +
>> + return ErrorCode;
>> +}
>> +
>> +/// \brief Dumps information for a sequence of conflicting Replacements.
>> +///
>> +/// \param[in] File FileEntry for the file the conflicting Replacements
>> are
>> +/// for.
>> +/// \param[in] ConflictingReplacements List of conflicting Replacements.
>> +/// \param[in] SM SourceManager used for reporting.
>> +static void reportConflict(
>> + const FileEntry *File,
>> + const llvm::ArrayRef<clang::tooling::Replacement>
>> ConflictingReplacements,
>> + SourceManager &SM) {
>> + FileID FID = SM.translateFile(File);
>> + if (FID.isInvalid())
>> + FID = SM.createFileID(File, SourceLocation(), SrcMgr::C_User);
>> +
>> + // FIXME: Output something a little more user-friendly (e.g. unified
>> diff?)
>> + errs() << "The following changes conflict:\n";
>> + for (const tooling::Replacement *I = ConflictingReplacements.begin(),
>> + *E = ConflictingReplacements.end();
>> + I != E; ++I) {
>> + if (I->getLength() == 0) {
>> + errs() << " Insert at " << SM.getLineNumber(FID, I->getOffset())
>> << ":"
>> + << SM.getColumnNumber(FID, I->getOffset()) << " "
>> + << I->getReplacementText() << "\n";
>> + } else {
>> + if (I->getReplacementText().empty())
>> + errs() << " Remove ";
>> + else
>> + errs() << " Replace ";
>> +
>> + errs() << SM.getLineNumber(FID, I->getOffset()) << ":"
>> + << SM.getColumnNumber(FID, I->getOffset()) << "-"
>> + << SM.getLineNumber(FID, I->getOffset() + I->getLength() -
>> 1)
>> + << ":"
>> + << SM.getColumnNumber(FID, I->getOffset() + I->getLength() -
>> 1);
>> +
>> + if (I->getReplacementText().empty())
>> + errs() << "\n";
>> + else
>> + errs() << " with \"" << I->getReplacementText() << "\"\n";
>> + }
>> + }
>> +}
>> +
>> +/// \brief Deduplicates and tests for conflicts among the replacements
>> for each
>> +/// file in \c Replacements. Any conflicts found are reported.
>> +///
>> +/// \param[in,out] Replacements Container of all replacements grouped by
>> file
>> +/// to be deduplicated and checked for conflicts.
>> +/// \param[in] SM SourceManager required for conflict reporting
>> +///
>> +/// \returns \li true if conflicts were detected
>> +/// \li false if no conflicts were detected
>> +static bool deduplicateAndDetectConflicts(FileToReplacementsMap
>> &Replacements,
>> + SourceManager &SM) {
>> + bool conflictsFound = false;
>> +
>> + for (FileToReplacementsMap::iterator I = Replacements.begin(),
>> + E = Replacements.end();
>> + I != E; ++I) {
>> +
>> + const FileEntry *Entry = SM.getFileManager().getFile(I->getKey());
>> + if (!Entry) {
>> + errs() << "Described file '" << I->getKey()
>> + << "' doesn't exist. Ignoring...\n";
>> + continue;
>> + }
>> +
>> + std::vector<tooling::Range> Conflicts;
>> + tooling::deduplicate(I->getValue(), Conflicts);
>> +
>> + if (Conflicts.empty())
>> + continue;
>> +
>> + conflictsFound = true;
>> +
>> + errs() << "There are conflicting changes to " << I->getKey() <<
>> ":\n";
>> +
>> + for (std::vector<tooling::Range>::const_iterator
>> + ConflictI = Conflicts.begin(),
>> + ConflictE = Conflicts.end();
>> + ConflictI != ConflictE; ++ConflictI) {
>> + ArrayRef<tooling::Replacement> ConflictingReplacements(
>> + &I->getValue()[ConflictI->getOffset()],
>> ConflictI->getLength());
>> + reportConflict(Entry, ConflictingReplacements, SM);
>> + }
>> + }
>> +
>> + return conflictsFound;
>> +}
>> +
>> +bool mergeAndDeduplicate(const TUReplacements &TUs,
>> + FileToReplacementsMap &GroupedReplacements,
>> + clang::DiagnosticsEngine &Diagnostics) {
>> +
>> + // FIXME: Use Diagnostics for output
>> +
>> + // Group all replacements by target file.
>> + for (TUReplacements::const_iterator TUI = TUs.begin(), TUE = TUs.end();
>> + TUI != TUE; ++TUI)
>> + for (std::vector<tooling::Replacement>::const_iterator
>> + RI = TUI->Replacements.begin(),
>> + RE = TUI->Replacements.end();
>> + RI != RE; ++RI)
>> + GroupedReplacements[RI->getFilePath()].push_back(*RI);
>> +
>> + FileManager Files((FileSystemOptions()));
>> + SourceManager SM(Diagnostics, Files);
>> +
>> + // Ask clang to deduplicate and report conflicts.
>> + if (deduplicateAndDetectConflicts(GroupedReplacements, SM))
>> + return false;
>> +
>> + return true;
>> +}
>> +
>> +} // end namespace replace
>> +} // end namespace clang
>>
>> Added: clang-tools-extra/trunk/clang-replace/ApplyReplacements.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-replace/ApplyReplacements.h?rev=189008&view=auto
>>
>> ==============================================================================
>> --- clang-tools-extra/trunk/clang-replace/ApplyReplacements.h (added)
>> +++ clang-tools-extra/trunk/clang-replace/ApplyReplacements.h Thu Aug 22
>> 08:07:14 2013
>> @@ -0,0 +1,77 @@
>> +//===-- Core/ApplyChangeDescriptions.h --------------------------*- C++
>> -*-===//
>> +//
>> +// The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open Source
>> +// License. See LICENSE.TXT for details.
>> +//
>>
>> +//===----------------------------------------------------------------------===//
>> +///
>> +/// \file
>> +/// \brief This file provides the interface for finding and applying
>> change
>> +/// description files.
>> +///
>>
>> +//===----------------------------------------------------------------------===//
>> +
>> +#ifndef CPP11_MIGRATE_APPLYCHANGEDESCRIPTIONS_H
>> +#define CPP11_MIGRATE_APPLYCHANGEDESCRIPTIONS_H
>> +
>> +#include "clang/Tooling/ReplacementsYaml.h"
>> +#include "llvm/ADT/StringMap.h"
>> +#include "llvm/ADT/StringRef.h"
>> +#include "llvm/Support/system_error.h"
>> +#include <vector>
>> +
>> +namespace clang {
>> +
>> +class DiagnosticsEngine;
>> +
>> +namespace replace {
>> +
>> +/// \brief Collection of TranslationUnitReplacements.
>> +typedef std::vector<clang::tooling::TranslationUnitReplacements>
>> +TUReplacements;
>> +
>> +/// \brief Map mapping file name to Replacements targeting that file.
>> +typedef llvm::StringMap<std::vector<clang::tooling::Replacement> >
>> +FileToReplacementsMap;
>> +
>> +/// \brief Recursively descends through a directory structure rooted at
>> \p
>> +/// Directory and attempts to deserialize *.yaml files as
>> +/// TranslationUnitReplacements. All docs that successfully deserialize
>> are
>> +/// added to \p TUs.
>> +///
>> +/// Directories starting with '.' are ignored during traversal.
>> +///
>> +/// \param[in] Directory Directory to begin search for serialized
>> +/// TranslationUnitReplacements.
>> +/// \param[out] TUs Collection of all found and deserialized
>> +/// TranslationUnitReplacements.
>> +/// \param[in] Diagnostics DiagnosticsEngine used for error output.
>> +///
>> +/// \returns An error_code indicating success or failure in navigating
>> the
>> +/// directory structure.
>> +llvm::error_code
>> +collectReplacementsFromDirectory(const llvm::StringRef Directory,
>> + TUReplacements &TUs,
>> + clang::DiagnosticsEngine &Diagnostics);
>> +
>> +/// \brief Deduplicate, check for conflicts, and apply all Replacements
>> stored
>> +/// in \c TUs. If conflicts occur, no Replacements are applied.
>> +///
>> +/// \param[in] TUs Collection of TranslationUnitReplacements to merge,
>> +/// deduplicate, and test for conflicts.
>> +/// \param[out] GroupedReplacements Container grouping all Replacements
>> by the
>> +/// file they target.
>> +/// \param[in] Diagnostics DiagnosticsEngine used for error/warning
>> output.
>> +///
>> +/// \returns \li true If all changes were applied successfully.
>> +/// \li false If there were conflicts.
>> +bool mergeAndDeduplicate(const TUReplacements &TUs,
>> + FileToReplacementsMap &GroupedReplacements,
>> + clang::DiagnosticsEngine &Diagnostics);
>> +
>> +} // end namespace replace
>> +} // end namespace clang
>> +
>> +#endif // CPP11_MIGRATE_APPLYCHANGEDESCRIPTIONS_H
>>
>> Added: clang-tools-extra/trunk/clang-replace/CMakeLists.txt
>> URL:
>> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-replace/CMakeLists.txt?rev=189008&view=auto
>>
>> ==============================================================================
>> --- clang-tools-extra/trunk/clang-replace/CMakeLists.txt (added)
>> +++ clang-tools-extra/trunk/clang-replace/CMakeLists.txt Thu Aug 22
>> 08:07:14 2013
>> @@ -0,0 +1,19 @@
>> +set(LLVM_LINK_COMPONENTS
>> + ${LLVM_TARGETS_TO_BUILD}
>> + asmparser
>> + bitreader
>> + support
>> + mc
>> + )
>> +
>> +add_clang_library(clangReplace
>> + ApplyReplacements.cpp
>> + )
>> +target_link_libraries(clangReplace
>> + clangTooling
>> + clangBasic
>> + clangRewriteFrontend
>> + )
>> +
>> +include_directories(${CMAKE_CURRENT_SOURCE_DIR})
>> +add_subdirectory(tool)
>>
>> Added: clang-tools-extra/trunk/clang-replace/Makefile
>> URL:
>> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-replace/Makefile?rev=189008&view=auto
>>
>> ==============================================================================
>> --- clang-tools-extra/trunk/clang-replace/Makefile (added)
>> +++ clang-tools-extra/trunk/clang-replace/Makefile Thu Aug 22 08:07:14
>> 2013
>> @@ -0,0 +1,16 @@
>> +##===- clang-replace/Makefile ------------------------------*- Makefile
>> -*-===##
>> +#
>> +# The LLVM Compiler Infrastructure
>> +#
>> +# This file is distributed under the University of Illinois Open Source
>> +# License. See LICENSE.TXT for details.
>> +#
>>
>> +##===----------------------------------------------------------------------===##
>> +
>> +CLANG_LEVEL := ../../..
>> +LIBRARYNAME := clangReplace
>> +include $(CLANG_LEVEL)/../../Makefile.config
>> +
>> +DIRS = tool
>> +
>> +include $(CLANG_LEVEL)/Makefile
>>
>> Added: clang-tools-extra/trunk/clang-replace/tool/CMakeLists.txt
>> URL:
>> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-replace/tool/CMakeLists.txt?rev=189008&view=auto
>>
>> ==============================================================================
>> --- clang-tools-extra/trunk/clang-replace/tool/CMakeLists.txt (added)
>> +++ clang-tools-extra/trunk/clang-replace/tool/CMakeLists.txt Thu Aug 22
>> 08:07:14 2013
>> @@ -0,0 +1,17 @@
>> +set(LLVM_LINK_COMPONENTS
>> + ${LLVM_TARGETS_TO_BUILD}
>> + asmparser
>> + bitreader
>> + support
>> + mc
>> + )
>> +
>> +add_clang_executable(clang-replace
>> + ClangReplaceMain.cpp
>> + )
>> +target_link_libraries(clang-replace
>> + clangReplace
>> + )
>> +
>> +install(TARGETS clang-replace
>> + RUNTIME DESTINATION bin)
>>
>> Added: clang-tools-extra/trunk/clang-replace/tool/ClangReplaceMain.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-replace/tool/ClangReplaceMain.cpp?rev=189008&view=auto
>>
>> ==============================================================================
>> --- clang-tools-extra/trunk/clang-replace/tool/ClangReplaceMain.cpp
>> (added)
>> +++ clang-tools-extra/trunk/clang-replace/tool/ClangReplaceMain.cpp Thu
>> Aug 22 08:07:14 2013
>> @@ -0,0 +1,50 @@
>> +//===-- ClangReplaceMain.cpp - Main file for clang-replace tool
>> -----------===//
>> +//
>> +// The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open Source
>> +// License. See LICENSE.TXT for details.
>> +//
>>
>> +//===----------------------------------------------------------------------===//
>> +///
>> +/// \file
>> +/// \brief This file provides the main function for the clang-replace
>> tool.
>> +///
>>
>> +//===----------------------------------------------------------------------===//
>> +
>> +#include "ApplyReplacements.h"
>> +#include "clang/Basic/Diagnostic.h"
>> +#include "clang/Basic/DiagnosticOptions.h"
>> +#include "llvm/Support/CommandLine.h"
>> +
>> +using namespace llvm;
>> +using namespace clang;
>> +using namespace clang::replace;
>> +
>> +static cl::opt<std::string> Directory(cl::Positional, cl::Required,
>> + cl::desc("<Search Root
>> Directory>"));
>> +
>> +int main(int argc, char **argv) {
>> + cl::ParseCommandLineOptions(argc, argv);
>> +
>> + IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts(new
>> DiagnosticOptions());
>> + DiagnosticsEngine Diagnostics(
>> + IntrusiveRefCntPtr<DiagnosticIDs>(new DiagnosticIDs()),
>> + DiagOpts.getPtr());
>> +
>> + TUReplacements TUs;
>> +
>> + error_code ErrorCode =
>> + collectReplacementsFromDirectory(Directory, TUs, Diagnostics);
>> +
>> + if (ErrorCode) {
>> + errs() << "Trouble iterating over directory '" << Directory
>> + << "': " << ErrorCode.message() << "\n";
>> + return false;
>> + }
>> +
>> + FileToReplacementsMap GroupedReplacements;
>> + if (mergeAndDeduplicate(TUs, GroupedReplacements, Diagnostics))
>> + return 0;
>> + return 1;
>> +}
>>
>> Added: clang-tools-extra/trunk/clang-replace/tool/Makefile
>> URL:
>> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-replace/tool/Makefile?rev=189008&view=auto
>>
>> ==============================================================================
>> --- clang-tools-extra/trunk/clang-replace/tool/Makefile (added)
>> +++ clang-tools-extra/trunk/clang-replace/tool/Makefile Thu Aug 22
>> 08:07:14 2013
>> @@ -0,0 +1,28 @@
>> +##===- clang-replace/tool/Makefile -------------------------*- Makefile
>> -*-===##
>> +#
>> +# The LLVM Compiler Infrastructure
>> +#
>> +# This file is distributed under the University of Illinois Open Source
>> +# License. See LICENSE.TXT for details.
>> +#
>>
>> +##===----------------------------------------------------------------------===##
>> +
>> +CLANG_LEVEL := ../../../..
>> +include $(CLANG_LEVEL)/../../Makefile.config
>> +
>> +TOOLNAME = clang-replace
>> +
>> +# No plugins, optimize startup time.
>> +TOOL_NO_EXPORTS = 1
>> +
>> +SOURCES = ClangReplaceMain.cpp
>> +
>> +LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader support mc
>> mcparser option
>> +USEDLIBS = clangReplace.a clangFormat.a clangTooling.a clangFrontend.a \
>> + clangSerialization.a clangDriver.a clangRewriteFrontend.a \
>> + clangRewriteCore.a clangParse.a clangSema.a clangAnalysis.a \
>> + clangAST.a clangASTMatchers.a clangEdit.a clangLex.a
>> clangBasic.a
>> +
>> +include $(CLANG_LEVEL)/Makefile
>> +
>> +CPP.Flags += -I$(PROJ_SRC_DIR)/..
>>
>> Modified: clang-tools-extra/trunk/docs/Doxyfile
>> URL:
>> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/docs/Doxyfile?rev=189008&r1=189007&r2=189008&view=diff
>>
>> ==============================================================================
>> --- clang-tools-extra/trunk/docs/Doxyfile (original)
>> +++ clang-tools-extra/trunk/docs/Doxyfile Thu Aug 22 08:07:14 2013
>> @@ -648,7 +648,7 @@ WARN_LOGFILE =
>> # directories like "/usr/src/myproject". Separate the files or
>> directories
>> # with spaces.
>>
>> -INPUT = ../cpp11-migrate
>> +INPUT = ../cpp11-migrate ../clang-replace
>>
>> # This tag can be used to specify the character encoding of the source
>> files
>> # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which
>> is
>>
>> Modified: clang-tools-extra/trunk/test/CMakeLists.txt
>> URL:
>> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/CMakeLists.txt?rev=189008&r1=189007&r2=189008&view=diff
>>
>> ==============================================================================
>> --- clang-tools-extra/trunk/test/CMakeLists.txt (original)
>> +++ clang-tools-extra/trunk/test/CMakeLists.txt Thu Aug 22 08:07:14 2013
>> @@ -27,7 +27,7 @@ set(CLANG_TOOLS_TEST_DEPS
>> clang clang-headers FileCheck count not
>>
>> # Individual tools we test.
>> - remove-cstr-calls cpp11-migrate modularize clang-tidy
>> + remove-cstr-calls clang-replace cpp11-migrate modularize clang-tidy
>>
>> # Unit tests
>> ExtraToolsUnitTests
>>
>> Added: clang-tools-extra/trunk/test/clang-replace/conflict.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-replace/conflict.cpp?rev=189008&view=auto
>>
>> ==============================================================================
>> --- clang-tools-extra/trunk/test/clang-replace/conflict.cpp (added)
>> +++ clang-tools-extra/trunk/test/clang-replace/conflict.cpp Thu Aug 22
>> 08:07:14 2013
>> @@ -0,0 +1,7 @@
>> +// RUN: mkdir -p %T/conflict
>> +// RUN: sed "s#\$(path)#%/S/conflict#" %S/conflict/file1.yaml >
>> %T/conflict/file1.yaml
>> +// RUN: sed "s#\$(path)#%/S/conflict#" %S/conflict/file2.yaml >
>> %T/conflict/file2.yaml
>> +// RUN: sed "s#\$(path)#%/S/conflict#" %S/conflict/file3.yaml >
>> %T/conflict/file3.yaml
>> +// RUN: sed "s#\$(path)#%/S/conflict#" %S/conflict/expected.txt >
>> %T/conflict/expected.txt
>> +// RUN: not clang-replace %T/conflict > %T/conflict/output.txt 2>&1
>> +// RUN: diff -b %T/conflict/output.txt %T/conflict/expected.txt
>>
>> Added: clang-tools-extra/trunk/test/clang-replace/conflict/common.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-replace/conflict/common.h?rev=189008&view=auto
>>
>> ==============================================================================
>> --- clang-tools-extra/trunk/test/clang-replace/conflict/common.h (added)
>> +++ clang-tools-extra/trunk/test/clang-replace/conflict/common.h Thu Aug
>> 22 08:07:14 2013
>> @@ -0,0 +1,17 @@
>> +#ifndef COMMON_H
>> +#define COMMON_H
>> +
>> +extern void ext(int (&)[5]);
>> +
>> +void func(int t) {
>> + int ints[5];
>> + for (unsigned i = 0; i < 5; ++i) {
>> + ints[i] = t;
>> + }
>> +
>> + int *i = 0;
>> +
>> + ext(ints);
>> +}
>> +
>> +#endif // COMMON_H
>>
>> Added: clang-tools-extra/trunk/test/clang-replace/conflict/expected.txt
>> URL:
>> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-replace/conflict/expected.txt?rev=189008&view=auto
>>
>> ==============================================================================
>> --- clang-tools-extra/trunk/test/clang-replace/conflict/expected.txt
>> (added)
>> +++ clang-tools-extra/trunk/test/clang-replace/conflict/expected.txt Thu
>> Aug 22 08:07:14 2013
>> @@ -0,0 +1,11 @@
>> +There are conflicting changes to $(path)/common.h:
>> +The following changes conflict:
>> + Replace 8:8-8:33 with "auto & i : ints"
>> + Replace 8:8-8:33 with "int & elem : ints"
>> +The following changes conflict:
>> + Replace 9:5-9:11 with "elem"
>> + Replace 9:5-9:11 with "i"
>> +The following changes conflict:
>> + Remove 12:3-12:14
>> + Insert at 12:12 (int*)
>> + Replace 12:12-12:12 with "nullptr"
>>
>> Added: clang-tools-extra/trunk/test/clang-replace/conflict/file1.yaml
>> URL:
>> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-replace/conflict/file1.yaml?rev=189008&view=auto
>>
>> ==============================================================================
>> --- clang-tools-extra/trunk/test/clang-replace/conflict/file1.yaml (added)
>> +++ clang-tools-extra/trunk/test/clang-replace/conflict/file1.yaml Thu Aug
>> 22 08:07:14 2013
>> @@ -0,0 +1,16 @@
>> +---
>> +MainSourceFile: "source1.cpp"
>> +Replacements:
>> + - FilePath: "$(path)/common.h"
>> + Offset: 106
>> + Length: 26
>> + ReplacementText: "auto & i : ints"
>> + - FilePath: "$(path)/common.h"
>> + Offset: 140
>> + Length: 7
>> + ReplacementText: "i"
>> + - FilePath: "$(path)/common.h"
>> + Offset: 160
>> + Length: 12
>> + ReplacementText: ""
>> +...
>>
>> Added: clang-tools-extra/trunk/test/clang-replace/conflict/file2.yaml
>> URL:
>> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-replace/conflict/file2.yaml?rev=189008&view=auto
>>
>> ==============================================================================
>> --- clang-tools-extra/trunk/test/clang-replace/conflict/file2.yaml (added)
>> +++ clang-tools-extra/trunk/test/clang-replace/conflict/file2.yaml Thu Aug
>> 22 08:07:14 2013
>> @@ -0,0 +1,16 @@
>> +---
>> +MainSourceFile: "source2.cpp"
>> +Replacements:
>> + - FilePath: "$(path)/common.h"
>> + Offset: 106
>> + Length: 26
>> + ReplacementText: "int & elem : ints"
>> + - FilePath: "$(path)/common.h"
>> + Offset: 140
>> + Length: 7
>> + ReplacementText: "elem"
>> + - FilePath: "$(path)/common.h"
>> + Offset: 169
>> + Length: 1
>> + ReplacementText: "nullptr"
>> +...
>>
>> Added: clang-tools-extra/trunk/test/clang-replace/conflict/file3.yaml
>> URL:
>> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-replace/conflict/file3.yaml?rev=189008&view=auto
>>
>> ==============================================================================
>> --- clang-tools-extra/trunk/test/clang-replace/conflict/file3.yaml (added)
>> +++ clang-tools-extra/trunk/test/clang-replace/conflict/file3.yaml Thu Aug
>> 22 08:07:14 2013
>> @@ -0,0 +1,8 @@
>> +---
>> +MainSourceFile: "source1.cpp"
>> +Replacements:
>> + - FilePath: "$(path)/common.h"
>> + Offset: 169
>> + Length: 0
>> + ReplacementText: "(int*)"
>> +...
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
More information about the cfe-commits
mailing list