@@ -3,6 +3,13 @@ import 'dart:math';
3
3
import '../../sass_language_services.dart' ;
4
4
import '../utils/uri_utils.dart' ;
5
5
6
+ class WorkspaceResult <T > {
7
+ final List <T >? result;
8
+ final Set <String > visited;
9
+
10
+ WorkspaceResult (this .result, this .visited);
11
+ }
12
+
6
13
abstract class LanguageFeature {
7
14
late final LanguageServices ls;
8
15
@@ -11,7 +18,7 @@ abstract class LanguageFeature {
11
18
/// Helper to do some kind of lookup for the import tree of [initialDocument] .
12
19
///
13
20
/// The [callback] is called for each document in the import tree. Documents will only get visited once.
14
- Future <List <T >? > findInWorkspace <T >(
21
+ Future <WorkspaceResult <T >> findInWorkspace <T >(
15
22
{required Future <List <T >?> Function ({
16
23
required TextDocument document,
17
24
required String prefix,
@@ -37,7 +44,7 @@ abstract class LanguageFeature {
37
44
);
38
45
}
39
46
40
- Future <List <T >? > _findInWorkspace <T >(
47
+ Future <WorkspaceResult <T >> _findInWorkspace <T >(
41
48
{required Future <List <T >?> Function ({
42
49
required TextDocument document,
43
50
required String prefix,
@@ -57,19 +64,20 @@ abstract class LanguageFeature {
57
64
bool lazy = false ,
58
65
int depth = 0 }) async {
59
66
if (visited.contains (currentDocument.uri.toString ())) {
60
- return Future .value ([] );
67
+ return Future .value (WorkspaceResult ([], visited) );
61
68
}
62
69
63
70
var result = await callback (
64
- document: currentDocument,
65
- prefix: accumulatedPrefix,
66
- hiddenMixinsAndFunctions: hiddenMixinsAndFunctions,
67
- hiddenVariables: hiddenVariables,
68
- shownMixinsAndFunctions: shownMixinsAndFunctions,
69
- shownVariables: shownVariables);
71
+ document: currentDocument,
72
+ prefix: accumulatedPrefix,
73
+ hiddenMixinsAndFunctions: hiddenMixinsAndFunctions,
74
+ hiddenVariables: hiddenVariables,
75
+ shownMixinsAndFunctions: shownMixinsAndFunctions,
76
+ shownVariables: shownVariables,
77
+ );
70
78
71
79
if (lazy && result != null ) {
72
- return result;
80
+ return WorkspaceResult ( result, visited) ;
73
81
}
74
82
75
83
visited.add (currentDocument.uri.toString ());
@@ -90,7 +98,7 @@ abstract class LanguageFeature {
90
98
});
91
99
92
100
if (links.isEmpty) {
93
- return null ;
101
+ return WorkspaceResult ([], visited) ;
94
102
}
95
103
96
104
var linksResult = < T > [];
@@ -143,12 +151,12 @@ abstract class LanguageFeature {
143
151
depth: depth + 1 ,
144
152
);
145
153
146
- if (linkResult != null ) {
147
- linksResult.addAll (linkResult);
154
+ if (linkResult.result != null ) {
155
+ linksResult.addAll (linkResult.result ! );
148
156
}
149
157
}
150
158
151
- return linksResult;
159
+ return WorkspaceResult ( linksResult, visited) ;
152
160
}
153
161
154
162
Future <TextDocument > getTextDocument (Uri uri) async {
0 commit comments