Skip to content

Commit 6d68d5c

Browse files
different take on directive imports
1 parent 5af50bd commit 6d68d5c

File tree

2 files changed

+64
-2
lines changed

2 files changed

+64
-2
lines changed

lib/src/scip_visitor.dart

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class ScipVisitor extends GeneralizingAstVisitor {
3232
_projectRoot,
3333
pubspec,
3434
) {
35-
final fileSymbol = _symbolGenerator.fileSymbolFor(_relativePath);
35+
final fileSymbol = _symbolGenerator.fileSymbolForPath(_relativePath);
3636
occurrences.add(Occurrence(
3737
symbol: fileSymbol,
3838
range: [0, 0, 0],
@@ -60,6 +60,8 @@ class ScipVisitor extends GeneralizingAstVisitor {
6060
_visitNormalFormalParameter(node);
6161
} else if (node is SimpleIdentifier) {
6262
_visitSimpleIdentifier(node);
63+
} else if (node is Directive) {
64+
_visitDirective(node);
6365
}
6466

6567
super.visitNode(node);
@@ -107,6 +109,39 @@ class ScipVisitor extends GeneralizingAstVisitor {
107109
}
108110
}
109111

112+
void _visitDirective(Directive node) {
113+
final element = node.element;
114+
115+
StringLiteral uriLiteral;
116+
if (node is UriBasedDirective) {
117+
uriLiteral = node.uri;
118+
} else if (node is PartOfDirective && node.uri != null) {
119+
uriLiteral = node.uri!;
120+
} else {
121+
return;
122+
}
123+
124+
// uri is a non-relative, package (or dart sdk) uri:
125+
// Eg: `package:<name>/<path>.dart`, `dart:<name>`
126+
127+
// Uri uri;
128+
// if (element is LibraryImportElement) {
129+
// uri = (element.uri as DirectiveUriWithSource).source.uri;
130+
// } else if (element is LibraryExportElement) {
131+
// uri = (element.uri as DirectiveUriWithSource).source.uri;
132+
// } else if (element is PartElement) {
133+
// uri = (element.uri as DirectiveUriWithSource).source.uri;
134+
// } else if (node is PartOfDirective && element is LibraryElement) {
135+
// uri = element.source.uri;
136+
// } else {
137+
// return;
138+
// }
139+
140+
_symbolGenerator.symbolFor(element!);
141+
142+
// _symbolGenerator.fileSymbolForUri(uri);
143+
}
144+
110145
/// Registers the provided [element] as a reference to an existing definition
111146
///
112147
/// [node] refers to the ast node where the reference exists, [element]

lib/src/symbol.dart

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ class SymbolGenerator {
5656
].join(' ');
5757
}
5858

59-
String fileSymbolFor(String path) {
59+
String fileSymbolForPath(String path) {
6060
return [
6161
'scip-dart',
6262
'pub ${_pubspec.name} ${_pubspec.version}',
@@ -219,6 +219,33 @@ class SymbolGenerator {
219219
return '${_getDescriptor(encEle)}${element.name}.';
220220
}
221221

222+
if (
223+
element is LibraryImportElement ||
224+
element is LibraryExportElement ||
225+
element is PartElement
226+
) {
227+
DirectiveUriWithSource directiveUri;
228+
if (element is LibraryImportElement) {
229+
directiveUri = element.uri as DirectiveUriWithSource;
230+
} else if (element is LibraryExportElement) {
231+
directiveUri = element.uri as DirectiveUriWithSource;
232+
} else if (element is PartElement) {
233+
directiveUri = element.uri as DirectiveUriWithSource;
234+
} else {
235+
return null;
236+
}
237+
238+
final config = _packageConfig.packageOf(Uri.file(sourcePath));
239+
if (config == null) {
240+
throw Exception('Could not find package for $sourcePath. Have you run pub get?');
241+
}
242+
243+
return _escapeNamespacePath(
244+
sourcePath.substring(config.root.toFilePath().length),
245+
);
246+
}
247+
248+
222249
display('\n'
223250
'Received unknown type (${element.runtimeType})\n'
224251
'\tname: ${element.name}\n'

0 commit comments

Comments
 (0)