anchor.diff:      fileName.Substring(i).ToLower()
   
   let updateState (checker: FSharpChecker) (com: Compiler) (state: State) (msg: Parser.Message): State * Project =
  -    let createProject options projectFile =
  -        let project = createProject checker options com msg projectFile
  -        tryGetOption "saveAst" msg.extra |> Option.iter (fun dir ->
  -            Printers.printAst dir project.CheckedProject)
  -        project
       let tryFindAndUpdateProject ext sourceFile =
           state |> Map.tryPick (fun _ project ->
               match Map.tryFind sourceFile project.FileInfos with
  
positive.code: type FileInfo =
      { mutable IsCompiled: bool }
  
  type Project(projectOptions: FSharpProjectOptions, checkedProject: FSharpCheckProjectResults, ?fableCoreJsDir) =
      let entities = ConcurrentDictionary<string, Fable.Entity>()
      let inlineExprs = ConcurrentDictionary<string, InlineExpr>()
      let fileInfos =
          projectOptions.ProjectFileNames
          |> Seq.map (fun filepath -> Path.normalizeFullPath filepath, { IsCompiled = false })
          |> Map
      let rootModules =
          checkedProject.AssemblyContents.ImplementationFiles
          |> Seq.map (fun file -> file.FileName, FSharp2Fable.Compiler.getRootModuleFullName file)
          |> Map
      let fableCoreJsDir =
          match fableCoreJsDir with
          | Some dir -> Some dir
          | None ->
          #if FABLE_COMPILER
              Some "fable-core"
          #else
              ProjectCracker.tryGetFableCoreJsDir projectOptions.ProjectFileName
          #endif
      member __.CheckedProject = checkedProject
      member __.ProjectOptions = projectOptions
      member __.ProjectFile = projectOptions.ProjectFileName
  
negative.code:                     Log.logVerbose("   " + file)
              projectOptions
      let checkedProject = parseFSharpProject checker projectOptions com
      tryGetOption "saveAst" msg.extra |> Option.iter (fun dir ->
          Printers.printAst dir checkedProject)
      let isWatch, fableCoreJsDir =
          match projInfo with
          // If we have info from previous project, assume it's a watch compilation
          | Some info -> true, info.FableCoreJsDir
          | None -> false, ProjectCracker.tryGetFableCoreJsDir projectOptions.ProjectFileName
      Project(projectOptions, checkedProject, isWatch, ?fableCoreJsDir=fableCoreJsDir)
  
  let toJson =
      let jsonSettings =
  