in packages/code_excerpt_updater/lib/src/code_transformer/replace.dart [61:92]
CodeTransformer codeTransformerHelper(String re, String _replacement) {
final replacement = encodeSlashChar(_replacement);
log.finest(' >> replacement expr: $replacement');
if (!_matchDollarNumRE.hasMatch(replacement)) {
return (String code) => code.replaceAll(RegExp(re), replacement);
}
return (String code) => code.replaceAllMapped(
RegExp(re),
(Match m) => replacement.replaceAllMapped(_matchDollarNumRE, (_m) {
// In JS, $$ becomes $ in a replacement string.
final numDollarChar = _m[1]!.length;
// Escaped dollar characters, if any:
final dollars = r'$' * (numDollarChar ~/ 2);
final number = _m[2];
// Even number of $'s, e.g. $$1?
if (numDollarChar.isEven || number == null || number.isEmpty) {
return '$dollars${_m[2]}';
}
if (number == '&') return '$dollars${m[0]}';
final argNum = int.tryParse(number) ?? m.groupCount + 1;
// No corresponding group? Return the arg, like in JavaScript.
if (argNum > m.groupCount) return '$dollars\$$number';
return '$dollars${m[argNum]}';
}));
}