@@ -99,6 +99,8 @@ const packageJson = vscode.extensions.getExtension(extensionId).packageJSON;
9999const extensionVersion = packageJson . version ;
100100const aiKey = packageJson . aiKey ;
101101
102+ const _onDidChangeConnection = new vscode . EventEmitter < void > ( ) ;
103+
102104export const config = ( setting ?: string , workspaceFolderName ?: string ) : vscode . WorkspaceConfiguration | any => {
103105 workspaceFolderName = workspaceFolderName || currentWorkspaceFolder ( ) ;
104106 if (
@@ -192,6 +194,7 @@ export async function checkConnection(clearCookies = false, uri?: vscode.Uri): P
192194 workspaceState . update ( configName + ":password" , undefined ) ;
193195 workspaceState . update ( configName + ":apiVersion" , undefined ) ;
194196 workspaceState . update ( configName + ":docker" , undefined ) ;
197+ _onDidChangeConnection . fire ( ) ;
195198 }
196199 let api = new AtelierAPI ( apiTarget , false ) ;
197200 const { active, host = "" , port = 0 , ns = "" } = api . config ;
@@ -224,6 +227,7 @@ export async function checkConnection(clearCookies = false, uri?: vscode.Uri): P
224227 workspaceState . update ( configName + ":port" , dockerPort ) ;
225228 }
226229 connInfo = `localhost:${ dockerPort } [${ ns } ]` ;
230+ _onDidChangeConnection . fire ( ) ;
227231 }
228232 } catch ( error ) {
229233 outputChannel . appendError ( error ) ;
@@ -279,6 +283,7 @@ export async function checkConnection(clearCookies = false, uri?: vscode.Uri): P
279283 async ( password ) => {
280284 if ( password ) {
281285 workspaceState . update ( configName + ":password" , password ) ;
286+ _onDidChangeConnection . fire ( ) ;
282287 await checkConnection ( false , uri ) ;
283288 } else if ( ! api . externalServer ) {
284289 disableConnection ( configName ) ;
@@ -365,6 +370,13 @@ async function serverManager(): Promise<any> {
365370 }
366371}
367372
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+
368380export async function activate ( context : vscode . ExtensionContext ) : Promise < any > {
369381 if ( ! packageJson . version . includes ( "SNAPSHOT" ) ) {
370382 try {
@@ -500,9 +512,6 @@ export async function activate(context: vscode.ExtensionContext): Promise<any> {
500512 [ "file" , ...schemas ] . reduce ( ( acc , scheme ) => acc . concat ( list . map ( ( language ) => ( { scheme, language } ) ) ) , [ ] ) ;
501513
502514 const diagnosticProvider = new ObjectScriptDiagnosticProvider ( ) ;
503- if ( vscode . window . activeTextEditor ) {
504- diagnosticProvider . updateDiagnostics ( vscode . window . activeTextEditor . document ) ;
505- }
506515
507516 // Gather the proposed APIs we will register to use when building with enableProposedApi = true
508517 const proposed = [
@@ -525,10 +534,63 @@ export async function activate(context: vscode.ExtensionContext): Promise<any> {
525534 outputChannel . show ( true ) ;
526535 }
527536
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+
528583 context . subscriptions . push (
529584 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+ } ) ,
530593 workspace . onDidChangeTextDocument ( ( event ) => {
531- diagnosticProvider . updateDiagnostics ( event . document ) ;
532594 if (
533595 event . contentChanges . length !== 0 &&
534596 event . document . uri . scheme === FILESYSTEM_SCHEMA &&
@@ -541,9 +603,6 @@ export async function activate(context: vscode.ExtensionContext): Promise<any> {
541603 }
542604 } ) ,
543605 window . onDidChangeActiveTextEditor ( async ( editor ) => {
544- if ( editor ) {
545- diagnosticProvider . updateDiagnostics ( editor . document ) ;
546- }
547606 if ( workspace . workspaceFolders && workspace . workspaceFolders . length > 1 ) {
548607 const workspaceFolder = currentWorkspaceFolder ( ) ;
549608 if ( workspaceFolder && workspaceFolder !== workspaceState . get < string > ( "workspaceFolder" ) ) {
@@ -715,30 +774,6 @@ export async function activate(context: vscode.ExtensionContext): Promise<any> {
715774 documentSelector ( "objectscript" ) ,
716775 new ObjectScriptFoldingRangeProvider ( )
717776 ) ,
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- ) ,
742777 vscode . languages . registerWorkspaceSymbolProvider ( new WorkspaceSymbolProvider ( ) ) ,
743778 vscode . debug . registerDebugConfigurationProvider ( "objectscript" , new ObjectScriptConfigurationProvider ( ) ) ,
744779 vscode . debug . registerDebugAdapterDescriptorFactory ( "objectscript" , debugAdapterFactory ) ,
@@ -802,6 +837,9 @@ export async function activate(context: vscode.ExtensionContext): Promise<any> {
802837 }
803838 return uri ;
804839 } ,
840+ onDidChangeConnection ( ) : vscode . Event < void > {
841+ return _onDidChangeConnection . event ;
842+ } ,
805843 } ;
806844
807845 // 'export' our public API
0 commit comments