ilya-biryukov added a reviewer: ilya-biryukov.
ilya-biryukov added a comment.





================
Comment at: clangd/ClangdLSPServer.cpp:430
     CDB.clear();
-
-    reparseOpenedFiles();
+    compileCommandsChangePost(CCChangeData);
   }
----------------
ilya-biryukov wrote:
> simark wrote:
> > malaperle wrote:
> > > ilya-biryukov wrote:
> > > > Maybe keep the old logic of reparsing all open files? This would make 
> > > > the change way simpler and I don't think we need this extra complexity 
> > > > in the long run, when we have better integration with the build system.
> > > > 
> > > > ClangdServer will reuse the preamble if compile command didn't change 
> > > > anyway, so reparse will be very fast and shouldn't be affected.
> > > > If the compile command does change, we'll retrigger the full rebuild.
> > > I think the change is not that complex but brings much added value. About 
> > > the integration with the build system, there are many build systems out 
> > > there so I don't think better integration will be useful in many 
> > > scenarios (plain make, custom builds, etc). This solution is generic 
> > > enough so that any build system that generates compile_commands.json will 
> > > be supported in a pretty good way.
> > @malaperle also suggested an alternative way of doing it.  Instead of 
> > saving the the compile commands in a custom structure before clearing the 
> > cache, we could save the compile flags in the `ParsedAST` object.  When 
> > some compile_commands.json changes, we can compare the new compile flags 
> > with this saved copy.  I think it would make the code a bit more 
> > straightforward.
> > I think the change is not that complex but brings much added value.
> > @malaperle also suggested an alternative way of doing it. Instead of saving 
> > the the compile commands in a custom structure before clearing the cache, 
> > we could save the compile flags in the ParsedAST object. When some 
> > compile_commands.json changes, we can compare the new compile flags with 
> > this saved copy. I think it would make the code a bit more straightforward.
> 
> The no-op rebuilds in case nothing changes is a good and long overdue 
> optimization, and I agree that `ParsedAST` or `TUScheduler::update` is 
> probably the right place to put it into. Any other benefits we get from 
> snapshotting the compile commands here? Could we make this optimization in a 
> separate change? It does not seem directly related to the file watching 
> changes. Also happy to look at it, finding the right place to do it might 
> involve digging through layers of classes that manage the AST.
> 
> > About the integration with the build system, there are many build systems 
> > out there so I don't think better integration will be useful in many 
> > scenarios (plain make, custom builds, etc). This solution is generic enough 
> > so that any build system that generates compile_commands.json will be 
> > supported in a pretty good way.
> Just to clarify, the "better buildsystem integration" I refer to is not about 
> enabling support for more build systems (though, that would be nice-to-have), 
> it's about building abstractions that better support the current use-cases, 
> i.e. making the connection between the CompiationDatabase and 
> compiler_commands.json more explicit, allowing the track changes in the build 
> system, etc. We think that file-watching will definitely be part of it, but 
> we don't have full design yet.
> 
> In any case, we do think that there are improvements to be made both in 
> compile_commands.json and in our internal Bazel integration.
D49783 makes the rebuild noop if compile command and preamble deps don't 
change, I think this should be good enough to keep `rebuildOpenedFiles` call 
for now.


Repository:
  rCTE Clang Tools Extra

https://reviews.llvm.org/D49267



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

Reply via email to