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

Unified Diff: analyzer/lib/src/task/html.dart

Issue 1400473008: Roll Observatory packages and add a roll script (Closed) Base URL: git@github.com:dart-lang/observatory_pub_packages.git@master
Patch Set: Created 5 years, 2 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 | « analyzer/lib/src/task/general.dart ('k') | analyzer/lib/src/task/html_work_manager.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: analyzer/lib/src/task/html.dart
diff --git a/analyzer/lib/src/task/html.dart b/analyzer/lib/src/task/html.dart
deleted file mode 100644
index 0722ed4288a8c845cd874b535a91a83a8f8d3012..0000000000000000000000000000000000000000
--- a/analyzer/lib/src/task/html.dart
+++ /dev/null
@@ -1,370 +0,0 @@
-// Copyright (c) 2015, 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.html;
-
-import 'dart:collection';
-
-import 'package:analyzer/src/generated/engine.dart' hide AnalysisTask;
-import 'package:analyzer/src/generated/error.dart';
-import 'package:analyzer/src/generated/source.dart';
-import 'package:analyzer/src/task/dart.dart';
-import 'package:analyzer/src/task/general.dart';
-import 'package:analyzer/task/dart.dart';
-import 'package:analyzer/task/general.dart';
-import 'package:analyzer/task/html.dart';
-import 'package:analyzer/task/model.dart';
-import 'package:html/dom.dart';
-import 'package:html/parser.dart';
-import 'package:source_span/source_span.dart';
-import 'package:analyzer/src/context/cache.dart';
-import 'package:analyzer/src/generated/java_engine.dart';
-import 'package:analyzer/src/generated/scanner.dart';
-
-/**
- * The Dart scripts that are embedded in an HTML file.
- */
-final ListResultDescriptor<DartScript> DART_SCRIPTS =
- new ListResultDescriptor<DartScript>('DART_SCRIPTS', DartScript.EMPTY_LIST);
-
-/**
- * The errors found while parsing an HTML file.
- */
-final ListResultDescriptor<AnalysisError> HTML_DOCUMENT_ERRORS =
- new ListResultDescriptor<AnalysisError>(
- 'HTML_DOCUMENT_ERRORS', AnalysisError.NO_ERRORS);
-
-/**
- * A Dart script that is embedded in an HTML file.
- */
-class DartScript implements Source {
- /**
- * An empty list of scripts.
- */
- static final List<DartScript> EMPTY_LIST = <DartScript>[];
-
- /**
- * The source containing this script.
- */
- final Source source;
-
- /**
- * The fragments that comprise this content of the script.
- */
- final List<ScriptFragment> fragments;
-
- /**
- * Initialize a newly created script in the given [source] that is composed of
- * given [fragments].
- */
- DartScript(this.source, this.fragments);
-
- @override
- TimestampedData<String> get contents =>
- new TimestampedData(modificationStamp, fragments[0].content);
-
- @override
- String get encoding => source.encoding;
-
- @override
- String get fullName => source.fullName;
-
- @override
- bool get isInSystemLibrary => source.isInSystemLibrary;
-
- @override
- int get modificationStamp => source.modificationStamp;
-
- @override
- String get shortName => source.shortName;
-
- @override
- Uri get uri => throw new StateError('uri not supported for scripts');
-
- @override
- UriKind get uriKind =>
- throw new StateError('uriKind not supported for scripts');
-
- @override
- bool exists() => source.exists();
-
- @override
- Uri resolveRelativeUri(Uri relativeUri) =>
- throw new StateError('resolveRelativeUri not supported for scripts');
-}
-
-/**
- * A task that looks for Dart scripts in an HTML file and computes both the Dart
- * libraries that are referenced by those scripts and the embedded Dart scripts.
- */
-class DartScriptsTask extends SourceBasedAnalysisTask {
- /**
- * The name of the [HTML_DOCUMENT] input.
- */
- static const String DOCUMENT_INPUT = 'DOCUMENT';
-
- /**
- * The task descriptor describing this kind of task.
- */
- static final TaskDescriptor DESCRIPTOR = new TaskDescriptor('DartScriptsTask',
- createTask, buildInputs, <ResultDescriptor>[
- DART_SCRIPTS,
- REFERENCED_LIBRARIES
- ]);
-
- DartScriptsTask(InternalAnalysisContext context, AnalysisTarget target)
- : super(context, target);
-
- @override
- TaskDescriptor get descriptor => DESCRIPTOR;
-
- @override
- void internalPerform() {
- //
- // Prepare inputs.
- //
- Source source = target.source;
- Document document = getRequiredInput(DOCUMENT_INPUT);
- //
- // Process the script tags.
- //
- List<Source> libraries = <Source>[];
- List<DartScript> inlineScripts = <DartScript>[];
- List<Element> scripts = document.getElementsByTagName('script');
- for (Element script in scripts) {
- LinkedHashMap<dynamic, String> attributes = script.attributes;
- if (attributes['type'] == 'application/dart') {
- String src = attributes['src'];
- if (src == null) {
- if (script.hasContent()) {
- List<ScriptFragment> fragments = <ScriptFragment>[];
- for (Node node in script.nodes) {
- if (node.nodeType == Node.TEXT_NODE) {
- FileLocation start = node.sourceSpan.start;
- fragments.add(new ScriptFragment(start.offset, start.line,
- start.column, (node as Text).data));
- }
- }
- inlineScripts.add(new DartScript(source, fragments));
- }
- } else if (AnalysisEngine.isDartFileName(src)) {
- Source source = context.sourceFactory.resolveUri(target.source, src);
- if (source != null) {
- libraries.add(source);
- }
- }
- }
- }
- //
- // Record outputs.
- //
- outputs[REFERENCED_LIBRARIES] =
- libraries.isEmpty ? Source.EMPTY_LIST : libraries;
- outputs[DART_SCRIPTS] =
- inlineScripts.isEmpty ? DartScript.EMPTY_LIST : inlineScripts;
- }
-
- /**
- * 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 [target].
- */
- static Map<String, TaskInput> buildInputs(Source target) {
- return <String, TaskInput>{DOCUMENT_INPUT: HTML_DOCUMENT.of(target)};
- }
-
- /**
- * Create a [DartScriptsTask] based on the given [target] in the given
- * [context].
- */
- static DartScriptsTask createTask(
- AnalysisContext context, AnalysisTarget target) {
- return new DartScriptsTask(context, target);
- }
-}
-
-/**
- * A task that merges all of the errors for a single source into a single list
- * of errors.
- */
-class HtmlErrorsTask extends SourceBasedAnalysisTask {
- /**
- * The name of the input that is a list of errors from each of the embedded
- * Dart scripts.
- */
- static const String DART_ERRORS_INPUT = 'DART_ERRORS';
-
- /**
- * The name of the [HTML_DOCUMENT_ERRORS] input.
- */
- static const String DOCUMENT_ERRORS_INPUT = 'DOCUMENT_ERRORS';
-
- /**
- * The task descriptor describing this kind of task.
- */
- static final TaskDescriptor DESCRIPTOR = new TaskDescriptor('HtmlErrorsTask',
- createTask, buildInputs, <ResultDescriptor>[HTML_ERRORS]);
-
- HtmlErrorsTask(InternalAnalysisContext context, AnalysisTarget target)
- : super(context, target);
-
- @override
- TaskDescriptor get descriptor => DESCRIPTOR;
-
- @override
- void internalPerform() {
- //
- // Prepare inputs.
- //
- List<List<AnalysisError>> dartErrors = getRequiredInput(DART_ERRORS_INPUT);
- List<AnalysisError> documentErrors =
- getRequiredInput(DOCUMENT_ERRORS_INPUT);
- //
- // Compute the error list.
- //
- List<AnalysisError> errors = <AnalysisError>[];
- errors.addAll(documentErrors);
- for (List<AnalysisError> scriptErrors in dartErrors) {
- errors.addAll(scriptErrors);
- }
- //
- // Record outputs.
- //
- outputs[HTML_ERRORS] = removeDuplicateErrors(errors);
- }
-
- /**
- * 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 [target].
- */
- static Map<String, TaskInput> buildInputs(Source target) {
- return <String, TaskInput>{
- DOCUMENT_ERRORS_INPUT: HTML_DOCUMENT_ERRORS.of(target),
- DART_ERRORS_INPUT: DART_SCRIPTS.of(target).toListOf(DART_ERRORS)
- };
- }
-
- /**
- * Create an [HtmlErrorsTask] based on the given [target] in the given
- * [context].
- */
- static HtmlErrorsTask createTask(
- AnalysisContext context, AnalysisTarget target) {
- return new HtmlErrorsTask(context, target);
- }
-}
-
-/**
- * A task that scans the content of a file, producing a set of Dart tokens.
- */
-class ParseHtmlTask 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('ParseHtmlTask',
- createTask, buildInputs, <ResultDescriptor>[
- HTML_DOCUMENT,
- HTML_DOCUMENT_ERRORS
- ]);
-
- /**
- * Initialize a newly created task to access the content of the source
- * associated with the given [target] in the given [context].
- */
- ParseHtmlTask(InternalAnalysisContext context, AnalysisTarget target)
- : super(context, target);
-
- @override
- TaskDescriptor get descriptor => DESCRIPTOR;
-
- @override
- void internalPerform() {
- String content = getRequiredInput(CONTENT_INPUT_NAME);
-
- if (context.getModificationStamp(target.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();
- }
- }
-
- outputs[HTML_DOCUMENT] = new Document();
- outputs[HTML_DOCUMENT_ERRORS] = <AnalysisError>[new AnalysisError(
- target.source, 0, 0, ScannerErrorCode.UNABLE_GET_CONTENT, [message])];
- } else {
- HtmlParser parser = new HtmlParser(content, generateSpans: true);
- parser.compatMode = 'quirks';
- Document document = parser.parse();
- List<ParseError> parseErrors = parser.errors;
- List<AnalysisError> errors = <AnalysisError>[];
- for (ParseError parseError in parseErrors) {
- SourceSpan span = parseError.span;
- errors.add(new AnalysisError(target.source, span.start.offset,
- span.length, HtmlErrorCode.PARSE_ERROR, [parseError.message]));
- }
-
- outputs[HTML_DOCUMENT] = document;
- outputs[HTML_DOCUMENT_ERRORS] = errors;
- }
- }
-
- /**
- * 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(Source source) {
- return <String, TaskInput>{CONTENT_INPUT_NAME: CONTENT.of(source)};
- }
-
- /**
- * Create a [ParseHtmlTask] based on the given [target] in the given [context].
- */
- static ParseHtmlTask createTask(
- AnalysisContext context, AnalysisTarget target) {
- return new ParseHtmlTask(context, target);
- }
-}
-
-/**
- * A fragment of a [DartScript].
- */
-class ScriptFragment {
- /**
- * The offset of the first character of the fragment, relative to the start of
- * the containing source.
- */
- final int offset;
-
- /**
- * The line number of the line containing the first character of the fragment.
- */
- final int line;
-
- /**
- * The column number of the line containing the first character of the
- * fragment.
- */
- final int column;
-
- /**
- * The content of the fragment.
- */
- final String content;
-
- /**
- * Initialize a newly created script fragment to have the given [offset] and
- * [content].
- */
- ScriptFragment(this.offset, this.line, this.column, this.content);
-}
« no previous file with comments | « analyzer/lib/src/task/general.dart ('k') | analyzer/lib/src/task/html_work_manager.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698