anchor.diff:      | true, value -> Some value
       | false, _ -> None
   
  -let isOptimizeWatch (extraOpts: IDictionary<string, string>) =
  -    match tryGetOption "optimizeWatch" extraOpts with
  -    | Some value ->
  -        match bool.TryParse(value) with
  -        | true, value -> value
  -        | false, _ -> false
  -    | None -> false
  -
  -let createProject checker isWatchCompile (prevProject: Project option) (msg: Parser.Message) projFile =
  +let createProject checker dirtyFiles (prevProject: Project option) (msg: Parser.Message) projFile =
  +    let isWatchCompile = Array.length dirtyFiles > 0
       let projectOptions, fableCore =
           match prevProject with
           | Some prevProject ->
  -            // There seems to be a performance penalty if LoadTime is not updated
               prevProject.ProjectOptions, prevProject.FableCore
           | None ->
               let projectOptions, fableCore =
  
positive.code:             let projFile = Path.normalizeFullPath projFile
              match Map.tryFind projFile state with
              | Some project -> checkWatchCompilation project sourceFile
              | None -> createProject checker false None msg projFile
                        |> addOrUpdateProject state |> Some
          | false, _ ->
              state |> Map.tryPick (fun _ (project: Project) ->
  
negative.code:                 else None)
      match IO.Path.GetExtension(msg.path).ToLower() with
      | ".fsproj" ->
          createProject checker [||] None msg msg.path
          |> addOrUpdateProject state
      | ".fsx" as ext ->
          if Map.containsKey msg.path state then
              // When a script is modified, restart the project with new options
              // (to check for new references, loaded projects, etc.)
              createProject checker [||] None msg msg.path
              |> addOrUpdateProject state
          else
              match tryFindAndUpdateProject state ext msg.path with
              | Some stateAndProject -> stateAndProject
              | None ->
                  createProject checker [||] None msg msg.path
                  |> addOrUpdateProject state
      | ".fs" as ext ->
          match tryFindAndUpdateProject state ext msg.path with
  