File tree Expand file tree Collapse file tree 4 files changed +43
-0
lines changed Expand file tree Collapse file tree 4 files changed +43
-0
lines changed Original file line number Diff line number Diff line change @@ -520,6 +520,12 @@ impl DesignRoot {
520520 searcher. references
521521 }
522522
523+ pub fn find_all_references_in_source ( & self , source : & Source , ent : EntRef ) -> Vec < SrcPos > {
524+ let mut searcher = FindAllReferences :: new ( self , ent) ;
525+ let _ = self . search_source ( source, & mut searcher) ;
526+ searcher. references
527+ }
528+
523529 pub fn public_symbols < ' a > ( & ' a self ) -> Box < dyn Iterator < Item = EntRef < ' a > > + ' a > {
524530 Box :: new ( self . libraries . values ( ) . flat_map ( |library| {
525531 std:: iter:: once ( self . arenas . get ( library. id ) ) . chain ( library. units . values ( ) . flat_map (
Original file line number Diff line number Diff line change @@ -309,6 +309,10 @@ impl Project {
309309 self . root . find_all_references ( ent)
310310 }
311311
312+ pub fn find_all_references_in_source ( & self , source : & Source , ent : & AnyEnt ) -> Vec < SrcPos > {
313+ self . root . find_all_references_in_source ( source, ent)
314+ }
315+
312316 /// Get source positions that are not resolved to a declaration
313317 /// This is used for development to test where the language server is blind
314318 pub fn find_all_unresolved ( & self ) -> ( usize , Vec < SrcPos > ) {
Original file line number Diff line number Diff line change @@ -190,6 +190,14 @@ impl ConnectionRpcChannel {
190190 }
191191 Err ( request) => request,
192192 } ;
193+ let request = match extract :: < request:: DocumentHighlightRequest > ( request) {
194+ Ok ( ( id, params) ) => {
195+ let result = server. document_highlight ( & params. text_document_position_params ) ;
196+ self . send_response ( lsp_server:: Response :: new_ok ( id, result) ) ;
197+ return ;
198+ }
199+ Err ( request) => request,
200+ } ;
193201 let request = match extract :: < request:: HoverRequest > ( request) {
194202 Ok ( ( id, params) ) => {
195203 let result = server. text_document_hover ( & params. text_document_position_params ) ;
Original file line number Diff line number Diff line change @@ -182,6 +182,7 @@ impl VHDLServer {
182182 } ) ) ,
183183 workspace_symbol_provider : Some ( OneOf :: Left ( true ) ) ,
184184 document_symbol_provider : Some ( OneOf :: Left ( true ) ) ,
185+ document_highlight_provider : Some ( OneOf :: Left ( true ) ) ,
185186 completion_provider : Some ( CompletionOptions {
186187 resolve_provider : Some ( true ) ,
187188 trigger_characters : Some ( trigger_chars) ,
@@ -681,6 +682,30 @@ impl VHDLServer {
681682 } )
682683 }
683684
685+ pub fn document_highlight (
686+ & mut self ,
687+ params : & TextDocumentPositionParams ,
688+ ) -> Option < Vec < DocumentHighlight > > {
689+ let source = self
690+ . project
691+ . get_source ( & uri_to_file_name ( & params. text_document . uri ) ) ?;
692+
693+ let ent = self
694+ . project
695+ . find_declaration ( & source, from_lsp_pos ( params. position ) ) ?;
696+
697+ Some (
698+ self . project
699+ . find_all_references_in_source ( & source, ent)
700+ . iter ( )
701+ . map ( |pos| DocumentHighlight {
702+ range : to_lsp_range ( pos. range ( ) ) ,
703+ kind : Some ( DocumentHighlightKind :: TEXT ) ,
704+ } )
705+ . collect ( ) ,
706+ )
707+ }
708+
684709 pub fn workspace_symbol (
685710 & self ,
686711 params : & WorkspaceSymbolParams ,
You can’t perform that action at this time.
0 commit comments