@@ -381,6 +381,20 @@ std::vector<Diag> getIncludeCleanerDiags(ParsedAST &AST, llvm::StringRef Code) {
381381                                        Cfg.Diagnostics .Includes .IgnoreHeader );
382382}
383383
384+ tidy::ClangTidyCheckFactories
385+ filterFastTidyChecks (const  tidy::ClangTidyCheckFactories &All,
386+                      Config::FastCheckPolicy Policy) {
387+   if  (Policy == Config::FastCheckPolicy::None)
388+     return  All;
389+   bool  AllowUnknown = Policy == Config::FastCheckPolicy::Loose;
390+   tidy::ClangTidyCheckFactories Fast;
391+   for  (const  auto  &Factory : All) {
392+     if  (isFastTidyCheck (Factory.getKey ()).value_or (AllowUnknown))
393+       Fast.registerCheckFactory (Factory.first (), Factory.second );
394+   }
395+   return  Fast;
396+ }
397+ 
384398} //  namespace
385399
386400std::optional<ParsedAST>
@@ -390,6 +404,7 @@ ParsedAST::build(llvm::StringRef Filename, const ParseInputs &Inputs,
390404                 std::shared_ptr<const  PreambleData> Preamble) {
391405  trace::Span Tracer (" BuildAST"  );
392406  SPAN_ATTACH (Tracer, " File"  , Filename);
407+   const  Config &Cfg = Config::current ();
393408
394409  auto  VFS = Inputs.TFS ->view (Inputs.CompileCommand .Directory );
395410  if  (Preamble && Preamble->StatCache )
@@ -520,19 +535,21 @@ ParsedAST::build(llvm::StringRef Filename, const ParseInputs &Inputs,
520535  //  diagnostics.
521536  {
522537    trace::Span Tracer (" ClangTidyInit"  );
523-     static  const  auto  *CTFactories  = [] {
538+     static  const  auto  *AllCTFactories  = [] {
524539      auto  *CTFactories = new  tidy::ClangTidyCheckFactories;
525540      for  (const  auto  &E : tidy::ClangTidyModuleRegistry::entries ())
526541        E.instantiate ()->addCheckFactories (*CTFactories);
527542      return  CTFactories;
528543    }();
544+     tidy::ClangTidyCheckFactories FastFactories = filterFastTidyChecks (
545+         *AllCTFactories, Cfg.Diagnostics .ClangTidy .FastCheckFilter );
529546    CTContext.emplace (std::make_unique<tidy::DefaultOptionsProvider>(
530547        tidy::ClangTidyGlobalOptions (), ClangTidyOpts));
531548    CTContext->setDiagnosticsEngine (&Clang->getDiagnostics ());
532549    CTContext->setASTContext (&Clang->getASTContext ());
533550    CTContext->setCurrentFile (Filename);
534551    CTContext->setSelfContainedDiags (true );
535-     CTChecks = CTFactories-> createChecksForLanguage (&*CTContext);
552+     CTChecks = FastFactories. createChecksForLanguage (&*CTContext);
536553    Preprocessor *PP = &Clang->getPreprocessor ();
537554    for  (const  auto  &Check : CTChecks) {
538555      Check->registerPPCallbacks (Clang->getSourceManager (), PP, PP);
@@ -554,7 +571,6 @@ ParsedAST::build(llvm::StringRef Filename, const ParseInputs &Inputs,
554571                                          SourceLocation ());
555572    }
556573
557-     const  Config &Cfg = Config::current ();
558574    ASTDiags.setLevelAdjuster ([&](DiagnosticsEngine::Level DiagLevel,
559575                                  const  clang::Diagnostic &Info) {
560576      if  (Cfg.Diagnostics .SuppressAll  ||
0 commit comments