anchor.diff:  open Microsoft.FSharp.Compiler.SourceCodeServices
   open ExtCore.Control
   
  +module TooltipImpl =
  +  let tryKeyword col lineStr =
  +    maybe {
  +      let! col, identIsland = Parsing.findLongIdents(col, lineStr)
  +      match identIsland with
  +      | [single] when PrettyNaming.KeywordNames |> List.contains single ->
  +        return single
  +      | _ -> return! None }
  +      
  +  let commentStringOrText t =
  +     t.CharClass = FSharpTokenCharKind.Comment || t.CharClass = FSharpTokenCharKind.String || t.CharClass = FSharpTokenCharKind.Text
  + 
  +  let isTokenAsPosInvalid tokens col pred =
  +    tokens
  +    |> List.tryFind (fun t -> col >= t.LeftColumn && col <= t.RightColumn)
  +    |> Option.map pred
  +    |> Option.fill true
  +      
  +module MDTooltip = 
  +  let keywordToTooltip (editor:TextEditor) line col (keyword:string) =
  +    async {
  +      let startOffset = editor.LocationToOffset(line, col - keyword.Length+1)
  +      let endOffset = startOffset + keyword.Length
  +      let segment = Text.TextSegment.FromBounds(startOffset, endOffset)
  +      let tip = SymbolTooltips.getKeywordTooltip keyword
  +      return  TooltipItem( tip, segment :> Text.ISegment) }
  +   
  +
   /// Resolves locations to tooltip items, and orchestrates their display.
   type FSharpTooltipProvider() = 
     inherit TooltipProvider()
  
positive.code: 
    let killTooltipWindow() =
      enterNotify |> Option.iter (fun en -> en.Dispose ())
  
    override x.GetItem (editor, context, offset, cancellationToken) =
      try
  
negative.code:     let doc = IdeApp.Workbench.ActiveDocument
      if (doc = null) then null else
      match unbox item.Item with 
      | (signature, summary, footer) -> 
        let result = new TooltipInformationWindow(ShowArrow = true)
        let toolTipInfo = new TooltipInformation(SignatureMarkup=signature, FooterMarkup=footer)
        match summary with
  