File tree Expand file tree Collapse file tree
lib/src/lints/avoid_duplicate_code/visitors
test/src/lints/avoid_duplicate_code Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -16,6 +16,7 @@ import 'package:solid_lints/src/lints/avoid_duplicate_code/reporters/avoid_dupli
1616import 'package:solid_lints/src/lints/avoid_duplicate_code/reporters/duplicate_report_context.dart' ;
1717import 'package:solid_lints/src/lints/avoid_duplicate_code/services/differing_literals_analyzer.dart' ;
1818import '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' ;
1920import 'package:solid_lints/src/lints/avoid_duplicate_code/utils/token_utils.dart' ;
2021import 'package:solid_lints/src/lints/avoid_duplicate_code/visitors/ast_structural_hash_visitor.dart' ;
2122import '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 (
Original file line number Diff line number Diff 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,
You can’t perform that action at this time.
0 commit comments