[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