@Override
  protected Pair<SectionField, Integer> parseSectionField(int lineNum, int sectionIndent, @NotNull FieldType fieldType) {
    final Substring line = getLine(lineNum);
    Substring name = null;
    Substring type = null;
    Substring description;
    // Napoleon requires that each parameter line contains a colon - we don't because
    // we need to parse and complete parameter names before colon is typed
    final List<Substring> colonSeparatedParts = splitByFirstColon(line);
    assert colonSeparatedParts.size() <= 2;
    final Substring textBeforeColon = colonSeparatedParts.get(0);

    // In cases like the following:
    //
    // Returns:
    //   Foo
    //
    // Napoleon treats "Foo" as the return value description, not type, since there is no subsequent colon.
    if (colonSeparatedParts.size() == 2 || !fieldType.canHaveOnlyDescription) {
      description = colonSeparatedParts.size() == 2 ? colonSeparatedParts.get(1) : null;
      name = textBeforeColon.trim();
      if (fieldType.canHaveBothNameAndType) {
        final Matcher matcher = FIELD_NAME_AND_TYPE.matcher(textBeforeColon);
        if (matcher.matches()) {
          name = textBeforeColon.getMatcherGroup(matcher, 1).trim();
          type = textBeforeColon.getMatcherGroup(matcher, 2).trim();
        }
      }

      if (fieldType.preferType && type == null) {
        type = name;
        name = null;
      }
      if (name != null) {
        name = cleanUpName(name);
      }
      if (name != null ? !isValidName(name.toString()) : !isValidType(type.toString())) {
        return Pair.create(null, lineNum);
      }
    }
    else {
      description = textBeforeColon;
    }

    if (description != null) {
      final Pair<List<Substring>, Integer> pair = parseFieldContinuation(lineNum, fieldType);
      final List<Substring> nestedBlock = pair.getFirst();
      if (!nestedBlock.isEmpty()) {
        description = description.union(ContainerUtil.getLastItem(nestedBlock));
      }
      description = description.trim();
      return Pair.create(new SectionField(name, type, description), pair.getSecond());
    }
    return Pair.create(new SectionField(name, type, null), lineNum + 1);
  }
@Override
  protected Pair<SectionField, Integer> parseSectionField(int lineNum, int sectionIndent, @NotNull FieldType fieldType)