public Task <SimpleExpansion> GetExpansionsAsync(
     string line,
     int caretIndex,
     CancellationToken token)
 {
     return(CommandExpansion.GetExpansionsAsync(line, caretIndex, token));
 }
        private async Task TriggerCompletionAsync()
        {
            if (CommandExpansion == null)
            {
                return; // Host CommandExpansion service not available
            }

            if (IsCompletionSessionActive)
            {
                _completionSession.Dismiss();
                _completionSession = null;
            }

            string line       = WpfConsole.InputLineText;
            int    caretIndex = CaretPosition - WpfConsole.InputLineStart.Value;

            Debug.Assert(caretIndex >= 0);

            // Cancel tab expansion if it takes more than 'TabExpansionTimeout' secs (defaults to 3 secs) to get any results
            CancellationTokenSource ctSource        = new CancellationTokenSource(TabExpansionTimeout * 1000);
            SimpleExpansion         simpleExpansion = null;

            try
            {
                WpfConsole.Dispatcher.SetExecutingCommand(true);
                simpleExpansion = await CommandExpansion.GetExpansionsAsync(line, caretIndex, ctSource.Token);
            }
            catch (Exception x)
            {
                // Ignore exception from expansion, but write it to the activity log
                ExceptionHelper.WriteErrorToActivityLog(x);
            }
            finally
            {
                WpfConsole.Dispatcher.SetExecutingCommand(false);
            }

            if (simpleExpansion != null &&
                simpleExpansion.Expansions != null)
            {
                IList <string> expansions = simpleExpansion.Expansions;
                if (expansions.Count == 1) // Shortcut for 1 TabExpansion candidate
                {
                    ReplaceTabExpansion(simpleExpansion.Start, simpleExpansion.Length, expansions[0]);
                }
                else if (expansions.Count > 1) // Only start intellisense session for multiple expansion candidates
                {
                    _completionSession = CompletionBroker.CreateCompletionSession(
                        WpfTextView,
                        WpfTextView.TextSnapshot.CreateTrackingPoint(CaretPosition.Position, PointTrackingMode.Positive),
                        true);
                    _completionSession.Properties.AddProperty("TabExpansion", simpleExpansion);
                    _completionSession.Dismissed += CompletionSession_Dismissed;
                    _completionSession.Start();
                }
            }
        }
        public void AdjustExpansionsReturnsNullIfParametersAreNull()
        {
            // Arrange
            string result   = null;
            string leftWord = null;

            string[] expansions = null;

            // Act
            result = CommandExpansion.AdjustExpansions(leftWord, ref expansions);

            // Assert
            Assert.Null(result);
        }
 async Task <SimpleExpansion> TryGetExpansionsAsync(
     string line,
     int caretIndex,
     CancellationToken token)
 {
     try {
         return(await CommandExpansion.GetExpansionsAsync(line, caretIndex, token));
     } catch (OperationCanceledException) {
         return(null);
     } catch (Exception ex) {
         LoggingService.LogError("GetExpansionsAsync error.", ex);
         return(null);
     }
 }
        void TriggerCompletion()
        {
            if (CommandExpansion == null)
            {
                return; // Host CommandExpansion service not available
            }

            if (IsCompletionSessionActive)
            {
                _completionSession.Dismiss();
                _completionSession = null;
            }

            string line       = WpfConsole.InputLineText;
            int    caretIndex = CaretPosition - WpfConsole.InputLineStart.Value;

            Debug.Assert(caretIndex >= 0);

            SimpleExpansion simpleExpansion = null;

            try
            {
                simpleExpansion = CommandExpansion.GetExpansions(line, caretIndex);
            }
            catch (Exception x)
            {
                // Ignore exception from expansion, but write it to the activity log
                ExceptionHelper.WriteToActivityLog(x);
            }

            if (simpleExpansion != null && simpleExpansion.Expansions != null)
            {
                IList <string> expansions = simpleExpansion.Expansions;
                if (expansions.Count == 1) // Shortcut for 1 TabExpansion candidate
                {
                    ReplaceTabExpansion(simpleExpansion.Start, simpleExpansion.Length, expansions[0]);
                }
                else if (expansions.Count > 1) // Only start intellisense session for multiple expansion candidates
                {
                    _completionSession = CompletionBroker.CreateCompletionSession(
                        WpfTextView,
                        WpfTextView.TextSnapshot.CreateTrackingPoint(CaretPosition.Position, PointTrackingMode.Positive),
                        true);
                    _completionSession.Properties.AddProperty("TabExpansion", simpleExpansion);
                    _completionSession.Dismissed += CompletionSession_Dismissed;
                    _completionSession.Start();
                }
            }
        }
        public void AdjustExpansionsReturnsNullIfExpansionsHaveNoCommonWord()
        {
            // Arrange
            string result   = null;
            string leftWord = "App1.";

            string[] expansions = new string[] { @".\App1.sln", @".\App1.suo" };

            // Act
            result = CommandExpansion.AdjustExpansions(leftWord, ref expansions);

            // Assert
            Assert.Null(result);
            Assert.Equal(@".\App1.sln", expansions[0]);
            Assert.Equal(@".\App1.suo", expansions[1]);
        }
        public void AdjustExpansionsReturnsNonNullCommonWord()
        {
            // Arrange
            string result   = null;
            string leftWord = "jQuery.";

            string[] expansions = new string[] { "jQuery.UI", "jQuery.Validation" };

            // Act
            result = CommandExpansion.AdjustExpansions(leftWord, ref expansions);

            // Assert
            Assert.Equal(leftWord, result);
            Assert.Equal("UI", expansions[0]);
            Assert.Equal("Validation", expansions[1]);
        }