Пример #1
0
        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);
        }
Пример #2
0
        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);
                }
            }
        }
Пример #3
0
        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()));
            }
        }
Пример #4
0
 /// <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);
             }
         }
     });
 }
Пример #5
0
        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;
            }
        }
Пример #6
0
        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);
            }
        }
Пример #7
0
        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);
            }
        }
Пример #8
0
 public REvaluationException(REvaluationResult result)
 {
     Result = result;
 }