@@ -490,14 +490,22 @@ Project::Entry Project::findEntry(const std::string &path, bool can_redirect, bo
490490 for (const std::string &arg : g_config->clang .extraArgs )
491491 ret.args .push_back (intern (arg));
492492 ret.args .push_back (intern (" -working-directory=" + ret.directory ));
493+ if (g_config->clang .prependArgs .size ()) {
494+ std::vector<const char *> args;
495+ for (StringRef arg : g_config->clang .prependArgs )
496+ args.push_back (intern (arg));
497+ ret.args .insert (ret.args .begin () + 1 , args.begin (), args.end ());
498+ }
493499 return ret;
494500}
495501
496502void Project::index (WorkingFiles *wfiles, const RequestId &id) {
497503 auto &gi = g_config->index ;
498504 GroupMatch match (gi.whitelist , gi.blacklist ), match_i (gi.initialWhitelist , gi.initialBlacklist );
499- std::vector<const char *> args, extra_args;
500- for (const std::string &arg : g_config->clang .extraArgs )
505+ std::vector<const char *> args, prepend_args, extra_args;
506+ for (StringRef arg : g_config->clang .prependArgs )
507+ prepend_args.push_back (intern (arg));
508+ for (StringRef arg : g_config->clang .extraArgs )
501509 extra_args.push_back (intern (arg));
502510 {
503511 std::lock_guard lock (mtx);
@@ -510,6 +518,7 @@ void Project::index(WorkingFiles *wfiles, const RequestId &id) {
510518 args = entry.args ;
511519 args.insert (args.end (), extra_args.begin (), extra_args.end ());
512520 args.push_back (intern (" -working-directory=" + entry.directory ));
521+ args.insert (args.begin () + 1 , prepend_args.begin (), prepend_args.end ());
513522 pipeline::index (entry.filename , args, interactive ? IndexMode::Normal : IndexMode::Background, false , id);
514523 } else {
515524 LOG_V (1 ) << " [" << i << " /" << folder.entries .size () << " ]: " << reason << " ; skip " << entry.filename ;
@@ -529,8 +538,10 @@ void Project::indexRelated(const std::string &path) {
529538 auto &gi = g_config->index ;
530539 GroupMatch match (gi.whitelist , gi.blacklist );
531540 StringRef stem = sys::path::stem (path);
532- std::vector<const char *> args, extra_args;
533- for (const std::string &arg : g_config->clang .extraArgs )
541+ std::vector<const char *> args, prepend_args, extra_args;
542+ for (StringRef arg : g_config->clang .prependArgs )
543+ prepend_args.push_back (intern (arg));
544+ for (StringRef arg : g_config->clang .extraArgs )
534545 extra_args.push_back (intern (arg));
535546 std::lock_guard lock (mtx);
536547 for (auto &[root, folder] : root2folder)
@@ -540,6 +551,7 @@ void Project::indexRelated(const std::string &path) {
540551 args = entry.args ;
541552 args.insert (args.end (), extra_args.begin (), extra_args.end ());
542553 args.push_back (intern (" -working-directory=" + entry.directory ));
554+ args.insert (args.begin () + 1 , prepend_args.begin (), prepend_args.end ());
543555 if (sys::path::stem (entry.filename ) == stem && entry.filename != path && match.matches (entry.filename , &reason))
544556 pipeline::index (entry.filename , args, IndexMode::Background, true );
545557 }
0 commit comments