@@ -99,6 +99,8 @@ const packageJson = vscode.extensions.getExtension(extensionId).packageJSON;
99
99
const extensionVersion = packageJson . version ;
100
100
const aiKey = packageJson . aiKey ;
101
101
102
+ const _onDidChangeConnection = new vscode . EventEmitter < void > ( ) ;
103
+
102
104
export const config = ( setting ?: string , workspaceFolderName ?: string ) : vscode . WorkspaceConfiguration | any => {
103
105
workspaceFolderName = workspaceFolderName || currentWorkspaceFolder ( ) ;
104
106
if (
@@ -192,6 +194,7 @@ export async function checkConnection(clearCookies = false, uri?: vscode.Uri): P
192
194
workspaceState . update ( configName + ":password" , undefined ) ;
193
195
workspaceState . update ( configName + ":apiVersion" , undefined ) ;
194
196
workspaceState . update ( configName + ":docker" , undefined ) ;
197
+ _onDidChangeConnection . fire ( ) ;
195
198
}
196
199
let api = new AtelierAPI ( apiTarget , false ) ;
197
200
const { active, host = "" , port = 0 , ns = "" } = api . config ;
@@ -224,6 +227,7 @@ export async function checkConnection(clearCookies = false, uri?: vscode.Uri): P
224
227
workspaceState . update ( configName + ":port" , dockerPort ) ;
225
228
}
226
229
connInfo = `localhost:${ dockerPort } [${ ns } ]` ;
230
+ _onDidChangeConnection . fire ( ) ;
227
231
}
228
232
} catch ( error ) {
229
233
outputChannel . appendError ( error ) ;
@@ -279,6 +283,7 @@ export async function checkConnection(clearCookies = false, uri?: vscode.Uri): P
279
283
async ( password ) => {
280
284
if ( password ) {
281
285
workspaceState . update ( configName + ":password" , password ) ;
286
+ _onDidChangeConnection . fire ( ) ;
282
287
await checkConnection ( false , uri ) ;
283
288
} else if ( ! api . externalServer ) {
284
289
disableConnection ( configName ) ;
@@ -365,6 +370,13 @@ async function serverManager(): Promise<any> {
365
370
}
366
371
}
367
372
373
+ function languageServer ( ) : vscode . Extension < any > {
374
+ const extId = "intersystems.language-server" ;
375
+ const extension = vscode . extensions . getExtension ( extId ) ;
376
+
377
+ return extension ;
378
+ }
379
+
368
380
export async function activate ( context : vscode . ExtensionContext ) : Promise < any > {
369
381
if ( ! packageJson . version . includes ( "SNAPSHOT" ) ) {
370
382
try {
@@ -500,9 +512,6 @@ export async function activate(context: vscode.ExtensionContext): Promise<any> {
500
512
[ "file" , ...schemas ] . reduce ( ( acc , scheme ) => acc . concat ( list . map ( ( language ) => ( { scheme, language } ) ) ) , [ ] ) ;
501
513
502
514
const diagnosticProvider = new ObjectScriptDiagnosticProvider ( ) ;
503
- if ( vscode . window . activeTextEditor ) {
504
- diagnosticProvider . updateDiagnostics ( vscode . window . activeTextEditor . document ) ;
505
- }
506
515
507
516
// Gather the proposed APIs we will register to use when building with enableProposedApi = true
508
517
const proposed = [
@@ -525,10 +534,63 @@ export async function activate(context: vscode.ExtensionContext): Promise<any> {
525
534
outputChannel . show ( true ) ;
526
535
}
527
536
537
+ const languageServerExt = languageServer ( ) ;
538
+ const noLSsubscriptions : { dispose ( ) : any } [ ] = [ ] ;
539
+ if ( ! languageServerExt ) {
540
+ outputChannel . appendLine ( `The language-server extension was not found.\n` ) ;
541
+ outputChannel . show ( true ) ;
542
+
543
+ if ( vscode . window . activeTextEditor ) {
544
+ diagnosticProvider . updateDiagnostics ( vscode . window . activeTextEditor . document ) ;
545
+ }
546
+ noLSsubscriptions . push (
547
+ workspace . onDidChangeTextDocument ( ( event ) => {
548
+ diagnosticProvider . updateDiagnostics ( event . document ) ;
549
+ } ) ,
550
+ window . onDidChangeActiveTextEditor ( async ( editor ) => {
551
+ if ( editor ) {
552
+ diagnosticProvider . updateDiagnostics ( editor . document ) ;
553
+ }
554
+ } ) ,
555
+ vscode . languages . registerHoverProvider (
556
+ documentSelector ( "objectscript-class" , "objectscript" , "objectscript-macros" ) ,
557
+ new ObjectScriptHoverProvider ( )
558
+ ) ,
559
+ vscode . languages . registerDocumentFormattingEditProvider (
560
+ documentSelector ( "objectscript-class" , "objectscript" , "objectscript-macros" ) ,
561
+ new DocumentFormattingEditProvider ( )
562
+ ) ,
563
+ vscode . languages . registerDocumentRangeFormattingEditProvider (
564
+ documentSelector ( "objectscript-class" , "objectscript" , "objectscript-macros" ) ,
565
+ new DocumentRangeFormattingEditProvider ( )
566
+ ) ,
567
+ vscode . languages . registerDefinitionProvider (
568
+ documentSelector ( "objectscript-class" , "objectscript" , "objectscript-macros" ) ,
569
+ new ObjectScriptDefinitionProvider ( )
570
+ ) ,
571
+ vscode . languages . registerCompletionItemProvider (
572
+ documentSelector ( "objectscript-class" , "objectscript" , "objectscript-macros" ) ,
573
+ new ObjectScriptCompletionItemProvider ( ) ,
574
+ "$" ,
575
+ "^" ,
576
+ "." ,
577
+ "#"
578
+ )
579
+ ) ;
580
+ context . subscriptions . push ( ...noLSsubscriptions ) ;
581
+ }
582
+
528
583
context . subscriptions . push (
529
584
reporter ,
585
+ vscode . extensions . onDidChange ( ( ) => {
586
+ const languageServerExt2 = languageServer ( ) ;
587
+ if ( typeof languageServerExt !== typeof languageServerExt2 ) {
588
+ noLSsubscriptions . forEach ( ( event ) => {
589
+ event . dispose ( ) ;
590
+ } ) ;
591
+ }
592
+ } ) ,
530
593
workspace . onDidChangeTextDocument ( ( event ) => {
531
- diagnosticProvider . updateDiagnostics ( event . document ) ;
532
594
if (
533
595
event . contentChanges . length !== 0 &&
534
596
event . document . uri . scheme === FILESYSTEM_SCHEMA &&
@@ -541,9 +603,6 @@ export async function activate(context: vscode.ExtensionContext): Promise<any> {
541
603
}
542
604
} ) ,
543
605
window . onDidChangeActiveTextEditor ( async ( editor ) => {
544
- if ( editor ) {
545
- diagnosticProvider . updateDiagnostics ( editor . document ) ;
546
- }
547
606
if ( workspace . workspaceFolders && workspace . workspaceFolders . length > 1 ) {
548
607
const workspaceFolder = currentWorkspaceFolder ( ) ;
549
608
if ( workspaceFolder && workspaceFolder !== workspaceState . get < string > ( "workspaceFolder" ) ) {
@@ -715,30 +774,6 @@ export async function activate(context: vscode.ExtensionContext): Promise<any> {
715
774
documentSelector ( "objectscript" ) ,
716
775
new ObjectScriptFoldingRangeProvider ( )
717
776
) ,
718
- vscode . languages . registerDefinitionProvider (
719
- documentSelector ( "objectscript-class" , "objectscript" , "objectscript-macros" ) ,
720
- new ObjectScriptDefinitionProvider ( )
721
- ) ,
722
- vscode . languages . registerCompletionItemProvider (
723
- documentSelector ( "objectscript-class" , "objectscript" , "objectscript-macros" ) ,
724
- new ObjectScriptCompletionItemProvider ( ) ,
725
- "$" ,
726
- "^" ,
727
- "." ,
728
- "#"
729
- ) ,
730
- vscode . languages . registerHoverProvider (
731
- documentSelector ( "objectscript-class" , "objectscript" , "objectscript-macros" ) ,
732
- new ObjectScriptHoverProvider ( )
733
- ) ,
734
- vscode . languages . registerDocumentFormattingEditProvider (
735
- documentSelector ( "objectscript-class" , "objectscript" , "objectscript-macros" ) ,
736
- new DocumentFormattingEditProvider ( )
737
- ) ,
738
- vscode . languages . registerDocumentRangeFormattingEditProvider (
739
- documentSelector ( "objectscript-class" , "objectscript" , "objectscript-macros" ) ,
740
- new DocumentRangeFormattingEditProvider ( )
741
- ) ,
742
777
vscode . languages . registerWorkspaceSymbolProvider ( new WorkspaceSymbolProvider ( ) ) ,
743
778
vscode . debug . registerDebugConfigurationProvider ( "objectscript" , new ObjectScriptConfigurationProvider ( ) ) ,
744
779
vscode . debug . registerDebugAdapterDescriptorFactory ( "objectscript" , debugAdapterFactory ) ,
@@ -802,6 +837,9 @@ export async function activate(context: vscode.ExtensionContext): Promise<any> {
802
837
}
803
838
return uri ;
804
839
} ,
840
+ onDidChangeConnection ( ) : vscode . Event < void > {
841
+ return _onDidChangeConnection . event ;
842
+ } ,
805
843
} ;
806
844
807
845
// 'export' our public API
0 commit comments