55// Please see the LICENSE-APACHE or LICENSE-MIT files in this distribution for license details.
66// ------------------------------------------------------------------------------------------------
77
8- use lsp_positions:: Offset ;
9- use lsp_positions:: Position ;
10- use lsp_positions:: Span ;
118use serde:: ser:: Serialize ;
129use serde:: ser:: SerializeSeq ;
1310use serde:: ser:: SerializeStruct ;
@@ -17,13 +14,8 @@ use std::ops::Index;
1714use thiserror:: Error ;
1815
1916use crate :: arena:: Handle ;
20- use crate :: graph:: DebugEntry ;
21- use crate :: graph:: DebugInfo ;
22- use crate :: graph:: Edge ;
2317use crate :: graph:: File ;
24- use crate :: graph:: Node ;
2518use crate :: graph:: NodeID ;
26- use crate :: graph:: SourceInfo ;
2719use crate :: graph:: StackGraph ;
2820use crate :: partial:: PartialPath ;
2921use crate :: partial:: PartialPathEdge ;
@@ -34,8 +26,9 @@ use crate::partial::PartialScopedSymbol;
3426use crate :: partial:: PartialSymbolStack ;
3527use crate :: partial:: ScopeStackVariable ;
3628use crate :: partial:: SymbolStackVariable ;
29+ pub use crate :: serde:: Filter ;
3730use crate :: serde:: ImplicationFilter ;
38- pub use crate :: serde:: { Filter , NoFilter } ;
31+ pub use crate :: serde:: NoFilter ;
3932use crate :: stitching:: Database ;
4033
4134#[ derive( Debug , Error ) ]
@@ -63,24 +56,6 @@ impl<'a, T> InStackGraph<'a, T> {
6356//-----------------------------------------------------------------------------
6457// Files
6558
66- struct Files ;
67-
68- impl < ' a > Serialize for InStackGraph < ' a , & Files > {
69- fn serialize < S > ( & self , serializer : S ) -> Result < S :: Ok , S :: Error >
70- where
71- S : Serializer ,
72- {
73- let graph = self . 0 ;
74- let filter = self . 2 ;
75-
76- let mut ser = serializer. serialize_seq ( None ) ?;
77- for file in graph. iter_files ( ) . filter ( |f| filter. include_file ( graph, f) ) {
78- ser. serialize_element ( & self . with_idx ( file) ) ?;
79- }
80- ser. end ( )
81- }
82- }
83-
8459impl Serialize for InStackGraph < ' _ , ( Handle < File > , & File ) > {
8560 fn serialize < S > ( & self , serializer : S ) -> Result < S :: Ok , S :: Error >
8661 where
@@ -94,111 +69,6 @@ impl Serialize for InStackGraph<'_, (Handle<File>, &File)> {
9469//-----------------------------------------------------------------------------
9570// Nodes
9671
97- struct Nodes ;
98-
99- impl Serialize for InStackGraph < ' _ , & Nodes > {
100- fn serialize < S > ( & self , serializer : S ) -> Result < S :: Ok , S :: Error >
101- where
102- S : Serializer ,
103- {
104- let graph = self . 0 ;
105- let filter = self . 2 ;
106-
107- let mut nodes = serializer. serialize_seq ( None ) ?;
108- for node in graph
109- . iter_nodes ( )
110- . filter ( |n| filter. include_node ( graph, & n) )
111- {
112- nodes. serialize_element ( & self . with_idx ( node) ) ?;
113- }
114- nodes. end ( )
115- }
116- }
117-
118- impl Serialize for InStackGraph < ' _ , ( Handle < Node > , & Node ) > {
119- fn serialize < S > ( & self , serializer : S ) -> Result < S :: Ok , S :: Error >
120- where
121- S : Serializer ,
122- {
123- let graph = self . 0 ;
124- let handle = self . 1 . 0 ;
125- let node = self . 1 . 1 ;
126- let source_info = graph. source_info ( handle) ;
127- let debug_info = graph. debug_info ( handle) ;
128-
129- let mut len = 2 ;
130- if source_info. is_some ( ) {
131- len += 1 ;
132- }
133- if debug_info. is_some ( ) {
134- len += 1 ;
135- }
136-
137- let mut ser = match node {
138- Node :: DropScopes ( _node) => {
139- let mut ser = serializer. serialize_struct ( "node" , len + 1 ) ?;
140- ser. serialize_field ( "type" , "drop_scopes" ) ?;
141- ser
142- }
143- Node :: JumpTo ( _node) => {
144- let mut ser = serializer. serialize_struct ( "node" , len + 1 ) ?;
145- ser. serialize_field ( "type" , "jump_to_scope" ) ?;
146- ser
147- }
148- Node :: PopScopedSymbol ( node) => {
149- let mut ser = serializer. serialize_struct ( "node" , len + 3 ) ?;
150- ser. serialize_field ( "type" , "pop_scoped_symbol" ) ?;
151- ser. serialize_field ( "symbol" , & graph[ node. symbol ] ) ?;
152- ser. serialize_field ( "is_definition" , & node. is_definition ) ?;
153- ser
154- }
155- Node :: PopSymbol ( node) => {
156- let mut ser = serializer. serialize_struct ( "node" , len + 3 ) ?;
157- ser. serialize_field ( "type" , "pop_symbol" ) ?;
158- ser. serialize_field ( "symbol" , & graph[ node. symbol ] ) ?;
159- ser. serialize_field ( "is_definition" , & node. is_definition ) ?;
160- ser
161- }
162- Node :: PushScopedSymbol ( node) => {
163- let mut ser = serializer. serialize_struct ( "node" , len + 4 ) ?;
164- ser. serialize_field ( "type" , "push_scoped_symbol" ) ?;
165- ser. serialize_field ( "symbol" , & graph[ node. symbol ] ) ?;
166- ser. serialize_field ( "scope" , & self . with ( & node. scope ) ) ?;
167- ser. serialize_field ( "is_reference" , & node. is_reference ) ?;
168- ser
169- }
170- Node :: PushSymbol ( node) => {
171- let mut ser = serializer. serialize_struct ( "node" , len + 3 ) ?;
172- ser. serialize_field ( "type" , "push_symbol" ) ?;
173- ser. serialize_field ( "symbol" , & graph[ node. symbol ] ) ?;
174- ser. serialize_field ( "is_reference" , & node. is_reference ) ?;
175- ser
176- }
177- Node :: Root ( _node) => {
178- let mut ser = serializer. serialize_struct ( "node" , len + 1 ) ?;
179- ser. serialize_field ( "type" , "root" ) ?;
180- ser
181- }
182- Node :: Scope ( node) => {
183- let mut ser = serializer. serialize_struct ( "node" , len + 2 ) ?;
184- ser. serialize_field ( "type" , "scope" ) ?;
185- ser. serialize_field ( "is_exported" , & node. is_exported ) ?;
186- ser
187- }
188- } ;
189-
190- ser. serialize_field ( "id" , & self . with ( & node. id ( ) ) ) ?;
191- if let Some ( source_info) = source_info {
192- ser. serialize_field ( "source_info" , & self . with ( source_info) ) ?;
193- }
194- if let Some ( debug_info) = debug_info {
195- ser. serialize_field ( "debug_info" , & self . with ( debug_info) ) ?;
196- }
197-
198- ser. end ( )
199- }
200- }
201-
20272impl Serialize for InStackGraph < ' _ , & Vec < NodeID > > {
20373 fn serialize < S > ( & self , serializer : S ) -> Result < S :: Ok , S :: Error >
20474 where
@@ -231,146 +101,6 @@ impl Serialize for InStackGraph<'_, &NodeID> {
231101 }
232102}
233103
234- impl Serialize for InStackGraph < ' _ , & SourceInfo > {
235- fn serialize < S > ( & self , serializer : S ) -> Result < S :: Ok , S :: Error >
236- where
237- S : Serializer ,
238- {
239- let graph = self . 0 ;
240- let source_info = self . 1 ;
241-
242- let mut len = 1 ;
243- if source_info. syntax_type . is_some ( ) {
244- len += 1 ;
245- }
246-
247- let mut ser = serializer. serialize_struct ( "source_info" , len) ?;
248- ser. serialize_field ( "span" , & self . with ( & source_info. span ) ) ?;
249- if let Some ( syntax_type) = source_info. syntax_type {
250- ser. serialize_field ( "syntax_type" , & graph[ syntax_type] ) ?;
251- }
252- ser. end ( )
253- }
254- }
255-
256- impl Serialize for InStackGraph < ' _ , & DebugInfo > {
257- fn serialize < S > ( & self , serializer : S ) -> Result < S :: Ok , S :: Error >
258- where
259- S : Serializer ,
260- {
261- let debug_info = self . 1 ;
262-
263- let mut ser = serializer. serialize_seq ( None ) ?;
264- for entry in debug_info. iter ( ) {
265- ser. serialize_element ( & self . with ( entry) ) ?;
266- }
267- ser. end ( )
268- }
269- }
270-
271- impl Serialize for InStackGraph < ' _ , & DebugEntry > {
272- fn serialize < S > ( & self , serializer : S ) -> Result < S :: Ok , S :: Error >
273- where
274- S : Serializer ,
275- {
276- let graph = self . 0 ;
277- let debug_entry = self . 1 ;
278-
279- let mut ser = serializer. serialize_struct ( "debug_entry" , 2 ) ?;
280- ser. serialize_field ( "key" , & graph[ debug_entry. key ] ) ?;
281- ser. serialize_field ( "value" , & graph[ debug_entry. value ] ) ?;
282- ser. end ( )
283- }
284- }
285-
286- //-----------------------------------------------------------------------------
287- // Edges
288-
289- struct Edges ;
290-
291- impl Serialize for InStackGraph < ' _ , & Edges > {
292- fn serialize < S > ( & self , serializer : S ) -> Result < S :: Ok , S :: Error >
293- where
294- S : Serializer ,
295- {
296- let graph = self . 0 ;
297- let filter = self . 2 ;
298-
299- let mut ser = serializer. serialize_seq ( None ) ?;
300- for source in graph. iter_nodes ( ) {
301- for edge in graph
302- . outgoing_edges ( source)
303- . filter ( |e| filter. include_edge ( graph, & e. source , & e. sink ) )
304- {
305- ser. serialize_element ( & self . with ( & edge) ) ?;
306- }
307- }
308- ser. end ( )
309- }
310- }
311-
312- impl Serialize for InStackGraph < ' _ , & Edge > {
313- fn serialize < S > ( & self , serializer : S ) -> Result < S :: Ok , S :: Error >
314- where
315- S : Serializer ,
316- {
317- let graph = self . 0 ;
318- let edge = self . 1 ;
319-
320- let mut ser = serializer. serialize_struct ( "edge" , 3 ) ?;
321- ser. serialize_field ( "source" , & self . with ( & graph[ edge. source ] . id ( ) ) ) ?;
322- ser. serialize_field ( "sink" , & self . with ( & graph[ edge. sink ] . id ( ) ) ) ?;
323- ser. serialize_field ( "precedence" , & edge. precedence ) ?;
324- ser. end ( )
325- }
326- }
327-
328- //-----------------------------------------------------------------------------
329- // Span, Position, Offset
330-
331- impl Serialize for InStackGraph < ' _ , & Span > {
332- fn serialize < S > ( & self , serializer : S ) -> Result < S :: Ok , S :: Error >
333- where
334- S : Serializer ,
335- {
336- let span = self . 1 ;
337-
338- let mut ser = serializer. serialize_struct ( "span" , 2 ) ?;
339- ser. serialize_field ( "start" , & self . with ( & span. start ) ) ?;
340- ser. serialize_field ( "end" , & self . with ( & span. end ) ) ?;
341- ser. end ( )
342- }
343- }
344-
345- impl Serialize for InStackGraph < ' _ , & Position > {
346- fn serialize < S > ( & self , serializer : S ) -> Result < S :: Ok , S :: Error >
347- where
348- S : Serializer ,
349- {
350- let position = self . 1 ;
351-
352- let mut ser = serializer. serialize_struct ( "position" , 2 ) ?;
353- ser. serialize_field ( "line" , & position. line ) ?;
354- ser. serialize_field ( "column" , & self . with ( & position. column ) ) ?;
355- ser. end ( )
356- }
357- }
358-
359- impl Serialize for InStackGraph < ' _ , & Offset > {
360- fn serialize < S > ( & self , serializer : S ) -> Result < S :: Ok , S :: Error >
361- where
362- S : Serializer ,
363- {
364- let offset = self . 1 ;
365-
366- let mut ser = serializer. serialize_struct ( "offset" , 3 ) ?;
367- ser. serialize_field ( "utf8_offset" , & offset. utf8_offset ) ?;
368- ser. serialize_field ( "utf16_offset" , & offset. utf16_offset ) ?;
369- ser. serialize_field ( "grapheme_offset" , & offset. grapheme_offset ) ?;
370- ser. end ( )
371- }
372- }
373-
374104//-----------------------------------------------------------------------------
375105// Database
376106
0 commit comments