public void ShowDataGrid(DebugEvaluationResult evaluationResult) {
     var wrapper = new EvaluationWrapper(evaluationResult);
     if (!wrapper.CanShowDetail) {
         throw new InvalidOperationException("Cannot show data grid on evaluation result " + evaluationResult);
     }
     wrapper.ShowDetailCommand.Execute(null);
 }
Пример #2
0
        private void OnGlobalEnvironmentEvaluation(DebugEvaluationResult result) {
            var wrapper = new EvaluationWrapper(result);

            var rootNodeModel = new VariableNode(_settings, wrapper);

            VsAppShell.Current.DispatchOnUIThread(
                () => {
                    EnvironmentName.Text = GlobalEnvironmentName;
                    _rootNode.Model = rootNodeModel;
                });
        }
Пример #3
0
        /// <summary>
        /// Create new instance of <see cref="EvaluationWrapper"/>
        /// </summary>
        /// <param name="evaluation">R session's evaluation result</param>
        /// <param name="truncateChildren">true to truncate children returned by GetChildrenAsync</param>
        public EvaluationWrapper(DebugEvaluationResult evaluation, int index = -1, int? maxChildrenCount = null) :
            base(evaluation, maxChildrenCount) {

            Index = index;

            CanShowDetail = ComputeDetailAvailability(DebugEvaluation as DebugValueEvaluationResult);
            if (CanShowDetail) {
                ShowDetailCommand = new DelegateCommand(ShowVariableGridWindowPane, (o) => CanShowDetail);
                ShowDetailCommandTooltip = Resources.ShowDetailCommandTooltip;

                OpenInExcelCommand = new DelegateCommand(OpenInExcel, (o) => CanShowDetail);
                OpenInExcelCommandTooltip = Resources.OpenInExcelCommandTooltip;
            }
        }
        private void SubscribeAction(DebugEvaluationResult evaluation) {
            VsAppShell.Current.DispatchOnUIThread(
                () => {
                    if (evaluation is DebugErrorEvaluationResult) {
                        // evaluation error, this could happen if R object is removed
                        var error = (DebugErrorEvaluationResult)evaluation;
                        SetError(error.ErrorText);
                        return;
                    }

                    var wrapper = new EvaluationWrapper(evaluation);

                    if (wrapper.TypeName == "NULL" && wrapper.Value == "NULL") {
                        // the variable should have been removed
                        SetError(
                            string.Format(
                                CultureInfo.InvariantCulture,
                                Package.Resources.VariableGrid_Missing,
                                evaluation.Expression));
                    } else if (wrapper.Dimensions.Count != 2) {
                        // the same evaluation changed to non-matrix
                        SetError(
                            string.Format(
                                CultureInfo.InvariantCulture,
                                Package.Resources.VariableGrid_NotTwoDimension,
                                evaluation.Expression));
                    } else if (wrapper.Dimensions[0] != _evaluation.Dimensions[0]
                        || wrapper.Dimensions[1] != _evaluation.Dimensions[1]) {
                        ClearError();

                        // matrix size changed. Reset the evaluation
                        SetEvaluation(wrapper);
                    } else {
                        ClearError();
                        
                        // size stays same. Refresh
                        VariableGrid.Refresh();
                    }
                });
        }
Пример #5
0
        /// <summary>
        /// Create new instance of <see cref="DataEvaluation"/>
        /// </summary>
        /// <param name="evaluation">R session's evaluation result</param>
        public RSessionDataObject(DebugEvaluationResult evaluation, int? maxChildrenCount = null) : this() {
            DebugEvaluation = evaluation;

            Name = DebugEvaluation.Name?.TrimStart(NameTrimChars);

            if (DebugEvaluation is DebugValueEvaluationResult) {
                var valueEvaluation = (DebugValueEvaluationResult)DebugEvaluation;

                Value = GetValue(valueEvaluation)?.Trim();
                ValueDetail = valueEvaluation.GetRepresentation(DebugValueRepresentationKind.Raw).Deparse;
                TypeName = valueEvaluation.TypeName;

                if (valueEvaluation.Classes != null) {
                    var escaped = valueEvaluation.Classes.Select((x) => x.IndexOf(' ') >= 0 ? "'" + x + "'" : x);
                    Class = string.Join(", ", escaped); // TODO: escape ',' in class names
                }

                HasChildren = valueEvaluation.HasChildren;

                Dimensions = valueEvaluation.Dim ?? new List<int>();
            } else if (DebugEvaluation is DebugPromiseEvaluationResult) {
                const string PromiseVaue = "<promise>";
                var promise = (DebugPromiseEvaluationResult)DebugEvaluation;

                Value = promise.Code;
                TypeName = PromiseVaue;
                Class = PromiseVaue;
            } else if (DebugEvaluation is DebugActiveBindingEvaluationResult) {
                const string ActiveBindingValue = "<active binding>";
                var activeBinding = (DebugActiveBindingEvaluationResult)DebugEvaluation;

                Value = ActiveBindingValue;
                TypeName = ActiveBindingValue;
                Class = ActiveBindingValue;
            }

            if (Dimensions == null) Dimensions = new List<int>();

            MaxChildrenCount = maxChildrenCount;
        }
Пример #6
0
        public async Task <DebugEvaluationResult> EvaluateAsync(
            DebugStackFrame stackFrame,
            string expression,
            string name,
            string env,
            DebugEvaluationResultFields fields,
            int?reprMaxLength = null,
            CancellationToken cancellationToken = default(CancellationToken)
            )
        {
            ThrowIfDisposed();

            await TaskUtilities.SwitchToBackgroundThread();

            await InitializeAsync(cancellationToken);

            env = env ?? stackFrame?.SysFrame ?? "NULL";
            var code        = Invariant($"rtvs:::toJSON(rtvs:::eval_and_describe({expression.ToRStringLiteral()}, {env},, {fields.ToRVector()},, {reprMaxLength}))");
            var jEvalResult = await InvokeDebugHelperAsync <JObject>(code, cancellationToken);

            return(DebugEvaluationResult.Parse(stackFrame, name, jEvalResult));
        }
Пример #7
0
 private void OnGlobalEnvironmentEvaluated(DebugEvaluationResult result) {
     _globalEnv = new EvaluationWrapper(result);
     _mre.Set();
 }
 public bool CanShowDataGrid(DebugEvaluationResult evaluationResult) {
     var wrapper = new EvaluationWrapper(evaluationResult);
     return wrapper.CanShowDetail;
 }