private async Task <bool> IsFunction(string name) { if (Keywords.IsKeyword(name)) { return(false); } string expression = $"tryCatch(is.function({name}), error = function(e) {{ }})"; AstRoot ast = RParser.Parse(expression); if (ast.Errors.Count > 0) { return(false); } var sessionProvider = EditorShell.Current.ExportProvider.GetExportedValue <IRSessionProvider>(); IRSession session = sessionProvider.GetOrCreate(GuidList.InteractiveWindowRSessionGuid, null); if (session != null) { using (IRSessionEvaluation eval = await session.BeginEvaluationAsync(isMutating: false)) { REvaluationResult result = await eval.EvaluateAsync(expression); if (result.ParseStatus == RParseStatus.OK && !string.IsNullOrEmpty(result.StringResult) && (result.StringResult == "T" || result.StringResult == "TRUE")) { return(true); } } } return(false); }
private async Task UpdateListOfLoadedPackagesAsync() { using (var e = await Session.BeginEvaluationAsync(isMutating: false)) { REvaluationResult result = await e.EvaluateAsync("paste0(.packages(), collapse = ' ')"); if (result.ParseStatus == RParseStatus.OK && result.Error == null && result.StringResult != null) { ParseSearchResponse(result.StringResult); } } }
private void CheckEvaluationResult(REvaluationResult result) { if (result.ParseStatus != RParseStatus.OK) { throw new RPackageManagerException(Resources.PackageManager_EvalParseError, new InvalidOperationException(result.ToString())); } if (result.Error != null) { throw new RPackageManagerException(string.Format(Resources.PackageManager_EvalError, result.Error), new InvalidOperationException(result.ToString())); } }
/// <summary> /// Asynchronously fetches RD data on the function from R. /// When RD data is available, invokes specified callback /// passing funation name and the RD data extracted from R. /// </summary> public void GetFunctionRdData(string functionName, string packageName, Action <string> rdDataAvailableCallback) { Task.Run(async() => { await CreateSessionAsync(); using (var eval = await _session.BeginEvaluationAsync()) { string command = GetCommandText(functionName, packageName); REvaluationResult result = await eval.EvaluateAsync(command); if (result.ParseStatus == RParseStatus.OK && result.StringResult != null && result.StringResult.Length > 2) { rdDataAvailableCallback(result.StringResult); } } }); }
private async Task ShowHelpOnCurrentAsync(string prefix, string item) { try { using (IRSessionEvaluation evaluation = await _workflow.RSession.BeginEvaluationAsync()) { REvaluationResult result = await evaluation.EvaluateAsync(prefix + item, REvaluationKind.Normal); if (result.ParseStatus == RParseStatus.OK && string.IsNullOrEmpty(result.Error)) { if (string.IsNullOrEmpty(result.StringResult) || result.StringResult == "NA") { prefix = "??"; } } else { // Parsing or other errors, bail out Debug.Assert(false, string.Format(CultureInfo.InvariantCulture, "Evaluation of help expression failed. Error: {0}, Status: {1}", result.Error, result.ParseStatus)); } } } catch (RException) { } catch (OperationCanceledException) { } // Now actually request the help. First call may throw since 'starting help server...' // message in REPL is actually an error (comes in red) so we'll get RException. int retries = 0; while (retries < 3) { using (IRSessionInteraction interaction = await _workflow.RSession.BeginInteractionAsync(isVisible: false)) { try { await interaction.RespondAsync(prefix + item + Environment.NewLine); } catch (RException ex) { if ((uint)ex.HResult == 0x80131500) { // Typically 'starting help server...' so try again retries++; continue; } } catch (OperationCanceledException) { } } break; } }
private async Task RunAsync(string expression) { try { REvaluationResult result = await EvaluateAsyncAsync(expression); if (result.ParseStatus == RParseStatus.OK && result.Error == null) { OnSuccess(false); } else { OnError(result.ToString()); } } catch (Exception ex) { OnError(ex.Message); } }
private async Task SetEncodingComboBoxAsync() { try { REvaluationResult result = await CallIconvListAsync(); if (result.ParseStatus == RParseStatus.OK && result.Error == null) { var jarray = result.JsonResult as JArray; if (jarray != null) { PopulateEncoding(jarray); } } else { OnError(result.ToString()); } } catch (Exception ex) { OnError(ex.Message); } }
public REvaluationException(REvaluationResult result) { Result = result; }