anchor.diff:                                  }
                               else
                                   let browserNode = browserNode.Value
  +                                let children = updateNodes fn.Name functionNames attributeValuesByIndex variableNames variableValuesByIndex [|fn.Tree|] [|browserNode|] []
                                   {
                                       text = fn.Name
                                       nodeType = "function"
                                       rootFunction = fn.Name
                                       indexPath = [||]
                                       isCollapsible = true
  -                                    isCollapsed = true
  +                                    isCollapsed = children.Length = 0
                                       file = fn.File
                                       line = fn.StartLine
  -                                    children = [||]
  +                                    children = children
                                   })
                   file = file
               }
  
positive.code:                 let attributes = a |> Array.choose (function | Choice1Of2 a -> Some a | _ -> None)
                  let variables = a |> Array.choose (function | Choice2Of2 a -> Some a | _ -> None)
                  (attributes, variables)
          let retVal =
              {
                  attributes = attributes
  
negative.code:     member __.UpdateTemplate (template:CompiledTemplate) = currentTemplate <- Some template
      member __.Data =
          let currentTemplate = currentTemplate.Value
          let attributeNameToIndex, attributeIndexToName = currentTemplate.Attributes |> Array.map (fun a -> a.Name, a.Index) |> fun a -> (a |> Map.ofArray |> fun m x -> m |> Map.tryFind x), (a |> Array.map (fun (x,y) -> (y,x)) |> Map.ofArray |> fun m x -> m |> Map.tryFind x)
          attributeValues <- attributeValues |> Map.filter (fun k _ -> k |> attributeNameToIndex |> Option.isSome)
          let variableNameToIndex, variableIndexToName = currentTemplate.Variables |> Array.map (fun a -> a.Name, a.Index) |> fun a -> (a |> Map.ofArray |> fun m x -> m |> Map.tryFind x), (a |> Array.map (fun (x,y) -> (y,x)) |> Map.ofArray |> fun m x -> m |> Map.tryFind x)
          variableValues <- variableValues |> Map.filter (fun k _ -> k |> variableNameToIndex |> Option.isSome)
          let (attributes, variables) =
              let functionDefs = currentTemplate.Functions
              let requiredAttributes = functionDefs |> Array.collect (fun f -> f.AttributeDependencies) |> Set.ofArray |> Set.toArray |> Array.map (fun i -> currentTemplate.Attributes |> Array.find (fun a -> a.Index = i))
              let requiredVariables = functionDefs |> Array.collect (fun f -> f.VariableDependencies) |> Set.ofArray |> Set.toArray |> Array.map (fun i -> currentTemplate.Variables |> Array.find (fun a -> a.Index = i))
  