anchor.diff:      | _ -> None
   
     member x.GetTypedParseResultWithTimeout(projectFilename, fileName:string, src, stale, ?timeout) = 
  -   async {
  -    let fileName = if Path.GetExtension fileName = ".sketchfs" then Path.ChangeExtension (fileName, ".fsx") else fileName
  -    let opts = x.GetCheckerOptions(fileName, projectFilename, src)
  -    Debug.WriteLine(sprintf "LanguageService: GetTypedParseResultWithTimeout, fileName=%s" fileName)
  -    // Try to get recent results from the F# service
  -    match x.TryGetStaleTypedParseResult(fileName, opts, src, stale) with
  -    | Some _ as results ->
  -        Debug.WriteLine("LanguageService: GetTypedParseResultWithTimeout: using stale results")
  -        return results
  -    | None -> 
  -        Debug.WriteLine("LanguageService: GetTypedParseResultWithTimeout: No stale results - trying typecheck with timeout")
  -        // If we didn't get a recent set of type checking results, we put in a request and wait for at most 'timeout' for a response
  -        match timeout with
  -        | Some timeout -> return mbox.TryPostAndReply((fun reply -> (fileName, src, opts, reply)), timeout = timeout)
  -        | None -> return mbox.TryPostAndReply((fun reply -> (fileName, src, opts, reply)))
  -   }
  +    async {
  +      let fileName = if Path.GetExtension fileName = ".sketchfs" then Path.ChangeExtension (fileName, ".fsx") else fileName
  +      let opts = x.GetCheckerOptions(fileName, projectFilename, src)
  +      Debug.WriteLine(sprintf "LanguageService: GetTypedParseResultWithTimeout, fileName=%s" fileName)
  +      // Try to get recent results from the F# service
  +      match x.TryGetStaleTypedParseResult(fileName, opts, src, stale) with
  +      | Some _ as results ->
  +          Debug.WriteLine("LanguageService: GetTypedParseResultWithTimeout: using stale results")
  +          return results
  +      | None -> 
  +          Debug.WriteLine("LanguageService: GetTypedParseResultWithTimeout: No stale results - trying typecheck with timeout")
  +          // If we didn't get a recent set of type checking results, we put in a request and wait for at most 'timeout' for a response
  +          match timeout with
  +          | Some timeout -> return mbox.TryPostAndReply((fun reply -> (fileName, src, opts, reply)), timeout = timeout)
  +          | None -> return mbox.TryPostAndReply((fun reply -> (fileName, src, opts, reply)))
  +    }
   
     /// Returns a TypeParsedResults if available, otherwise None
     member x.GetTypedParseResultIfAvailable(projectFilename, fileName:string, src, stale) = 
  
positive.code:   /// Parses and checks the given file in the given project under the given configuration. Asynchronously
    /// returns the results of checking the file.
    member x.ParseAndCheckFileInProject(projectFilename, fileName:string, src) =
  
     async {
      let opts = x.GetCheckerOptions(fileName, projectFilename, src)
      Debug.WriteLine(sprintf "LanguageService: ParseAndCheckFileInProject: Trigger parse (fileName=%s)" fileName)
      let! results = mbox.PostAndAsyncReply(fun r -> fileName, src, opts, r)
      return results
     }
  
    member x.ParseFileInProject(projectFilename, fileName:string, src) = 
      let opts = x.GetCheckerOptions(fileName, projectFilename, src)
  
negative.code:           Environment.ExpandEnvironmentVariables("%HOMEDRIVE%%HOMEPATH%")
        Path.Combine(dir, Path.GetFileName(path))
  
    let projectInfoCache =
      //cache 50 project infos, then start evicting the least recently used entries
      ref (ExtCore.Caching.LruCache.create 50u)
     
    // We use a mailbox processor to wrap requests to F.C.S. here so 
    //   (a) we can get work off the GUI thread and 
  