steveire added a comment.

In https://reviews.llvm.org/D54141#1288851, @JonasToth wrote:

> > So, running `clang-apply-replacements --issue-diags the_new_file.yaml` 
> > would issue the warnings/fixit hints by processing the yaml and issuing the 
> > diagnostics the way clang-tidy would have done (See in my proposed design 
> > that we silence clang-tidy).
> > 
> > Note also that the `--issue-diags` option does not yet exist. I'm proposing 
> > adding it.
>
> At the moment `clang-apply-replacements` is called at the end of an 
> clang-tidy run in `run-clang-tidy.py` That means we produce ~GBs of Yaml 
> first, to then emit ~10MBs worth of it.
>  I think just relying on `clang-apply-replacements` is not ok.


I think my proposal is still unclear to you. Sorry about that.

I am proposing on-the-fly de-duplication, but without regex parsing of the 
diagnostic output of clang-tidy.

My proposal is still the same as I wrote before, but maybe what I write below 
will be more clear. Sorry if this seems condescendingly detailed. I don't know 
where the misunderstanding is coming from, so I err on the side of detail:

Imagine you have two cpp files which both include the same header. Imagine also 
that all 3 files are missing 1 override keyword and you run the 
modernize-use-override check on the two translation units using 
run-clang-tidy.py.

Here is what I propose happens:

- First, assume that the two translation units are processed serially, just to 
simplify the process as described. You will see that parallelizing does not 
change anything.
- clang-tidy gets run on file1.cpp in a way that it does not write diagnostics 
(and fixes) to stdout/stderr, but only generates a yaml file representing the 
diagnostics (warnings and fixes).
- Two diagnostics are created - one for the missing override in file1.cpp and 
one for the missing override in shared_header.h
- the on-the-fly deduplication cache is empty, so both diagnostics get added to 
the on-the-fly deduplication cache
- Because both were added to the cache, both diagnostics get written to a 
temporary file foo.yaml
- `clang-appy-replacements --issue-diags foo.yaml` is run (some other tool 
could be used for this step, but CAR seems right to me)
- `clang-appy-replacements --issue-diags foo.yaml` causes the two diagnostics 
to be issued, exactly as they would have been issued by clang-tidy.
- `clang-appy-replacements --issue-diags foo.yaml` DOES NOT actually change the 
source code. It only emits diagnostics
- Next process file2.cpp
- Processing file2.cpp results in two diagnostics - one for the missing 
override in file2.cpp and one for the missing override in shared_header..h
- NOTE: The diagnostic for the missing override in shared_header.h is a 
duplicate
- NOTE: The diagnostic for the missing override in file2.cpp is NOT a duplicate
- Try to add both to the on-the-fly deduplication cache
- Discover that the diagnostic for file2.cpp IS NOT a duplicate. Add it to a 
tempoary bar.yaml (named not to conflict with any other temporary file! This is 
built into temporary file APIs).
- Discover that the diagnostic for shared_header.h IS a duplicate. DO NOT write 
it to the temporary file
- Run `clang-appy-replacements --issue-diags bar.yaml`
- Run `clang-appy-replacements --issue-diags bar.yaml` causes ONLY the 
diagnostic for file2.cpp to be issued because that is all that is in the file.
- At the end, you have a de-duplicated yaml structure in memory. Write it to 
the file provided to the --export-fixes parameter of `run-clang-tidy.py`.

Do you understand the proposal now?

This means that you get

- A deduplicated fixes file
- De-duplicated diagnostics issued - which means you can process them in your 
CI system etc.

> That fits the distributed use-case as well?

If the distributed system processes more than one file at a time on the remote 
computer.

I'm not aware of any distributed systems that work that way. I think they all 
process single files at a time.

However, when the resulting yaml files are sent back to your computer, your 
computer can deduplicate the diagnostics issued (in my design).


Repository:
  rCTE Clang Tools Extra

https://reviews.llvm.org/D54141



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to