Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions src/compiler/program.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1069,10 +1069,10 @@ namespace ts {
const typeChecker = getDiagnosticsProducingTypeChecker();

Debug.assert(!!sourceFile.bindDiagnostics);
const bindDiagnostics = sourceFile.bindDiagnostics;
// For JavaScript files, we don't want to report semantic errors unless explicitly requested.
const includeCheckDiagnostics = !isSourceFileJavaScript(sourceFile) || isCheckJsEnabledForFile(sourceFile, options);
const checkDiagnostics = includeCheckDiagnostics ? typeChecker.getDiagnostics(sourceFile, cancellationToken) : [];
const includeBindAndCheckDiagnostics = !isSourceFileJavaScript(sourceFile) || isCheckJsEnabledForFile(sourceFile, options);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

emptyArray instead of []

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will do. What's the difference? Fewer allocations?

const bindDiagnostics = includeBindAndCheckDiagnostics ? sourceFile.bindDiagnostics : emptyArray;
const checkDiagnostics = includeBindAndCheckDiagnostics ? typeChecker.getDiagnostics(sourceFile, cancellationToken) : emptyArray;
const fileProcessingDiagnosticsInFile = fileProcessingDiagnostics.getDiagnostics(sourceFile.fileName);
const programDiagnosticsInFile = programDiagnostics.getDiagnostics(sourceFile.fileName);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,21 @@
tests/cases/compiler/a.js(1,22): error TS2528: A module cannot have multiple default exports.
tests/cases/compiler/a.js(1,22): error TS2652: Merged declaration 'a' cannot include a default export declaration. Consider adding a separate 'export default a' declaration instead.
tests/cases/compiler/a.js(3,1): error TS2528: A module cannot have multiple default exports.
tests/cases/compiler/a.js(3,16): error TS1109: Expression expected.
tests/cases/compiler/a.js(3,20): error TS2652: Merged declaration 'a' cannot include a default export declaration. Consider adding a separate 'export default a' declaration instead.


==== tests/cases/compiler/a.js (3 errors) ====
==== tests/cases/compiler/a.js (5 errors) ====
export default class a {
~
!!! error TS2528: A module cannot have multiple default exports.
~
!!! error TS2652: Merged declaration 'a' cannot include a default export declaration. Consider adding a separate 'export default a' declaration instead.
}
export default var a = 10;
~~~~~~~~~~~~~~
!!! error TS2528: A module cannot have multiple default exports.
~~~
!!! error TS1109: Expression expected.
!!! error TS1109: Expression expected.
~
!!! error TS2652: Merged declaration 'a' cannot include a default export declaration. Consider adding a separate 'export default a' declaration instead.
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
tests/cases/compiler/a.js(5,5): error TS1117: An object literal cannot have multiple properties with the same name in strict mode.
tests/cases/compiler/a.js(5,5): error TS2300: Duplicate identifier 'a'.
tests/cases/compiler/a.js(7,5): error TS1212: Identifier expected. 'let' is a reserved word in strict mode.
tests/cases/compiler/a.js(8,8): error TS1102: 'delete' cannot be called on an identifier in strict mode.
tests/cases/compiler/a.js(8,8): error TS2703: The operand of a delete operator must be a property reference.
tests/cases/compiler/a.js(10,10): error TS1100: Invalid use of 'eval' in strict mode.
tests/cases/compiler/a.js(12,10): error TS1100: Invalid use of 'arguments' in strict mode.
tests/cases/compiler/a.js(15,1): error TS1101: 'with' statements are not allowed in strict mode.
tests/cases/compiler/a.js(15,1): error TS2410: The 'with' statement is not supported. All symbols in a 'with' block will have type 'any'.
tests/cases/compiler/b.js(3,7): error TS1210: Invalid use of 'eval'. Class definitions are automatically in strict mode.
tests/cases/compiler/b.js(6,13): error TS1213: Identifier expected. 'let' is a reserved word in strict mode. Class definitions are automatically in strict mode.
tests/cases/compiler/c.js(1,12): error TS1214: Identifier expected. 'let' is a reserved word in strict mode. Modules are automatically in strict mode.
Expand All @@ -12,21 +15,25 @@ tests/cases/compiler/d.js(2,9): error TS1121: Octal literals are not allowed in
tests/cases/compiler/d.js(2,11): error TS1005: ',' expected.


==== tests/cases/compiler/a.js (6 errors) ====
==== tests/cases/compiler/a.js (9 errors) ====
"use strict";
var a = {
a: "hello", // error
b: 10,
a: 10 // error
~
!!! error TS1117: An object literal cannot have multiple properties with the same name in strict mode.
~
!!! error TS2300: Duplicate identifier 'a'.
};
var let = 10; // error
~~~
!!! error TS1212: Identifier expected. 'let' is a reserved word in strict mode.
delete a; // error
~
!!! error TS1102: 'delete' cannot be called on an identifier in strict mode.
~
!!! error TS2703: The operand of a delete operator must be a property reference.
try {
} catch (eval) { // error
~~~~
Expand All @@ -40,6 +47,8 @@ tests/cases/compiler/d.js(2,11): error TS1005: ',' expected.
with (a) {
~~~~
!!! error TS1101: 'with' statements are not allowed in strict mode.
~~~~~~~~
!!! error TS2410: The 'with' statement is not supported. All symbols in a 'with' block will have type 'any'.
b = 10;
}

Expand Down
10 changes: 10 additions & 0 deletions tests/baselines/reference/unreachableJavascriptChecked.errors.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
tests/cases/compiler/unreachable.js(3,5): error TS7027: Unreachable code detected.


==== tests/cases/compiler/unreachable.js (1 errors) ====
function unreachable() {
return 1;
return 2;
~~~~~~
!!! error TS7027: Unreachable code detected.
}
11 changes: 11 additions & 0 deletions tests/baselines/reference/unreachableJavascriptChecked.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
//// [unreachable.js]
function unreachable() {
return 1;
return 2;
}

//// [unreachable.js]
function unreachable() {
return 1;
return 2;
}
11 changes: 11 additions & 0 deletions tests/baselines/reference/unreachableJavascriptUnchecked.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
//// [unreachable.js]
function unreachable() {
return 1;
return 2;
}

//// [unreachable.js]
function unreachable() {
return 1;
return 2;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
=== tests/cases/compiler/unreachable.js ===
function unreachable() {
>unreachable : Symbol(unreachable, Decl(unreachable.js, 0, 0))

return 1;
return 2;
}
10 changes: 10 additions & 0 deletions tests/baselines/reference/unreachableJavascriptUnchecked.types
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
=== tests/cases/compiler/unreachable.js ===
function unreachable() {
>unreachable : () => 1 | 2

return 1;
>1 : 1

return 2;
>2 : 2
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
// @allowJs: true
// @checkJs: true
// @noEmit: true
// @filename: a.js
var a = 10;
Expand Down
1 change: 1 addition & 0 deletions tests/cases/compiler/jsFileCompilationBindErrors.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
// @allowJs: true
// @checkJs: true
// @noEmit: true
// @filename: a.js
let C = "sss";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
// @allowJs: true
// @checkJs: true
// @noEmit: true
// @filename: a.js
// @target: es6
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
// @allowJs: true
// @checkJs: true
// @noEmit: true
// @filename: a.js
// @noFallthroughCasesInSwitch: true
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
// @allowJs: true
// @checkJs: true
// @noEmit: true
// @filename: a.js
// @target: es6
Expand Down
8 changes: 8 additions & 0 deletions tests/cases/compiler/unreachableJavascriptChecked.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// @Filename: unreachable.js
// @allowJs: true
// @checkJs: true
// @outDir: out
function unreachable() {
return 1;
return 2;
}
8 changes: 8 additions & 0 deletions tests/cases/compiler/unreachableJavascriptUnchecked.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// @Filename: unreachable.js
// @allowJs: true
// @checkJs: false
// @outDir: out
function unreachable() {
return 1;
return 2;
}