anchor.diff:              |> function [||] -> -1, -1 | lines -> Array.min lines, Array.max lines
   
           // we take into account new Unused spans, but do not old ones.
  -        let newTcSpans, (newStartLine, newEndLine) = getLineRange true newSpans
  -        let oldTcSpans, (oldStartLine, oldEndLine) = getLineRange false oldSpans
  +        let newTcSpans, (newStartLine, newEndLine) = getLineRange true newSpans.Spans
  +        let oldTcSpans, (oldStartLine, oldEndLine) = getLineRange false oldSpans.Spans
           let isNewRangeLarger = newStartLine <= oldStartLine && newEndLine >= oldEndLine
   
           // returns `true` if both first and last spans are still here, which means
  
positive.code:                         |> Array.sortBy (fun x -> x.ColumnSpan.WordSpan.Line)
                      | _ -> spans
  
                  let! singleSymbolsProjects =
                      async {
                          if includeUnusedReferences() then
  
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) =
  