Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 import 'dart:collection' show HashSet; | 5 import 'dart:collection' show HashSet; |
| 6 import 'package:args/args.dart' show ArgParser, ArgResults; | 6 import 'package:args/args.dart' show ArgParser, ArgResults; |
| 7 import 'package:analyzer/analyzer.dart' | 7 import 'package:analyzer/analyzer.dart' |
| 8 show | 8 show |
| 9 AnalysisError, | 9 AnalysisError, |
| 10 CompilationUnit, | 10 CompilationUnit, |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 152 | 152 |
| 153 /// Whether to preserve metdata only accessible via mirrors | 153 /// Whether to preserve metdata only accessible via mirrors |
| 154 final bool emitMetadata; | 154 final bool emitMetadata; |
| 155 | 155 |
| 156 /// Whether to force compilation of code with static errors. | 156 /// Whether to force compilation of code with static errors. |
| 157 final bool unsafeForceCompile; | 157 final bool unsafeForceCompile; |
| 158 | 158 |
| 159 /// Whether to emit Closure Compiler-friendly code. | 159 /// Whether to emit Closure Compiler-friendly code. |
| 160 final bool closure; | 160 final bool closure; |
| 161 | 161 |
| 162 /// Hoist the types at instance creation sites | |
| 163 final bool hoistInstanceCreation; | |
| 164 | |
| 165 /// Hoist types from class signatures | |
| 166 final bool hoistSignatureTypes; | |
| 167 | |
| 168 /// Name types in type tests | |
| 169 final bool nameTypeTests; | |
| 170 | |
| 171 /// Hoist types in type tests | |
| 172 final bool hoistTypeTests; | |
| 173 | |
| 162 /// Enable ES6 destructuring of named parameters. Off by default. | 174 /// Enable ES6 destructuring of named parameters. Off by default. |
| 163 /// | 175 /// |
| 164 /// Older V8 versions do not accept default values with destructuring in | 176 /// Older V8 versions do not accept default values with destructuring in |
| 165 /// arrow functions yet (e.g. `({a} = {}) => 1`) but happily accepts them | 177 /// arrow functions yet (e.g. `({a} = {}) => 1`) but happily accepts them |
| 166 /// with regular functions (e.g. `function({a} = {}) { return 1 }`). | 178 /// with regular functions (e.g. `function({a} = {}) { return 1 }`). |
| 167 /// | 179 /// |
| 168 /// Supporting the syntax: | 180 /// Supporting the syntax: |
| 169 /// * Chrome Canary (51) | 181 /// * Chrome Canary (51) |
| 170 /// * Firefox | 182 /// * Firefox |
| 171 /// | 183 /// |
| 172 /// Not yet supporting: | 184 /// Not yet supporting: |
| 173 /// * Atom (1.5.4) | 185 /// * Atom (1.5.4) |
| 174 /// * Electron (0.36.3) | 186 /// * Electron (0.36.3) |
| 175 // TODO(ochafik): Simplify this code when our target platforms catch up. | 187 // TODO(ochafik): Simplify this code when our target platforms catch up. |
| 176 final bool destructureNamedParams; | 188 final bool destructureNamedParams; |
| 177 | 189 |
| 178 /// Which module format to support. | 190 /// Which module format to support. |
| 179 /// Currently 'es6' and 'legacy' are supported. | 191 /// Currently 'es6' and 'legacy' are supported. |
| 180 final ModuleFormat moduleFormat; | 192 final ModuleFormat moduleFormat; |
| 181 | 193 |
| 182 const CompilerOptions( | 194 const CompilerOptions( |
| 183 {this.sourceMap: true, | 195 {this.sourceMap: true, |
| 184 this.sourceMapComment: true, | 196 this.sourceMapComment: true, |
| 185 this.summarizeApi: true, | 197 this.summarizeApi: true, |
| 186 this.unsafeForceCompile: false, | 198 this.unsafeForceCompile: false, |
| 187 this.emitMetadata: false, | 199 this.emitMetadata: false, |
| 188 this.closure: false, | 200 this.closure: false, |
| 189 this.destructureNamedParams: false, | 201 this.destructureNamedParams: false, |
| 190 this.moduleFormat: ModuleFormat.legacy}); | 202 this.moduleFormat: ModuleFormat.legacy, |
| 203 this.hoistInstanceCreation: true, | |
| 204 this.hoistSignatureTypes: false, | |
| 205 this.nameTypeTests: true, | |
| 206 this.hoistTypeTests: true}); | |
| 191 | 207 |
| 192 CompilerOptions.fromArguments(ArgResults args) | 208 CompilerOptions.fromArguments(ArgResults args) |
| 193 : sourceMap = args['source-map'], | 209 : sourceMap = args['source-map'], |
| 194 sourceMapComment = args['source-map-comment'], | 210 sourceMapComment = args['source-map-comment'], |
| 195 summarizeApi = args['summarize'], | 211 summarizeApi = args['summarize'], |
| 196 unsafeForceCompile = args['unsafe-force-compile'], | 212 unsafeForceCompile = args['unsafe-force-compile'], |
| 197 emitMetadata = args['emit-metadata'], | 213 emitMetadata = args['emit-metadata'], |
| 198 closure = args['closure-experimental'], | 214 closure = args['closure-experimental'], |
| 199 destructureNamedParams = args['destructure-named-params'], | 215 destructureNamedParams = args['destructure-named-params'], |
| 200 moduleFormat = parseModuleFormat(args['modules']); | 216 moduleFormat = parseModuleFormat(args['modules']), |
| 217 hoistInstanceCreation = args['hoist-instance-creation'], | |
| 218 hoistSignatureTypes = args['hoist-signature-types'], | |
| 219 nameTypeTests = args['name-type-tests'], | |
| 220 hoistTypeTests = args['hoist-type-tests']; | |
| 201 | 221 |
| 202 static ArgParser addArguments(ArgParser parser) => parser | 222 static ArgParser addArguments(ArgParser parser) => parser |
| 203 ..addFlag('summarize', help: 'emit an API summary file', defaultsTo: true) | 223 ..addFlag('summarize', help: 'emit an API summary file', defaultsTo: true) |
| 204 ..addFlag('source-map', help: 'emit source mapping', defaultsTo: true) | 224 ..addFlag('source-map', help: 'emit source mapping', defaultsTo: true) |
| 205 ..addFlag('source-map-comment', | 225 ..addFlag('source-map-comment', |
| 206 help: 'adds a sourceMappingURL comment to the end of the JS,\n' | 226 help: 'adds a sourceMappingURL comment to the end of the JS,\n' |
| 207 'disable if using X-SourceMap header', | 227 'disable if using X-SourceMap header', |
| 208 defaultsTo: true) | 228 defaultsTo: true) |
| 209 ..addOption('modules', | 229 ..addOption('modules', |
| 210 help: 'module pattern to emit', | 230 help: 'module pattern to emit', |
| 211 allowed: ['es6', 'legacy', 'node'], | 231 allowed: ['es6', 'legacy', 'node'], |
| 212 allowedHelp: { | 232 allowedHelp: { |
| 213 'es6': 'es6 modules', | 233 'es6': 'es6 modules', |
| 214 'legacy': 'a custom format used by dartdevc, similar to AMD', | 234 'legacy': 'a custom format used by dartdevc, similar to AMD', |
| 215 'node': 'node.js modules (https://nodejs.org/api/modules.html)' | 235 'node': 'node.js modules (https://nodejs.org/api/modules.html)' |
| 216 }, | 236 }, |
| 217 defaultsTo: 'legacy') | 237 defaultsTo: 'legacy') |
| 218 ..addFlag('emit-metadata', | 238 ..addFlag('emit-metadata', |
| 219 help: 'emit metadata annotations queriable via mirrors', | 239 help: 'emit metadata annotations queriable via mirrors', |
| 220 defaultsTo: false) | 240 defaultsTo: false) |
| 221 ..addFlag('closure-experimental', | 241 ..addFlag('closure-experimental', |
| 222 help: 'emit Closure Compiler-friendly code (experimental)', | 242 help: 'emit Closure Compiler-friendly code (experimental)', |
| 223 defaultsTo: false) | 243 defaultsTo: false) |
| 224 ..addFlag('destructure-named-params', | 244 ..addFlag('destructure-named-params', |
| 225 help: 'Destructure named parameters', defaultsTo: false) | 245 help: 'Destructure named parameters', defaultsTo: false) |
| 226 ..addFlag('unsafe-force-compile', | 246 ..addFlag('unsafe-force-compile', |
| 227 help: 'Compile code even if it has errors. ಠ_ಠ\n' | 247 help: 'Compile code even if it has errors. ಠ_ಠ\n' |
| 228 'This has undefined behavior!', | 248 'This has undefined behavior!', |
| 229 defaultsTo: false); | 249 defaultsTo: false) |
| 250 ..addFlag('hoist-instance-creation', | |
|
Jennifer Messerly
2016/05/25 01:24:18
Should we hide these options from the "--help"? I
| |
| 251 help: 'Hoist the class type from generic instance creations', | |
| 252 defaultsTo: true) | |
| 253 ..addFlag('hoist-signature-types', | |
| 254 help: 'Hoist types from class signatures', defaultsTo: false) | |
| 255 ..addFlag('name-type-tests', | |
| 256 help: 'Name types used in type tests', defaultsTo: true) | |
| 257 ..addFlag('hoist-type-tests', | |
| 258 help: 'Hoist types used in type tests', defaultsTo: true); | |
| 230 } | 259 } |
| 231 | 260 |
| 232 /// A unit of Dart code that can be built into a single JavaScript module. | 261 /// A unit of Dart code that can be built into a single JavaScript module. |
| 233 class BuildUnit { | 262 class BuildUnit { |
| 234 /// The name of this module. | 263 /// The name of this module. |
| 235 final String name; | 264 final String name; |
| 236 | 265 |
| 237 /// Build root. All library names are relative to this path/prefix. | 266 /// Build root. All library names are relative to this path/prefix. |
| 238 final String buildRoot; | 267 final String buildRoot; |
| 239 | 268 |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 308 } | 337 } |
| 309 } | 338 } |
| 310 | 339 |
| 311 /// (Public for tests) the error code used when a part is missing. | 340 /// (Public for tests) the error code used when a part is missing. |
| 312 final missingPartErrorCode = const CompileTimeErrorCode( | 341 final missingPartErrorCode = const CompileTimeErrorCode( |
| 313 'MISSING_PART', 'The part was not supplied as an input to the compiler.'); | 342 'MISSING_PART', 'The part was not supplied as an input to the compiler.'); |
| 314 | 343 |
| 315 /// (Public for tests) the error code used when a part is unused. | 344 /// (Public for tests) the error code used when a part is unused. |
| 316 final unusedPartWarningCode = const StaticWarningCode( | 345 final unusedPartWarningCode = const StaticWarningCode( |
| 317 'UNUSED_PART', 'The part was not used by any libraries being compiled.'); | 346 'UNUSED_PART', 'The part was not used by any libraries being compiled.'); |
| OLD | NEW |