add analysisOptions to FileResults

See: https://github.com/dart-lang/sdk/issues/54667

Change-Id: I5d756e9f8ba2282c7c022a8dc6c11fe4da254a3e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/347126
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Phil Quitslund <pquitslund@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
This commit is contained in:
pq
2024-01-18 22:05:18 +00:00
committed by Commit Queue
parent 71ffaf392f
commit 7b7dfa6bb5
13 changed files with 79 additions and 18 deletions
@@ -15,12 +15,14 @@ import 'package:analysis_server/src/services/correction/fix.dart';
import 'package:analysis_server/src/services/correction/fix/analysis_options/fix_generator.dart';
import 'package:analysis_server/src/services/correction/fix/pubspec/fix_generator.dart';
import 'package:analysis_server/src/services/correction/fix_internal.dart';
import 'package:analyzer/dart/analysis/results.dart';
import 'package:analyzer/dart/analysis/session.dart';
import 'package:analyzer/file_system/file_system.dart';
import 'package:analyzer/source/line_info.dart';
import 'package:analyzer/src/analysis_options/analysis_options_provider.dart';
import 'package:analyzer/src/dart/analysis/results.dart' as engine;
import 'package:analyzer/src/exception/exception.dart';
import 'package:analyzer/src/generated/engine.dart';
import 'package:analyzer/src/generated/source.dart' show SourceFactory;
import 'package:analyzer/src/pubspec/pubspec_validator.dart';
import 'package:analyzer/src/task/options.dart';
@@ -128,6 +130,9 @@ class EditGetFixesHandler extends LegacyHandler
if (fixes.isNotEmpty) {
fixes.sort(Fix.compareFixes);
var lineInfo = LineInfo.fromContent(content);
// Options are not used in the analysis *of options* so associating
// an empty set is accurate if not ideal.
var analysisOptions = AnalysisOptionsImpl();
var result = engine.ErrorsResultImpl(
session: session,
file: optionsFile,
@@ -139,6 +144,7 @@ class EditGetFixesHandler extends LegacyHandler
isMacroAugmentation: false,
isPart: false,
errors: errors,
analysisOptions: analysisOptions,
);
var serverError = newAnalysisError_fromEngine(result, error);
var errorFixes = AnalysisErrorFixes(serverError);
@@ -228,8 +234,13 @@ error.errorCode: ${error.errorCode}
if (node is! YamlMap) {
return errorFixesList;
}
final analysisOptions =
session.analysisContext.getAnalysisOptionsForFile(pubspecFile);
var fileResult = session.getFile(pubspecFile.path);
if (fileResult is! FileResult) {
return errorFixesList;
}
final analysisOptions = fileResult.analysisOptions;
final errors = validatePubspec(
contents: node,
source: pubspecFile.createSource(),
@@ -257,6 +268,7 @@ error.errorCode: ${error.errorCode}
isMacroAugmentation: false,
isPart: false,
errors: errors,
analysisOptions: analysisOptions,
);
var serverError = newAnalysisError_fromEngine(result, error);
var errorFixes = AnalysisErrorFixes(serverError);
@@ -11,6 +11,7 @@ import 'package:analysis_server/src/lsp/lsp_analysis_server.dart';
import 'package:analysis_server/src/lsp/mapping.dart';
import 'package:analysis_server/src/protocol_server.dart' as protocol;
import 'package:analysis_server/src/request_handler_mixin.dart';
import 'package:analyzer/dart/analysis/analysis_options.dart';
import 'package:analyzer/dart/analysis/session.dart';
import 'package:analyzer/error/error.dart';
import 'package:analyzer/file_system/file_system.dart';
@@ -36,6 +37,8 @@ abstract class AbstractCodeActionsProducer
final bool Function(CodeActionKind?) shouldIncludeKind;
final LspClientCapabilities capabilities;
final AnalysisOptions analysisOptions;
@override
final LspAnalysisServer server;
@@ -47,6 +50,7 @@ abstract class AbstractCodeActionsProducer
required this.length,
required this.shouldIncludeKind,
required this.capabilities,
required this.analysisOptions,
});
String get name;
@@ -131,16 +135,18 @@ abstract class AbstractCodeActionsProducer
engine.ErrorsResultImpl createResult(
AnalysisSession session, LineInfo lineInfo, List<AnalysisError> errors) {
return engine.ErrorsResultImpl(
session: session,
file: file,
content: file.readAsStringSync(),
uri: server.uriConverter.toClientUri(path),
lineInfo: lineInfo,
isAugmentation: false,
isLibrary: true,
isMacroAugmentation: false,
isPart: false,
errors: errors);
session: session,
file: file,
content: file.readAsStringSync(),
uri: server.uriConverter.toClientUri(path),
lineInfo: lineInfo,
isAugmentation: false,
isLibrary: true,
isMacroAugmentation: false,
isPart: false,
errors: errors,
analysisOptions: analysisOptions,
);
}
Future<List<CodeActionWithPriority>> getAssistActions();
@@ -24,6 +24,7 @@ class AnalysisOptionsCodeActionsProducer extends AbstractCodeActionsProducer {
required super.length,
required super.shouldIncludeKind,
required super.capabilities,
required super.analysisOptions,
});
@override
@@ -8,7 +8,8 @@ import 'package:analysis_server/lsp_protocol/protocol.dart';
import 'package:analysis_server/src/lsp/constants.dart';
import 'package:analysis_server/src/lsp/handlers/code_actions/abstract_code_actions_producer.dart';
import 'package:analysis_server/src/lsp/mapping.dart';
import 'package:analysis_server/src/protocol_server.dart' hide Position;
import 'package:analysis_server/src/protocol_server.dart'
hide AnalysisOptions, Position;
import 'package:analysis_server/src/services/correction/assist.dart';
import 'package:analysis_server/src/services/correction/assist_internal.dart';
import 'package:analysis_server/src/services/correction/change_workspace.dart';
@@ -44,6 +45,7 @@ class DartCodeActionsProducer extends AbstractCodeActionsProducer {
required super.length,
required super.shouldIncludeKind,
required super.capabilities,
required super.analysisOptions,
required this.triggerKind,
});
@@ -25,6 +25,7 @@ class PluginCodeActionsProducer extends AbstractCodeActionsProducer {
required super.length,
required super.shouldIncludeKind,
required super.capabilities,
required super.analysisOptions,
}) : driver = server.getAnalysisDriver(file.path);
@override
@@ -21,6 +21,7 @@ class PubspecCodeActionsProducer extends AbstractCodeActionsProducer {
required super.length,
required super.shouldIncludeKind,
required super.capabilities,
required super.analysisOptions,
});
@override
@@ -54,9 +55,7 @@ class PubspecCodeActionsProducer extends AbstractCodeActionsProducer {
contents: node,
source: pubspecFile.createSource(),
provider: resourceProvider,
analysisOptions: server.contextManager
.getContextFor(path)
?.getAnalysisOptionsForFile(pubspecFile),
analysisOptions: analysisOptions,
);
final codeActions = <CodeActionWithPriority>[];
@@ -14,6 +14,8 @@ import 'package:analysis_server/src/lsp/handlers/code_actions/pubspec.dart';
import 'package:analysis_server/src/lsp/handlers/handlers.dart';
import 'package:analysis_server/src/lsp/mapping.dart';
import 'package:analysis_server/src/lsp/registration/feature_registration.dart';
import 'package:analyzer/dart/analysis/results.dart';
import 'package:analyzer/src/clients/build_resolvers/build_resolvers.dart';
import 'package:analyzer/src/util/file_paths.dart' as file_paths;
import 'package:collection/collection.dart' show groupBy;
@@ -141,6 +143,17 @@ class CodeActionHandler
final includeQuickFixes = shouldIncludeAnyOfKind(CodeActionKind.QuickFix);
final includeRefactors = shouldIncludeAnyOfKind(CodeActionKind.Refactor);
Future<AnalysisOptions> getOptions() async {
if (unit != null) return unit.analysisOptions;
var session = await server.getAnalysisSession(unitPath);
var fileResult = session?.getFile(unitPath);
if (fileResult is FileResult) return fileResult.analysisOptions;
// Default to empty options.
return AnalysisOptionsImpl();
}
var analysisOptions = await getOptions();
final actionComputers = [
if (isDart && libraryResult != null && unit != null)
DartCodeActionsProducer(
@@ -156,6 +169,7 @@ class CodeActionHandler
shouldIncludeKind: shouldIncludeKind,
capabilities: capabilities,
triggerKind: params.context.triggerKind,
analysisOptions: analysisOptions,
),
if (isPubspec)
PubspecCodeActionsProducer(
@@ -167,6 +181,7 @@ class CodeActionHandler
length: length,
shouldIncludeKind: shouldIncludeKind,
capabilities: capabilities,
analysisOptions: analysisOptions,
),
if (isAnalysisOptions)
AnalysisOptionsCodeActionsProducer(
@@ -178,6 +193,7 @@ class CodeActionHandler
length: length,
shouldIncludeKind: shouldIncludeKind,
capabilities: capabilities,
analysisOptions: analysisOptions,
),
PluginCodeActionsProducer(
server,
@@ -188,6 +204,7 @@ class CodeActionHandler
length: length,
shouldIncludeKind: shouldIncludeKind,
capabilities: capabilities,
analysisOptions: analysisOptions,
),
];
final sorter = _CodeActionSorter(params.range, shouldIncludeKind);
@@ -2,6 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:analyzer/dart/analysis/analysis_options.dart';
import 'package:analyzer/dart/analysis/session.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/element/element.dart';
@@ -84,6 +85,9 @@ abstract class ErrorsResult
///
/// Clients may not extend, implement or mix-in this class.
abstract class FileResult implements SomeFileResult, AnalysisResult {
/// The analysis options for this file.
AnalysisOptions get analysisOptions;
/// The latest read content of [file], the same that was used to compute
/// other properties of this result.
String get content;
@@ -1548,6 +1548,7 @@ class AnalysisDriver {
isMacroAugmentation: file.isMacroAugmentation,
isPart: file.kind is PartFileKind,
errors: errors,
analysisOptions: file.analysisOptions,
);
}
@@ -1843,6 +1844,7 @@ class AnalysisDriver {
arguments: [missingUri],
),
],
analysisOptions: file.analysisOptions,
);
}
@@ -14,6 +14,7 @@ import 'package:analyzer/file_system/file_system.dart';
import 'package:analyzer/source/line_info.dart';
import 'package:analyzer/src/dart/analysis/file_state.dart';
import 'package:analyzer/src/dart/element/type_system.dart';
import 'package:analyzer/src/generated/engine.dart';
abstract class AnalysisResultImpl implements AnalysisResult {
@override
@@ -72,6 +73,9 @@ class ErrorsResultImpl implements ErrorsResult {
@override
final String content;
@override
final AnalysisOptions analysisOptions;
ErrorsResultImpl({
required this.session,
required this.file,
@@ -83,6 +87,7 @@ class ErrorsResultImpl implements ErrorsResult {
required this.isMacroAugmentation,
required this.isPart,
required this.errors,
required this.analysisOptions,
});
@override
@@ -116,6 +121,9 @@ class FileResultImpl extends AnalysisResultImpl implements FileResult {
isLibrary = fileState.kind is LibraryFileKind,
isPart = fileState.kind is PartFileKind;
@override
AnalysisOptions get analysisOptions => fileState.analysisOptions;
@override
File get file => fileState.resource;
@@ -361,6 +361,7 @@ class FileResolver {
isMacroAugmentation: file.isMacroAugmentation,
isPart: file.kind is PartFileKind,
errors: errors,
analysisOptions: file.analysisOptions,
);
});
}
+8 -2
View File
@@ -5,6 +5,7 @@
import 'dart:io' as io;
import 'package:analyzer/dart/analysis/context_root.dart';
import 'package:analyzer/dart/analysis/results.dart';
import 'package:analyzer/dart/sdk/build_sdk_summary.dart';
import 'package:analyzer/error/error.dart';
import 'package:analyzer/file_system/file_system.dart';
@@ -241,8 +242,9 @@ class Driver implements CommandLineStarter {
var pathContext = resourceProvider.pathContext;
for (var path in filesToAnalyze) {
if (file_paths.isAnalysisOptionsYaml(pathContext, path)) {
var file = resourceProvider.getFile(path);
var analysisOptions = analysisDriver.getAnalysisOptionsForFile(file);
var fileResult = analysisDriver.currentSession.getFile(path);
if (fileResult is! FileResult) continue;
var file = fileResult.file;
var content = file.readAsStringSync();
var lineInfo = LineInfo.fromContent(content);
var contextRoot =
@@ -258,6 +260,7 @@ class Driver implements CommandLineStarter {
contextRoot.root.path,
sdkVersionConstraint,
);
var analysisOptions = fileResult.analysisOptions;
await formatter.formatErrors([
ErrorsResultImpl(
session: analysisDriver.currentSession,
@@ -270,6 +273,7 @@ class Driver implements CommandLineStarter {
isMacroAugmentation: false,
isPart: false,
errors: errors,
analysisOptions: analysisOptions,
)
]);
for (var error in errors) {
@@ -315,6 +319,7 @@ class Driver implements CommandLineStarter {
isMacroAugmentation: false,
isPart: false,
errors: errors,
analysisOptions: analysisOptions,
),
]);
}
@@ -343,6 +348,7 @@ class Driver implements CommandLineStarter {
isLibrary: true,
isPart: false,
errors: errors,
analysisOptions: analysisOptions,
),
]);
for (var error in errors) {
+2
View File
@@ -7,6 +7,7 @@ import 'package:analyzer/error/error.dart';
import 'package:analyzer/file_system/memory_file_system.dart';
import 'package:analyzer/source/line_info.dart';
import 'package:analyzer/src/dart/analysis/results.dart';
import 'package:analyzer/src/generated/engine.dart';
import 'package:analyzer_cli/src/ansi.dart' as ansi;
import 'package:analyzer_cli/src/error_formatter.dart';
import 'package:test/test.dart' hide ErrorFormatter;
@@ -123,6 +124,7 @@ ErrorsResultImpl mockResult(ErrorType type, ErrorSeverity severity) {
isMacroAugmentation: false,
isPart: false,
errors: [error],
analysisOptions: AnalysisOptionsImpl(),
);
}