Skip to content

Commit 459cb9b

Browse files
solid-illiaaihistovIllia Aihistov
andauthored
fix: skip indexing and reporting for files located outside the analysis context root (#370)
Co-authored-by: Illia Aihistov <illia.aihistov-us@solid.software>
1 parent 2c51ddc commit 459cb9b

2 files changed

Lines changed: 42 additions & 0 deletions

File tree

‎lib/src/lints/avoid_duplicate_code/visitors/avoid_duplicate_code_visitor.dart‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import 'package:solid_lints/src/lints/avoid_duplicate_code/reporters/avoid_dupli
1616
import 'package:solid_lints/src/lints/avoid_duplicate_code/reporters/duplicate_report_context.dart';
1717
import 'package:solid_lints/src/lints/avoid_duplicate_code/services/differing_literals_analyzer.dart';
1818
import 'package:solid_lints/src/lints/avoid_duplicate_code/services/global_hash_registry.dart';
19+
import 'package:solid_lints/src/lints/avoid_duplicate_code/utils/path_utils.dart';
1920
import 'package:solid_lints/src/lints/avoid_duplicate_code/utils/token_utils.dart';
2021
import 'package:solid_lints/src/lints/avoid_duplicate_code/visitors/ast_structural_hash_visitor.dart';
2122
import 'package:solid_lints/src/lints/avoid_duplicate_code/visitors/candidate_visitor.dart';
@@ -83,6 +84,11 @@ class AvoidDuplicateCodeVisitor extends RecursiveAstVisitor<void> {
8384
if (_filePath.isEmpty) return;
8485
final filePath = _filePath;
8586

87+
if (_contextRoot != null &&
88+
!PathUtils.isWithinOrEqual(_contextRoot.root.path, filePath)) {
89+
return;
90+
}
91+
8692
final packageRoot =
8793
_contextRoot?.root.path ??
8894
GlobalHashRegistry.instance.findPackageRoot(

‎test/src/lints/avoid_duplicate_code/avoid_duplicate_code_rule_test.dart‎

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -871,6 +871,42 @@ void otherMethod() {
871871
expect(GlobalHashRegistry.instance.fileCount, 0);
872872
}
873873

874+
Future<void> test_does_not_index_or_report_file_outside_context_root() async {
875+
final outsideFile = newFile('/other_package/lib/outside.dart', '''
876+
void outsideMethod() {
877+
final x = 1;
878+
if (x > 0) {
879+
print(x);
880+
}
881+
print('done');
882+
}
883+
''');
884+
885+
final avoidRule = rule as AvoidDuplicateCodeRule;
886+
final resolved = await resolveFile(testFile.path);
887+
final contextRoot = resolved.session.analysisContext.contextRoot;
888+
889+
final parsed = parseString(content: outsideFile.readAsStringSync());
890+
891+
final visitor = AvoidDuplicateCodeVisitor(
892+
avoidRule,
893+
AvoidDuplicateCodeParameters(
894+
minTokens: 10,
895+
exclude: ExcludedIdentifiersListParameter(exclude: []),
896+
),
897+
filePath: outsideFile.path,
898+
modificationStamp: 1,
899+
ignoreMatcher: avoidRule.ignoreMatcher,
900+
contextRoot: contextRoot,
901+
resourceProvider: resourceProvider,
902+
analysisOptionsLoader: avoidRule.analysisOptionsLoader,
903+
);
904+
905+
parsed.unit.accept(visitor);
906+
907+
expect(GlobalHashRegistry.instance.fileCount, 0);
908+
}
909+
874910
Future<void> _indexFile(
875911
File file, {
876912
AvoidDuplicateCodeParameters? parameters,

0 commit comments

Comments
 (0)