1+ import  'dart:io' ;
2+ 
13import  'package:analyzer/dart/analysis/results.dart' ;
24import  'package:analyzer/dart/analysis/session.dart' ;
5+ import  'package:analyzer/dart/ast/ast.dart' ;
36import  'package:analyzer/dart/element/element.dart' ;
4- import  'package:analyzer/dart/element/visitor.dart' ;
57import  'package:analyzer/error/error.dart'  hide  LintCode;
68import  'package:analyzer/error/listener.dart' ;
7- import  'package:analyzer/src/dart/ast/ast.dart' ;
89import  'package:custom_lint_builder/custom_lint_builder.dart' ;
910import  'package:drift_dev/src/analysis/backend.dart' ;
10- import  'package:drift_dev/src/backends/build/backend.dart' ;
11- import  'package:logging/src/logger.dart' ;
11+ import  'package:drift_dev/src/analysis/options.dart' ;
12+ import  'package:logging/logging.dart' ;
13+ 
14+ import  '../analysis/driver/driver.dart' ;
1215
1316final  columnBuilderChecker = 
1417    TypeChecker .fromName ('DriftDatabase' , packageName:  'drift' );
@@ -22,59 +25,81 @@ class DriftBuildErrors extends DartLintRule {
2225        'All futures in a transaction should be awaited to ensure that all operations are completed before the transaction is closed.' ,
2326    errorSeverity:  ErrorSeverity .ERROR ,
2427  );
28+ 
2529  @override 
2630  void  run (CustomLintResolver  resolver, ErrorReporter  reporter,
2731      CustomLintContext  context) async  {
2832    final  unit =  await  resolver.getResolvedUnitResult ();
33+     final  backend =  CustomLintBackend (unit.session);
34+     final  driver =  DriftAnalysisDriver (backend, const  DriftOptions .defaults ());
2935
30-     /// @Simon 
36+     final  file =  await  driver.fullyAnalyze (unit.uri);
37+     print (
38+         'test? - ${unit .uri } - ${file .allErrors .length } - ${file .analysis .length }' );
39+     for  (final  error in  file.allErrors) {
40+       if  (error.span case  final  span? ) {
41+         reporter.reportErrorForSpan (_code, span);
42+       }
43+     }
3144  }
3245}
3346
3447class  CustomLintBackend  extends  DriftBackend  {
3548  @override 
36-   // TODO: implement canReadDart 
37-   bool  get  canReadDart =>  throw  UnimplementedError ();
49+   final  Logger  log =  Logger ('drift_dev.CustomLintBackend' );
50+   final  AnalysisSession  session;
51+ 
52+   CustomLintBackend (this .session);
3853
3954  @override 
40-   Future <AstNode ?> loadElementDeclaration (Element  element) {
41-     // TODO: implement loadElementDeclaration 
42-     throw  UnimplementedError ();
43-   }
55+   bool  get  canReadDart =>  true ;
4456
4557  @override 
46-   // TODO: implement log 
47-   Logger  get  log =>  throw  UnimplementedError ();
58+   Future <AstNode ?> loadElementDeclaration (Element  element) async  {
59+     final  library =  element.library;
60+     if  (library ==  null ) return  null ;
61+ 
62+     final  info =  await  library.session.getResolvedLibraryByElement (library);
63+     if  (info is  ResolvedLibraryResult ) {
64+       return  info.getElementDeclaration (element)? .node;
65+     } else  {
66+       return  null ;
67+     }
68+   }
4869
4970  @override 
50-   Future <String > readAsString (Uri  uri) {
51-     // TODO: implement readAsString 
52-     throw  UnimplementedError ();
71+   Future <String > readAsString (Uri  uri) async  {
72+     final  file =  session.getFile (uri.path);
73+ 
74+     if  (file is  FileResult ) {
75+       return  file.content;
76+     }
77+ 
78+     throw  FileSystemException ('Not a file result: $file ' );
5379  }
5480
5581  @override 
56-   Future <LibraryElement > readDart (Uri  uri) {
57-     // TODO: implement readDart 
58-     throw  UnimplementedError ();
82+   Future <LibraryElement > readDart (Uri  uri) async  {
83+     final  result =  await  session.getLibraryByUri (uri.toString ());
84+     if  (result is  LibraryElementResult ) {
85+       return  result.element;
86+     }
87+ 
88+     throw  NotALibraryException (uri);
5989  }
6090
6191  @override 
6292  Future <Expression > resolveExpression (
6393      Uri  context, String  dartExpression, Iterable <String > imports) {
64-     // TODO: implement resolveExpression 
65-     throw  UnimplementedError ();
94+     throw  CannotReadExpressionException ('Not supported at the moment' );
6695  }
6796
6897  @override 
6998  Future <Element ?> resolveTopLevelElement (
7099      Uri  context, String  reference, Iterable <Uri > imports) {
71-     // TODO: implement resolveTopLevelElement 
72100    throw  UnimplementedError ();
73101  }
74102
75103  @override 
76-   Uri  resolveUri (Uri  base , String  uriString) {
77-     // TODO: implement resolveUri 
78-     throw  UnimplementedError ();
79-   }
104+   Uri  resolveUri (Uri  base , String  uriString) =>  base .resolve (uriString);
80105}
0 commit comments