Skip to content

Commit 961b748

Browse files
Error if function reference that refers to other function over time
1 parent dce67db commit 961b748

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

lib/src/migrators/module/references.dart

+20
Original file line numberDiff line numberDiff line change
@@ -630,6 +630,16 @@ class _ReferenceVisitor extends ScopedAstVisitor {
630630
super.visitMixinRule(node);
631631
var member = MemberDeclaration(node);
632632
_declarationSources[member] = CurrentSource(_currentUrl);
633+
_mixins.forEach((declaredMixins, reference) => {
634+
if (declaredMixins.name == node.name &&
635+
reference.sourceUrl != _currentUrl)
636+
{
637+
throw new MigrationException(
638+
'Mixin `${node.name}` has been previously declared' +
639+
' in ${reference.sourceUrl.pathSegments.last} and is' +
640+
' later on defined in ${_currentUrl.pathSegments.last}.')
641+
}
642+
});
633643
_registerLibraryUrl(member);
634644
}
635645

@@ -660,6 +670,16 @@ class _ReferenceVisitor extends ScopedAstVisitor {
660670
super.visitFunctionRule(node);
661671
var member = MemberDeclaration(node);
662672
_declarationSources[member] = CurrentSource(_currentUrl);
673+
_functions.forEach((declaredFunction, reference) => {
674+
if (declaredFunction.name == node.name &&
675+
reference.sourceUrl != _currentUrl)
676+
{
677+
throw new MigrationException(
678+
'Function `${node.name}` has been previously declared' +
679+
' in ${reference.sourceUrl.pathSegments.last} and is' +
680+
' later on defined in ${_currentUrl.pathSegments.last}.')
681+
}
682+
});
663683
_registerLibraryUrl(member);
664684
}
665685

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<==> input/entrypoint.scss
2+
@import "definition1";
3+
@import "upstream";
4+
@import "direct";
5+
6+
<==> input/_direct.scss
7+
@import "definition2";
8+
@import "upstream";
9+
10+
<==> input/definition1.scss
11+
@function fn() {@return 1}
12+
13+
<==> input/definition2.scss
14+
@function fn() {@return 2}
15+
16+
<==> input/upstream.scss
17+
a { b: fn() }
18+
19+
<==> error.txt
20+
Error: Function `fn` has been previously declared in definition1.scss and is later on defined in definition2.scss.
21+
Migration failed!

0 commit comments

Comments
 (0)