r248904 - clang-format: Use Rewriter again to write the output files.

Jan Vesely via cfe-commits cfe-commits at lists.llvm.org
Wed Sep 30 12:19:28 PDT 2015


Hi,
I think this change breaks cmake build. Please consider the attached fix (I
can't push atm).

thank you,
Jan

On Wed, Sep 30, 2015 at 8:59 AM, Daniel Jasper via cfe-commits <
cfe-commits at lists.llvm.org> wrote:

> Author: djasper
> Date: Wed Sep 30 08:59:29 2015
> New Revision: 248904
>
> URL: http://llvm.org/viewvc/llvm-project?rev=248904&view=rev
> Log:
> clang-format: Use Rewriter again to write the output files.
>
> This has two advantages:
> 1. Atomic writes.
> 2. Proper handling of line endings (hopefully solving llvm.org/PR24999
>
> Modified:
>     cfe/trunk/tools/clang-format/ClangFormat.cpp
>
> Modified: cfe/trunk/tools/clang-format/ClangFormat.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-format/ClangFormat.cpp?rev=248904&r1=248903&r2=248904&view=diff
>
> ==============================================================================
> --- cfe/trunk/tools/clang-format/ClangFormat.cpp (original)
> +++ cfe/trunk/tools/clang-format/ClangFormat.cpp Wed Sep 30 08:59:29 2015
> @@ -19,6 +19,7 @@
>  #include "clang/Basic/SourceManager.h"
>  #include "clang/Basic/Version.h"
>  #include "clang/Format/Format.h"
> +#include "clang/Rewrite/Core/Rewriter.h"
>  #include "llvm/ADT/StringMap.h"
>  #include "llvm/Support/CommandLine.h"
>  #include "llvm/Support/Debug.h"
> @@ -77,7 +78,7 @@ AssumeFileName("assume-filename",
>                 cl::desc("When reading from stdin, clang-format assumes
> this\n"
>                          "filename to look for a style config file (with\n"
>                          "-style=file) and to determine the language."),
> -               cl::cat(ClangFormatCategory));
> +               cl::init("<stdin>"), cl::cat(ClangFormatCategory));
>
>  static cl::opt<bool> Inplace("i",
>                               cl::desc("Inplace edit <file>s, if
> specified."),
> @@ -109,8 +110,7 @@ namespace format {
>
>  static FileID createInMemoryFile(StringRef FileName, MemoryBuffer *Source,
>                                   SourceManager &Sources, FileManager
> &Files) {
> -  const FileEntry *Entry = Files.getVirtualFile(FileName == "-" ?
> "<stdin>" :
> -                                                    FileName,
> +  const FileEntry *Entry = Files.getVirtualFile(FileName,
>                                                  Source->getBufferSize(),
> 0);
>    Sources.overrideFileContents(Entry, Source, true);
>    return Sources.createFileID(Entry, SourceLocation(), SrcMgr::C_User);
> @@ -132,7 +132,7 @@ static bool fillRanges(MemoryBuffer *Cod
>        IntrusiveRefCntPtr<DiagnosticIDs>(new DiagnosticIDs),
>        new DiagnosticOptions);
>    SourceManager Sources(Diagnostics, Files);
> -  FileID ID = createInMemoryFile("-", Code, Sources, Files);
> +  FileID ID = createInMemoryFile("<irrelevant>", Code, Sources, Files);
>    if (!LineRanges.empty()) {
>      if (!Offsets.empty() || !Lengths.empty()) {
>        llvm::errs() << "error: cannot use -lines with -offset/-length\n";
> @@ -255,8 +255,8 @@ static bool format(StringRef FileName) {
>
>    bool IncompleteFormat = false;
>    Replaces = tooling::mergeReplacements(
> -      Replaces,
> -      reformat(FormatStyle, ChangedCode, Ranges, FileName,
> &IncompleteFormat));
> +      Replaces, reformat(FormatStyle, ChangedCode, Ranges,
> AssumedFileName,
> +                         &IncompleteFormat));
>    if (OutputXML) {
>      llvm::outs() << "<?xml version='1.0'?>\n<replacements "
>                      "xml:space='preserve' incomplete_format='"
> @@ -269,27 +269,26 @@ static bool format(StringRef FileName) {
>      outputReplacementsXML(Replaces);
>      llvm::outs() << "</replacements>\n";
>    } else {
> -    std::string FormattedCode =
> -        applyAllReplacements(Code->getBuffer(), Replaces);
> +    FileManager Files((FileSystemOptions()));
> +    DiagnosticsEngine Diagnostics(
> +        IntrusiveRefCntPtr<DiagnosticIDs>(new DiagnosticIDs),
> +        new DiagnosticOptions);
> +    SourceManager Sources(Diagnostics, Files);
> +    FileID ID = createInMemoryFile(AssumedFileName, Code.get(), Sources,
> Files);
> +    Rewriter Rewrite(Sources, LangOptions());
> +    tooling::applyAllReplacements(Replaces, Rewrite);
>      if (Inplace) {
>        if (FileName == "-")
>          llvm::errs() << "error: cannot use -i when reading from stdin.\n";
> -      else {
> -        std::error_code EC;
> -        raw_fd_ostream FileOut(FileName, EC, llvm::sys::fs::F_Text);
> -        if (EC) {
> -          llvm::errs() << EC.message() << "\n";
> -          return true;
> -        }
> -        FileOut << FormattedCode;
> -      }
> +      else if (Rewrite.overwriteChangedFiles())
> +        return true;
>      } else {
>        if (Cursor.getNumOccurrences() != 0)
>          outs() << "{ \"Cursor\": "
>                 << tooling::shiftedCodePosition(Replaces, Cursor)
>                 << ", \"IncompleteFormat\": "
>                 << (IncompleteFormat ? "true" : "false") << " }\n";
> -      outs() << FormattedCode;
> +      Rewrite.getEditBuffer(ID).write(outs());
>      }
>    }
>    return false;
> @@ -350,3 +349,4 @@ int main(int argc, const char **argv) {
>    }
>    return Error ? 1 : 0;
>  }
> +
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150930/7fe8e582/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-clang-format-Link-with-rewriter.patch
Type: text/x-patch
Size: 650 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150930/7fe8e582/attachment.bin>


More information about the cfe-commits mailing list