deletionRange method
SourceRange
deletionRange(
- AstNode node, {
- 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);
}