consolidateProjectStyleLines static method

List<String> consolidateProjectStyleLines(
  1. AFCommandContext context,
  2. List<String> rawLines
)

Utility which allows project styles to contain a + syntax that spreads a command out over multiple lines.

Implementation

static List<String> consolidateProjectStyleLines(AFCommandContext context, List<String> rawLines) {
  final result = <String>[];
  var idxLine = 0;
  while(idxLine < rawLines.length) {
    var rawLine = rawLines[idxLine].trim();
    if(rawLine.startsWith('import')) {
      idxLine++;
      final params = rawLine.split(" ");
      if(params.length != 2) {
        throw AFException("Expected import project_styles/your-project-style, found '$rawLine'");
      }
      final importStylePath = params[1].split('/');
      final importStyle = context.readProjectStyle(importStylePath);
      final consolidated = consolidateProjectStyleLines(context, importStyle.buffer.lines);
      result.addAll(consolidated);
      continue;
    }


    if(rawLine.endsWith("+")) {
      rawLine = rawLine.substring(0, rawLine.length-1).trim();
    }
    idxLine++;
    final compressed = StringBuffer();
    var lineNext = (idxLine < rawLines.length) ? rawLines[idxLine].trim() : "";
    while(lineNext.startsWith("+")) {
      final add = lineNext.substring(1);
      if(compressed.isNotEmpty) {
        compressed.write(",");
      }
      compressed.write(add);
      idxLine++;
      lineNext = (idxLine < rawLines.length) ? rawLines[idxLine].trim() : "";
    }

    if(compressed.isNotEmpty) {
      rawLine = '$rawLine "$compressed"';
    }
    result.add(rawLine);
  }

  return result;
}