void ICompletionSource.AugmentCompletionSession(ICompletionSession session, IList<CompletionSet> completionSets) { return; var keywords = Keywords.Get(); var snapshot = this.Buffer.CurrentSnapshot; var trackSpan = this.FindTokenSpanAtPosition(session.GetTriggerPoint(this.Buffer), session); 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(); parser.ParseTokens(tokens); this.RefineAvailableKeywords(parser.GetExpectedTokenTypes(), keywords); this.CompletionList = new List<Completion>(); foreach (var keyword in keywords) { this.CompletionList.Add(new Completion(keyword.Key, keyword.Key, keyword.Value.Item1, null, null)); } if (keywords.Count == 0) { return; } completionSets.Add(new CompletionSet( "Tokens", "Tokens", trackSpan, this.CompletionList, null)); }
public Task<bool> HasSuggestedActionsAsync(ISuggestedActionCategorySet requestedActionCategories, SnapshotSpan range, CancellationToken cancellationToken) { return Task.Factory.StartNew(() => { return false; TextExtent extent; if (!this.TryGetWordUnderCaret(out extent)) { return false; } var extentToken = new PSharpLexer().Tokenize(extent.Span.GetText()).FirstOrDefault(); if (extentToken == null) { return false; } 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 false; } return extent.IsSignificant; }); }
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 }) }; }