コード例 #1
0
            public Task <IContextAction[]> GetAvailableActionsAsync(EditorRefactoringContext context, CancellationToken cancellationToken)
            {
                ITextEditor editor = context.Editor;
                // grab SelectionStart/SelectionLength while we're still on the main thread
                int selectionStart  = editor.SelectionStart;
                int selectionLength = editor.SelectionLength;

                return(Task.Run(
                           async delegate {
                    try {
                        if (!CreateCodeActionProvider())
                        {
                            return new IContextAction[0];
                        }
                        AlAstResolver resolver = await context.GetAstResolverAsync().ConfigureAwait(false);
                        var refactoringContext = new SDRefactoringContext(context.TextSource, resolver, context.CaretLocation, selectionStart, selectionLength, cancellationToken);
                        return codeActionProvider.GetActions(refactoringContext).Select(Wrap).ToArray();
                    } catch (OperationCanceledException) {
                        throw;                                 // don't catch cancellations
                    } catch (Exception ex) {
                        SD.Log.WarnFormatted("AlContextActionProviderWrapper crashed: {0}", ex);
                        SD.AnalyticsMonitor.TrackException(ex);
                        return new IContextAction[0];
                    }
                }, cancellationToken));
            }
コード例 #2
0
        public override IEnumerable <MonoDevelop.CodeActions.CodeAction> GetActions(Document document, object _context, TextLocation loc, CancellationToken cancellationToken)
        {
            if (cancellationToken.IsCancellationRequested)
            {
                yield break;
            }
            var context = _context as MDRefactoringContext;

            if (context == null || context.IsInvalid || context.RootNode == null)
            {
                yield break;
            }
            var actions = provider.GetActions(context);

            if (actions == null)
            {
                LoggingService.LogWarning(provider + " returned null actions.");
                yield break;
            }
            int num = 0;

            foreach (var action_ in actions)
            {
                var action = action_;
                if (actionId.Count <= num)
                {
                    actionId.Add(provider.GetType().FullName + "'" + num);
                }
                yield return(new NRefactoryCodeAction(actionId[num], GettextCatalog.GetString(action.Description ?? ""), action));

                num++;
            }
        }
コード例 #3
0
        protected string RunContextAction(CodeActionProvider action, string input,
                                          int actionIndex = 0, bool expectErrors = false)
        {
            var context = TestRefactoringContext.Create(input, expectErrors);

            context.FormattingOptions = formattingOptions;
            bool isValid = action.GetActions(context).Any();

            if (!isValid)
            {
                Console.WriteLine("invalid node is:" + context.GetNode());
            }
            Assert.IsTrue(isValid, action.GetType() + " is invalid.");
            using (var script = context.StartScript()) {
                action.GetActions(context).Skip(actionIndex).First().Run(script);
            }

            return(context.doc.Text);
        }
コード例 #4
0
        protected void TestActionDescriptions(CodeActionProvider provider, string input, params string[] expected)
        {
            var ctx = TestRefactoringContext.Create(input);

            ctx.FormattingOptions = formattingOptions;
            var actions = provider.GetActions(ctx).ToList();

            Assert.AreEqual(
                expected,
                actions.Select(a => a.Description).ToArray());
        }
コード例 #5
0
        protected void TestWrongContext(CodeActionProvider action, string input)
        {
            var context = TestRefactoringContext.Create(input);

            context.FormattingOptions = formattingOptions;
            bool isValid = action.GetActions(context).Any();

            if (isValid)
            {
                Console.WriteLine("valid node is:" + context.GetNode());
            }
            Assert.IsTrue(!isValid, action.GetType() + " shouldn't be valid there.");
        }