示例#1
0
    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)));
            }
        }
    }
示例#2
0
 public DeltaProject(BaselineArtifacts artifacts)
 {
     _changeMakerService = artifacts.ChangeMakerService;
     _solution           = artifacts.BaselineSolution;
     _baseProjectId      = artifacts.BaselineProjectId;
     _nextName           = new DeltaNaming(artifacts.BaselineOutputAsmPath, 1);
 }
示例#3
0
 public override IAsyncEnumerable <Delta> SetupDeltas(BaselineArtifacts baselineArtifacts, CancellationToken ct = default)
 {
     if (parsedScript == null)
     {
         return(Util.AsyncEnumerableExtras.Empty <Delta>());
     }
     return(ScriptedPlanInputs(parsedScript, baselineArtifacts, ct));
 }
示例#4
0
    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;
            }
        }
    }
示例#5
0
 public override IAsyncEnumerable <Delta> SetupDeltas(BaselineArtifacts baselineArtifacts, CancellationToken ct = default)
 {
     return(Livecoding(baselineArtifacts, config.LiveCodingWatchDir, config.LiveCodingWatchPattern, ct));
 }
示例#6
0
 public abstract IAsyncEnumerable <Delta> SetupDeltas(BaselineArtifacts baselineArtifacts, CancellationToken ct = default);