| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library code_transformers.messages.messages_logger; | 5 library code_transformers.messages.messages_logger; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 import 'dart:convert' show JSON; | 8 import 'dart:convert' show JSON; |
| 9 | 9 |
| 10 import 'package:barback/barback.dart'; | 10 import 'package:barback/barback.dart'; |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 /// Underling transform that is currently active. | 33 /// Underling transform that is currently active. |
| 34 final Transform _transform; | 34 final Transform _transform; |
| 35 | 35 |
| 36 /// Logs created during the current transform. | 36 /// Logs created during the current transform. |
| 37 final LogEntryTable _logs = new LogEntryTable(); | 37 final LogEntryTable _logs = new LogEntryTable(); |
| 38 | 38 |
| 39 /// Whether to use `warning` or `error` when forwarding error messages to the | 39 /// Whether to use `warning` or `error` when forwarding error messages to the |
| 40 /// underlying logger in `_transform.logger`. | 40 /// underlying logger in `_transform.logger`. |
| 41 final bool convertErrorsToWarnings; | 41 final bool convertErrorsToWarnings; |
| 42 | 42 |
| 43 BuildLogger(this._transform, {this.convertErrorsToWarnings: false}); | 43 /// Uri prefix to link for additional details. If set, messages logged through |
| 44 /// this logger will contain an additional sentence, telling users to find |
| 45 /// more details at `$detailsUri#packagename_id`. |
| 46 final String detailsUri; |
| 47 |
| 48 BuildLogger(this._transform, {this.convertErrorsToWarnings: false, |
| 49 this.detailsUri}); |
| 44 | 50 |
| 45 /// Records a message at the fine level. If [msg] is a [Message] it is | 51 /// Records a message at the fine level. If [msg] is a [Message] it is |
| 46 /// recorded directly, otherwise it is first converted to a [String]. | 52 /// recorded directly, otherwise it is first converted to a [String]. |
| 47 void fine(msg, {AssetId asset, SourceSpan span}) { | 53 void fine(msg, {AssetId asset, SourceSpan span}) { |
| 48 msg = msg is Message ? msg : new Message.unknown('$msg'); | 54 msg = msg is Message ? msg : new Message.unknown('$msg'); |
| 49 _transform.logger.fine(msg.snippet, asset: asset, span: span); | 55 _transform.logger.fine(_snippet(msg), asset: asset, span: span); |
| 50 _logs.add(new BuildLogEntry(msg, span, LogLevel.FINE.name)); | 56 _logs.add(new BuildLogEntry(msg, span, LogLevel.FINE.name)); |
| 51 } | 57 } |
| 52 | 58 |
| 53 /// Records a message at the info level. If [msg] is a [Message] it is | 59 /// Records a message at the info level. If [msg] is a [Message] it is |
| 54 /// recorded directly, otherwise it is first converted to a [String]. | 60 /// recorded directly, otherwise it is first converted to a [String]. |
| 55 void info(msg, {AssetId asset, SourceSpan span}) { | 61 void info(msg, {AssetId asset, SourceSpan span}) { |
| 56 msg = msg is Message ? msg : new Message.unknown('$msg'); | 62 msg = msg is Message ? msg : new Message.unknown('$msg'); |
| 57 _transform.logger.info(msg.snippet, asset: asset, span: span); | 63 _transform.logger.info(_snippet(msg), asset: asset, span: span); |
| 58 _logs.add(new BuildLogEntry(msg, span, LogLevel.INFO.name)); | 64 _logs.add(new BuildLogEntry(msg, span, LogLevel.INFO.name)); |
| 59 } | 65 } |
| 60 | 66 |
| 61 /// Records a warning message. If [msg] is a [Message] it is recorded | 67 /// Records a warning message. If [msg] is a [Message] it is recorded |
| 62 /// directly, otherwise it is first converted to a [String]. | 68 /// directly, otherwise it is first converted to a [String]. |
| 63 void warning(msg, {AssetId asset, SourceSpan span}) { | 69 void warning(msg, {AssetId asset, SourceSpan span}) { |
| 64 msg = msg is Message ? msg : new Message.unknown('$msg'); | 70 msg = msg is Message ? msg : new Message.unknown('$msg'); |
| 65 _transform.logger.warning(msg.snippet, asset: asset, span: span); | 71 _transform.logger.warning(_snippet(msg), asset: asset, span: span); |
| 66 _logs.add(new BuildLogEntry(msg, span, LogLevel.WARNING.name)); | 72 _logs.add(new BuildLogEntry(msg, span, LogLevel.WARNING.name)); |
| 67 } | 73 } |
| 68 | 74 |
| 69 /// Records an error message. If [msg] is a [Message] it is recorded | 75 /// Records an error message. If [msg] is a [Message] it is recorded |
| 70 /// directly, otherwise it is first converted to a [String]. | 76 /// directly, otherwise it is first converted to a [String]. |
| 71 void error(msg, {AssetId asset, SourceSpan span}) { | 77 void error(msg, {AssetId asset, SourceSpan span}) { |
| 72 msg = msg is Message ? msg : new Message.unknown('$msg'); | 78 msg = msg is Message ? msg : new Message.unknown('$msg'); |
| 73 if (convertErrorsToWarnings) { | 79 if (convertErrorsToWarnings) { |
| 74 _transform.logger.warning(msg.snippet, asset: asset, span: span); | 80 _transform.logger.warning(_snippet(msg), asset: asset, span: span); |
| 75 } else { | 81 } else { |
| 76 _transform.logger.error(msg.snippet, asset: asset, span: span); | 82 _transform.logger.error(_snippet(msg), asset: asset, span: span); |
| 77 } | 83 } |
| 78 _logs.add(new BuildLogEntry(msg, span, LogLevel.ERROR.name)); | 84 _logs.add(new BuildLogEntry(msg, span, LogLevel.ERROR.name)); |
| 79 } | 85 } |
| 80 | 86 |
| 87 String _snippet(Message msg) { |
| 88 var s = msg.snippet; |
| 89 if (detailsUri == null) return s; |
| 90 var dot = s.endsWith('.') || s.endsWith('!') || s.endsWith('?') ? '' : '.'; |
| 91 var hashTag = '${msg.id.package}_${msg.id.id}'; |
| 92 return '$s$dot See $detailsUri#$hashTag for details.'; |
| 93 } |
| 94 |
| 81 /// Outputs the log data to a JSON serialized file. | 95 /// Outputs the log data to a JSON serialized file. |
| 82 Future writeOutput() { | 96 Future writeOutput() { |
| 83 return _getNextLogAssetPath().then((path) { | 97 return _getNextLogAssetPath().then((path) { |
| 84 _transform.addOutput(new Asset.fromString(path, | 98 _transform.addOutput(new Asset.fromString(path, |
| 85 JSON.encode(_logs))); | 99 JSON.encode(_logs))); |
| 86 }); | 100 }); |
| 87 } | 101 } |
| 88 | 102 |
| 89 // Each phase outputs a new log file with an incrementing # appended, this | 103 // Each phase outputs a new log file with an incrementing # appended, this |
| 90 // figures out the next # to use. | 104 // figures out the next # to use. |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 122 } | 136 } |
| 123 | 137 |
| 124 // Reads all logs for an asset and adds them to this loggers log output. | 138 // Reads all logs for an asset and adds them to this loggers log output. |
| 125 Future addLogFilesFromAsset(AssetId id, [int nextNumber = 1]) { | 139 Future addLogFilesFromAsset(AssetId id, [int nextNumber = 1]) { |
| 126 return _readLogFilesForAsset(id, _transform, _logs); | 140 return _readLogFilesForAsset(id, _transform, _logs); |
| 127 } | 141 } |
| 128 } | 142 } |
| 129 | 143 |
| 130 /// Extension used for assets that contained serialized logs. | 144 /// Extension used for assets that contained serialized logs. |
| 131 const String LOG_EXTENSION = '._buildLogs'; | 145 const String LOG_EXTENSION = '._buildLogs'; |
| OLD | NEW |