From 85ac67f4ee207b4af01e708f4a114d23289e1147 Mon Sep 17 00:00:00 2001
From: tinza123
Date: Fri, 10 Jun 2016 11:07:01 -0700
Subject: [PATCH] check the declaration and use order if both are not in module
file
---
src/compiler/checker.ts | 3 ++-
src/services/services.ts | 1 +
.../constDeclarations-useBeforeDefinition2.errors.txt | 11 +++++++++++
.../jsFileCompilationLetDeclarationOrder2.errors.txt | 5 ++++-
.../letDeclarations-useBeforeDefinition2.errors.txt | 11 +++++++++++
5 files changed, 29 insertions(+), 2 deletions(-)
create mode 100644 tests/baselines/reference/constDeclarations-useBeforeDefinition2.errors.txt
create mode 100644 tests/baselines/reference/letDeclarations-useBeforeDefinition2.errors.txt
diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts
index 044f42414b7..26c58ebe752 100644
--- a/src/compiler/checker.ts
+++ b/src/compiler/checker.ts
@@ -562,7 +562,8 @@ namespace ts {
const declarationFile = getSourceFileOfNode(declaration);
const useFile = getSourceFileOfNode(usage);
if (declarationFile !== useFile) {
- if (modulekind || (!compilerOptions.outFile && !compilerOptions.out)) {
+ if ((modulekind && (declarationFile.externalModuleIndicator || useFile.externalModuleIndicator)) ||
+ (!compilerOptions.outFile && !compilerOptions.out)) {
// nodes are in different files and order cannot be determines
return true;
}
diff --git a/src/services/services.ts b/src/services/services.ts
index cae2af356a0..e87a9f0d475 100644
--- a/src/services/services.ts
+++ b/src/services/services.ts
@@ -1,4 +1,5 @@
///
+///
///
///
diff --git a/tests/baselines/reference/constDeclarations-useBeforeDefinition2.errors.txt b/tests/baselines/reference/constDeclarations-useBeforeDefinition2.errors.txt
new file mode 100644
index 00000000000..a4d28f51878
--- /dev/null
+++ b/tests/baselines/reference/constDeclarations-useBeforeDefinition2.errors.txt
@@ -0,0 +1,11 @@
+tests/cases/compiler/file1.ts(2,1): error TS2448: Block-scoped variable 'c' used before its declaration.
+
+
+==== tests/cases/compiler/file1.ts (1 errors) ====
+
+ c;
+ ~
+!!! error TS2448: Block-scoped variable 'c' used before its declaration.
+
+==== tests/cases/compiler/file2.ts (0 errors) ====
+ const c = 0;
\ No newline at end of file
diff --git a/tests/baselines/reference/jsFileCompilationLetDeclarationOrder2.errors.txt b/tests/baselines/reference/jsFileCompilationLetDeclarationOrder2.errors.txt
index 21390cc2955..b88c73e0439 100644
--- a/tests/baselines/reference/jsFileCompilationLetDeclarationOrder2.errors.txt
+++ b/tests/baselines/reference/jsFileCompilationLetDeclarationOrder2.errors.txt
@@ -1,10 +1,13 @@
error TS5053: Option 'allowJs' cannot be specified with option 'declaration'.
+tests/cases/compiler/a.ts(2,1): error TS2448: Block-scoped variable 'a' used before its declaration.
!!! error TS5053: Option 'allowJs' cannot be specified with option 'declaration'.
-==== tests/cases/compiler/a.ts (0 errors) ====
+==== tests/cases/compiler/a.ts (1 errors) ====
let b = 30;
a = 10;
+ ~
+!!! error TS2448: Block-scoped variable 'a' used before its declaration.
==== tests/cases/compiler/b.js (0 errors) ====
let a = 10;
b = 30;
diff --git a/tests/baselines/reference/letDeclarations-useBeforeDefinition2.errors.txt b/tests/baselines/reference/letDeclarations-useBeforeDefinition2.errors.txt
new file mode 100644
index 00000000000..5b8633312d9
--- /dev/null
+++ b/tests/baselines/reference/letDeclarations-useBeforeDefinition2.errors.txt
@@ -0,0 +1,11 @@
+tests/cases/compiler/file1.ts(2,1): error TS2448: Block-scoped variable 'l' used before its declaration.
+
+
+==== tests/cases/compiler/file1.ts (1 errors) ====
+
+ l;
+ ~
+!!! error TS2448: Block-scoped variable 'l' used before its declaration.
+
+==== tests/cases/compiler/file2.ts (0 errors) ====
+ const l = 0;
\ No newline at end of file