-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Description
Having instrumented the analyzer for #61489 I noticed that we do the same thing several times.
For my particular case I instrumented _isInLibDir
and logged to file whenever it was asked from a specific file (with a single await
in it a warning on awaits).
When having my plugin registering a single things as a warning I get this behavior:
Via VSCode, editing a file (adding a dot in a comment) I get 4 visits:
(notice that the line numbers are probably a little off because of the instrumentation I've done):
The first one - which returns true, see #61489 - is called like this:
#0 _isInLibDir (package:analyzer/src/analysis_rule/rule_context.dart:36:33)
#1 RuleContextWithResolvedResults.isInLibDir (package:analyzer/src/analysis_rule/rule_context.dart:136:7)
#2 _Visitor.visitAwaitExpression (package:_model_analysis_plugin/main.dart:59:17)
#3 AwaitExpressionImpl.accept (package:analyzer/src/dart/ast/ast.dart:1608:50)
#4 AnalysisRuleVisitor._runSubscriptions (package:analyzer/src/lint/linter_visitor.g.dart:1120:14)
#5 AnalysisRuleVisitor.visitAwaitExpression (package:analyzer/src/lint/linter_visitor.g.dart:75:5)
#6 AwaitExpressionImpl.accept (package:analyzer/src/dart/ast/ast.dart:1608:50)
#7 IfStatementImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:12772:16)
#8 AnalysisRuleVisitor.visitIfStatement (package:analyzer/src/lint/linter_visitor.g.dart:498:10)
#9 IfStatementImpl.accept (package:analyzer/src/dart/ast/ast.dart:12767:50)
#10 NodeListImpl.accept (package:analyzer/src/dart/ast/ast.dart:17281:20)
#11 BlockImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:1938:16)
#12 AnalysisRuleVisitor.visitBlock (package:analyzer/src/lint/linter_visitor.g.dart:88:10)
#13 BlockImpl.accept (package:analyzer/src/dart/ast/ast.dart:1933:50)
#14 BlockFunctionBodyImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:1868:11)
#15 AnalysisRuleVisitor.visitBlockFunctionBody (package:analyzer/src/lint/linter_visitor.g.dart:94:10)
#16 BlockFunctionBodyImpl.accept (package:analyzer/src/dart/ast/ast.dart:1859:50)
#17 FunctionExpressionImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:11122:10)
#18 AnalysisRuleVisitor.visitFunctionExpression (package:analyzer/src/lint/linter_visitor.g.dart:438:10)
#19 FunctionExpressionImpl.accept (package:analyzer/src/dart/ast/ast.dart:11109:50)
#20 FunctionDeclarationImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:10895:24)
#21 AnalysisRuleVisitor.visitFunctionDeclaration (package:analyzer/src/lint/linter_visitor.g.dart:426:10)
#22 FunctionDeclarationImpl.accept (package:analyzer/src/dart/ast/ast.dart:10888:50)
#23 NodeListImpl.accept (package:analyzer/src/dart/ast/ast.dart:17281:20)
#24 CompilationUnitImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:4024:21)
#25 AnalysisRuleVisitor.visitCompilationUnit (package:analyzer/src/lint/linter_visitor.g.dart:166:10)
#26 CompilationUnitImpl.accept (package:analyzer/src/dart/ast/ast.dart:4001:50)
#27 LibraryAnalyzer._computeLints (package:analyzer/src/dart/analysis/library_analyzer.dart:441:12)
#28 LibraryAnalyzer._computeDiagnostics (package:analyzer/src/dart/analysis/library_analyzer.dart:358:7)
#29 LibraryAnalyzer.analyze.<anonymous closure> (package:analyzer/src/dart/analysis/library_analyzer.dart:125:7)
#30 OperationPerformanceImpl.run (package:analyzer/src/util/performance/operation_performance.dart:150:23)
#31 LibraryAnalyzer.analyze (package:analyzer/src/dart/analysis/library_analyzer.dart:124:17)
#32 AnalysisDriver._analyzeFileImpl.<anonymous closure>.<anonymous closure> (package:analyzer/src/dart/analysis/driver.dart:1379:13)
#33 OperationPerformanceImpl.run (package:analyzer/src/util/performance/operation_performance.dart:150:23)
#34 AnalysisDriver._analyzeFileImpl.<anonymous closure> (package:analyzer/src/dart/analysis/driver.dart:1368:35)
#35 PerformanceLog.run (package:analyzer/src/dart/analysis/performance_logger.dart:38:15)
#36 AnalysisDriver._analyzeFileImpl (package:analyzer/src/dart/analysis/driver.dart:1325:20)
#37 AnalysisDriver._analyzeFile.<anonymous closure> (package:analyzer/src/dart/analysis/driver.dart:1306:7)
#38 OperationPerformanceImpl.run (package:analyzer/src/util/performance/operation_performance.dart:150:23)
#39 AnalysisDriver._analyzeFile (package:analyzer/src/dart/analysis/driver.dart:1305:38)
#40 AnalysisDriver._getResolvedLibrary (package:analyzer/src/dart/analysis/driver.dart:1960:5)
#41 AnalysisDriver.performWork (package:analyzer/src/dart/analysis/driver.dart:1208:7)
#42 AnalysisDriverScheduler._run (package:analyzer/src/dart/analysis/driver.dart:2628:24)
where RuleContextWithResolvedResults is created here:
#0 new RuleContextWithResolvedResults (package:analyzer/src/analysis_rule/rule_context.dart:122:30)
#1 LibraryAnalyzer._computeLints (package:analyzer/src/dart/analysis/library_analyzer.dart:409:19)
#2 LibraryAnalyzer._computeDiagnostics (package:analyzer/src/dart/analysis/library_analyzer.dart:358:7)
#3 LibraryAnalyzer.analyze.<anonymous closure> (package:analyzer/src/dart/analysis/library_analyzer.dart:125:7)
#4 OperationPerformanceImpl.run (package:analyzer/src/util/performance/operation_performance.dart:150:23)
#5 LibraryAnalyzer.analyze (package:analyzer/src/dart/analysis/library_analyzer.dart:124:17)
#6 AnalysisDriver._analyzeFileImpl.<anonymous closure>.<anonymous closure> (package:analyzer/src/dart/analysis/driver.dart:1379:13)
#7 OperationPerformanceImpl.run (package:analyzer/src/util/performance/operation_performance.dart:150:23)
#8 AnalysisDriver._analyzeFileImpl.<anonymous closure> (package:analyzer/src/dart/analysis/driver.dart:1368:35)
#9 PerformanceLog.run (package:analyzer/src/dart/analysis/performance_logger.dart:38:15)
#10 AnalysisDriver._analyzeFileImpl (package:analyzer/src/dart/analysis/driver.dart:1325:20)
#11 AnalysisDriver._analyzeFile.<anonymous closure> (package:analyzer/src/dart/analysis/driver.dart:1306:7)
#12 OperationPerformanceImpl.run (package:analyzer/src/util/performance/operation_performance.dart:150:23)
#13 AnalysisDriver._analyzeFile (package:analyzer/src/dart/analysis/driver.dart:1305:38)
#14 AnalysisDriver._getResolvedLibrary (package:analyzer/src/dart/analysis/driver.dart:1960:5)
#15 AnalysisDriver.performWork (package:analyzer/src/dart/analysis/driver.dart:1208:7)
#16 AnalysisDriverScheduler._run (package:analyzer/src/dart/analysis/driver.dart:2628:24)
The second one - which returns false - is called like this:
#0 _isInLibDir (package:analyzer/src/analysis_rule/rule_context.dart:36:33)
#1 RuleContextWithResolvedResults.isInLibDir (package:analyzer/src/analysis_rule/rule_context.dart:136:7)
#2 _Visitor.visitAwaitExpression (package:_model_analysis_plugin/main.dart:59:17)
#3 AwaitExpressionImpl.accept (package:analyzer/src/dart/ast/ast.dart:1608:50)
#4 AnalysisRuleVisitor._runSubscriptions (package:analyzer/src/lint/linter_visitor.g.dart:1120:14)
#5 AnalysisRuleVisitor.visitAwaitExpression (package:analyzer/src/lint/linter_visitor.g.dart:75:5)
#6 AwaitExpressionImpl.accept (package:analyzer/src/dart/ast/ast.dart:1608:50)
#7 IfStatementImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:12772:16)
#8 AnalysisRuleVisitor.visitIfStatement (package:analyzer/src/lint/linter_visitor.g.dart:498:10)
#9 IfStatementImpl.accept (package:analyzer/src/dart/ast/ast.dart:12767:50)
#10 NodeListImpl.accept (package:analyzer/src/dart/ast/ast.dart:17281:20)
#11 BlockImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:1938:16)
#12 AnalysisRuleVisitor.visitBlock (package:analyzer/src/lint/linter_visitor.g.dart:88:10)
#13 BlockImpl.accept (package:analyzer/src/dart/ast/ast.dart:1933:50)
#14 BlockFunctionBodyImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:1868:11)
#15 AnalysisRuleVisitor.visitBlockFunctionBody (package:analyzer/src/lint/linter_visitor.g.dart:94:10)
#16 BlockFunctionBodyImpl.accept (package:analyzer/src/dart/ast/ast.dart:1859:50)
#17 FunctionExpressionImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:11122:10)
#18 AnalysisRuleVisitor.visitFunctionExpression (package:analyzer/src/lint/linter_visitor.g.dart:438:10)
#19 FunctionExpressionImpl.accept (package:analyzer/src/dart/ast/ast.dart:11109:50)
#20 FunctionDeclarationImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:10895:24)
#21 AnalysisRuleVisitor.visitFunctionDeclaration (package:analyzer/src/lint/linter_visitor.g.dart:426:10)
#22 FunctionDeclarationImpl.accept (package:analyzer/src/dart/ast/ast.dart:10888:50)
#23 NodeListImpl.accept (package:analyzer/src/dart/ast/ast.dart:17281:20)
#24 CompilationUnitImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:4024:21)
#25 AnalysisRuleVisitor.visitCompilationUnit (package:analyzer/src/lint/linter_visitor.g.dart:166:10)
#26 CompilationUnitImpl.accept (package:analyzer/src/dart/ast/ast.dart:4001:50)
#27 PluginServer._computeAnalysisErrors (package:analysis_server_plugin/src/plugin_server.dart:433:26)
<asynchronous suspension>
#28 PluginServer._analyzeLibrary (package:analysis_server_plugin/src/plugin_server.dart:304:32)
<asynchronous suspension>
#29 PluginServer._analyzeLibraries (package:analysis_server_plugin/src/plugin_server.dart:334:7)
<asynchronous suspension>
#30 PluginServer._handleAffectedFiles (package:analysis_server_plugin/src/plugin_server.dart:636:5)
<asynchronous suspension>
#31 PluginServer._handleContentChanged.<anonymous closure> (package:analysis_server_plugin/src/plugin_server.dart:777:9)
<asynchronous suspension>
#32 PluginServer._forAnalysisContexts (package:analysis_server_plugin/src/plugin_server.dart:537:7)
<asynchronous suspension>
#33 PluginServer._handleContentChanged (package:analysis_server_plugin/src/plugin_server.dart:766:7)
<asynchronous suspension>
#34 PluginServer._handleAnalysisUpdateContent (package:analysis_server_plugin/src/plugin_server.dart:724:5)
<asynchronous suspension>
#35 PluginServer._getResponse (package:analysis_server_plugin/src/plugin_server.dart:563:18)
<asynchronous suspension>
#36 PluginServer._handleRequest (package:analysis_server_plugin/src/plugin_server.dart:795:18)
<asynchronous suspension>
#37 PluginServer._handleRequestZoned (package:analysis_server_plugin/src/plugin_server.dart:815:5)
<asynchronous suspension>
where RuleContextWithResolvedResults is created here:
#0 new RuleContextWithResolvedResults (package:analyzer/src/analysis_rule/rule_context.dart:122:30)
#1 PluginServer._computeAnalysisErrors (package:analysis_server_plugin/src/plugin_server.dart:390:19)
<asynchronous suspension>
#2 PluginServer._analyzeLibrary (package:analysis_server_plugin/src/plugin_server.dart:304:32)
<asynchronous suspension>
#3 PluginServer._analyzeLibraries (package:analysis_server_plugin/src/plugin_server.dart:334:7)
<asynchronous suspension>
#4 PluginServer._handleAffectedFiles (package:analysis_server_plugin/src/plugin_server.dart:636:5)
<asynchronous suspension>
#5 PluginServer._handleContentChanged.<anonymous closure> (package:analysis_server_plugin/src/plugin_server.dart:777:9)
<asynchronous suspension>
#6 PluginServer._forAnalysisContexts (package:analysis_server_plugin/src/plugin_server.dart:537:7)
<asynchronous suspension>
#7 PluginServer._handleContentChanged (package:analysis_server_plugin/src/plugin_server.dart:766:7)
<asynchronous suspension>
#8 PluginServer._handleAnalysisUpdateContent (package:analysis_server_plugin/src/plugin_server.dart:724:5)
<asynchronous suspension>
#9 PluginServer._getResponse (package:analysis_server_plugin/src/plugin_server.dart:563:18)
<asynchronous suspension>
#10 PluginServer._handleRequest (package:analysis_server_plugin/src/plugin_server.dart:795:18)
<asynchronous suspension>
#11 PluginServer._handleRequestZoned (package:analysis_server_plugin/src/plugin_server.dart:815:5)
<asynchronous suspension>
The third and forth calls are exactly like the first call.
If moving the cursor in the IDE (VSCode) (say if pressing left on the keyboard) I get 2 such calls (both returning true but no error is reported).
I think it is caused by priority files not being set in the plugin.
(If I instead register it as a lint (and enable the lint) it seems to be only called once on edit (and not at all when moving the cursor around). Package is not set (and isInLibDir
returns false because of that).
If it is registered as a lint but not enabled it's not run at all so that's good.)
/cc @srawlins