1
+ import type { Point , TextEditor , TextChange , Disposable } from "atom"
2
+ // TODO add to @types /atom
3
+ type AggregatedTextChange = {
4
+ changes : Array < TextChange >
5
+ }
1
6
import type { TextEdit } from "@atom-ide-community/nuclide-commons-atom/text-edit"
2
7
import type { BusySignalService } from "atom-ide-base"
3
8
import type {
@@ -20,19 +25,20 @@ import nuclideUri from "@atom-ide-community/nuclide-commons/nuclideUri"
20
25
import { completingSwitchMap , microtask } from "@atom-ide-community/nuclide-commons/observable"
21
26
import UniversalDisposable from "@atom-ide-community/nuclide-commons/UniversalDisposable"
22
27
import { Observable } from "rxjs-compat/bundles/rxjs-compat.umd.min.js"
28
+ import type { Subscription } from "rxjs"
23
29
24
30
// Save events are critical, so don't allow providers to block them.
25
31
export const SAVE_TIMEOUT = 2500
26
32
27
33
type FormatEvent =
28
34
| {
29
35
type : "command" | "save" | "new-save"
30
- editor : atom$ TextEditor
36
+ editor : TextEditor
31
37
}
32
38
| {
33
39
type : "type"
34
- editor : atom$ TextEditor
35
- edit : atom$AggregatedTextEditEvent
40
+ editor : TextEditor
41
+ edit : AggregatedTextChange
36
42
}
37
43
38
44
export default class CodeFormatManager {
@@ -58,7 +64,7 @@ export default class CodeFormatManager {
58
64
* Subscribe to all formatting events (commands, saves, edits) and dispatch formatters as necessary. By handling all
59
65
* events in a central location, we ensure that no buffer runs into race conditions with simultaneous formatters.
60
66
*/
61
- _subscribeToEvents ( ) : rxjs$ Subscription {
67
+ _subscribeToEvents ( ) : Subscription {
62
68
// Events from the explicit Atom command.
63
69
const commandEvents = observableFromSubscribeFunction ( ( callback ) =>
64
70
atom . commands . add ( "atom-text-editor" , "code-format:format-code" , callback )
@@ -92,7 +98,7 @@ export default class CodeFormatManager {
92
98
}
93
99
94
100
/** Returns a stream of all typing and saving operations from the editor. */
95
- _getEditorEventStream ( editor : atom$ TextEditor) : Observable < FormatEvent > {
101
+ _getEditorEventStream ( editor : TextEditor ) : Observable < FormatEvent > {
96
102
const changeEvents = observableFromSubscribeFunction ( ( callback ) => editor . getBuffer ( ) . onDidChangeText ( callback ) )
97
103
98
104
// We need to capture when editors are about to be destroyed in order to
@@ -145,12 +151,12 @@ export default class CodeFormatManager {
145
151
}
146
152
147
153
// Return the text edits used to format code in the editor specified.
148
- _formatCodeInTextEditor ( editor : atom$ TextEditor, range ?: atom$ Range) : Observable < Array < TextEdit > > {
154
+ _formatCodeInTextEditor ( editor : TextEditor , range ?: Range ) : Observable < Array < TextEdit > > {
149
155
return Observable . defer ( ( ) => {
150
156
const buffer = editor . getBuffer ( )
151
157
const selectionRange = range || editor . getSelectedBufferRange ( )
152
158
const { start : selectionStart , end : selectionEnd } = selectionRange
153
- let formatRange : atom$ Range
159
+ let formatRange : Range
154
160
if ( selectionRange . isEmpty ( ) ) {
155
161
// If no selection is done, then, the whole file is wanted to be formatted.
156
162
formatRange = buffer . getRange ( )
@@ -208,8 +214,8 @@ export default class CodeFormatManager {
208
214
}
209
215
210
216
_formatCodeOnTypeInTextEditor (
211
- editor : atom$ TextEditor,
212
- aggregatedEvent : atom$AggregatedTextEditEvent
217
+ editor : TextEditor ,
218
+ aggregatedEvent : AggregatedTextChange
213
219
) : Observable < Array < TextEdit > > {
214
220
return Observable . defer ( ( ) => {
215
221
// Don't try to format changes with multiple cursors.
@@ -289,7 +295,7 @@ export default class CodeFormatManager {
289
295
}
290
296
}
291
297
292
- _formatCodeOnSaveInTextEditor ( editor : atom$ TextEditor) : Observable < TextEdit > {
298
+ _formatCodeOnSaveInTextEditor ( editor : TextEditor ) : Observable < TextEdit > {
293
299
const saveProviders = [ ...this . _onSaveProviders . getAllProvidersForEditor ( editor ) ]
294
300
if ( saveProviders . length > 0 ) {
295
301
return Observable . defer ( ( ) =>
@@ -312,7 +318,7 @@ export default class CodeFormatManager {
312
318
return Observable . empty ( )
313
319
}
314
320
315
- _reportBusy < T > ( editor : atom$ TextEditor, promise : Promise < T > , revealTooltip : boolean = true ) : Promise < T > {
321
+ _reportBusy < T > ( editor : TextEditor , promise : Promise < T > , revealTooltip : boolean = true ) : Promise < T > {
316
322
const busySignalService = this . _busySignalService
317
323
if ( busySignalService != null ) {
318
324
const path = editor . getPath ( )
@@ -322,23 +328,23 @@ export default class CodeFormatManager {
322
328
return promise
323
329
}
324
330
325
- addRangeProvider ( provider : RangeCodeFormatProvider ) : IDisposable {
331
+ addRangeProvider ( provider : RangeCodeFormatProvider ) : Disposable {
326
332
return this . _rangeProviders . addProvider ( provider )
327
333
}
328
334
329
- addFileProvider ( provider : FileCodeFormatProvider ) : IDisposable {
335
+ addFileProvider ( provider : FileCodeFormatProvider ) : Disposable {
330
336
return this . _fileProviders . addProvider ( provider )
331
337
}
332
338
333
- addOnTypeProvider ( provider : OnTypeCodeFormatProvider ) : IDisposable {
339
+ addOnTypeProvider ( provider : OnTypeCodeFormatProvider ) : Disposable {
334
340
return this . _onTypeProviders . addProvider ( provider )
335
341
}
336
342
337
- addOnSaveProvider ( provider : OnSaveCodeFormatProvider ) : IDisposable {
343
+ addOnSaveProvider ( provider : OnSaveCodeFormatProvider ) : Disposable {
338
344
return this . _onSaveProviders . addProvider ( provider )
339
345
}
340
346
341
- consumeBusySignal ( busySignalService : BusySignalService ) : IDisposable {
347
+ consumeBusySignal ( busySignalService : BusySignalService ) : Disposable {
342
348
this . _busySignalService = busySignalService
343
349
return new UniversalDisposable ( ( ) => {
344
350
this . _busySignalService = null
@@ -350,7 +356,7 @@ export default class CodeFormatManager {
350
356
}
351
357
}
352
358
353
- function shouldFormatOnType ( event : atom$TextEditEvent ) : boolean {
359
+ function shouldFormatOnType ( event : TextChange ) : boolean {
354
360
// There's not a direct way to figure out what caused this edit event. There
355
361
// are three cases that we want to pay attention to:
356
362
//
0 commit comments