private static async IAsyncEnumerable <Delta> Livecoding(BaselineArtifacts baselineArtifacts, string watchDir, string pattern, [EnumeratorCancellation] CancellationToken cancellationToken = default) { var last = DateTime.UtcNow; var interval = TimeSpan.FromMilliseconds(250); /* FIXME: make this configurable */ var docResolver = baselineArtifacts.DocResolver; var baselineProjectId = baselineArtifacts.BaselineProjectId; using var fswgen = new Util.FSWGen(watchDir, pattern); await foreach (var fsevent in fswgen.Watch(cancellationToken).ConfigureAwait(false)) { if ((fsevent.ChangeType & WatcherChangeTypes.Changed) != 0) { var e = DateTime.UtcNow; Console.WriteLine($"change in {fsevent.FullPath} is a {fsevent.ChangeType} at {e}"); if (e - last < interval) { Console.WriteLine($"too soon {e-last}"); continue; } Console.WriteLine($"more than 250ms since last change"); last = e; var fp = fsevent.FullPath; if (!docResolver.TryResolveDocumentId(fp, out var id)) { Console.WriteLine($"ignoring change in {fp} which is not in {baselineProjectId}"); continue; } yield return(new Delta(Plan.Change.Create(id, fp))); } } }
public DeltaProject(BaselineArtifacts artifacts) { _changeMakerService = artifacts.ChangeMakerService; _solution = artifacts.BaselineSolution; _baseProjectId = artifacts.BaselineProjectId; _nextName = new DeltaNaming(artifacts.BaselineOutputAsmPath, 1); }
public override IAsyncEnumerable <Delta> SetupDeltas(BaselineArtifacts baselineArtifacts, CancellationToken ct = default) { if (parsedScript == null) { return(Util.AsyncEnumerableExtras.Empty <Delta>()); } return(ScriptedPlanInputs(parsedScript, baselineArtifacts, ct)); }
private static async IAsyncEnumerable <Delta> ScriptedPlanInputs(Script.ParsedScript parsedScript, BaselineArtifacts baselineArtifacts, [EnumeratorCancellation] CancellationToken ct = default) { await Task.CompletedTask; // to make compiler happy var resolver = baselineArtifacts.DocResolver; var artifacts = parsedScript.Changes.Select(c => new Delta(Plan.Change.Create(ResolveForScript(resolver, c.Document), c.Update))); foreach (var a in artifacts) { yield return(a); if (ct.IsCancellationRequested) { break; } } }
public override IAsyncEnumerable <Delta> SetupDeltas(BaselineArtifacts baselineArtifacts, CancellationToken ct = default) { return(Livecoding(baselineArtifacts, config.LiveCodingWatchDir, config.LiveCodingWatchPattern, ct)); }
public abstract IAsyncEnumerable <Delta> SetupDeltas(BaselineArtifacts baselineArtifacts, CancellationToken ct = default);