Skip to content

Commit 6fed3e2

Browse files
Merge pull request microsoft#1501 from Arnavion/no-emit
Add -noEmit compiler flag that skips the emit stage in ts.compile()
2 parents b2a02fe + 880e5c5 commit 6fed3e2

7 files changed

Lines changed: 36 additions & 2 deletions

File tree

src/compiler/commandLineParser.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,11 @@ module ts {
5454
paramType: Diagnostics.KIND,
5555
error: Diagnostics.Argument_for_module_option_must_be_commonjs_or_amd
5656
},
57+
{
58+
name: "noEmit",
59+
type: "boolean",
60+
description: Diagnostics.Do_not_emit_outputs,
61+
},
5762
{
5863
name: "noEmitOnError",
5964
type: "boolean",

src/compiler/diagnosticInformationMap.generated.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -380,6 +380,8 @@ module ts {
380380
Could_not_write_file_0_Colon_1: { code: 5033, category: DiagnosticCategory.Error, key: "Could not write file '{0}': {1}" },
381381
Option_mapRoot_cannot_be_specified_without_specifying_sourcemap_option: { code: 5038, category: DiagnosticCategory.Error, key: "Option mapRoot cannot be specified without specifying sourcemap option." },
382382
Option_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option: { code: 5039, category: DiagnosticCategory.Error, key: "Option sourceRoot cannot be specified without specifying sourcemap option." },
383+
Option_noEmit_cannot_be_specified_with_option_out_or_outDir: { code: 5040, category: DiagnosticCategory.Error, key: "Option noEmit cannot be specified with option out or outDir." },
384+
Option_noEmit_cannot_be_specified_with_option_declaration: { code: 5041, category: DiagnosticCategory.Error, key: "Option noEmit cannot be specified with option declaration." },
383385
Concatenate_and_emit_output_to_single_file: { code: 6001, category: DiagnosticCategory.Message, key: "Concatenate and emit output to single file." },
384386
Generates_corresponding_d_ts_file: { code: 6002, category: DiagnosticCategory.Message, key: "Generates corresponding '.d.ts' file." },
385387
Specifies_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations: { code: 6003, category: DiagnosticCategory.Message, key: "Specifies the location where debugger should locate map files instead of generated locations." },
@@ -389,6 +391,7 @@ module ts {
389391
Do_not_erase_const_enum_declarations_in_generated_code: { code: 6007, category: DiagnosticCategory.Message, key: "Do not erase const enum declarations in generated code." },
390392
Do_not_emit_outputs_if_any_type_checking_errors_were_reported: { code: 6008, category: DiagnosticCategory.Message, key: "Do not emit outputs if any type checking errors were reported." },
391393
Do_not_emit_comments_to_output: { code: 6009, category: DiagnosticCategory.Message, key: "Do not emit comments to output." },
394+
Do_not_emit_outputs: { code: 6010, category: DiagnosticCategory.Message, key: "Do not emit outputs." },
392395
Specify_ECMAScript_target_version_Colon_ES3_default_ES5_or_ES6_experimental: { code: 6015, category: DiagnosticCategory.Message, key: "Specify ECMAScript target version: 'ES3' (default), 'ES5', or 'ES6' (experimental)" },
393396
Specify_module_code_generation_Colon_commonjs_or_amd: { code: 6016, category: DiagnosticCategory.Message, key: "Specify module code generation: 'commonjs' or 'amd'" },
394397
Print_this_message: { code: 6017, category: DiagnosticCategory.Message, key: "Print this message." },

src/compiler/diagnosticMessages.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1616,6 +1616,14 @@
16161616
"category": "Error",
16171617
"code": 5039
16181618
},
1619+
"Option noEmit cannot be specified with option out or outDir.": {
1620+
"category": "Error",
1621+
"code": 5040
1622+
},
1623+
"Option noEmit cannot be specified with option declaration.": {
1624+
"category": "Error",
1625+
"code": 5041
1626+
},
16191627
"Concatenate and emit output to single file.": {
16201628
"category": "Message",
16211629
"code": 6001
@@ -1652,6 +1660,10 @@
16521660
"category": "Message",
16531661
"code": 6009
16541662
},
1663+
"Do not emit outputs.": {
1664+
"category": "Message",
1665+
"code": 6010
1666+
},
16551667
"Specify ECMAScript target version: 'ES3' (default), 'ES5', or 'ES6' (experimental)": {
16561668
"category": "Message",
16571669
"code": 6015

src/compiler/parser.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5126,6 +5126,16 @@ module ts {
51265126
commonSourceDirectory += directorySeparator;
51275127
}
51285128
}
5129+
5130+
if (options.noEmit) {
5131+
if (options.out || options.outDir) {
5132+
errors.push(createCompilerDiagnostic(Diagnostics.Option_noEmit_cannot_be_specified_with_option_out_or_outDir));
5133+
}
5134+
5135+
if (options.declaration) {
5136+
errors.push(createCompilerDiagnostic(Diagnostics.Option_noEmit_cannot_be_specified_with_option_declaration));
5137+
}
5138+
}
51295139
}
51305140
}
51315141
}

src/compiler/tsc.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,9 @@ module ts {
296296
if (checker.isEmitBlocked()) {
297297
exitStatus = EmitReturnStatus.AllOutputGenerationSkipped;
298298
}
299+
else if (compilerOptions.noEmit) {
300+
exitStatus = EmitReturnStatus.Succeeded;
301+
}
299302
else {
300303
var emitStart = new Date().getTime();
301304
var emitOutput = checker.emitFiles();

src/compiler/types.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -959,7 +959,7 @@ module ts {
959959

960960
// Return code used by getEmitOutput function to indicate status of the function
961961
export enum EmitReturnStatus {
962-
Succeeded = 0, // All outputs generated as requested (.js, .map, .d.ts), no errors reported
962+
Succeeded = 0, // All outputs generated if requested (.js, .map, .d.ts), no errors reported
963963
AllOutputGenerationSkipped = 1, // No .js generated because of syntax errors, nothing generated
964964
JSGeneratedWithSemanticErrors = 2, // .js and .map generated with semantic errors
965965
DeclarationGenerationSkipped = 3, // .d.ts generation skipped because of semantic errors or declaration emitter specific errors; Output .js with semantic errors
@@ -1434,6 +1434,7 @@ module ts {
14341434
locale?: string;
14351435
mapRoot?: string;
14361436
module?: ModuleKind;
1437+
noEmit?: boolean;
14371438
noEmitOnError?: boolean;
14381439
noErrorTruncation?: boolean;
14391440
noImplicitAny?: boolean;

tests/cases/fourslash/fourslash.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ declare var FourSlash;
3434
// Return code used by getEmitOutput function to indicate status of the function
3535
// It is a duplicate of the one in types.ts to expose it to testcases in fourslash
3636
enum EmitReturnStatus {
37-
Succeeded = 0, // All outputs generated as requested (.js, .map, .d.ts), no errors reported
37+
Succeeded = 0, // All outputs generated if requested (.js, .map, .d.ts), no errors reported
3838
AllOutputGenerationSkipped = 1, // No .js generated because of syntax errors, or compiler options errors, nothing generated
3939
JSGeneratedWithSemanticErrors = 2, // .js and .map generated with semantic errors
4040
DeclarationGenerationSkipped = 3, // .d.ts generation skipped because of semantic errors or declaration emitter specific errors; Output .js with semantic errors

0 commit comments

Comments
 (0)