anchor.diff:                          let origSnapshot = columnSpan.Snapshot |> Option.getOrElse snapshot
                           let! span = fromRange origSnapshot (columnSpan.WordSpan.ToRange())
                           // Translate the span to the new snapshot
  -                        return clType, span.TranslateTo(newSnapshotSpan.Snapshot, SpanTrackingMode.EdgeExclusive) 
  +                        return clType, span.TranslateTo(newSnapshotSpan.Snapshot, SpanTrackingMode.EdgeExclusive)  
                       })
                   |> Seq.takeWhile (fun (_, span) -> span.Start.GetContainingLine().LineNumber <= spanEndLine)
                   |> Seq.map (fun (clType, span) -> ClassificationSpan(span, clType))
  
positive.code: [<NoComparison>]
  type private FastStage =
      | NoData
      | Updating of snapshot: ITextSnapshot
      | Data of FastStageData 
  
  [<NoComparison>]
  
negative.code:         
      let getClassificationSpans (newSnapshotSpan: SnapshotSpan) =
          match fastState.Value with
          | FastStage.Data { FastStageData.Snapshot = snapshot; Spans = spans }
          | FastStage.Updating (Some { FastStageData.Snapshot = snapshot; Spans = spans }, _) ->
              // We get additional 10 lines above the current snapshot in case the user inserts some line
              // while we were getting locations from FCS. It's not as reliable though. 
              let spanStartLine = max 0 (newSnapshotSpan.Start.GetContainingLine().LineNumber + 1 - 10)
  