anchor.diff:          snapshotSpan.Value
   
   [<NoComparison>]
  +type private CategorizedSnapshotSpans =
  +    { Spans: CategorizedSnapshotSpan[]
  +      HasErrors: bool }
  +
  +[<NoComparison>]
   type private FastStageData =
       { Snapshot: ITextSnapshot
  -      Spans: CategorizedSnapshotSpan[]
  -      HasErrors: bool
  +      Spans: CategorizedSnapshotSpans
         SingleSymbolsProjects: CheckingProject list } 
   
   [<NoComparison>]
  
positive.code: type private CategorizedSnapshotSpan (columnSpan: CategorizedColumnSpan<ITextSnapshot>, originalSnapshot: ITextSnapshot) =
      let snapshotSpan: SnapshotSpanWithLine option Atom = Atom None 
      member __.ColumnSpan = columnSpan
      member __.CachedSnapshotSpan = snapshotSpan.Value
      member __.GetSnapshotSpan targetSnapshot =
          snapshotSpan.Swap (fun oldSpan ->
              oldSpan
  
negative.code:             Logging.logInfo (fun _ ->
                  sprintf "[SyntaxConstructClassifier] Merging spans (new range %A < old range %A)."
                          (newStartLine, newEndLine) (oldStartLine, oldEndLine))
              let spans = 
                  seq { 
                      yield! oldSpans.Spans |> Seq.takeWhile (fun x -> x.ColumnSpan.WordSpan.Line < newStartLine)
                      yield! oldSpans.Spans |> Seq.skipWhile (fun x -> x.ColumnSpan.WordSpan.Line <= newEndLine) 
                      yield! newSpans.Spans
                  }
                  |> Seq.sortBy (fun x -> x.ColumnSpan.WordSpan.Line)
                  |> Seq.toArray
              { Spans = spans; HasErrors = newSpans.HasErrors }
              
      let updateUnusedDeclarations (CallInUIContext callInUIContext) =
          let worker (project, snapshot) =
  