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:
@@ -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);
|
||||
|
||||
+16
-10
@@ -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,
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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(),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user