anchor.diff:      let getCurrentSnapshot() = if textDocument <> null then Some textDocument.TextBuffer.CurrentSnapshot else None
   
       let triggerClassificationChanged snapshot reason =
  -        // TextBuffer is null if a solution is closed at this moment
  -        //if textDocument.TextBuffer <> null then
  -        //let currentSnapshot = textDocument.TextBuffer.CurrentSnapshot
           let span = SnapshotSpan(snapshot, 0, snapshot.Length)
           classificationChanged.Trigger(self, ClassificationChangedEventArgs(span))
           debug "[SyntaxConstructClassifier] ClassificationChanged event has been triggered by %s" reason
  
positive.code:                         let origSnapshot = columnSpan.Snapshot |> Option.getOrElse snapshot
                          let! span = fromRange origSnapshot (columnSpan.WordSpan.ToRange())
                          let span = 
                              if newSnapshotSpan.Snapshot <> snapshot then
                                  span.TranslateTo(newSnapshotSpan.Snapshot, SpanTrackingMode.EdgeExclusive)  
                              else span
                          // Translate the span to the new snapshot
                          return clType, span 
  
negative.code:                 | _ -> ()))
          else None
          
      let getClassificationSpans (snapshotSpan: SnapshotSpan) =
          match fastState.Value with
          | FastStage.Data { FastStageData.Snapshot = snapshot; Spans = spans }
          | FastStage.Updating (Some { FastStageData.Snapshot = snapshot; Spans = spans }, _) ->
              let spanStartLine = snapshotSpan.Start.GetContainingLine().LineNumber + 1
              let spanEndLine = snapshotSpan.End.GetContainingLine().LineNumber + 1
              let spans =
                  spans
                  // Locations are sorted, so we can safely filter them efficiently
  