anchor.diff:          // update the cached options
           if updated then
               projectInfoManager.UpdateProjectInfo(project.Id, site, project.Workspace)
  +      } |> Async.Start
   
       member this.SetupProjectFile(siteProvider: IProvideProjectSite, workspace: VisualStudioWorkspaceImpl) =
           let  rec setup (site: IProjectSite) =
  
positive.code: 
      /// Get the options for a project
      member this.TryGetOptionsForProject(projectId: ProjectId) = 
          if projectTable.ContainsKey(projectId) then
              Some(projectTable.[projectId])
          else
              None
  
      /// Get the exact options for a document or project
      member this.TryGetOptionsForDocumentOrProject(document: Document) = async { 
  
negative.code:           with ex -> 
              Assert.Exception(ex)
              return None
          | _ -> return this.TryGetOptionsForProject(projectId) 
       }
  
      /// Get the options for a document or project relevant for syntax processing.
      /// Quicker then TryGetOptionsForDocumentOrProject as it doesn't need to recompute the exact project options for a script.
      member this.TryGetOptionsForEditingDocumentOrProject(document: Document) = 
          let projectId = document.Project.Id
          match singleFileProjectTable.TryGetValue(projectId) with 
          | true, (_loadTime, originalOptions) -> Some originalOptions
          | _ -> this.TryGetOptionsForProject(projectId) 
  
  // Used to expose FSharpChecker/ProjectInfo manager to diagnostic providers
  // Diagnostic providers can be executed in environment that does not use MEF so they can rely only
  