1- import { dependencyManagement } from "nova-extension-utils" ;
1+ import { dependencyManagement , preferences } from "nova-extension-utils" ;
22import { registerFindReferences } from "./commands/findReferences" ;
33import { registerFindSymbol } from "./commands/findSymbol" ;
44import { registerOrganizeImports } from "./commands/organizeImports" ;
@@ -7,9 +7,11 @@ import { registerSignatureHelp } from "./commands/signatureHelp";
77import { InformationView } from "./informationView" ;
88import { isEnabledForJavascript } from "./isEnabledForJavascript" ;
99import { wrapCommand } from "./novaUtils" ;
10- import { shouldOrganizeImportsOnSave } from "./shouldOrganizeImportsOnSave" ;
1110import { getTsLibPath } from "./tsLibPath" ;
1211
12+ const organizeImportsOnSaveKey =
13+ "apexskier.typescript.config.organizeImportsOnSave" ;
14+
1315nova . commands . register (
1416 "apexskier.typescript.openWorkspaceConfig" ,
1517 wrapCommand ( function openWorkspaceConfig ( workspace : Workspace ) {
@@ -189,21 +191,53 @@ async function asyncActivate() {
189191
190192 client . start ( ) ;
191193
194+ // auto-organize imports on save
192195 compositeDisposable . add (
193196 nova . workspace . onDidAddTextEditor ( ( editor ) => {
194- const listener = editor . onWillSave ( async ( editor ) => {
197+ const editorDisposable = new CompositeDisposable ( ) ;
198+ compositeDisposable . add ( editorDisposable ) ;
199+ compositeDisposable . add (
200+ editor . onDidDestroy ( ( ) => editorDisposable . dispose ( ) )
201+ ) ;
202+
203+ // watch things that might change if this needs to happen or not
204+ editorDisposable . add ( editor . document . onDidChangeSyntax ( refreshListener ) ) ;
205+ editorDisposable . add (
206+ nova . config . onDidChange ( organizeImportsOnSaveKey , refreshListener )
207+ ) ;
208+ editorDisposable . add (
209+ nova . workspace . config . onDidChange (
210+ organizeImportsOnSaveKey ,
211+ refreshListener
212+ )
213+ ) ;
214+
215+ let willSaveListener = setupListener ( ) ;
216+ compositeDisposable . add ( {
217+ dispose ( ) {
218+ willSaveListener ?. dispose ( ) ;
219+ } ,
220+ } ) ;
221+
222+ function refreshListener ( ) {
223+ willSaveListener ?. dispose ( ) ;
224+ willSaveListener = setupListener ( ) ;
225+ }
226+
227+ function setupListener ( ) {
195228 if (
196- editor . document . syntax &&
197- syntaxes . includes ( editor . document . syntax ) &&
198- shouldOrganizeImportsOnSave ( )
229+ ( syntaxes as Array < string | null > ) . includes ( editor . document . syntax ) &&
230+ preferences . getOverridableBoolean ( organizeImportsOnSaveKey )
199231 ) {
200- await nova . commands . invoke (
201- "apexskier.typescript.commands.organizeImports" ,
202- editor
232+ return editor . onWillSave ( async ( editor ) =>
233+ nova . commands . invoke (
234+ "apexskier.typescript.commands.organizeImports" ,
235+ editor
236+ )
203237 ) ;
204238 }
205- } ) ;
206- compositeDisposable . add ( editor . onDidDestroy ( ( ) => listener . dispose ( ) ) ) ;
239+ return null ;
240+ }
207241 } )
208242 ) ;
209243
0 commit comments