public Searcher(
                Solution solution,
                IAsynchronousOperationListener asyncListener,
                INavigateToItemDisplayFactory displayFactory,
                INavigateToCallback callback,
                string searchPattern,
                bool searchCurrentDocument,
                CancellationToken cancellationToken)
            {
                _solution = solution;
                _displayFactory = displayFactory;
                _callback = callback;
                _searchPattern = searchPattern;
                _searchCurrentDocument = searchCurrentDocument;
                _cancellationToken = cancellationToken;
                _progress = new ProgressTracker(callback.ReportProgress);
                _asyncListener = asyncListener;

                if (_searchCurrentDocument)
                {
                    var documentService = _solution.Workspace.Services.GetService<IDocumentTrackingService>();
                    var activeId = documentService.GetActiveDocument();
                    _currentDocument = activeId != null ? _solution.GetDocument(activeId) : null;
                }
            }
Ejemplo n.º 2
0
        public void StartSearch(INavigateToCallback callback, string searchValue)
        {
            this.StopSearch();

            if (string.IsNullOrWhiteSpace(searchValue))
            {
                callback.Done();
                return;
            }

            var optionsService = _optionsServices.Length > 0
                ? VersionSelector.SelectHighest(_optionsServices)
                : null;
            var searchCurrentDocument = optionsService?.GetSearchCurrentDocument(callback.Options) ?? false;
            var searcher = new Searcher(
                _workspace.CurrentSolution,
                _asyncListener,
                _displayFactory,
                callback,
                searchValue,
                searchCurrentDocument,
                _cancellationTokenSource.Token);

            searcher.Search();
        }
Ejemplo n.º 3
0
 public LibraryNodeVisitor(PythonToolsService pyService, PythonNavigateToItemProvider itemProvider, INavigateToCallback navCallback, string searchValue) {
     _pyService = pyService;
     _itemProvider = itemProvider;
     _navCallback = navCallback;
     _searchValue = searchValue;
     _path.Push(null);
     _comparer = new FuzzyStringMatcher(_pyService.AdvancedOptions.SearchMode);
     _regexComparer = new FuzzyStringMatcher(FuzzyMatchMode.RegexIgnoreCase);
 }
        public void StartSearch(INavigateToCallback callback, string searchValue)
        {
            if (searchValue.Length > 0 && (searchValue[0] == '.' || searchValue[0] == '#'))
            {
                CssParser parser = new CssParser();
                var state = new Tuple<CssParser, string, INavigateToCallback>(parser, searchValue, callback);

                System.Threading.ThreadPool.QueueUserWorkItem(DoWork, state);
            }
        }
            internal Worker(CssGoToLineProviderFactory providerFactory, INavigateToCallback navigateToCallback, string searchValue)
            {
                _providerFactory = providerFactory;
                _searchValue = searchValue;
                _navigateToCallback = navigateToCallback;
                _cancellationTokenSource = new CancellationTokenSource();
                _cancellationToken = _cancellationTokenSource.Token;

                ThreadPool.QueueUserWorkItem(DoWork, null);
            }
 public void StartSearch(INavigateToCallback callback, string searchValue)
 {
     //string name = null;
     //string kind = null;
     //string language = null;
     //string secondarySort = null;
     //object tag = null;
     //MatchKind matchKind = MatchKind.None;
     //INavigateToItemDisplayFactory displayFactory = null;
     //NavigateToItem item = new NavigateToItem(name, kind, language, secondarySort, tag, matchKind, displayFactory);
 }
Ejemplo n.º 7
0
        public void StartSearch(INavigateToCallback callback, string searchValue)
        {
            var packageServiceProvider = (IServiceProvider)_package;
            var libraryManager = (LibraryManager)packageServiceProvider.GetService(_package.GetLibraryManagerType());
            var library = libraryManager.Library;

            if (_searchCts != null) {
                _searchCts.Dispose();
            }
            _searchCts = new CancellationTokenSource();
            _searchTask = Task.Factory.StartNew(() => library.VisitNodes(new LibraryNodeVisitor(this, callback, searchValue), _searchCts.Token), _searchCts.Token);
        }
Ejemplo n.º 8
0
 private bool GetSearchCurrentDocumentOption(INavigateToCallback callback)
 {
     try
     {
         return(GetSearchCurrentDocumentOptionWorker(callback));
     }
     catch (TypeLoadException)
     {
         // The version of the APIs we call in VS may not match what the
         // user currently has on the box (as the APIs have changed during
         // the VS15 timeframe.  Be resilient to this happening and just
         // default to searching all documents.
         return(false);
     }
 }
Ejemplo n.º 9
0
 private bool GetSearchCurrentDocumentOption(INavigateToCallback callback)
 {
     try
     {
         return GetSearchCurrentDocumentOptionWorker(callback);
     }
     catch (TypeLoadException)
     {
         // The version of the APIs we call in VS may not match what the 
         // user currently has on the box (as the APIs have changed during
         // the VS15 timeframe.  Be resilient to this happening and just
         // default to searching all documents.
         return false;
     }
 }
 public Searcher(
     Solution solution,
     IAsynchronousOperationListener asyncListener,
     ItemDisplayFactory displayFactory,
     INavigateToCallback callback,
     string searchPattern,
     CancellationToken cancellationToken)
 {
     _solution          = solution;
     _displayFactory    = displayFactory;
     _callback          = callback;
     _searchPattern     = searchPattern;
     _cancellationToken = cancellationToken;
     _progress          = new ProgressTracker(callback.ReportProgress);
     _asyncListener     = asyncListener;
 }
 public Searcher(
     Solution solution,
     IAsynchronousOperationListener asyncListener,
     ItemDisplayFactory displayFactory,
     INavigateToCallback callback,
     string searchPattern,
     CancellationToken cancellationToken)
 {
     _solution = solution;
     _displayFactory = displayFactory;
     _callback = callback;
     _searchPattern = searchPattern;
     _cancellationToken = cancellationToken;
     _progress = new ProgressTracker(callback.ReportProgress);
     _asyncListener = asyncListener;
 }
Ejemplo n.º 12
0
 public NavigateToVisitor(
     string searchValue, 
     ITextSnapshot snapshot, IWpfTextView textView,
     INavigateToCallback callback, 
     IBufferGraphFactoryService bufferGraphFactoryService,
     INavigateToItemDisplayFactory displayFactory, 
     DispatcherGlyphService glyphService,
     CancellationToken cancellationToken)
 {
     _searchValue = searchValue;
     _snapshot = snapshot;
     _textView = textView;
     _callback = callback;
     _bufferGraphFactoryService = bufferGraphFactoryService;
     _displayFactory = displayFactory;
     _glyphService = glyphService;
     _cancellationToken = cancellationToken;
 }
Ejemplo n.º 13
0
 public NavigateToVisitor(
     string searchValue,
     ITextSnapshot snapshot, IWpfTextView textView,
     INavigateToCallback callback,
     IBufferGraphFactoryService bufferGraphFactoryService,
     INavigateToItemDisplayFactory displayFactory,
     DispatcherGlyphService glyphService,
     CancellationToken cancellationToken)
 {
     _searchValue = searchValue;
     _snapshot    = snapshot;
     _textView    = textView;
     _callback    = callback;
     _bufferGraphFactoryService = bufferGraphFactoryService;
     _displayFactory            = displayFactory;
     _glyphService      = glyphService;
     _cancellationToken = cancellationToken;
 }
Ejemplo n.º 14
0
        public async void StartSearch(INavigateToCallback callback, string searchValue)
        {
            CancellationTokenSource searchCts = null;

            if (_library == null)
            {
                callback.Done();
                return;
            }

            try {
                searchCts = new CancellationTokenSource();
                var oldCts = Interlocked.Exchange(ref _searchCts, searchCts);
                try {
                    oldCts?.Cancel();
                    oldCts?.Dispose();
                } catch (ObjectDisposedException) {
                }

                CancellationToken token;
                try {
                    token = searchCts.Token;
                } catch (ObjectDisposedException) {
                    // highly unlikely race, but easy enough to protect against
                    return;
                }

                await _library.VisitNodesAsync(
                    new LibraryNodeVisitor(this, callback, searchValue, _matchMode),
                    token
                    );
            } catch (OperationCanceledException) {
            } catch (Exception ex) when(!ex.IsCriticalException())
            {
                ex.ReportUnhandledException(_serviceProvider, GetType());
            } finally {
                callback.Done();
                if (searchCts != null)
                {
                    Interlocked.CompareExchange(ref _searchCts, null, searchCts);
                    searchCts.Dispose();
                }
            }
        }
Ejemplo n.º 15
0
        public void StartSearch(INavigateToCallback callback, string searchValue)
        {
            this.StopSearch();

            if (string.IsNullOrWhiteSpace(searchValue))
            {
                callback.Done();
                return;
            }

            var searcher = new Searcher(
                _workspace.CurrentSolution,
                _asyncListener,
                _displayFactory,
                callback,
                searchValue,
                _cancellationTokenSource.Token);

            searcher.Search();
        }
Ejemplo n.º 16
0
        public void StartSearch(INavigateToCallback callback, string searchValue)
        {
            this.StopSearch();

            if (string.IsNullOrWhiteSpace(searchValue))
            {
                callback.Done();
                return;
            }

            var searcher = new Searcher(
                _workspace.CurrentSolution,
                _asyncListener,
                _displayFactory,
                callback,
                searchValue,
                _cancellationTokenSource.Token);

            searcher.Search();
        }
Ejemplo n.º 17
0
        private async Task FindMatchesAsync(INavigateToCallback callback, string searchValue, CancellationToken token)
        {
            var matcher = _services.PatternMatcherFactory.CreatePatternMatcher(
                searchValue,
                new PatternMatcherCreationOptions(CultureInfo.CurrentUICulture, PatternMatcherCreationFlags.AllowFuzzyMatching | PatternMatcherCreationFlags.AllowSimpleSubstringMatching)
                );

            var opts = GetMemberOptions.NoMemberRecursion | GetMemberOptions.IntersectMultipleResults | GetMemberOptions.DetailedInformation;

            foreach (var a in _analyzers)
            {
                a.Task = a.Analyzer.SendRequestAsync(new AP.GetAllMembersRequest {
                    options = opts
                });
            }
            foreach (var a in _analyzers)
            {
                a.Result = await a.Task;
            }
            token.ThrowIfCancellationRequested();

            int progress = 0;
            int total    = _analyzers.Sum(r => r.Result?.completions?.Length ?? 0);

            foreach (var a in _analyzers)
            {
                token.ThrowIfCancellationRequested();
                if ((a.Result?.completions?.Length ?? 0) == 0)
                {
                    continue;
                }

                foreach (var res in FilterResults(a.ProjectName, a.Result.completions, matcher))
                {
                    callback.AddItem(res);
                }

                progress += a.Result.completions.Length;
                callback.ReportProgress(progress, total);
            }
        }
        public void StartSearch(INavigateToCallback callback, string searchValue)
        {
            var libraryManager = (LibraryManager)_serviceProvider.GetService(typeof(IPythonLibraryManager));
            var library        = libraryManager.Library;

            var searchCts = new CancellationTokenSource();
            var oldCts    = Interlocked.Exchange(ref _searchCts, searchCts);

            if (oldCts != null)
            {
                oldCts.Dispose();
            }
            var pyService = _serviceProvider.GetPythonToolsService();

            Task.Run(() => {
                try {
                    library.VisitNodes(new LibraryNodeVisitor(pyService, this, callback, searchValue), searchCts.Token);
                } finally {
                    callback.Done();
                }
            }).HandleAllExceptions(SR.ProductName, GetType()).DoNotWait();
        }
Ejemplo n.º 19
0
        public void StartSearch(INavigateToCallback callback, string searchValue)
        {
            var textView = GetCurrentTextView();

            if (textView == null)
            {
                callback.Done();
                return;
            }

            var cancellationTokenSource = new CancellationTokenSource();

            _searchCancellationTokenSource = cancellationTokenSource;

            var cancellationToken = cancellationTokenSource.Token;

            var snapshot = textView.TextSnapshot;

            Task.Run(() =>
            {
                try
                {
                    var syntaxTree = snapshot.GetSyntaxTree(cancellationToken);

                    var visitor = new NavigateToVisitor(
                        searchValue, snapshot, textView, callback, _bufferGraphFactoryService,
                        _navigateToItemProviderFactory, _glyphService, cancellationToken);

                    visitor.Visit(syntaxTree.Root);
                }
                catch (OperationCanceledException)
                {
                }
                finally
                {
                    callback.Done();
                }
            }, cancellationToken);
        }
Ejemplo n.º 20
0
        private async Task FindMatchesAsync(INavigateToCallback callback, string searchValue, CancellationToken token) {
            var matchers = new List<Tuple<FuzzyStringMatcher, string, MatchKind>> {
                    Tuple.Create(new FuzzyStringMatcher(FuzzyMatchMode.Prefix), searchValue, MatchKind.Prefix),
                    Tuple.Create(new FuzzyStringMatcher(_matchMode), searchValue, MatchKind.Regular)
                };

            if (searchValue.Length > 2 && searchValue.StartsWith("/") && searchValue.EndsWith("/")) {
                matchers.Insert(0, Tuple.Create(
                    new FuzzyStringMatcher(FuzzyMatchMode.RegexIgnoreCase),
                    searchValue.Substring(1, searchValue.Length - 2),
                    MatchKind.Regular
                ));
            }

            var opts = GetMemberOptions.NoMemberRecursion | GetMemberOptions.IntersectMultipleResults | GetMemberOptions.DetailedInformation;
            foreach (var a in _analyzers) {
                a.Task = a.Analyzer.SendRequestAsync(new AP.GetAllMembersRequest { options = opts });
            }
            foreach (var a in _analyzers) {
                a.Result = await a.Task;
            }
            token.ThrowIfCancellationRequested();

            int progress = 0;
            int total = _analyzers.Sum(r => r.Result?.completions?.Length ?? 0);
            foreach (var a in _analyzers) {
                token.ThrowIfCancellationRequested();
                if (a.Result?.completions?.Length == 0) {
                    continue;
                }

                foreach (var res in FilterResults(a.ProjectName, a.Result.completions, matchers)) {
                    callback.AddItem(res);
                }

                progress += a.Result.completions.Length;
                callback.ReportProgress(progress, total);
            }
        }
Ejemplo n.º 21
0
        public void StartSearch(INavigateToCallback callback, string searchValue)
        {
            var textView = GetCurrentTextView();
            if (textView == null)
            {
                callback.Done();
                return;
            }

            var cancellationTokenSource = new CancellationTokenSource();
            _searchCancellationTokenSource = cancellationTokenSource;

            var cancellationToken = cancellationTokenSource.Token;

            var snapshot = textView.TextSnapshot;

            Task.Run(() =>
            {
                try
                {
                    var syntaxTree = snapshot.GetSyntaxTree(cancellationToken);

                    var visitor = new NavigateToVisitor(
                        searchValue, snapshot, textView, callback, _bufferGraphFactoryService,
                        _navigateToItemProviderFactory, _glyphService, cancellationToken);

                    visitor.Visit(syntaxTree.Root);
                }
                catch (OperationCanceledException)
                {
                    
                }
                finally
                {
                    callback.Done();
                }
            }, cancellationToken);
        }
Ejemplo n.º 22
0
        private void Search(INavigateToCallback callback, string searchValue)
        {
            var i = 0;

            foreach (var file in Util.GetSolutionAllSdmapFiles(_serviceProvider))
            {
                if (_cancellationTokenSource.IsCancellationRequested)
                {
                    break;
                }

                i += 1;

                foreach (var match in SdmapIdListener.FindMatches(file, searchValue))
                {
                    callback.AddItem(match.ToNavigateToItem(_navigateToItemDisplayFactory));
                }

                callback.ReportProgress(i, Math.Max(100, i + 1));
            }

            callback.Done();
        }
Ejemplo n.º 23
0
        private bool GetSearchCurrentDocumentOptionWorker(INavigateToCallback callback)
        {
            // INavigateToOptions2, in VS2017, has a SearchCurrentDocument property.
            var navigateToOptions = callback.Options;

            try
            {
                var interfaceType = navigateToOptions.GetType().GetInterface("INavigateToOptions2");
                if (interfaceType != null)
                {
                    var searchCurrentDocumentProperty = interfaceType.GetProperty("SearchCurrentDocument");
                    if (searchCurrentDocumentProperty != null)
                    {
                        return((bool)searchCurrentDocumentProperty.GetValue(navigateToOptions));
                    }
                }

                return(false);
            }
            catch
            {
                return(false);
            }
        }
Ejemplo n.º 24
0
 public void StartSearch(INavigateToCallback callback, string searchValue, INavigateToFilterParameters filter)
 {
     StartSearch(callback, searchValue, filter.Kinds);
 }
Ejemplo n.º 25
0
 internal void StartSearch(NitraNavigateToItemProvider nitraNavigateToItemProvider, INavigateToCallback callback, string pattern, bool hideExternalItems, bool searchCurrentDocument, ISet <string> kinds)
 {
     _callback = callback;
     _nitraNavigateToItemProvider = nitraNavigateToItemProvider;
     // TODO: find curent ProjectId for active file
     // TODO: Add support for 'searchCurrentDocument'
     Client.Send(new ClientMessage.FindDeclarations(pattern, ProjectId.Invalid, hideExternalItems, kinds.ToImmutableArray()));
 }
Ejemplo n.º 26
0
 void INavigateToItemProvider.StartSearch(INavigateToCallback callback, string searchValue)
 {
     _searchText = searchValue;
     _threadCommunicator.StartSearch(searchValue);
     callback.Done();
 }
Ejemplo n.º 27
0
        public void StartSearch(INavigateToCallback callback, string searchValue, INavigateToFilterParameters filter)
        {
            var options = (INavigateToOptions2)callback.Options;

            StartSearch(callback, searchValue, options.HideExternalItems, options.SearchCurrentDocument, filter.Kinds);
        }
Ejemplo n.º 28
0
 void INavigateToItemProvider.StartSearch(INavigateToCallback callback, string searchValue)
 {
     _threadCommunicator.StartSearch();
 }
 public NavigateToItemProviderCallback(INavigateToItemDisplayFactory displayFactory, INavigateToCallback callback)
 {
     _displayFactory = displayFactory;
     _callback       = callback;
 }
Ejemplo n.º 30
0
 public LibraryNodeVisitor(JNavigateToItemProvider itemProvider, INavigateToCallback navCallback, string searchValue)
 {
     _itemProvider = itemProvider;
     _navCallback = navCallback;
     _searchValue = searchValue;
     _path.Push(null);
     _comparer = new FuzzyStringMatcher(JToolsPackage.Instance.AdvancedEditorOptionsPage.SearchMode);
     _regexComparer = new FuzzyStringMatcher(FuzzyMatchMode.RegexIgnoreCase);
 }
Ejemplo n.º 31
0
 public void StartSearch(INavigateToCallback callback, string searchValue)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 32
0
 internal void StopSearch()
 {
     _callback = null;
     _nitraNavigateToItemProvider = null;
 }
Ejemplo n.º 33
0
        private bool GetSearchCurrentDocumentOptionWorker(INavigateToCallback callback)
        {
            var options2 = callback.Options as INavigateToOptions2;

            return(options2?.SearchCurrentDocument ?? false);
        }
        public void StartSearch(INavigateToCallback callback, string searchValue)
        {
            Debug.Assert(_currentWorker == null);

            if (searchValue.Length > 0 && (searchValue[0] == '.' || searchValue[0] == '#'))
            {
                _currentWorker = new Worker(_owner, callback, searchValue);
            }
            else
            {
                callback.Done();
            }
        }
 public LibraryNodeVisitor(PythonToolsService pyService, PythonNavigateToItemProvider itemProvider, INavigateToCallback navCallback, string searchValue)
 {
     _pyService    = pyService;
     _itemProvider = itemProvider;
     _navCallback  = navCallback;
     _searchValue  = searchValue;
     _path.Push(null);
     _comparer      = new FuzzyStringMatcher(_pyService.AdvancedOptions.SearchMode);
     _regexComparer = new FuzzyStringMatcher(FuzzyMatchMode.RegexIgnoreCase);
 }
Ejemplo n.º 36
0
 private bool GetSearchCurrentDocumentOptionWorker(INavigateToCallback callback)
 {
     var optionsService = _optionsServices.Length > 0
         ? VersionSelector.SelectHighest(_optionsServices)
         : null;
     var searchCurrentDocument = optionsService?.GetSearchCurrentDocument(callback.Options) ?? false;
     return searchCurrentDocument;
 }
Ejemplo n.º 37
0
 public void StartSearch(INavigateToCallback callback, string searchValue)
 {
     StartSearch(callback, searchValue, true, false, new SortedSet <string>());
 }
Ejemplo n.º 38
0
        public void StartSearch(INavigateToCallback callback, string searchValue) {
            var libraryManager = (LibraryManager)_serviceProvider.GetService(typeof(IPythonLibraryManager));
            var library = libraryManager.Library;

            var searchCts = new CancellationTokenSource();
            var oldCts = Interlocked.Exchange(ref _searchCts, searchCts);
            if (oldCts != null) {
                oldCts.Dispose();
            }
            var pyService = _serviceProvider.GetPythonToolsService();
            Task.Run(() => {
                try {
                    library.VisitNodes(new LibraryNodeVisitor(pyService, this, callback, searchValue), searchCts.Token);
                } finally {
                    callback.Done();
                }
            }).HandleAllExceptions(_serviceProvider, GetType()).DoNotWait();
        }
Ejemplo n.º 39
0
 public void StartSearch(INavigateToCallback callback, string searchValue, INavigateToFilterParameters filter)
 => StartSearch(callback, searchValue, filter.Kinds.ToImmutableHashSet(StringComparer.Ordinal));
Ejemplo n.º 40
0
 public void StartSearch(INavigateToCallback callback, string searchValue)
 => StartSearch(callback, searchValue, KindsProvided);
 void INavigateToItemProvider.StartSearch(INavigateToCallback callback, string searchValue)
 {
     _searchText = searchValue;
     _threadCommunicator.StartSearch(searchValue);
     callback.Done();
 }