public IEnumerable <SuggestedActionSet> GetSuggestedActions(ISuggestedActionCategorySet requestedActionCategories,
                                                                    SnapshotSpan range, CancellationToken cancellationToken)
        {
            return(Enumerable.Empty <SuggestedActionSet>());

            TextExtent extent;

            if (!this.TryGetWordUnderCaret(out extent) || !extent.IsSignificant)
            {
                return(Enumerable.Empty <SuggestedActionSet>());
            }

            var extentToken = new PSharpLexer().Tokenize(extent.Span.GetText()).FirstOrDefault();

            if (extentToken == null)
            {
                return(Enumerable.Empty <SuggestedActionSet>());
            }

            var snapshot  = extent.Span.Snapshot;
            var trackSpan = range.Snapshot.CreateTrackingSpan(extent.Span, SpanTrackingMode.EdgeInclusive);
            var preSpan   = new SnapshotSpan(snapshot, new Span(snapshot.GetLineFromLineNumber(0).Start,
                                                                trackSpan.GetStartPoint(snapshot).Position));

            var tokens = new PSharpLexer().Tokenize(preSpan.GetText());
            var parser = new PSharpParser(ParsingOptions.CreateDefault());

            parser.ParseTokens(tokens);

            var expected = parser.GetExpectedTokenTypes();

            if (this.IsExpectedTokenType(extentToken, expected))
            {
                return(Enumerable.Empty <SuggestedActionSet>());
            }

            var errorFixAction = new ErrorFixSuggestedAction(trackSpan);

            return(new SuggestedActionSet[] { new SuggestedActionSet(new ISuggestedAction[] { errorFixAction }) });
        }
        public IEnumerable<SuggestedActionSet> GetSuggestedActions(ISuggestedActionCategorySet requestedActionCategories,
            SnapshotSpan range, CancellationToken cancellationToken)
        {
            return Enumerable.Empty<SuggestedActionSet>();

            TextExtent extent;
            if (!this.TryGetWordUnderCaret(out extent) || !extent.IsSignificant)
            {
                return Enumerable.Empty<SuggestedActionSet>();
            }

            var extentToken = new PSharpLexer().Tokenize(extent.Span.GetText()).FirstOrDefault();
            if (extentToken == null)
            {
                return Enumerable.Empty<SuggestedActionSet>();
            }

            var snapshot = extent.Span.Snapshot;
            var trackSpan = range.Snapshot.CreateTrackingSpan(extent.Span, SpanTrackingMode.EdgeInclusive);
            var preSpan = new SnapshotSpan(snapshot, new Span(snapshot.GetLineFromLineNumber(0).Start,
                trackSpan.GetStartPoint(snapshot).Position));

            var tokens = new PSharpLexer().Tokenize(preSpan.GetText());
            var parser = new PSharpParser(ParsingOptions.CreateDefault());
            parser.ParseTokens(tokens);

            var expected = parser.GetExpectedTokenTypes();
            if (this.IsExpectedTokenType(extentToken, expected))
            {
                return Enumerable.Empty<SuggestedActionSet>();
            }

            var errorFixAction = new ErrorFixSuggestedAction(trackSpan);

            return new SuggestedActionSet[] { new SuggestedActionSet(new ISuggestedAction[] { errorFixAction }) };
        }