private PipReference[] PipsOrderedBy(Func <PipExecutionPerformance, object> selector) { return(Analyzer.Pip2Perf .OrderBy(kvp => selector(kvp.Value)) .Select(kvp => Analyzer.AsPipReference(kvp.Key)) .ToArray()); }
/// <inheritdoc /> public Possible <ObjectContext, Failure> EvaluateExpression(ThreadState threadState, int frameIndex, string expr, bool evaluateForCompletions) { if (Pip.TryParseSemiStableHash(expr, out var hash) && Analyzer.SemiStableHash2Pip.TryGetValue(hash, out var pipId)) { return(new ObjectContext(context: this, Analyzer.AsPipReference(pipId))); } string translatedPath = Analyzer.Session.TranslateUserPath(expr); if (AbsolutePath.TryCreate(PathTable, translatedPath, out var path) && path.IsValid) { return(new ObjectContext(context: this, new AnalyzePath(path))); } var exprToEval = evaluateForCompletions ? $"({expr})[0]" : expr; var maybeResult = JPath.JPath.TryEval(Evaluator, exprToEval); if (maybeResult.Succeeded) { return(new ObjectContext(this, maybeResult.Result)); } else { return(maybeResult.Failure); } }
/// <inheritdoc /> public Possible <ObjectContext, Failure> EvaluateExpression(ThreadState threadState, int frameIndex, string expr, bool evaluateForCompletions) { if (Pip.TryParseSemiStableHash(expr, out var hash) && Analyzer.SemiStableHash2Pip.TryGetValue(hash, out var pipId)) { return(new ObjectContext(context: this, Analyzer.AsPipReference(pipId))); } string translatedPath = Analyzer.Session.TranslateUserPath(expr); if (AbsolutePath.TryCreate(PathTable, translatedPath, out var path) && path.IsValid) { return(new ObjectContext(context: this, new AnalyzePath(path))); } var start = DateTime.UtcNow; var exprToEval = evaluateForCompletions ? $"({expr})[0]" : expr; var maybeResult = JPath.JPath.TryEval(Evaluator, exprToEval); var evalDuration = DateTime.UtcNow.Subtract(start); if (maybeResult.Succeeded) { if (!evaluateForCompletions) { Analysis.IgnoreResult(Evaluator.TopEnv.SetVar(LastValueVarName, maybeResult.Result)); Analysis.IgnoreResult(Evaluator.TopEnv.SetVar(EvalDurationVarName, Result.Scalar(evalDuration))); } return(new ObjectContext(this, maybeResult.Result)); } else { return(maybeResult.Failure); } }
private ObjectInfo FileArtifactInfo(FileArtifact f) { if (!f.IsValid) { return(new ObjectInfo("Invalid")); } return(new ObjectInfo( preview: FileArtifactPreview(f), properties: new[] { new Property("Path", f.Path.ToString(PathTable)), new Property("Kind", f.IsSourceFile ? "source" : "output"), new Property("RewriteCount", f.RewriteCount), new Property("FileContentInfo", () => Analyzer.TryGetFileContentInfo(f)), f.IsOutputFile ? new Property("Producer", () => Analyzer.AsPipReference(PipGraph.GetProducer(f))) : null, new Property("Consumers", () => PipGraph.GetConsumingPips(f.Path)) } .Where(p => p != null))); }