@@ -41,7 +41,7 @@ type FormatEvent =
41
41
}
42
42
43
43
export default class CodeFormatManager {
44
- _subscriptions : UniversalDisposable
44
+ _subscriptions = new UniversalDisposable ( )
45
45
_rangeProviders : ProviderRegistry < RangeCodeFormatProvider >
46
46
_fileProviders : ProviderRegistry < FileCodeFormatProvider >
47
47
_onTypeProviders : ProviderRegistry < OnTypeCodeFormatProvider >
@@ -50,7 +50,6 @@ export default class CodeFormatManager {
50
50
51
51
constructor ( ) {
52
52
this . _subscriptions = new UniversalDisposable (
53
- this . _subscribeToEvents ( ) ,
54
53
registerOnWillSave ( this . _onWillSaveProvider ( ) )
55
54
)
56
55
this . _rangeProviders = new ProviderRegistry ( )
@@ -65,23 +64,35 @@ export default class CodeFormatManager {
65
64
*/
66
65
_subscribeToEvents ( ) : Subscription {
67
66
// Events from the explicit Atom command.
68
- const commandEvents = observableFromSubscribeFunction ( ( callback ) =>
69
- atom . commands . add ( "atom-text-editor" , "code-format:format-code" , callback )
70
- ) . switchMap ( ( ) => {
71
- const editor = atom . workspace . getActiveTextEditor ( )
72
- if ( ! editor ) {
73
- return Observable . empty ( )
74
- }
75
- return Observable . of ( { type : "command" , editor } )
76
- } )
67
+ this . _subscriptions . add (
68
+ atom . commands . add ( "atom-text-editor" , "code-format:format-code" , async ( event ) => {
69
+ const editor = atom . workspace . getActiveTextEditor ( )
70
+ if ( ! editor ) {
71
+ return
72
+ }
73
+ // Make sure we halt everything when the editor gets destroyed.
74
+ const edits = await this . _formatCodeInTextEditor ( editor )
75
+ try {
76
+ applyTextEditsToBuffer ( editor . getBuffer ( ) , edits ) . forEach ( ( result ) => {
77
+ if ( ! result ) {
78
+ throw new Error ( "No code formatting providers found!" )
79
+ }
80
+ } )
81
+ } catch ( err ) {
82
+ atom . notifications . addError ( `Failed to format code: ${ err . message } ` , {
83
+ detail : err . detail ,
84
+ } )
85
+ }
86
+ } )
87
+ )
77
88
78
89
// Events from editor actions (saving, typing).
79
90
const editorEvents = observableFromSubscribeFunction ( ( cb ) => atom . workspace . observeTextEditors ( cb ) ) . mergeMap (
80
91
( editor ) => _getEditorEventStream ( editor )
81
92
)
82
93
83
94
return (
84
- Observable . merge ( commandEvents , editorEvents )
95
+ editorEvents
85
96
// Group events by buffer to prevent simultaneous formatting operations.
86
97
. groupBy (
87
98
( event ) => event . editor . getBuffer ( ) ,
@@ -99,21 +110,6 @@ export default class CodeFormatManager {
99
110
async _handleEvent ( event : FormatEvent ) {
100
111
const { editor } = event
101
112
switch ( event . type ) {
102
- case "command" : {
103
- const edits = await this . _formatCodeInTextEditor ( editor )
104
- try {
105
- applyTextEditsToBuffer ( editor . getBuffer ( ) , edits ) . forEach ( ( result ) => {
106
- if ( ! result ) {
107
- throw new Error ( "No code formatting providers found!" )
108
- }
109
- } )
110
- } catch ( err ) {
111
- atom . notifications . addError ( `Failed to format code: ${ err . message } ` , {
112
- detail : err . detail ,
113
- } )
114
- }
115
- break
116
- }
117
113
case "type" :
118
114
return this . _formatCodeOnTypeInTextEditor ( editor , event . edit ) . catch ( ( err ) => {
119
115
getLogger ( "code-format" ) . warn ( "Failed to format code on type:" , err )
0 commit comments