Skip to content

Commit 8f4e492

Browse files
author
Loïc Mangeonjean
committed
fix: make tools return Disposables
1 parent ef097eb commit 8f4e492

File tree

1 file changed

+39
-29
lines changed

1 file changed

+39
-29
lines changed

src/tools.ts

Lines changed: 39 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ export function lockCodeWithoutDecoration (
1616
decorations: string[],
1717
allowChangeFromSources: string[] = [],
1818
errorMessage?: string
19-
): () => void {
19+
): monaco.IDisposable {
20+
const disposableStore = new DisposableStore()
2021
function displayLockedCodeError (position: monaco.Position) {
2122
if (errorMessage == null) {
2223
return
@@ -124,38 +125,42 @@ export function lockCodeWithoutDecoration (
124125
model.applyEdits = originalApplyEdit as typeof model.applyEdits
125126
}
126127
}
127-
const editorChangeModelDisposable = editor.onDidChangeModel(lockModel)
128+
disposableStore.add(editor.onDidChangeModel(lockModel))
128129
lockModel()
129130

130131
// Handle selection of the last line of an editable range
131-
const selectionDisposable = editor.onDidChangeCursorSelection(e => {
132-
if (canEditRange(e.selection)) {
133-
return
134-
}
135-
const model = editor.getModel()
136-
if (model == null) {
137-
return
138-
}
139-
const shiftedRange = monaco.Range.fromPositions(
140-
model.getPositionAt(model.getOffsetAt(e.selection.getStartPosition()) - 1),
141-
model.getPositionAt(model.getOffsetAt(e.selection.getEndPosition()) - 1)
142-
)
143-
if (canEditRange(shiftedRange)) {
144-
editor.setSelection(shiftedRange)
132+
disposableStore.add(
133+
editor.onDidChangeCursorSelection((e) => {
134+
if (canEditRange(e.selection)) {
135+
return
136+
}
137+
const model = editor.getModel()
138+
if (model == null) {
139+
return
140+
}
141+
const shiftedRange = monaco.Range.fromPositions(
142+
model.getPositionAt(model.getOffsetAt(e.selection.getStartPosition()) - 1),
143+
model.getPositionAt(model.getOffsetAt(e.selection.getEndPosition()) - 1)
144+
)
145+
if (canEditRange(shiftedRange)) {
146+
editor.setSelection(shiftedRange)
147+
}
148+
})
149+
)
150+
151+
disposableStore.add({
152+
dispose () {
153+
restoreModelApplyEdit()
154+
editor.executeEdits = originalExecuteEdit
155+
editor.executeCommands = originalExecuteCommands
156+
editor.trigger = originalTrigger
145157
}
146158
})
147159

148-
return () => {
149-
selectionDisposable.dispose()
150-
restoreModelApplyEdit()
151-
editorChangeModelDisposable.dispose()
152-
editor.executeEdits = originalExecuteEdit
153-
editor.executeCommands = originalExecuteCommands
154-
editor.trigger = originalTrigger
155-
}
160+
return disposableStore
156161
}
157162

158-
export function hideCodeWithoutDecoration (editor: monaco.editor.IStandaloneCodeEditor, decorations: string[]): () => void {
163+
export function hideCodeWithoutDecoration (editor: monaco.editor.IStandaloneCodeEditor, decorations: string[]): monaco.IDisposable {
159164
let otherHiddenAreas: monaco.IRange[] = editor._getViewModel()?.getHiddenAreas() ?? []
160165
function getHiddenAreas () {
161166
const model = editor.getModel()!
@@ -212,12 +217,17 @@ export function hideCodeWithoutDecoration (editor: monaco.editor.IStandaloneCode
212217
updateHiddenAreas()
213218
}
214219

220+
const disposableStore = new DisposableStore()
215221
updateHiddenAreas()
216222

217-
return () => {
218-
editor.setHiddenAreas = originalSetHiddenAreas
219-
editor.setHiddenAreas(otherHiddenAreas)
220-
}
223+
disposableStore.add({
224+
dispose () {
225+
editor.setHiddenAreas = originalSetHiddenAreas
226+
editor.setHiddenAreas(otherHiddenAreas)
227+
}
228+
})
229+
230+
return disposableStore
221231
}
222232

223233
/**

0 commit comments

Comments
 (0)