codeHandleAutoPair function
TextCommandResult
codeHandleAutoPair({
- required TextDocument document,
- required TextOffsetStateSnapshot state,
- required CodeLanguageProfile profile,
- required String typed,
Implementation
TextCommandResult codeHandleAutoPair({
required TextDocument document,
required TextOffsetStateSnapshot state,
required CodeLanguageProfile profile,
required String typed,
}) {
final matching = profile.autoPairs[typed];
if (matching != null) {
if (typed == matching &&
!codeShouldAutoPairSymmetricDelimiterInDocument(
document,
state.cursorOffset,
hasSelection: state.hasSelection,
)) {
return _unchangedCodeResultFromDocument(document, state);
}
if (state.hasSelection) {
return textWrapSelection(
document: document,
state: state,
before: typed,
after: matching,
);
}
final working = document.copy();
final result = edit_ops.insertTextIntoDocument(
working,
state.cursorOffset,
'$typed$matching',
);
return _codeResultFromDocument(
working,
cursorOffset:
state.cursorOffset.clamp(0, document.length) +
typed.characters.length,
documentChange: result.change,
changed: result.changed,
);
}
if (!profile.autoPairs.containsValue(typed) || state.hasSelection) {
return _unchangedCodeResultFromDocument(document, state);
}
final offset = state.cursorOffset;
if (document.matchesOffsetRange(
startOffset: offset,
graphemes: <String>[typed],
)) {
return _codeResultFromDocument(
document,
cursorOffset: offset + 1,
selectionBaseOffset: state.selectionBaseOffset,
selectionExtentOffset: state.selectionExtentOffset,
changed: true,
);
}
return _unchangedCodeResultFromDocument(document, state);
}