@@ -33,6 +33,7 @@ import { DebugAdapter, LaunchConfigType } from "./debugger/debugAdapter";
3333import { SwiftBuildStatus } from "./ui/SwiftBuildStatus" ;
3434import { SwiftToolchain } from "./toolchain/toolchain" ;
3535import { DiagnosticsManager } from "./DiagnosticsManager" ;
36+ import { DocumentationManager } from "./documentation/DocumentationManager" ;
3637
3738/**
3839 * Context for whole workspace. Holds array of contexts for each workspace folder
@@ -49,10 +50,12 @@ export class WorkspaceContext implements vscode.Disposable {
4950 public diagnostics : DiagnosticsManager ;
5051 public subscriptions : vscode . Disposable [ ] ;
5152 public commentCompletionProvider : CommentCompletionProviders ;
53+ public documentation : DocumentationManager ;
5254 private lastFocusUri : vscode . Uri | undefined ;
5355 private initialisationFinished = false ;
5456
5557 private constructor (
58+ extensionContext : vscode . ExtensionContext ,
5659 public tempFolder : TemporaryFolder ,
5760 public outputChannel : SwiftOutputChannel ,
5861 public toolchain : SwiftToolchain
@@ -62,6 +65,7 @@ export class WorkspaceContext implements vscode.Disposable {
6265 this . languageClientManager = new LanguageClientManager ( this ) ;
6366 this . tasks = new TaskManager ( this ) ;
6467 this . diagnostics = new DiagnosticsManager ( this ) ;
68+ this . documentation = new DocumentationManager ( extensionContext , this ) ;
6569 this . currentDocument = null ;
6670 this . commentCompletionProvider = new CommentCompletionProviders ( ) ;
6771
@@ -163,6 +167,7 @@ export class WorkspaceContext implements vscode.Disposable {
163167 onChangeConfig ,
164168 this . tasks ,
165169 this . diagnostics ,
170+ this . documentation ,
166171 this . languageClientManager ,
167172 this . outputChannel ,
168173 this . statusItem ,
@@ -192,11 +197,12 @@ export class WorkspaceContext implements vscode.Disposable {
192197
193198 /** Get swift version and create WorkspaceContext */
194199 static async create (
200+ extensionContext : vscode . ExtensionContext ,
195201 outputChannel : SwiftOutputChannel ,
196202 toolchain : SwiftToolchain
197203 ) : Promise < WorkspaceContext > {
198204 const tempFolder = await TemporaryFolder . create ( ) ;
199- return new WorkspaceContext ( tempFolder , outputChannel , toolchain ) ;
205+ return new WorkspaceContext ( extensionContext , tempFolder , outputChannel , toolchain ) ;
200206 }
201207
202208 /**
@@ -224,11 +230,18 @@ export class WorkspaceContext implements vscode.Disposable {
224230 contextKeys . currentTargetType = undefined ;
225231 }
226232
227- // LSP can be configured per workspace to support reindexing
233+ // Set context keys that depend on features from SourceKit-LSP
228234 this . languageClientManager . useLanguageClient ( async client => {
229235 const experimentalCaps = client . initializeResult ?. capabilities . experimental ;
236+ if ( ! experimentalCaps ) {
237+ contextKeys . supportsReindexing = false ;
238+ contextKeys . supportsDocumentationLivePreview = false ;
239+ return ;
240+ }
230241 contextKeys . supportsReindexing =
231- experimentalCaps && experimentalCaps [ "workspace/triggerReindex" ] !== undefined ;
242+ experimentalCaps [ "workspace/triggerReindex" ] !== undefined ;
243+ contextKeys . supportsDocumentationLivePreview =
244+ experimentalCaps [ "textDocument/convertDocumentation" ] !== undefined ;
232245 } ) ;
233246
234247 setSnippetContextKey ( this ) ;
0 commit comments