getHints method

List<String> getHints()

Generate a list of hints for the DartBlock program.

The types of hints which can be generated (examples):

  • "4 custom functions are expected."
  • "2 variables are expected."
  • "2 for-loops are expected."

Implementation

List<String> getHints() {
  final List<String> hints = [];

  if (customFunctions.isNotEmpty) {
    final isSingular = customFunctions.length == 1;
    hints.add(
      "${customFunctions.length} custom function${isSingular ? "" : "s"} ${isSingular ? "is" : "are"} expected.",
    );
  }

  final variableDefinitions = buildTree()
      .findAllVariableDefinitions()
      .where((element) => !element.name.startsWith('_'))
      .toList();
  if (variableDefinitions.isNotEmpty) {
    final isSingular = variableDefinitions.length == 1;
    hints.add(
      """${variableDefinitions.length} variable${isSingular ? "" : "s"} ${isSingular ? "is" : "are"} expected.
Types: ${variableDefinitions.map((e) => e.dataType.toString()).toSet().join(', ')}""",
    );
  }

  final statementTypeUsageCount = getStatementTypeUsageCount();
  if (statementTypeUsageCount.isNotEmpty) {
    for (final entry in statementTypeUsageCount.entries) {
      switch (entry.key) {
        case StatementType.statementBlockStatement:
        case StatementType.whileLoopStatement:
          break;
        default:
          final isSingular = entry.value == 1;
          hints.add(
            "${entry.value} '${entry.key.toString()}' statement${isSingular ? "" : "s"} ${isSingular ? "is" : "are"} expected.",
          );
          break;
      }
    }
  }

  return hints;
}