From 7fc91f41d8bd948cef3085d7c0d0ec92d1b2bc53 Mon Sep 17 00:00:00 2001
From: Aleksey Kladov <aleksey.kladov@gmail.com>
Date: Mon, 13 Aug 2018 16:07:05 +0300
Subject: Generalize query

---
 crates/server/src/main_loop/handlers.rs | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

(limited to 'crates/server')

diff --git a/crates/server/src/main_loop/handlers.rs b/crates/server/src/main_loop/handlers.rs
index bd0e6825b..f51909280 100644
--- a/crates/server/src/main_loop/handlers.rs
+++ b/crates/server/src/main_loop/handlers.rs
@@ -5,7 +5,7 @@ use languageserver_types::{
     Command, TextDocumentIdentifier, WorkspaceEdit,
     SymbolInformation, Location,
 };
-use libanalysis::{World};
+use libanalysis::{World, Query};
 use libeditor;
 use libsyntax2::TextUnit;
 use serde_json::{to_value, from_value};
@@ -100,7 +100,20 @@ pub fn handle_workspace_symbol(
     params: req::WorkspaceSymbolParams,
 ) -> Result<Option<Vec<SymbolInformation>>> {
     let mut acc = Vec::new();
-    for (path, symbol) in world.world_symbols(&params.query).take(128) {
+
+    let query = {
+        let all_symbols = params.query.contains("#");
+        let query: String = params.query.chars()
+            .filter(|&c| c != '#')
+            .collect();
+        let mut q = Query::new(query);
+        if !all_symbols {
+            q.only_types();
+        }
+        q
+    };
+
+    for (path, symbol) in world.world_symbols(query).take(128) {
         let line_index = world.file_line_index(path)?;
 
         let info = SymbolInformation {
-- 
cgit v1.2.3