deletionRange method

SourceRange deletionRange(
  1. AstNode node, {
  2. Token? overrideEnd,
})

Return the deletion range of the node, considering the spaces and comments before and after it.

If a non-null overrideEnd is supplied, it will be used in place of AstNode.endToken to determine the range of tokens to delete.

Implementation

SourceRange deletionRange(AstNode node, {Token? overrideEnd}) {
  var begin = node.beginToken;
  begin = begin.precedingComments ?? begin;

  var initialEndToken = overrideEnd ?? node.endToken;
  var end = initialEndToken.next!;
  end = end.precedingComments ?? end;

  int startOffset;
  int endOffset;
  if (end.isEof) {
    var type = begin.type;
    if (node is AnnotatedNode &&
        (type == TokenType.SINGLE_LINE_COMMENT ||
            type == TokenType.MULTI_LINE_COMMENT)) {
      var firstToken = node.firstTokenAfterCommentAndMetadata;
      startOffset = firstToken.previous!.end;
    } else if (begin.previous!.isEof) {
      startOffset = begin.offset;
    } else {
      startOffset = begin.previous!.end;
    }
    endOffset = initialEndToken.end;
  } else {
    startOffset = begin.offset;
    endOffset = end.offset;
  }
  return startOffsetEndOffset(startOffset, endOffset);
}