in tools/common/bazel_substitutions.cc [79:95]
bool BazelPlaceholderSubstitutions::FindAndReplace(
const std::string &placeholder,
BazelPlaceholderSubstitutions::PlaceholderResolver &resolver,
std::string &str) {
int start = 0;
bool changed = false;
while ((start = str.find(placeholder, start)) != std::string::npos) {
std::string resolved_value = resolver.get();
if (resolved_value.empty()) {
return false;
}
changed = true;
str.replace(start, placeholder.length(), resolved_value);
start += resolved_value.length();
}
return changed;
}