Skip to content

Commit 41233e1

Browse files
committed
refactor: dry up scoped symbols
1 parent 19b9fe1 commit 41233e1

File tree

14 files changed

+35
-64
lines changed

14 files changed

+35
-64
lines changed

pkgs/sass_language_services/lib/sass_language_services.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,5 @@ export 'src/file_system_provider.dart'
2323
export 'src/language_services.dart' show LanguageServices;
2424

2525
export 'src/features/document_links/stylesheet_document_link.dart';
26+
export 'src/features/document_symbols/scoped_symbols.dart';
2627
export 'src/features/document_symbols/stylesheet_document_symbol.dart';

pkgs/sass_language_services/lib/src/features/document_highlights/document_highlights_feature.dart

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ import 'package:sass_api/sass_api.dart' as sass;
33
import 'package:sass_language_services/sass_language_services.dart';
44
import 'package:sass_language_services/src/features/find_references/find_references_visitor.dart';
55

6-
import '../go_to_definition/scope_visitor.dart';
7-
import '../go_to_definition/scoped_symbols.dart';
86
import '../language_feature.dart';
97
import '../node_at_offset_visitor.dart';
108

@@ -28,12 +26,7 @@ class DocumentHighlightsFeature extends LanguageFeature {
2826
}
2927
var kind = getNodeReferenceKind(node);
3028

31-
var symbols = ls.cache.getDocumentSymbols(document) ??
32-
ScopedSymbols(
33-
stylesheet,
34-
document.languageId == 'sass' ? Dialect.indented : Dialect.scss,
35-
);
36-
ls.cache.setDocumentSymbols(document, symbols);
29+
var symbols = ls.getScopedSymbols(document);
3730

3831
var symbol = symbols.findSymbolFromNode(node);
3932

pkgs/sass_language_services/lib/src/features/document_symbols/document_symbols_feature.dart

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,17 @@ class DocumentSymbolsFeature extends LanguageFeature {
1414

1515
return symbolsVisitor.symbols;
1616
}
17+
18+
ScopedSymbols getScopedSymbols(TextDocument document) {
19+
var stylesheet = ls.parseStylesheet(document);
20+
21+
var symbols = ls.cache.getScopedSymbols(document) ??
22+
ScopedSymbols(
23+
stylesheet,
24+
document.languageId == 'sass' ? Dialect.indented : Dialect.scss,
25+
);
26+
ls.cache.setScopedSymbols(document, symbols);
27+
28+
return symbols;
29+
}
1730
}

pkgs/sass_language_services/lib/src/features/go_to_definition/scope.dart renamed to pkgs/sass_language_services/lib/src/features/document_symbols/scope.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import '../document_symbols/stylesheet_document_symbol.dart';
1+
import 'stylesheet_document_symbol.dart';
22

33
class Scope {
44
Scope? parent;

pkgs/sass_language_services/lib/src/features/go_to_definition/scope_visitor.dart renamed to pkgs/sass_language_services/lib/src/features/document_symbols/scope_visitor.dart

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,13 @@ import 'package:lsp_server/lsp_server.dart' as lsp;
22
import 'package:sass_api/sass_api.dart' as sass;
33

44
import '../../utils/sass_lsp_utils.dart';
5-
import '../document_symbols/stylesheet_document_symbol.dart';
5+
import 'scoped_symbols.dart';
6+
import 'stylesheet_document_symbol.dart';
67
import 'scope.dart';
78

89
final deprecated = RegExp(r'///\s*@deprecated');
910
final openBracketOrNewline = RegExp(r'[\{\n]');
1011

11-
enum Dialect { scss, indented }
12-
1312
/// Builds scopes and a list of symbols in those scopes starting at [scope] (typically the global scope).
1413
class ScopeVisitor with sass.RecursiveStatementVisitor {
1514
final Scope scope;

pkgs/sass_language_services/lib/src/features/go_to_definition/scoped_symbols.dart renamed to pkgs/sass_language_services/lib/src/features/document_symbols/scoped_symbols.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
import 'package:sass_api/sass_api.dart' as sass;
22
import 'package:sass_language_services/src/utils/sass_lsp_utils.dart';
33

4-
import '../document_symbols/stylesheet_document_symbol.dart';
4+
import 'stylesheet_document_symbol.dart';
55
import '../find_references/reference.dart';
66
import 'scope.dart';
77
import 'scope_visitor.dart';
88

9+
enum Dialect { scss, indented }
10+
911
ReferenceKind? getNodeReferenceKind(sass.AstNode node) {
1012
if (node is sass.VariableDeclaration) {
1113
return ReferenceKind.variable;

pkgs/sass_language_services/lib/src/features/folding_ranges/folding_ranges_feature.dart

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,14 @@
11
import 'package:lsp_server/lsp_server.dart' as lsp;
22
import 'package:sass_language_services/sass_language_services.dart';
33

4-
import '../go_to_definition/scope.dart';
5-
import '../go_to_definition/scope_visitor.dart';
6-
import '../go_to_definition/scoped_symbols.dart';
4+
import '../document_symbols/scope.dart';
75
import '../language_feature.dart';
86

97
class FoldingRangesFeature extends LanguageFeature {
108
FoldingRangesFeature({required super.ls});
119

1210
List<lsp.FoldingRange> getFoldingRanges(TextDocument document) {
13-
var stylesheet = ls.parseStylesheet(document);
14-
15-
var symbols = ls.cache.getDocumentSymbols(document) ??
16-
ScopedSymbols(
17-
stylesheet,
18-
document.languageId == 'sass' ? Dialect.indented : Dialect.scss,
19-
);
20-
ls.cache.setDocumentSymbols(document, symbols);
11+
var symbols = ls.getScopedSymbols(document);
2112

2213
var result = <lsp.FoldingRange>[];
2314
// Omit the global scope.

pkgs/sass_language_services/lib/src/features/go_to_definition/go_to_definition_feature.dart

Lines changed: 3 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
import 'package:lsp_server/lsp_server.dart' as lsp;
22
import 'package:sass_api/sass_api.dart' as sass;
33
import 'package:sass_language_services/sass_language_services.dart';
4-
import 'package:sass_language_services/src/features/go_to_definition/scoped_symbols.dart';
54
import 'package:sass_language_services/src/features/node_at_offset_visitor.dart';
65

76
import '../../utils/sass_lsp_utils.dart';
87
import '../language_feature.dart';
98
import 'definition.dart';
10-
import 'scope_visitor.dart';
119

1210
class GoToDefinitionFeature extends LanguageFeature {
1311
GoToDefinitionFeature({required super.ls});
@@ -59,13 +57,7 @@ class GoToDefinitionFeature extends LanguageFeature {
5957

6058
// Look for the symbol in the current document.
6159
// It may be a scoped symbol.
62-
// TODO: refactor so L63-68 is a function in DocumentSymbolsFeature, remove duplicates.
63-
var symbols = ls.cache.getDocumentSymbols(document) ??
64-
ScopedSymbols(
65-
stylesheet,
66-
document.languageId == 'sass' ? Dialect.indented : Dialect.scss,
67-
);
68-
ls.cache.setDocumentSymbols(document, symbols);
60+
var symbols = ls.getScopedSymbols(document);
6961
var symbol = symbols.findSymbolFromNode(node);
7062
if (symbol != null) {
7163
// Found the definition in the same document.
@@ -134,14 +126,7 @@ class GoToDefinitionFeature extends LanguageFeature {
134126
? name!.replaceFirst(prefix, '')
135127
: name!;
136128

137-
var stylesheet = ls.parseStylesheet(document);
138-
139-
var symbols = ls.cache.getDocumentSymbols(document) ??
140-
ScopedSymbols(
141-
stylesheet,
142-
document.languageId == 'sass' ? Dialect.indented : Dialect.scss,
143-
);
144-
ls.cache.setDocumentSymbols(document, symbols);
129+
var symbols = ls.getScopedSymbols(document);
145130

146131
var symbol = symbols.globalScope.getSymbol(
147132
name: unprefixedName,
@@ -180,13 +165,7 @@ class GoToDefinitionFeature extends LanguageFeature {
180165
continue;
181166
}
182167

183-
var stylesheet = ls.parseStylesheet(document);
184-
var symbols = ls.cache.getDocumentSymbols(document) ??
185-
ScopedSymbols(
186-
stylesheet,
187-
document.languageId == 'sass' ? Dialect.indented : Dialect.scss,
188-
);
189-
ls.cache.setDocumentSymbols(document, symbols);
168+
var symbols = ls.getScopedSymbols(document);
190169

191170
for (var kind in kinds) {
192171
var symbol = symbols.globalScope.getSymbol(

pkgs/sass_language_services/lib/src/features/rename/rename_feature.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import 'package:lsp_server/lsp_server.dart' as lsp;
22
import 'package:sass_api/sass_api.dart';
33
import 'package:sass_language_services/sass_language_services.dart';
4-
import 'package:sass_language_services/src/features/go_to_definition/scoped_symbols.dart';
54
import 'package:sass_language_services/src/features/node_at_offset_visitor.dart';
65

76
import '../find_references/find_references_feature.dart';

pkgs/sass_language_services/lib/src/features/selection_ranges/selection_ranges_feature.dart

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ import 'package:sass_language_services/sass_language_services.dart';
33
import 'package:sass_language_services/src/features/selection_ranges/selection_ranges_visitor.dart';
44
import 'package:sass_language_services/src/utils/sass_lsp_utils.dart';
55

6-
import '../go_to_definition/scope_visitor.dart';
7-
import '../go_to_definition/scoped_symbols.dart';
86
import '../language_feature.dart';
97

108
class SelectionRangesFeature extends LanguageFeature {
@@ -13,12 +11,6 @@ class SelectionRangesFeature extends LanguageFeature {
1311
List<lsp.SelectionRange> getSelectionRanges(
1412
TextDocument document, List<lsp.Position> positions) {
1513
var stylesheet = ls.parseStylesheet(document);
16-
var symbols = ls.cache.getDocumentSymbols(document) ??
17-
ScopedSymbols(
18-
stylesheet,
19-
document.languageId == 'sass' ? Dialect.indented : Dialect.scss,
20-
);
21-
ls.cache.setDocumentSymbols(document, symbols);
2214

2315
var result = <lsp.SelectionRange>[];
2416

0 commit comments

Comments
 (0)