removeStrings method

String removeStrings(
  1. String code
)

Removes all string literals from the given code.

Implementation

String removeStrings(String code) {
  final buffer = StringBuffer();
  bool inSingleQuote = false;
  bool inDoubleQuote = false;
  bool inMultiLineStringSingle = false;
  bool inMultiLineStringDouble = false;

  for (int i = 0; i < code.length; i++) {
    final currentChar = code[i];

    if (currentChar == "'" && !inDoubleQuote && !inMultiLineStringDouble) {
      if (i + 2 < code.length && code.substring(i, i + 3) == "'''") {
        inMultiLineStringSingle = !inMultiLineStringSingle;
        i += 2;
        continue;
      } else if (!inMultiLineStringSingle) {
        inSingleQuote = !inSingleQuote;
        continue;
      }
    }

    if (currentChar == '"' && !inSingleQuote && !inMultiLineStringSingle) {
      if (i + 2 < code.length && code.substring(i, i + 3) == '"""') {
        inMultiLineStringDouble = !inMultiLineStringDouble;
        i += 2;
        continue;
      } else if (!inMultiLineStringDouble) {
        inDoubleQuote = !inDoubleQuote;
        continue;
      }
    }

    if (inSingleQuote ||
        inDoubleQuote ||
        inMultiLineStringSingle ||
        inMultiLineStringDouble) {
      continue;
    }

    buffer.write(currentChar);
  }

  return buffer.toString();
}