Skip to content

Commit 11d625e

Browse files
authored
completes observable refactoring (microsoft#154089)
1 parent 6e3e8aa commit 11d625e

File tree

15 files changed

+53
-106
lines changed

15 files changed

+53
-106
lines changed

src/vs/base/common/observableImpl/base.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ export class TransactionImpl implements ITransaction {
196196
export interface ISettableObservable<T, TChange = void> extends IObservable<T, TChange>, ISettable<T, TChange> {
197197
}
198198

199-
export function observableValue<T>(name: string, initialValue: T): ISettableObservable<T> {
199+
export function observableValue<T, TChange = void>(name: string, initialValue: T): ISettableObservable<T, TChange> {
200200
return new ObservableValue(name, initialValue);
201201
}
202202

src/vs/workbench/contrib/audioCues/browser/audioCueDebuggerContribution.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import { Disposable, IDisposable, toDisposable } from 'vs/base/common/lifecycle';
7+
import { autorunWithStore } from 'vs/base/common/observable';
78
import { IWorkbenchContribution } from 'vs/workbench/common/contributions';
89
import { AudioCue, IAudioCueService } from 'vs/workbench/contrib/audioCues/browser/audioCueService';
9-
import { autorunWithStore } from 'vs/workbench/contrib/audioCues/browser/observable';
1010
import { IDebugService, IDebugSession } from 'vs/workbench/contrib/debug/common/debug';
1111

1212
export class AudioCueLineDebuggerContribution

src/vs/workbench/contrib/audioCues/browser/audioCueLineFeatureContribution.ts

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,11 @@ import { ICodeEditor, isCodeEditor, isDiffEditor } from 'vs/editor/browser/edito
1212
import { IMarkerService, MarkerSeverity } from 'vs/platform/markers/common/markers';
1313
import { FoldingController } from 'vs/editor/contrib/folding/browser/folding';
1414
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
15-
import {
16-
autorun,
17-
autorunDelta,
18-
constObservable,
19-
derivedObservable,
20-
observableFromEvent,
21-
observableFromPromise,
22-
IObservable,
23-
wasEventTriggeredRecently,
24-
debouncedObservable,
25-
} from 'vs/workbench/contrib/audioCues/browser/observable';
2615
import { ITextModel } from 'vs/editor/common/model';
2716
import { GhostTextController } from 'vs/editor/contrib/inlineCompletions/browser/ghostTextController';
2817
import { AudioCue, IAudioCueService } from 'vs/workbench/contrib/audioCues/browser/audioCueService';
2918
import { CursorChangeReason } from 'vs/editor/common/cursorEvents';
19+
import { autorun, autorunDelta, constObservable, debouncedObservable, derived, IObservable, observableFromEvent, observableFromPromise, wasEventTriggeredRecently } from 'vs/base/common/observable';
3020

3121
export class AudioCueLineFeatureContribution
3222
extends Disposable
@@ -48,7 +38,7 @@ export class AudioCueLineFeatureContribution
4838
) {
4939
super();
5040

51-
const someAudioCueFeatureIsEnabled = derivedObservable(
41+
const someAudioCueFeatureIsEnabled = derived(
5242
'someAudioCueFeatureIsEnabled',
5343
(reader) =>
5444
this.features.some((feature) =>
@@ -73,7 +63,7 @@ export class AudioCueLineFeatureContribution
7363
);
7464

7565
this._register(
76-
autorun((reader) => {
66+
autorun('updateAudioCuesEnabled', (reader) => {
7767
this.store.clear();
7868

7969
if (!someAudioCueFeatureIsEnabled.read(reader)) {
@@ -84,7 +74,7 @@ export class AudioCueLineFeatureContribution
8474
if (activeEditor) {
8575
this.registerAudioCuesForEditor(activeEditor.editor, activeEditor.model, this.store);
8676
}
87-
}, 'updateAudioCuesEnabled')
77+
})
8878
);
8979
}
9080

@@ -118,7 +108,7 @@ export class AudioCueLineFeatureContribution
118108

119109
const featureStates = this.features.map((feature) => {
120110
const lineFeatureState = feature.getObservableState(editor, editorModel);
121-
const isFeaturePresent = derivedObservable(
111+
const isFeaturePresent = derived(
122112
`isPresentInLine:${feature.audioCue.name}`,
123113
(reader) => {
124114
if (!this.audioCueService.isEnabled(feature.audioCue).read(reader)) {
@@ -130,7 +120,7 @@ export class AudioCueLineFeatureContribution
130120
: lineFeatureState.read(reader).isPresent(lineNumber);
131121
}
132122
);
133-
return derivedObservable(
123+
return derived(
134124
`typingDebouncedFeatureState:\n${feature.audioCue.name}`,
135125
(reader) =>
136126
feature.debounceWhileTyping && isTyping.read(reader)
@@ -139,7 +129,7 @@ export class AudioCueLineFeatureContribution
139129
);
140130
});
141131

142-
const state = derivedObservable(
132+
const state = derived(
143133
'states',
144134
(reader) => ({
145135
lineNumber: debouncedLineNumber.read(reader),
@@ -282,7 +272,7 @@ class InlineCompletionLineFeature implements LineFeature {
282272
: undefined
283273
));
284274

285-
return derivedObservable<LineFeatureState>('ghostText', reader => {
275+
return derived<LineFeatureState>('ghostText', reader => {
286276
const ghostText = activeGhostText.read(reader)?.read(reader);
287277
return {
288278
isPresent(lineNumber) {

src/vs/workbench/contrib/audioCues/browser/audioCueService.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ import { FileAccess } from 'vs/base/common/network';
99
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
1010
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
1111
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
12-
import { observableFromEvent, IObservable, derivedObservable } from 'vs/workbench/contrib/audioCues/browser/observable';
1312
import { Event } from 'vs/base/common/event';
1413
import { localize } from 'vs/nls';
14+
import { IObservable, observableFromEvent, derived } from 'vs/base/common/observable';
1515

1616
export const IAudioCueService = createDecorator<IAudioCueService>('audioCue');
1717

@@ -95,7 +95,7 @@ export class AudioCueService extends Disposable implements IAudioCueService {
9595
),
9696
() => this.configurationService.getValue<'on' | 'off' | 'auto'>(cue.settingsKey)
9797
);
98-
return derivedObservable('audio cue enabled', reader => {
98+
return derived('audio cue enabled', reader => {
9999
const setting = settingObservable.read(reader);
100100
if (
101101
setting === 'on' ||

src/vs/workbench/contrib/audioCues/browser/observable.ts

Lines changed: 0 additions & 40 deletions
This file was deleted.

src/vs/workbench/contrib/mergeEditor/browser/model/mergeEditorModel.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55

66
import { CompareResult, equals } from 'vs/base/common/arrays';
77
import { BugIndicatingError } from 'vs/base/common/errors';
8+
import { ISettableObservable, derived, waitForState, observableValue, keepAlive, autorunHandleChanges, transaction, IReader, ITransaction, IObservable } from 'vs/base/common/observable';
89
import { ILanguageService } from 'vs/editor/common/languages/language';
910
import { ITextModel, ITextSnapshot } from 'vs/editor/common/model';
1011
import { IModelService } from 'vs/editor/common/services/model';
1112
import { EditorModel } from 'vs/workbench/common/editor/editorModel';
12-
import { autorunHandleChanges, derivedObservable, IObservable, IReader, ITransaction, keepAlive, ObservableValue, transaction, waitForState } from 'vs/workbench/contrib/audioCues/browser/observable';
1313
import { IDiffComputer } from 'vs/workbench/contrib/mergeEditor/browser/model/diffComputer';
1414
import { LineRange } from 'vs/workbench/contrib/mergeEditor/browser/model/lineRange';
1515
import { DetailedLineRangeMapping, DocumentMapping, LineRangeMapping } from 'vs/workbench/contrib/mergeEditor/browser/model/mapping';
@@ -28,7 +28,7 @@ export class MergeEditorModel extends EditorModel {
2828
private readonly input2TextModelDiffs = this._register(new TextModelDiffs(this.base, this.input2, this.diffComputer));
2929
private readonly resultTextModelDiffs = this._register(new TextModelDiffs(this.base, this.result, this.diffComputer));
3030

31-
public readonly state = derivedObservable('state', reader => {
31+
public readonly state = derived('state', reader => {
3232
const states = [
3333
this.input1TextModelDiffs,
3434
this.input2TextModelDiffs,
@@ -44,11 +44,11 @@ export class MergeEditorModel extends EditorModel {
4444
return MergeEditorModelState.upToDate;
4545
});
4646

47-
public readonly isUpToDate = derivedObservable('isUpToDate', reader => this.state.read(reader) === MergeEditorModelState.upToDate);
47+
public readonly isUpToDate = derived('isUpToDate', reader => this.state.read(reader) === MergeEditorModelState.upToDate);
4848

4949
public readonly onInitialized = waitForState(this.state, state => state === MergeEditorModelState.upToDate);
5050

51-
public readonly modifiedBaseRanges = derivedObservable<ModifiedBaseRange[]>('modifiedBaseRanges', (reader) => {
51+
public readonly modifiedBaseRanges = derived<ModifiedBaseRange[]>('modifiedBaseRanges', (reader) => {
5252
const input1Diffs = this.input1TextModelDiffs.diffs.read(reader);
5353
const input2Diffs = this.input2TextModelDiffs.diffs.read(reader);
5454

@@ -60,22 +60,22 @@ export class MergeEditorModel extends EditorModel {
6060
public readonly resultDiffs = this.resultTextModelDiffs.diffs;
6161

6262
private readonly modifiedBaseRangeStateStores =
63-
derivedObservable('modifiedBaseRangeStateStores', reader => {
63+
derived('modifiedBaseRangeStateStores', reader => {
6464
const map = new Map(
65-
this.modifiedBaseRanges.read(reader).map(s => ([s, new ObservableValue(ModifiedBaseRangeState.default, 'State')]))
65+
this.modifiedBaseRanges.read(reader).map(s => ([s, observableValue('State', ModifiedBaseRangeState.default)]))
6666
);
6767
return map;
6868
});
6969

7070
private readonly modifiedBaseRangeHandlingStateStores =
71-
derivedObservable('modifiedBaseRangeHandlingStateStores', reader => {
71+
derived('modifiedBaseRangeHandlingStateStores', reader => {
7272
const map = new Map(
73-
this.modifiedBaseRanges.read(reader).map(s => ([s, new ObservableValue(false, 'State')]))
73+
this.modifiedBaseRanges.read(reader).map(s => ([s, observableValue('State', false)]))
7474
);
7575
return map;
7676
});
7777

78-
public readonly unhandledConflictsCount = derivedObservable('unhandledConflictsCount', reader => {
78+
public readonly unhandledConflictsCount = derived('unhandledConflictsCount', reader => {
7979
const map = this.modifiedBaseRangeHandlingStateStores.read(reader);
8080
let handledCount = 0;
8181
for (const [_key, value] of map) {
@@ -86,7 +86,7 @@ export class MergeEditorModel extends EditorModel {
8686

8787
public readonly hasUnhandledConflicts = this.unhandledConflictsCount.map(value => /** @description hasUnhandledConflicts */ value > 0);
8888

89-
public readonly input1ResultMapping = derivedObservable('input1ResultMapping', reader => {
89+
public readonly input1ResultMapping = derived('input1ResultMapping', reader => {
9090
const resultDiffs = this.resultDiffs.read(reader);
9191
const modifiedBaseRanges = DocumentMapping.betweenOutputs(this.input1LinesDiffs.read(reader), resultDiffs, this.input1.getLineCount());
9292

@@ -103,7 +103,7 @@ export class MergeEditorModel extends EditorModel {
103103
);
104104
});
105105

106-
public readonly input2ResultMapping = derivedObservable('input2ResultMapping', reader => {
106+
public readonly input2ResultMapping = derived('input2ResultMapping', reader => {
107107
const resultDiffs = this.resultDiffs.read(reader);
108108
const modifiedBaseRanges = DocumentMapping.betweenOutputs(this.input2LinesDiffs.read(reader), resultDiffs, this.input2.getLineCount());
109109

@@ -192,7 +192,7 @@ export class MergeEditorModel extends EditorModel {
192192
return this.resultTextModelDiffs.getResultRange(baseRange, reader);
193193
}
194194

195-
private recomputeState(resultDiffs: DetailedLineRangeMapping[], stores: Map<ModifiedBaseRange, ObservableValue<ModifiedBaseRangeState>>, tx: ITransaction): void {
195+
private recomputeState(resultDiffs: DetailedLineRangeMapping[], stores: Map<ModifiedBaseRange, ISettableObservable<ModifiedBaseRangeState>>, tx: ITransaction): void {
196196
const baseRangeWithStoreAndTouchingDiffs = leftJoin(
197197
stores,
198198
resultDiffs,

src/vs/workbench/contrib/mergeEditor/browser/model/textModelDiffs.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,17 @@ import { compareBy, numberComparator } from 'vs/base/common/arrays';
77
import { BugIndicatingError } from 'vs/base/common/errors';
88
import { Disposable, toDisposable } from 'vs/base/common/lifecycle';
99
import { ITextModel } from 'vs/editor/common/model';
10-
import { IObservable, IReader, ITransaction, ObservableValue, transaction } from 'vs/workbench/contrib/audioCues/browser/observable';
1110
import { DetailedLineRangeMapping } from 'vs/workbench/contrib/mergeEditor/browser/model/mapping';
1211
import { LineRangeEdit } from 'vs/workbench/contrib/mergeEditor/browser/model/editing';
1312
import { LineRange } from 'vs/workbench/contrib/mergeEditor/browser/model/lineRange';
1413
import { ReentrancyBarrier } from 'vs/workbench/contrib/mergeEditor/browser/utils';
1514
import { IDiffComputer } from './diffComputer';
15+
import { IObservable, IReader, ITransaction, observableValue, transaction } from 'vs/base/common/observable';
1616

1717
export class TextModelDiffs extends Disposable {
1818
private updateCount = 0;
19-
private readonly _state = new ObservableValue<TextModelDiffState, TextModelDiffChangeReason>(TextModelDiffState.initializing, 'LiveDiffState');
20-
private readonly _diffs = new ObservableValue<DetailedLineRangeMapping[], TextModelDiffChangeReason>([], 'LiveDiffs');
19+
private readonly _state = observableValue<TextModelDiffState, TextModelDiffChangeReason>('LiveDiffState', TextModelDiffState.initializing);
20+
private readonly _diffs = observableValue<DetailedLineRangeMapping[], TextModelDiffChangeReason>('LiveDiffs', []);
2121

2222
private readonly barrier = new ReentrancyBarrier();
2323
private isDisposed = false;

src/vs/workbench/contrib/mergeEditor/browser/utils.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,10 @@
55

66
import { CompareResult, ArrayQueue } from 'vs/base/common/arrays';
77
import { BugIndicatingError } from 'vs/base/common/errors';
8-
import { DisposableStore, toDisposable } from 'vs/base/common/lifecycle';
8+
import { DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle';
9+
import { IObservable, autorun } from 'vs/base/common/observable';
910
import { CodeEditorWidget } from 'vs/editor/browser/widget/codeEditorWidget';
1011
import { IModelDeltaDecoration } from 'vs/editor/common/model';
11-
import { IObservable, autorun } from 'vs/workbench/contrib/audioCues/browser/observable';
12-
import { IDisposable } from 'xterm';
1312

1413
export class ReentrancyBarrier {
1514
private isActive = false;
@@ -74,12 +73,12 @@ function toSize(value: number | string): string {
7473
export function applyObservableDecorations(editor: CodeEditorWidget, decorations: IObservable<IModelDeltaDecoration[]>): IDisposable {
7574
const d = new DisposableStore();
7675
let decorationIds: string[] = [];
77-
d.add(autorun(reader => {
76+
d.add(autorun(`Apply decorations from ${decorations.debugName}`, reader => {
7877
const d = decorations.read(reader);
7978
editor.changeDecorations(a => {
8079
decorationIds = a.deltaDecorations(decorationIds, d);
8180
});
82-
}, `Apply decorations from ${decorations.debugName}`));
81+
}));
8382
d.add({
8483
dispose: () => {
8584
editor.changeDecorations(a => {

src/vs/workbench/contrib/mergeEditor/browser/view/editorGutter.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@
55

66
import { h } from 'vs/base/browser/dom';
77
import { Disposable, IDisposable } from 'vs/base/common/lifecycle';
8-
import { observableSignalFromEvent } from 'vs/base/common/observable';
8+
import { autorun, IReader, observableFromEvent, observableSignalFromEvent } from 'vs/base/common/observable';
99
import { CodeEditorWidget } from 'vs/editor/browser/widget/codeEditorWidget';
10-
import { autorun, IReader, observableFromEvent } from 'vs/workbench/contrib/audioCues/browser/observable';
1110
import { LineRange } from 'vs/workbench/contrib/mergeEditor/browser/model/lineRange';
1211

1312
export class EditorGutter<T extends IGutterItemInfo = IGutterItemInfo> extends Disposable {
@@ -36,11 +35,11 @@ export class EditorGutter<T extends IGutterItemInfo = IGutterItemInfo> extends D
3635
.root
3736
);
3837

39-
this._register(autorun((reader) => {
38+
this._register(autorun('update scroll decoration', (reader) => {
4039
scrollDecoration.className = this.isScrollTopZero.read(reader) ? '' : 'scroll-decoration';
41-
}, 'update scroll decoration'));
40+
}));
4241

43-
this._register(autorun((reader) => this.render(reader), 'EditorGutter.Render'));
42+
this._register(autorun('EditorGutter.Render', (reader) => this.render(reader)));
4443
}
4544

4645
private readonly views = new Map<string, ManagedGutterItemView>();

src/vs/workbench/contrib/mergeEditor/browser/view/editors/codeEditorView.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,18 @@ import { IView, IViewSize } from 'vs/base/browser/ui/grid/grid';
88
import { renderLabelWithIcons } from 'vs/base/browser/ui/iconLabel/iconLabels';
99
import { Emitter, Event } from 'vs/base/common/event';
1010
import { Disposable } from 'vs/base/common/lifecycle';
11+
import { IObservable, observableFromEvent, observableValue, transaction } from 'vs/base/common/observable';
1112
import { IEditorContributionDescription } from 'vs/editor/browser/editorExtensions';
1213
import { CodeEditorWidget } from 'vs/editor/browser/widget/codeEditorWidget';
1314
import { IEditorOptions } from 'vs/editor/common/config/editorOptions';
1415
import { ITextModel } from 'vs/editor/common/model';
1516
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
1617
import { DEFAULT_EDITOR_MAX_DIMENSIONS, DEFAULT_EDITOR_MIN_DIMENSIONS } from 'vs/workbench/browser/parts/editor/editor';
17-
import { IObservable, observableFromEvent, ObservableValue, transaction } from 'vs/workbench/contrib/audioCues/browser/observable';
1818
import { setStyle } from 'vs/workbench/contrib/mergeEditor/browser/utils';
1919
import { MergeEditorViewModel } from 'vs/workbench/contrib/mergeEditor/browser/view/viewModel';
2020

2121
export abstract class CodeEditorView extends Disposable {
22-
private readonly _viewModel = new ObservableValue<undefined | MergeEditorViewModel>(undefined, 'viewModel');
22+
private readonly _viewModel = observableValue<undefined | MergeEditorViewModel>('viewModel', undefined);
2323
readonly viewModel: IObservable<undefined | MergeEditorViewModel> = this._viewModel;
2424
readonly model = this._viewModel.map(m => /** @description model */ m?.model);
2525

0 commit comments

Comments
 (0)