Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Unified Diff: packages/analyzer/lib/src/task/yaml.dart

Issue 2990843002: Removed fixed dependencies (Closed)
Patch Set: Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « packages/analyzer/lib/src/task/strong_mode.dart ('k') | packages/analyzer/lib/src/util/absolute_path.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: packages/analyzer/lib/src/task/yaml.dart
diff --git a/packages/analyzer/lib/src/task/yaml.dart b/packages/analyzer/lib/src/task/yaml.dart
new file mode 100644
index 0000000000000000000000000000000000000000..2ac731d09a31f4c8033e3be7c1c1652652783778
--- /dev/null
+++ b/packages/analyzer/lib/src/task/yaml.dart
@@ -0,0 +1,155 @@
+// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
+// 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.
+
+library analyzer.src.task.yaml;
+
+import 'package:analyzer/error/error.dart';
+import 'package:analyzer/exception/exception.dart';
+import 'package:analyzer/src/context/cache.dart';
+import 'package:analyzer/src/dart/scanner/scanner.dart';
+import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer/src/generated/source.dart';
+import 'package:analyzer/src/task/general.dart';
+import 'package:analyzer/task/general.dart';
+import 'package:analyzer/task/model.dart';
+import 'package:analyzer/task/yaml.dart';
+import 'package:source_span/source_span.dart';
+import 'package:yaml/yaml.dart';
+
+/**
+ * A task that scans the content of a YAML file, producing a YAML document.
+ */
+class ParseYamlTask extends SourceBasedAnalysisTask {
+ /**
+ * The name of the input whose value is the content of the file.
+ */
+ static const String CONTENT_INPUT_NAME = 'CONTENT_INPUT_NAME';
+
+ /**
+ * The task descriptor describing this kind of task.
+ */
+ static final TaskDescriptor DESCRIPTOR = new TaskDescriptor(
+ 'ParseYamlTask',
+ createTask,
+ buildInputs,
+ <ResultDescriptor>[YAML_DOCUMENT, YAML_ERRORS, LINE_INFO],
+ suitabilityFor: suitabilityFor);
+
+ /**
+ * Initialize a newly created task to access the content of the source
+ * associated with the given [target] in the given [context].
+ */
+ ParseYamlTask(InternalAnalysisContext context, AnalysisTarget target)
+ : super(context, target);
+
+ @override
+ TaskDescriptor get descriptor => DESCRIPTOR;
+
+ @override
+ void internalPerform() {
+ Source source = target.source;
+ String uri = source.uri.toString();
+ String content = getRequiredInput(CONTENT_INPUT_NAME);
+
+ if (context.getModificationStamp(source) < 0) {
+ String message = 'Content could not be read';
+ if (context is InternalAnalysisContext) {
+ CacheEntry entry =
+ (context as InternalAnalysisContext).getCacheEntry(target);
+ CaughtException exception = entry.exception;
+ if (exception != null) {
+ message = exception.toString();
+ }
+ }
+ //
+ // Record outputs.
+ //
+ outputs[YAML_DOCUMENT] = loadYamlDocument('', sourceUrl: uri);
+ outputs[YAML_ERRORS] = <AnalysisError>[
+ new AnalysisError(
+ source, 0, 0, ScannerErrorCode.UNABLE_GET_CONTENT, [message])
+ ];
+ outputs[LINE_INFO] = new LineInfo(<int>[0]);
+ } else {
+ YamlDocument document;
+ List<AnalysisError> errors = <AnalysisError>[];
+ try {
+ document = loadYamlDocument(content, sourceUrl: uri);
+ } on YamlException catch (exception) {
+ SourceSpan span = exception.span;
+ int offset = span.start.offset;
+ int length = span.end.offset - offset;
+ errors.add(new AnalysisError(source, offset, length,
+ YamlErrorCode.PARSE_ERROR, [exception.message]));
+ } catch (exception, stackTrace) {
+ throw new AnalysisException('Error while parsing ${source.fullName}',
+ new CaughtException(exception, stackTrace));
+ }
+ //
+ // Record outputs.
+ //
+ outputs[YAML_DOCUMENT] = document;
+ outputs[YAML_ERRORS] = errors;
+ outputs[LINE_INFO] = new LineInfo.fromContent(content);
+ }
+ }
+
+ /**
+ * Return a map from the names of the inputs of this kind of task to the task
+ * input descriptors describing those inputs for a task with the given
+ * [source].
+ */
+ static Map<String, TaskInput> buildInputs(AnalysisTarget source) {
+ return <String, TaskInput>{CONTENT_INPUT_NAME: CONTENT.of(source)};
+ }
+
+ /**
+ * Create a [ParseYamlTask] based on the given [target] in the given [context].
+ */
+ static ParseYamlTask createTask(
+ AnalysisContext context, AnalysisTarget target) {
+ return new ParseYamlTask(context, target);
+ }
+
+ /**
+ * Return an indication of how suitable this task is for the given [target].
+ */
+ static TaskSuitability suitabilityFor(AnalysisTarget target) {
+ if (target is Source && target.shortName.endsWith('.yaml')) {
+ return TaskSuitability.HIGHEST;
+ }
+ return TaskSuitability.NONE;
+ }
+}
+
+/**
+ * The error codes used for errors in YAML files.
+ */
+class YamlErrorCode extends ErrorCode {
+ // TODO(brianwilkerson) Move this class to error.dart.
+
+ /**
+ * An error code indicating that there is a syntactic error in the file.
+ *
+ * Parameters:
+ * 0: the error message from the parse error
+ */
+ static const YamlErrorCode PARSE_ERROR =
+ const YamlErrorCode('PARSE_ERROR', '{0}');
+
+ /**
+ * Initialize a newly created error code to have the given [name]. The message
+ * associated with the error will be created from the given [message]
+ * template. The correction associated with the error will be created from the
+ * given [correction] template.
+ */
+ const YamlErrorCode(String name, String message, [String correction])
+ : super(name, message, correction);
+
+ @override
+ ErrorSeverity get errorSeverity => ErrorSeverity.ERROR;
+
+ @override
+ ErrorType get type => ErrorType.COMPILE_TIME_ERROR;
+}
« no previous file with comments | « packages/analyzer/lib/src/task/strong_mode.dart ('k') | packages/analyzer/lib/src/util/absolute_path.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698