Emit enabled for JS files

This commit is contained in:
Sheetal Nandi 2015-10-12 14:31:44 -07:00
parent 286fb3e948
commit b38a81bc73
50 changed files with 136 additions and 80 deletions

View file

@ -69,22 +69,16 @@ namespace ts {
if (!compilerOptions.noResolve) {
let addedGlobalFileReference = false;
forEach(root.referencedFiles, fileReference => {
if (isJavaScript(fileReference.fileName)) {
reportedDeclarationError = true;
diagnostics.push(createFileDiagnostic(root, fileReference.pos, fileReference.end - fileReference.pos, Diagnostics.js_file_cannot_be_referenced_in_ts_file_when_emitting_declarations));
}
else {
let referencedFile = tryResolveScriptReference(host, root, fileReference);
let referencedFile = tryResolveScriptReference(host, root, fileReference);
// All the references that are not going to be part of same file
if (referencedFile && ((referencedFile.flags & NodeFlags.DeclarationFile) || // This is a declare file reference
shouldEmitToOwnFile(referencedFile, compilerOptions) || // This is referenced file is emitting its own js file
!addedGlobalFileReference)) { // Or the global out file corresponding to this reference was not added
// All the references that are not going to be part of same file
if (referencedFile && ((referencedFile.flags & NodeFlags.DeclarationFile) || // This is a declare file reference
shouldEmitToOwnFile(referencedFile, compilerOptions) || // This is referenced file is emitting its own js file
!addedGlobalFileReference)) { // Or the global out file corresponding to this reference was not added
writeReferencePath(referencedFile);
if (!isExternalModuleOrDeclarationFile(referencedFile)) {
addedGlobalFileReference = true;
}
writeReferencePath(referencedFile);
if (!isExternalModuleOrDeclarationFile(referencedFile)) {
addedGlobalFileReference = true;
}
}
});
@ -111,24 +105,18 @@ namespace ts {
// Emit references corresponding to this file
let emittedReferencedFiles: SourceFile[] = [];
forEach(host.getSourceFiles(), sourceFile => {
if (!isExternalModuleOrDeclarationFile(sourceFile) && !isJavaScript(sourceFile.fileName)) {
if (!isExternalModuleOrDeclarationFile(sourceFile)) {
// Check what references need to be added
if (!compilerOptions.noResolve) {
forEach(sourceFile.referencedFiles, fileReference => {
if (isJavaScript(fileReference.fileName)) {
reportedDeclarationError = true;
diagnostics.push(createFileDiagnostic(sourceFile, fileReference.pos, fileReference.end - fileReference.pos, Diagnostics.js_file_cannot_be_referenced_in_ts_file_when_emitting_declarations));
}
else {
let referencedFile = tryResolveScriptReference(host, sourceFile, fileReference);
let referencedFile = tryResolveScriptReference(host, sourceFile, fileReference);
// If the reference file is a declaration file or an external module, emit that reference
if (referencedFile && (isExternalModuleOrDeclarationFile(referencedFile) &&
!contains(emittedReferencedFiles, referencedFile))) { // If the file reference was not already emitted
// If the reference file is a declaration file or an external module, emit that reference
if (referencedFile && (isExternalModuleOrDeclarationFile(referencedFile) &&
!contains(emittedReferencedFiles, referencedFile))) { // If the file reference was not already emitted
writeReferencePath(referencedFile);
emittedReferencedFiles.push(referencedFile);
}
writeReferencePath(referencedFile);
emittedReferencedFiles.push(referencedFile);
}
});
}

View file

@ -2465,10 +2465,6 @@
"category": "Error",
"code": 8017
},
".js file cannot be referenced in .ts file when emitting declarations.": {
"category": "Error",
"code": 8018
},
"Only identifiers/qualified-names with optional type arguments are currently supported in a class 'extends' clauses.": {
"category": "Error",

View file

@ -342,7 +342,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
emitFile(getEmitFileNames(targetSourceFile, host), targetSourceFile);
}
else if (!isDeclarationFile(targetSourceFile) &&
!isJavaScript(targetSourceFile.fileName) &&
(compilerOptions.outFile || compilerOptions.out)) {
emitFile(getBundledEmitFileNames(compilerOptions));
}
@ -462,7 +461,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
}
else {
forEach(host.getSourceFiles(), sourceFile => {
if (!isJavaScript(sourceFile.fileName) && !isExternalModuleOrDeclarationFile(sourceFile)) {
if (!isExternalModuleOrDeclarationFile(sourceFile)) {
emitSourceFile(sourceFile);
}
});

View file

@ -1769,7 +1769,7 @@ namespace ts {
}
export function getEmitFileNames(sourceFile: SourceFile, host: EmitHost) {
if (!isDeclarationFile(sourceFile) && !isJavaScript(sourceFile.fileName)) {
if (!isDeclarationFile(sourceFile)) {
let options = host.getCompilerOptions();
let jsFilePath: string;
if (shouldEmitToOwnFile(sourceFile, options)) {
@ -1835,12 +1835,12 @@ namespace ts {
}
export function shouldEmitToOwnFile(sourceFile: SourceFile, compilerOptions: CompilerOptions): boolean {
if (!isDeclarationFile(sourceFile) && !isJavaScript(sourceFile.fileName)) {
if (!isDeclarationFile(sourceFile)) {
if ((isExternalModule(sourceFile) || !(compilerOptions.outFile || compilerOptions.out))) {
// 1. in-browser single file compilation scenario
// 2. non supported extension file
return compilerOptions.isolatedModules ||
forEach(supportedTypeScriptExtensions, extension => fileExtensionIs(sourceFile.fileName, extension));
forEach(getSupportedExtensions(compilerOptions), extension => fileExtensionIs(sourceFile.fileName, extension));
}
return false;
}

View file

@ -1,6 +1,8 @@
error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
tests/cases/compiler/a.js(1,1): error TS8009: 'declare' can only be used in a .ts file.
!!! error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
==== tests/cases/compiler/a.js (1 errors) ====
declare var v;
~~~~~~~

View file

@ -1,6 +1,8 @@
error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
tests/cases/compiler/a.js(1,1): error TS8017: 'decorators' can only be used in a .ts file.
!!! error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
==== tests/cases/compiler/a.js (1 errors) ====
@internal class C { }
~~~~~~~~~

View file

@ -1,7 +1,9 @@
error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
error TS5056: Cannot write file 'tests/cases/compiler/a.js' since one or more input files would emit into it.
!!! error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
!!! error TS5056: Cannot write file 'tests/cases/compiler/a.js' since one or more input files would emit into it.
==== tests/cases/compiler/a.ts (0 errors) ====
class c {
}

View file

@ -15,8 +15,11 @@ var c = (function () {
}
return c;
})();
function foo() {
}
//// [out.d.ts]
declare class c {
}
declare function foo(): void;

View file

@ -19,8 +19,15 @@ var c = (function () {
}
return c;
})();
function bar() {
}
/// <reference path="c.js"/>
function foo() {
}
//// [out.d.ts]
declare class c {
}
declare function bar(): void;
declare function foo(): void;

View file

@ -1,6 +1,8 @@
error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
tests/cases/compiler/a.js(1,6): error TS8015: 'enum declarations' can only be used in a .ts file.
!!! error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
==== tests/cases/compiler/a.js (1 errors) ====
enum E { }
~

View file

@ -1,14 +1,13 @@
tests/cases/compiler/b.ts(1,1): error TS8018: .js file cannot be referenced in .ts file when emitting declarations.
error TS5055: Cannot write file 'tests/cases/compiler/c.js' which is one of the input files.
!!! error TS5055: Cannot write file 'tests/cases/compiler/c.js' which is one of the input files.
==== tests/cases/compiler/a.ts (0 errors) ====
class c {
}
==== tests/cases/compiler/b.ts (1 errors) ====
==== tests/cases/compiler/b.ts (0 errors) ====
/// <reference path="c.js"/>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! error TS8018: .js file cannot be referenced in .ts file when emitting declarations.
// error on above reference path when emitting declarations
function foo() {
}

View file

@ -30,3 +30,8 @@ function foo() {
//// [a.d.ts]
declare class c {
}
//// [c.d.ts]
declare function bar(): void;
//// [b.d.ts]
/// <reference path="c.d.ts" />
declare function foo(): void;

View file

@ -1,18 +0,0 @@
tests/cases/compiler/b.ts(1,1): error TS8018: .js file cannot be referenced in .ts file when emitting declarations.
==== tests/cases/compiler/a.ts (0 errors) ====
class c {
}
==== tests/cases/compiler/b.ts (1 errors) ====
/// <reference path="c.js"/>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! error TS8018: .js file cannot be referenced in .ts file when emitting declarations.
// error on above reference when emitting declarations
function foo() {
}
==== tests/cases/compiler/c.js (0 errors) ====
function bar() {
}

View file

@ -20,7 +20,16 @@ var c = (function () {
}
return c;
})();
function bar() {
}
/// <reference path="c.js"/>
// error on above reference when emitting declarations
function foo() {
}
//// [out.d.ts]
declare class c {
}
declare function bar(): void;
declare function foo(): void;

View file

@ -5,7 +5,7 @@ class c {
=== tests/cases/compiler/b.ts ===
/// <reference path="c.js"/>
// no error on above reference path since not emitting declarations
// error on above reference when emitting declarations
function foo() {
>foo : Symbol(foo, Decl(b.ts, 0, 0))
}

View file

@ -5,7 +5,7 @@ class c {
=== tests/cases/compiler/b.ts ===
/// <reference path="c.js"/>
// no error on above reference path since not emitting declarations
// error on above reference when emitting declarations
function foo() {
>foo : () => void
}

View file

@ -1,6 +1,8 @@
error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
tests/cases/compiler/a.js(1,1): error TS8003: 'export=' can only be used in a .ts file.
!!! error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
==== tests/cases/compiler/a.js (1 errors) ====
export = b;
~~~~~~~~~~~

View file

@ -1,6 +1,8 @@
error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
tests/cases/compiler/a.js(1,9): error TS8005: 'implements clauses' can only be used in a .ts file.
!!! error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
==== tests/cases/compiler/a.js (1 errors) ====
class C implements D { }
~~~~~~~~~~~~

View file

@ -1,6 +1,8 @@
error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
tests/cases/compiler/a.js(1,1): error TS8002: 'import ... =' can only be used in a .ts file.
!!! error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
==== tests/cases/compiler/a.js (1 errors) ====
import a = b;
~~~~~~~~~~~~~

View file

@ -1,6 +1,8 @@
error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
tests/cases/compiler/a.js(1,11): error TS8006: 'interface declarations' can only be used in a .ts file.
!!! error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
==== tests/cases/compiler/a.js (1 errors) ====
interface I { }
~

View file

@ -1,6 +1,8 @@
error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
tests/cases/compiler/a.js(1,8): error TS8007: 'module declarations' can only be used in a .ts file.
!!! error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
==== tests/cases/compiler/a.js (1 errors) ====
module M { }
~

View file

@ -0,0 +1,17 @@
error TS5055: Cannot write file 'tests/cases/compiler/c.js' which is one of the input files.
!!! error TS5055: Cannot write file 'tests/cases/compiler/c.js' which is one of the input files.
==== tests/cases/compiler/a.ts (0 errors) ====
class c {
}
==== tests/cases/compiler/b.ts (0 errors) ====
/// <reference path="c.js"/>
// no error on above reference path since not emitting declarations
function foo() {
}
==== tests/cases/compiler/c.js (0 errors) ====
function bar() {
}

View file

@ -20,6 +20,8 @@ var c = (function () {
}
return c;
})();
function bar() {
}
/// <reference path="c.js"/>
//no error on above reference since not emitting declarations
function foo() {

View file

@ -1,6 +1,8 @@
error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
tests/cases/compiler/a.js(1,13): error TS8009: '?' can only be used in a .ts file.
!!! error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
==== tests/cases/compiler/a.js (1 errors) ====
function F(p?) { }
~

View file

@ -1,6 +1,8 @@
error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
tests/cases/compiler/a.js(1,11): error TS8014: 'property declarations' can only be used in a .ts file.
!!! error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
==== tests/cases/compiler/a.js (1 errors) ====
class C { v }
~

View file

@ -1,6 +1,8 @@
error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
tests/cases/compiler/a.js(2,5): error TS8009: 'public' can only be used in a .ts file.
!!! error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
==== tests/cases/compiler/a.js (1 errors) ====
class C {
public foo() {

View file

@ -1,6 +1,8 @@
error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
tests/cases/compiler/a.js(1,23): error TS8012: 'parameter modifiers' can only be used in a .ts file.
!!! error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
==== tests/cases/compiler/a.js (1 errors) ====
class C { constructor(public x) { }}
~~~~~~

View file

@ -2,3 +2,4 @@
function foo(...a) { }
//// [b.js]
function foo(...a) { }

View file

@ -1,6 +1,8 @@
error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
tests/cases/compiler/a.js(1,15): error TS8010: 'types' can only be used in a .ts file.
!!! error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
==== tests/cases/compiler/a.js (1 errors) ====
function F(): number { }
~~~~~~

View file

@ -1,6 +1,8 @@
error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
tests/cases/compiler/a.js(3,6): error TS1223: 'type' tag already specified.
!!! error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
==== tests/cases/compiler/a.js (1 errors) ====
/**
* @type {number}

View file

@ -1,6 +1,8 @@
error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
tests/cases/compiler/a.js(1,1): error TS8008: 'type aliases' can only be used in a .ts file.
!!! error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
==== tests/cases/compiler/a.js (1 errors) ====
type a = b;
~~~~~~~~~~~

View file

@ -1,6 +1,8 @@
error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
tests/cases/compiler/a.js(1,5): error TS8011: 'type arguments' can only be used in a .ts file.
!!! error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
==== tests/cases/compiler/a.js (1 errors) ====
Foo<number>();
~~~~~~

View file

@ -1,6 +1,8 @@
error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
tests/cases/compiler/a.js(1,27): error TS17002: Expected corresponding JSX closing tag for 'string'.
!!! error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
==== tests/cases/compiler/a.js (1 errors) ====
var v = <string>undefined;

View file

@ -1,6 +1,8 @@
error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
tests/cases/compiler/a.js(1,15): error TS8010: 'types' can only be used in a .ts file.
!!! error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
==== tests/cases/compiler/a.js (1 errors) ====
function F(a: number) { }
~~~~~~

View file

@ -1,6 +1,8 @@
error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
tests/cases/compiler/a.js(1,9): error TS8004: 'type parameter declarations' can only be used in a .ts file.
!!! error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
==== tests/cases/compiler/a.js (1 errors) ====
class C<T> { }
~

View file

@ -1,6 +1,8 @@
error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
tests/cases/compiler/a.js(1,12): error TS8004: 'type parameter declarations' can only be used in a .ts file.
!!! error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
==== tests/cases/compiler/a.js (1 errors) ====
function F<T>() { }
~

View file

@ -1,6 +1,8 @@
error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
tests/cases/compiler/a.js(1,8): error TS8010: 'types' can only be used in a .ts file.
!!! error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
==== tests/cases/compiler/a.js (1 errors) ====
var v: () => number;
~~~~~~~~~~~~

View file

@ -1,7 +1,9 @@
error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
error TS5056: Cannot write file 'tests/cases/compiler/a.js' since one or more input files would emit into it.
!!! error TS5055: Cannot write file 'tests/cases/compiler/a.js' which is one of the input files.
!!! error TS5056: Cannot write file 'tests/cases/compiler/a.js' since one or more input files would emit into it.
==== tests/cases/compiler/a.ts (0 errors) ====
class c {
}

View file

@ -15,3 +15,5 @@ var c = (function () {
}
return c;
})();
function foo() {
}

View file

@ -0,0 +1,12 @@
error TS5055: Cannot write file 'tests/cases/compiler/b.js' which is one of the input files.
!!! error TS5055: Cannot write file 'tests/cases/compiler/b.js' which is one of the input files.
==== tests/cases/compiler/a.ts (0 errors) ====
class c {
}
==== tests/cases/compiler/b.js (0 errors) ====
function foo() {
}

View file

@ -1,10 +0,0 @@
=== tests/cases/compiler/a.ts ===
class c {
>c : Symbol(c, Decl(a.ts, 0, 0))
}
=== tests/cases/compiler/b.js ===
function foo() {
>foo : Symbol(foo, Decl(b.js, 0, 0))
}

View file

@ -1,10 +0,0 @@
=== tests/cases/compiler/a.ts ===
class c {
>c : c
}
=== tests/cases/compiler/b.js ===
function foo() {
>foo : () => void
}

View file

@ -1 +1,2 @@
declare var test: number;
declare var test2: number;

View file

@ -1 +1,2 @@
var test = 10;
var test2 = 10; // Should get compiled

View file

@ -1 +1,2 @@
declare var test: number;
declare var test2: number;

View file

@ -1 +1,2 @@
var test = 10;
var test2 = 10; // Should get compiled

View file

@ -1 +1,2 @@
declare var test: number;
declare var test2: number;

View file

@ -1 +1,2 @@
var test = 10;
var test2 = 10; // Should get compiled

View file

@ -1 +1,2 @@
declare var test: number;
declare var test2: number;

View file

@ -1 +1,2 @@
var test = 10;
var test2 = 10; // Should get compiled