CodeTransformer codeTransformerHelper()

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]}';
            }));
  }