llvm-project/clang-tools-extra
Nathan James 6538b4393d [clang-apply-replacements] No longer deduplucates replacements from the same TU
Summary:
clang-apply-replacements currently deduplicates all diagnostic replacements. However if you get a duplicated replacement from one TU then its expected that it should not be deduplicated. This goes some way to solving [[ https://bugs.llvm.org/show_bug.cgi?id=45150 | export-fixes to yaml adds extra newlines and breaks offsets. ]]

Take this example yaml.
```
---
MainSourceFile:  '/home/nathan/test/test.cpp'
Diagnostics:
  - DiagnosticName:  readability-braces-around-statements
    DiagnosticMessage:
      Message:         statement should be inside braces
      FilePath:        '/home/nathan/test/test.cpp'
      FileOffset:      14
      Replacements:
        - FilePath:        '/home/nathan/test/test.cpp'
          Offset:          14
          Length:          0
          ReplacementText: ' {'
        - FilePath:        '/home/nathan/test/test.cpp'
          Offset:          28
          Length:          0
          ReplacementText: '

}'
  - DiagnosticName:  readability-braces-around-statements
    DiagnosticMessage:
      Message:         statement should be inside braces
      FilePath:        '/home/nathan/test/test.cpp'
      FileOffset:      20
      Replacements:
        - FilePath:        '/home/nathan/test/test.cpp'
          Offset:          20
          Length:          0
          ReplacementText: ' {'
        - FilePath:        '/home/nathan/test/test.cpp'
          Offset:          28
          Length:          0
          ReplacementText: '

}'
...```

The current behaviour is to deduplicate the text insertions at Offset 28 and only apply one of the replacements.
However as both of these replacements came from the same translation unit we can be confident they were both meant to be applied together
The new behaviour won't deduplicate the text insertion and instead insert both of the replacements.
If the duplicate replacement is found inside different translation units (from a header file change perhaps) then they will still be deduplicated as before.

Reviewers: aaron.ballman, gribozavr2, klimek, ymandel

Reviewed By: ymandel

Subscribers: ymandel, cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D76054
2020-03-25 09:36:36 +00:00
..
clang-apply-replacements [clang-apply-replacements] No longer deduplucates replacements from the same TU 2020-03-25 09:36:36 +00:00
clang-change-namespace Make llvm::StringRef to std::string conversions explicit. 2020-01-28 23:25:25 +01:00
clang-doc [clang-doc] Improving Markdown Output 2020-03-06 17:37:08 -08:00
clang-include-fixer Avoid including FileManager.h from SourceManager.h 2020-03-11 13:53:12 -07:00
clang-move [clang][Analysis] CallGraph: store the actual call `Expr*` in the CallGraphNode::CallRecord 2020-02-13 23:37:53 +03:00
clang-query Make llvm::StringRef to std::string conversions explicit. 2020-01-28 23:25:25 +01:00
clang-reorder-fields [ASTMatchers] StringRef'ify hasName 2020-01-29 10:53:08 +01:00
clang-tidy [clang-tidy] Fix RenamerClangTidy handling qualified TypeLocs 2020-03-23 13:45:34 +00:00
clangd [AST] Build recovery expressions by default for C++. 2020-03-25 09:00:48 +01:00
docs [clang-tidy][NFC] Add missing check group docs and order entries 2020-03-23 11:05:34 +01:00
modularize Make llvm::StringRef to std::string conversions explicit. 2020-01-28 23:25:25 +01:00
pp-trace Avoid including FileManager.h from SourceManager.h 2020-03-11 13:53:12 -07:00
test [clang-apply-replacements] No longer deduplucates replacements from the same TU 2020-03-25 09:36:36 +00:00
tool-template Revert "Use InitLLVM to setup a pretty stack printer" 2019-11-25 21:06:56 -05:00
unittests [clang-doc] Improving Markdown Output 2020-03-06 17:37:08 -08:00
.gitignore
CMakeLists.txt Remove clang-tidy-vs from clang-tools-extra (PR41791) 2019-08-27 18:36:08 +00:00
CODE_OWNERS.TXT [clangd] add CODE_OWNERS 2020-01-29 12:43:19 +01:00
LICENSE.TXT Fix typos throughout the license files that somehow I and my reviewers 2019-01-21 09:52:34 +00:00
README.txt

README.txt

//===----------------------------------------------------------------------===//
// Clang Tools repository
//===----------------------------------------------------------------------===//

Welcome to the repository of extra Clang Tools.  This repository holds tools
that are developed as part of the LLVM compiler infrastructure project and the
Clang frontend.  These tools are kept in a separate "extra" repository to
allow lighter weight checkouts of the core Clang codebase.

This repository is only intended to be checked out inside of a full LLVM+Clang
tree, and in the 'tools/extra' subdirectory of the Clang checkout.

All discussion regarding Clang, Clang-based tools, and code in this repository
should be held using the standard Clang mailing lists:
  http://lists.llvm.org/mailman/listinfo/cfe-dev

Code review for this tree should take place on the standard Clang patch and
commit lists:
  http://lists.llvm.org/mailman/listinfo/cfe-commits

If you find a bug in these tools, please file it in the LLVM bug tracker:
  http://llvm.org/bugs/