Merge pull request #9095 from RyanCavanaugh/implicitTypeReferences

Implicit type inclusion changes
This commit is contained in:
Ryan Cavanaugh 2016-06-13 16:33:22 -07:00 committed by GitHub
commit f9923efd09
100 changed files with 603 additions and 523 deletions

View File

@ -337,8 +337,13 @@ namespace ts {
}
},
{
name: "typesRoot",
type: "string"
name: "typeRoots",
type: "list",
element: {
name: "typeRoots",
type: "string",
isFilePath: true
}
},
{
name: "types",

View File

@ -1931,6 +1931,10 @@
"category": "Error",
"code": 2687
},
"Cannot find type definition file for '{0}'.": {
"category": "Error",
"code": 2688
},
"Import declaration '{0}' is using private name '{1}'.": {
"category": "Error",
"code": 4000

View File

@ -9,16 +9,11 @@ namespace ts {
/* @internal */ export let ioWriteTime = 0;
/** The version of the TypeScript compiler release */
export const version = "1.9.0";
const emptyArray: any[] = [];
const defaultLibrarySearchPaths = [
"types/",
"node_modules/",
"node_modules/@types/",
];
export const version = "1.9.0";
const defaultTypeRoots = ["node_modules/@types"];
export function findConfigFile(searchPath: string, fileExists: (fileName: string) => boolean): string {
while (true) {
@ -183,6 +178,11 @@ namespace ts {
const typeReferenceExtensions = [".d.ts"];
function getEffectiveTypeRoots(options: CompilerOptions, host: ModuleResolutionHost) {
return options.typeRoots ||
defaultTypeRoots.map(d => combinePaths(options.configFilePath ? getDirectoryPath(options.configFilePath) : host.getCurrentDirectory(), d));
}
/**
* @param {string | undefined} containingFile - file that contains type reference directive, can be undefined if containing file is unknown.
* This is possible in case if resolution is performed for directives specified via 'types' parameter. In this case initial path for secondary lookups
@ -197,24 +197,22 @@ namespace ts {
traceEnabled
};
// use typesRoot and fallback to directory that contains tsconfig or current directory if typesRoot is not set
const rootDir = options.typesRoot || (options.configFilePath ? getDirectoryPath(options.configFilePath) : (host.getCurrentDirectory && host.getCurrentDirectory()));
const typeRoots = getEffectiveTypeRoots(options, host);
if (traceEnabled) {
if (containingFile === undefined) {
if (rootDir === undefined) {
if (typeRoots === undefined) {
trace(host, Diagnostics.Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set, typeReferenceDirectiveName);
}
else {
trace(host, Diagnostics.Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1, typeReferenceDirectiveName, rootDir);
trace(host, Diagnostics.Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1, typeReferenceDirectiveName, typeRoots);
}
}
else {
if (rootDir === undefined) {
if (typeRoots === undefined) {
trace(host, Diagnostics.Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set, typeReferenceDirectiveName, containingFile);
}
else {
trace(host, Diagnostics.Resolving_type_reference_directive_0_containing_file_1_root_directory_2, typeReferenceDirectiveName, containingFile, rootDir);
trace(host, Diagnostics.Resolving_type_reference_directive_0_containing_file_1_root_directory_2, typeReferenceDirectiveName, containingFile, typeRoots);
}
}
}
@ -222,14 +220,13 @@ namespace ts {
const failedLookupLocations: string[] = [];
// Check primary library paths
if (rootDir !== undefined) {
const effectivePrimarySearchPaths = options.typesSearchPaths || defaultLibrarySearchPaths;
for (const searchPath of effectivePrimarySearchPaths) {
const primaryPath = combinePaths(rootDir, searchPath);
if (traceEnabled) {
trace(host, Diagnostics.Resolving_with_primary_search_path_0, primaryPath);
}
const candidate = combinePaths(primaryPath, typeReferenceDirectiveName);
if (typeRoots.length) {
if (traceEnabled) {
trace(host, Diagnostics.Resolving_with_primary_search_path_0, typeRoots.join(", "));
}
const primarySearchPaths = typeRoots;
for (const typeRoot of primarySearchPaths) {
const candidate = combinePaths(typeRoot, typeReferenceDirectiveName);
const candidateDirectory = getDirectoryPath(candidate);
const resolvedFile = loadNodeModuleFromDirectory(typeReferenceExtensions, candidate, failedLookupLocations,
!directoryProbablyExists(candidateDirectory, host), moduleResolutionState);
@ -256,9 +253,6 @@ namespace ts {
if (containingFile) {
initialLocationForSecondaryLookup = getDirectoryPath(containingFile);
}
else {
initialLocationForSecondaryLookup = rootDir;
}
if (initialLocationForSecondaryLookup !== undefined) {
// check secondary locations
@ -937,19 +931,6 @@ namespace ts {
}
}
function getDefaultTypeDirectiveNames(rootPath: string): string[] {
const localTypes = combinePaths(rootPath, "types");
const npmTypes = combinePaths(rootPath, "node_modules/@types");
let result: string[] = [];
if (sys.directoryExists(localTypes)) {
result = result.concat(sys.getDirectories(localTypes));
}
if (sys.directoryExists(npmTypes)) {
result = result.concat(sys.getDirectories(npmTypes));
}
return result;
}
function getDefaultLibLocation(): string {
return getDirectoryPath(normalizePath(sys.getExecutingFilePath()));
}
@ -958,7 +939,6 @@ namespace ts {
const realpath = sys.realpath && ((path: string) => sys.realpath(path));
return {
getDefaultTypeDirectiveNames,
getSourceFile,
getDefaultLibLocation,
getDefaultLibFileName: options => combinePaths(getDefaultLibLocation(), getDefaultLibFileName(options)),
@ -971,6 +951,7 @@ namespace ts {
readFile: fileName => sys.readFile(fileName),
trace: (s: string) => sys.write(s + newLine),
directoryExists: directoryName => sys.directoryExists(directoryName),
getDirectories: (path: string) => sys.getDirectories(path),
realpath
};
}
@ -1034,21 +1015,35 @@ namespace ts {
return resolutions;
}
export function getDefaultTypeDirectiveNames(options: CompilerOptions, rootFiles: string[], host: CompilerHost): string[] {
function getInferredTypesRoot(options: CompilerOptions, rootFiles: string[], host: CompilerHost) {
return computeCommonSourceDirectoryOfFilenames(rootFiles, host.getCurrentDirectory(), f => host.getCanonicalFileName(f));
}
/**
* Given a set of options and a set of root files, returns the set of type directive names
* that should be included for this program automatically.
* This list could either come from the config file,
* or from enumerating the types root + initial secondary types lookup location.
* More type directives might appear in the program later as a result of loading actual source files;
* this list is only the set of defaults that are implicitly included.
*/
export function getAutomaticTypeDirectiveNames(options: CompilerOptions, rootFiles: string[], host: CompilerHost): string[] {
// Use explicit type list from tsconfig.json
if (options.types) {
return options.types;
}
// or load all types from the automatic type import fields
if (host && host.getDefaultTypeDirectiveNames) {
const commonRoot = computeCommonSourceDirectoryOfFilenames(rootFiles, host.getCurrentDirectory(), f => host.getCanonicalFileName(f));
if (commonRoot) {
return host.getDefaultTypeDirectiveNames(commonRoot);
// Walk the primary type lookup locations
let result: string[] = [];
if (host.directoryExists && host.getDirectories) {
const typeRoots = getEffectiveTypeRoots(options, host);
for (const root of typeRoots) {
if (host.directoryExists(root)) {
result = result.concat(host.getDirectories(root));
}
}
}
return undefined;
return result;
}
export function createProgram(rootNames: string[], options: CompilerOptions, host?: CompilerHost, oldProgram?: Program): Program {
@ -1100,11 +1095,13 @@ namespace ts {
if (!tryReuseStructureFromOldProgram()) {
forEach(rootNames, name => processRootFile(name, /*isDefaultLib*/ false));
// load type declarations specified via 'types' argument
const typeReferences: string[] = getDefaultTypeDirectiveNames(options, rootNames, host);
// load type declarations specified via 'types' argument or implicitly from types/ and node_modules/@types folders
const typeReferences: string[] = getAutomaticTypeDirectiveNames(options, rootNames, host);
if (typeReferences) {
const resolutions = resolveTypeReferenceDirectiveNamesWorker(typeReferences, /*containingFile*/ undefined);
const inferredRoot = getInferredTypesRoot(options, rootNames, host);
const containingFilename = combinePaths(inferredRoot, "__inferred type names__.ts");
const resolutions = resolveTypeReferenceDirectiveNamesWorker(typeReferences, containingFilename);
for (let i = 0; i < typeReferences.length; i++) {
processTypeReferenceDirective(typeReferences[i], resolutions[i]);
}
@ -1212,10 +1209,9 @@ namespace ts {
(oldOptions.jsx !== options.jsx) ||
(oldOptions.allowJs !== options.allowJs) ||
(oldOptions.rootDir !== options.rootDir) ||
(oldOptions.typesSearchPaths !== options.typesSearchPaths) ||
(oldOptions.configFilePath !== options.configFilePath) ||
(oldOptions.baseUrl !== options.baseUrl) ||
(oldOptions.typesRoot !== options.typesRoot) ||
!arrayIsEqualTo(oldOptions.typeRoots, oldOptions.typeRoots) ||
!arrayIsEqualTo(oldOptions.rootDirs, options.rootDirs) ||
!mapIsEqualTo(oldOptions.paths, options.paths)) {
return false;
@ -1970,7 +1966,7 @@ namespace ts {
}
}
else {
fileProcessingDiagnostics.add(createDiagnostic(refFile, refPos, refEnd, Diagnostics.Cannot_find_name_0, typeReferenceDirective));
fileProcessingDiagnostics.add(createDiagnostic(refFile, refPos, refEnd, Diagnostics.Cannot_find_type_definition_file_for_0, typeReferenceDirective));
}
if (saveResolution) {

View File

@ -2562,7 +2562,8 @@ namespace ts {
target?: ScriptTarget;
traceResolution?: boolean;
types?: string[];
/* @internal */ typesRoot?: string;
/** Paths used to used to compute primary types search locations */
typeRoots?: string[];
typesSearchPaths?: string[];
/*@internal*/ version?: boolean;
/*@internal*/ watch?: boolean;
@ -2871,6 +2872,7 @@ namespace ts {
getDefaultTypeDirectiveNames?(rootPath: string): string[];
writeFile: WriteFileCallback;
getCurrentDirectory(): string;
getDirectories(path: string): string[];
getCanonicalFileName(fileName: string): string;
useCaseSensitiveFileNames(): boolean;
getNewLine(): string;

View File

@ -246,8 +246,8 @@ namespace FourSlash {
// Create a new Services Adapter
this.cancellationToken = new TestCancellationToken();
const compilationOptions = convertGlobalOptionsToCompilerOptions(this.testData.globalOptions);
if (compilationOptions.typesRoot) {
compilationOptions.typesRoot = ts.getNormalizedAbsolutePath(compilationOptions.typesRoot, this.basePath);
if (compilationOptions.typeRoots) {
compilationOptions.typeRoots = compilationOptions.typeRoots.map(p => ts.getNormalizedAbsolutePath(p, this.basePath));
}
const languageServiceAdapter = this.getLanguageServiceAdapter(testType, this.cancellationToken, compilationOptions);

View File

@ -432,6 +432,7 @@ namespace Harness {
readFile(path: string): string;
writeFile(path: string, contents: string): void;
directoryName(path: string): string;
getDirectories(path: string): string[];
createDirectory(path: string): void;
fileExists(fileName: string): boolean;
directoryExists(path: string): boolean;
@ -477,6 +478,7 @@ namespace Harness {
export const readFile: typeof IO.readFile = path => ts.sys.readFile(path);
export const writeFile: typeof IO.writeFile = (path, content) => ts.sys.writeFile(path, content);
export const directoryName: typeof IO.directoryName = fso.GetParentFolderName;
export const getDirectories: typeof IO.getDirectories = dir => ts.sys.getDirectories(dir);
export const directoryExists: typeof IO.directoryExists = fso.FolderExists;
export const fileExists: typeof IO.fileExists = fso.FileExists;
export const log: typeof IO.log = global.WScript && global.WScript.StdOut.WriteLine;
@ -543,6 +545,7 @@ namespace Harness {
export const args = () => ts.sys.args;
export const getExecutingFilePath = () => ts.sys.getExecutingFilePath();
export const exit = (exitCode: number) => ts.sys.exit(exitCode);
export const getDirectories: typeof IO.getDirectories = path => ts.sys.getDirectories(path);
export const readFile: typeof IO.readFile = path => ts.sys.readFile(path);
export const writeFile: typeof IO.writeFile = (path, content) => ts.sys.writeFile(path, content);
@ -616,6 +619,7 @@ namespace Harness {
export const args = () => <string[]>[];
export const getExecutingFilePath = () => "";
export const exit = (exitCode: number) => { };
export const getDirectories = () => <string[]>[];
export let log = (s: string) => console.log(s);
@ -861,7 +865,7 @@ namespace Harness {
// Local get canonical file name function, that depends on passed in parameter for useCaseSensitiveFileNames
const getCanonicalFileName = ts.createGetCanonicalFileName(useCaseSensitiveFileNames);
let realPathMap: ts.FileMap<string>;
const realPathMap: ts.FileMap<string> = ts.createFileMap<string>();
const fileMap: ts.FileMap<() => ts.SourceFile> = ts.createFileMap<() => ts.SourceFile>();
for (const file of inputFiles) {
if (file.content !== undefined) {
@ -870,9 +874,6 @@ namespace Harness {
if (file.fileOptions && file.fileOptions["symlink"]) {
const link = file.fileOptions["symlink"];
const linkPath = ts.toPath(link, currentDirectory, getCanonicalFileName);
if (!realPathMap) {
realPathMap = ts.createFileMap<string>();
}
realPathMap.set(linkPath, fileName);
fileMap.set(path, (): ts.SourceFile => { throw new Error("Symlinks should always be resolved to a realpath first"); });
}
@ -906,20 +907,6 @@ namespace Harness {
return {
getDefaultTypeDirectiveNames: (path: string) => {
const results: string[] = [];
fileMap.forEachValue((key, value) => {
const rx = /node_modules\/@types\/(\w+)/;
const typeNameResult = rx.exec(key);
if (typeNameResult) {
const typeName = typeNameResult[1];
if (results.indexOf(typeName) < 0) {
results.push(typeName);
}
}
});
return results;
},
getCurrentDirectory: () => currentDirectory,
getSourceFile,
getDefaultLibFileName,
@ -937,7 +924,37 @@ namespace Harness {
realpath: realPathMap && ((f: string) => {
const path = ts.toPath(f, currentDirectory, getCanonicalFileName);
return realPathMap.contains(path) ? realPathMap.get(path) : path;
})
}),
directoryExists: dir => {
let path = ts.toPath(dir, currentDirectory, getCanonicalFileName);
// Strip trailing /, which may exist if the path is a drive root
if (path[path.length - 1] === "/") {
path = <ts.Path>path.substr(0, path.length - 1);
}
let exists = false;
fileMap.forEachValue(key => {
if (key.indexOf(path) === 0 && key[path.length] === "/") {
exists = true;
}
});
return exists;
},
getDirectories: d => {
const path = ts.toPath(d, currentDirectory, getCanonicalFileName);
const result: string[] = [];
fileMap.forEachValue((key, value) => {
if (key.indexOf(path) === 0 && key.lastIndexOf("/") > path.length) {
let dirName = key.substr(path.length, key.indexOf("/", path.length + 1) - path.length);
if (dirName[0] === "/") {
dirName = dirName.substr(1);
}
if (result.indexOf(dirName) < 0) {
result.push(dirName);
}
}
});
return result;
}
};
}
@ -1036,7 +1053,9 @@ namespace Harness {
options.noErrorTruncation = true;
options.skipDefaultLibCheck = true;
currentDirectory = currentDirectory || Harness.IO.getCurrentDirectory();
if (typeof currentDirectory === "undefined") {
currentDirectory = Harness.IO.getCurrentDirectory();
}
// Parse settings
if (harnessSettings) {

View File

@ -246,16 +246,21 @@ namespace Harness.LanguageService {
};
this.getTypeReferenceDirectiveResolutionsForFile = (fileName) => {
const scriptInfo = this.getScriptInfo(fileName);
const preprocessInfo = ts.preProcessFile(scriptInfo.content, /*readImportFiles*/ false);
const resolutions: ts.Map<ts.ResolvedTypeReferenceDirective> = {};
const settings = this.nativeHost.getCompilationSettings();
for (const typeReferenceDirective of preprocessInfo.typeReferenceDirectives) {
const resolutionInfo = ts.resolveTypeReferenceDirective(typeReferenceDirective.fileName, fileName, settings, moduleResolutionHost);
if (resolutionInfo.resolvedTypeReferenceDirective.resolvedFileName) {
resolutions[typeReferenceDirective.fileName] = resolutionInfo.resolvedTypeReferenceDirective;
if (scriptInfo) {
const preprocessInfo = ts.preProcessFile(scriptInfo.content, /*readImportFiles*/ false);
const resolutions: ts.Map<ts.ResolvedTypeReferenceDirective> = {};
const settings = this.nativeHost.getCompilationSettings();
for (const typeReferenceDirective of preprocessInfo.typeReferenceDirectives) {
const resolutionInfo = ts.resolveTypeReferenceDirective(typeReferenceDirective.fileName, fileName, settings, moduleResolutionHost);
if (resolutionInfo.resolvedTypeReferenceDirective.resolvedFileName) {
resolutions[typeReferenceDirective.fileName] = resolutionInfo.resolvedTypeReferenceDirective;
}
}
return JSON.stringify(resolutions);
}
else {
return "[]";
}
return JSON.stringify(resolutions);
};
}
}

View File

@ -185,7 +185,8 @@ class ProjectRunner extends RunnerBase {
useCaseSensitiveFileNames: () => Harness.IO.useCaseSensitiveFileNames(),
getNewLine: () => Harness.IO.newLine(),
fileExists: fileName => fileName === Harness.Compiler.defaultLibFileName || getSourceFileText(fileName) !== undefined,
readFile: fileName => Harness.IO.readFile(fileName)
readFile: fileName => Harness.IO.readFile(fileName),
getDirectories: path => Harness.IO.getDirectories(path)
};
}
}

View File

@ -315,6 +315,10 @@ namespace ts.server {
return this.host.directoryExists(path);
}
getDirectories(path: string): string[] {
return this.host.getDirectories(path);
}
/**
* @param line 1 based index
*/

View File

@ -1077,6 +1077,7 @@ namespace ts {
resolveModuleNames?(moduleNames: string[], containingFile: string): ResolvedModule[];
resolveTypeReferenceDirectives?(typeDirectiveNames: string[], containingFile: string): ResolvedTypeReferenceDirective[];
directoryExists?(directoryName: string): boolean;
getDirectories?(directoryName: string): string[];
}
//
@ -2038,7 +2039,8 @@ namespace ts {
getNewLine: () => newLine,
fileExists: (fileName): boolean => fileName === inputFileName,
readFile: (fileName): string => "",
directoryExists: directoryExists => true
directoryExists: directoryExists => true,
getDirectories: (path: string) => []
};
const program = createProgram([inputFileName], options, compilerHost);
@ -2139,7 +2141,7 @@ namespace ts {
const getCanonicalFileName = createGetCanonicalFileName(!!useCaseSensitiveFileNames);
function getKeyForCompilationSettings(settings: CompilerOptions): DocumentRegistryBucketKey {
return <DocumentRegistryBucketKey>`_${settings.target}|${settings.module}|${settings.noResolve}|${settings.jsx}|${settings.allowJs}|${settings.baseUrl}|${settings.typesRoot}|${settings.typesSearchPaths}|${JSON.stringify(settings.rootDirs)}|${JSON.stringify(settings.paths)}`;
return <DocumentRegistryBucketKey>`_${settings.target}|${settings.module}|${settings.noResolve}|${settings.jsx}|${settings.allowJs}|${settings.baseUrl}|${JSON.stringify(settings.typeRoots)}|${JSON.stringify(settings.rootDirs)}|${JSON.stringify(settings.paths)}`;
}
function getBucketForCompilationSettings(key: DocumentRegistryBucketKey, createIfMissing: boolean): FileMap<DocumentRegistryEntry> {
@ -2999,8 +3001,10 @@ namespace ts {
return entry && entry.scriptSnapshot.getText(0, entry.scriptSnapshot.getLength());
},
directoryExists: directoryName => {
Debug.assert(!host.resolveModuleNames || !host.resolveTypeReferenceDirectives);
return directoryProbablyExists(directoryName, host);
},
getDirectories: path => {
return host.getDirectories ? host.getDirectories(path) : [];
}
};
if (host.trace) {

View File

@ -1,6 +1,7 @@
//// [tests/cases/compiler/commonSourceDir5.ts] ////
//// [bar.ts]
import {z} from "./foo";
export var x = z + z;

View File

@ -1,11 +1,12 @@
=== A:/bar.ts ===
import {z} from "./foo";
>z : Symbol(z, Decl(bar.ts, 0, 8))
>z : Symbol(z, Decl(bar.ts, 1, 8))
export var x = z + z;
>x : Symbol(x, Decl(bar.ts, 1, 10))
>z : Symbol(z, Decl(bar.ts, 0, 8))
>z : Symbol(z, Decl(bar.ts, 0, 8))
>x : Symbol(x, Decl(bar.ts, 2, 10))
>z : Symbol(z, Decl(bar.ts, 1, 8))
>z : Symbol(z, Decl(bar.ts, 1, 8))
=== A:/foo.ts ===
import {pi} from "B:/baz";

View File

@ -1,4 +1,5 @@
=== A:/bar.ts ===
import {z} from "./foo";
>z : number

View File

@ -1,11 +1,11 @@
=== /consumer.ts ===
=== /src/consumer.ts ===
/// <reference types="jquery" />
$.foo();
>$.foo : Symbol(foo, Decl(index.d.ts, 3, 16))
>$ : Symbol($, Decl(index.d.ts, 3, 11))
>foo : Symbol(foo, Decl(index.d.ts, 3, 16))
=== /types/jquery/index.d.ts ===
=== /src/types/jquery/index.d.ts ===
// We can find typings in the ./types folder

View File

@ -1,7 +1,12 @@
[
"======== Resolving type reference directive 'jquery', containing file '/consumer.ts', root directory '/'. ========",
"Resolving with primary search path '/types/'",
"File '/types/jquery/package.json' does not exist.",
"File '/types/jquery/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'jquery' was successfully resolved to '/types/jquery/index.d.ts', primary: true. ========"
"======== Resolving type reference directive 'jquery', containing file '/src/consumer.ts', root directory 'types'. ========",
"Resolving with primary search path 'types'",
"File 'types/jquery/package.json' does not exist.",
"File 'types/jquery/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'jquery' was successfully resolved to 'types/jquery/index.d.ts', primary: true. ========",
"======== Resolving type reference directive 'jquery', containing file '/src/__inferred type names__.ts', root directory 'types'. ========",
"Resolving with primary search path 'types'",
"File 'types/jquery/package.json' does not exist.",
"File 'types/jquery/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'jquery' was successfully resolved to 'types/jquery/index.d.ts', primary: true. ========"
]

View File

@ -1,4 +1,4 @@
=== /consumer.ts ===
=== /src/consumer.ts ===
/// <reference types="jquery" />
$.foo();
>$.foo() : void
@ -6,7 +6,7 @@ $.foo();
>$ : { foo(): void; }
>foo : () => void
=== /types/jquery/index.d.ts ===
=== /src/types/jquery/index.d.ts ===
// We can find typings in the ./types folder

View File

@ -1,11 +1,11 @@
=== /consumer.ts ===
=== /foo/consumer.ts ===
/// <reference types="jquery" />
$.foo();
>$.foo : Symbol(foo, Decl(jquery.d.ts, 0, 16))
>$ : Symbol($, Decl(jquery.d.ts, 0, 11))
>foo : Symbol(foo, Decl(jquery.d.ts, 0, 16))
=== /types/jquery/jquery.d.ts ===
=== /foo/types/jquery/jquery.d.ts ===
declare var $: { foo(): void };
>$ : Symbol($, Decl(jquery.d.ts, 0, 11))
>foo : Symbol(foo, Decl(jquery.d.ts, 0, 16))

View File

@ -1,8 +1,14 @@
[
"======== Resolving type reference directive 'jquery', containing file '/consumer.ts', root directory '/'. ========",
"Resolving with primary search path '/types/'",
"Found 'package.json' at '/types/jquery/package.json'.",
"'package.json' has 'typings' field 'jquery.d.ts' that references '/types/jquery/jquery.d.ts'.",
"File '/types/jquery/jquery.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'jquery' was successfully resolved to '/types/jquery/jquery.d.ts', primary: true. ========"
"======== Resolving type reference directive 'jquery', containing file '/foo/consumer.ts', root directory './types'. ========",
"Resolving with primary search path './types'",
"Found 'package.json' at './types/jquery/package.json'.",
"'package.json' has 'typings' field 'jquery.d.ts' that references 'types/jquery/jquery.d.ts'.",
"File 'types/jquery/jquery.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'jquery' was successfully resolved to 'types/jquery/jquery.d.ts', primary: true. ========",
"======== Resolving type reference directive 'jquery', containing file '/foo/__inferred type names__.ts', root directory './types'. ========",
"Resolving with primary search path './types'",
"Found 'package.json' at './types/jquery/package.json'.",
"'package.json' has 'typings' field 'jquery.d.ts' that references 'types/jquery/jquery.d.ts'.",
"File 'types/jquery/jquery.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'jquery' was successfully resolved to 'types/jquery/jquery.d.ts', primary: true. ========"
]

View File

@ -1,4 +1,4 @@
=== /consumer.ts ===
=== /foo/consumer.ts ===
/// <reference types="jquery" />
$.foo();
>$.foo() : void
@ -6,7 +6,7 @@ $.foo();
>$ : { foo(): void; }
>foo : () => void
=== /types/jquery/jquery.d.ts ===
=== /foo/types/jquery/jquery.d.ts ===
declare var $: { foo(): void };
>$ : { foo(): void; }
>foo : () => void

View File

@ -1,12 +1,6 @@
[
"======== Resolving type reference directive 'jquery', containing file '/a/b/consumer.ts', root directory '/'. ========",
"Resolving with primary search path '/types/'",
"File '/types/jquery/package.json' does not exist.",
"File '/types/jquery/index.d.ts' does not exist.",
"Resolving with primary search path '/node_modules/'",
"File '/node_modules/jquery/package.json' does not exist.",
"File '/node_modules/jquery/index.d.ts' does not exist.",
"Resolving with primary search path '/node_modules/@types/'",
"======== Resolving type reference directive 'jquery', containing file '/a/b/consumer.ts', root directory '/node_modules/@types'. ========",
"Resolving with primary search path '/node_modules/@types'",
"File '/node_modules/@types/jquery/package.json' does not exist.",
"File '/node_modules/@types/jquery/index.d.ts' does not exist.",
"Looking up in 'node_modules' folder, initial location '/a/b'",

View File

@ -1,12 +1,6 @@
[
"======== Resolving type reference directive 'jquery', containing file '/a/b/consumer.ts', root directory '/'. ========",
"Resolving with primary search path '/types/'",
"File '/types/jquery/package.json' does not exist.",
"File '/types/jquery/index.d.ts' does not exist.",
"Resolving with primary search path '/node_modules/'",
"File '/node_modules/jquery/package.json' does not exist.",
"File '/node_modules/jquery/index.d.ts' does not exist.",
"Resolving with primary search path '/node_modules/@types/'",
"======== Resolving type reference directive 'jquery', containing file '/a/b/consumer.ts', root directory '/node_modules/@types'. ========",
"Resolving with primary search path '/node_modules/@types'",
"File '/node_modules/@types/jquery/package.json' does not exist.",
"File '/node_modules/@types/jquery/index.d.ts' does not exist.",
"Looking up in 'node_modules' folder, initial location '/a/b'",

View File

@ -1,6 +1,6 @@
[
"======== Resolving type reference directive 'jquery', containing file not set, root directory '/a'. ========",
"Resolving with primary search path '/a/types/'",
"======== Resolving type reference directive 'jquery', containing file '/a/b/__inferred type names__.ts', root directory '/a/types'. ========",
"Resolving with primary search path '/a/types'",
"File '/a/types/jquery/package.json' does not exist.",
"File '/a/types/jquery/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'jquery' was successfully resolved to '/a/types/jquery/index.d.ts', primary: true. ========"

View File

@ -1,6 +1,6 @@
[
"======== Resolving type reference directive 'jquery', containing file not set, root directory '/a'. ========",
"Resolving with primary search path '/a/types/'",
"======== Resolving type reference directive 'jquery', containing file '/a/b/__inferred type names__.ts', root directory '/a/types'. ========",
"Resolving with primary search path '/a/types'",
"File '/a/types/jquery/package.json' does not exist.",
"File '/a/types/jquery/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'jquery' was successfully resolved to '/a/types/jquery/index.d.ts', primary: true. ========"

View File

@ -1,15 +1,15 @@
error TS2304: Cannot find name 'jquery'.
/a/b/consumer.ts(1,1): error TS2304: Cannot find name '$'.
/a/b/consumer.ts(2,1): error TS2304: Cannot find name '$2'.
!!! error TS2304: Cannot find name 'jquery'.
==== /a/b/consumer.ts (1 errors) ====
$.foo();
~
!!! error TS2304: Cannot find name '$'.
$.foo(); // should OK
$2.foo(); // should error
~~
!!! error TS2304: Cannot find name '$2'.
==== /a/types/jquery/index.d.ts (0 errors) ====
declare var $: { foo(): void };
==== /a/types/jquery2/index.d.ts (0 errors) ====
declare var $2: { foo(): void };

View File

@ -3,11 +3,14 @@
//// [index.d.ts]
declare var $: { foo(): void };
//// [index.d.ts]
declare var $2: { foo(): void };
//// [consumer.ts]
$.foo();
$.foo(); // should OK
$2.foo(); // should error
//// [consumer.js]
$.foo();
$.foo(); // should OK
$2.foo(); // should error

View File

@ -1,24 +1,7 @@
[
"======== Resolving type reference directive 'jquery', containing file not set, root directory '/'. ========",
"Resolving with primary search path '/types/'",
"File '/types/jquery/package.json' does not exist.",
"File '/types/jquery/index.d.ts' does not exist.",
"Resolving with primary search path '/node_modules/'",
"File '/node_modules/jquery/package.json' does not exist.",
"File '/node_modules/jquery/index.d.ts' does not exist.",
"Resolving with primary search path '/node_modules/@types/'",
"File '/node_modules/@types/jquery/package.json' does not exist.",
"File '/node_modules/@types/jquery/index.d.ts' does not exist.",
"Looking up in 'node_modules' folder, initial location '/'",
"File '/node_modules/jquery.ts' does not exist.",
"File '/node_modules/jquery.d.ts' does not exist.",
"File '/node_modules/jquery/package.json' does not exist.",
"File '/node_modules/jquery/index.ts' does not exist.",
"File '/node_modules/jquery/index.d.ts' does not exist.",
"File '/node_modules/@types/jquery.ts' does not exist.",
"File '/node_modules/@types/jquery.d.ts' does not exist.",
"File '/node_modules/@types/jquery/package.json' does not exist.",
"File '/node_modules/@types/jquery/index.ts' does not exist.",
"File '/node_modules/@types/jquery/index.d.ts' does not exist.",
"======== Type reference directive 'jquery' was not resolved. ========"
"======== Resolving type reference directive 'jquery', containing file '/a/b/__inferred type names__.ts', root directory 'types'. ========",
"Resolving with primary search path 'types'",
"File 'types/jquery/package.json' does not exist.",
"File 'types/jquery/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'jquery' was successfully resolved to 'types/jquery/index.d.ts', primary: true. ========"
]

View File

@ -1,6 +1,12 @@
[
"======== Resolving type reference directive 'jquery', containing file '/consumer.ts', root directory '/'. ========",
"Resolving with primary search path '/types/'",
"======== Resolving type reference directive 'jquery', containing file '/consumer.ts', root directory '/types'. ========",
"Resolving with primary search path '/types'",
"Found 'package.json' at '/types/jquery/package.json'.",
"'package.json' has 'types' field 'jquery.d.ts' that references '/types/jquery/jquery.d.ts'.",
"File '/types/jquery/jquery.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'jquery' was successfully resolved to '/types/jquery/jquery.d.ts', primary: true. ========",
"======== Resolving type reference directive 'jquery', containing file '/__inferred type names__.ts', root directory '/types'. ========",
"Resolving with primary search path '/types'",
"Found 'package.json' at '/types/jquery/package.json'.",
"'package.json' has 'types' field 'jquery.d.ts' that references '/types/jquery/jquery.d.ts'.",
"File '/types/jquery/jquery.d.ts' exist - use it as a name resolution result.",

View File

@ -1,10 +1,13 @@
[
"======== Resolving type reference directive 'jquery', containing file '/src/consumer.ts', root directory '/src'. ========",
"Resolving with primary search path '/src/types/'",
"File '/src/types/jquery/package.json' does not exist.",
"File '/src/types/jquery/index.d.ts' does not exist.",
"Resolving with primary search path '/src/node_modules/'",
"======== Resolving type reference directive 'jquery', containing file '/src/consumer.ts', root directory '/src/node_modules/@types'. ========",
"Resolving with primary search path '/src/node_modules/@types'",
"File '/src/node_modules/@types/jquery/package.json' does not exist.",
"File '/src/node_modules/@types/jquery/index.d.ts' does not exist.",
"Looking up in 'node_modules' folder, initial location '/src'",
"File '/src/node_modules/jquery.ts' does not exist.",
"File '/src/node_modules/jquery.d.ts' does not exist.",
"File '/src/node_modules/jquery/package.json' does not exist.",
"File '/src/node_modules/jquery/index.ts' does not exist.",
"File '/src/node_modules/jquery/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'jquery' was successfully resolved to '/src/node_modules/jquery/index.d.ts', primary: true. ========"
"======== Type reference directive 'jquery' was successfully resolved to '/src/node_modules/jquery/index.d.ts', primary: false. ========"
]

View File

@ -1,14 +1,8 @@
[
"======== Resolving type reference directive 'foo', containing file '/src/root.ts', root directory '/src'. ========",
"Resolving with primary search path '/src/types/'",
"File '/src/types/foo/package.json' does not exist.",
"File '/src/types/foo/index.d.ts' does not exist.",
"Resolving with primary search path '/src/node_modules/'",
"File '/src/node_modules/foo/package.json' does not exist.",
"File '/src/node_modules/foo/index.d.ts' does not exist.",
"Resolving with primary search path '/src/node_modules/@types/'",
"File '/src/node_modules/@types/foo/package.json' does not exist.",
"File '/src/node_modules/@types/foo/index.d.ts' does not exist.",
"Resolving with primary search path '/src'",
"File '/src/foo/package.json' does not exist.",
"File '/src/foo/index.d.ts' does not exist.",
"Looking up in 'node_modules' folder, initial location '/src'",
"File '/src/node_modules/foo.ts' does not exist.",
"File '/src/node_modules/foo.d.ts' does not exist.",
@ -27,15 +21,9 @@
"File '/node_modules/foo/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'foo' was successfully resolved to '/node_modules/foo/index.d.ts', primary: false. ========",
"======== Resolving type reference directive 'bar', containing file '/src/root.ts', root directory '/src'. ========",
"Resolving with primary search path '/src/types/'",
"File '/src/types/bar/package.json' does not exist.",
"File '/src/types/bar/index.d.ts' does not exist.",
"Resolving with primary search path '/src/node_modules/'",
"File '/src/node_modules/bar/package.json' does not exist.",
"File '/src/node_modules/bar/index.d.ts' does not exist.",
"Resolving with primary search path '/src/node_modules/@types/'",
"File '/src/node_modules/@types/bar/package.json' does not exist.",
"File '/src/node_modules/@types/bar/index.d.ts' does not exist.",
"Resolving with primary search path '/src'",
"File '/src/bar/package.json' does not exist.",
"File '/src/bar/index.d.ts' does not exist.",
"Looking up in 'node_modules' folder, initial location '/src'",
"File '/src/node_modules/bar.ts' does not exist.",
"File '/src/node_modules/bar.d.ts' does not exist.",
@ -54,15 +42,9 @@
"File '/node_modules/bar/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'bar' was successfully resolved to '/node_modules/bar/index.d.ts', primary: false. ========",
"======== Resolving type reference directive 'alpha', containing file '/node_modules/foo/index.d.ts', root directory '/src'. ========",
"Resolving with primary search path '/src/types/'",
"File '/src/types/alpha/package.json' does not exist.",
"File '/src/types/alpha/index.d.ts' does not exist.",
"Resolving with primary search path '/src/node_modules/'",
"File '/src/node_modules/alpha/package.json' does not exist.",
"File '/src/node_modules/alpha/index.d.ts' does not exist.",
"Resolving with primary search path '/src/node_modules/@types/'",
"File '/src/node_modules/@types/alpha/package.json' does not exist.",
"File '/src/node_modules/@types/alpha/index.d.ts' does not exist.",
"Resolving with primary search path '/src'",
"File '/src/alpha/package.json' does not exist.",
"File '/src/alpha/index.d.ts' does not exist.",
"Looking up in 'node_modules' folder, initial location '/node_modules/foo'",
"File '/node_modules/foo/node_modules/alpha.ts' does not exist.",
"File '/node_modules/foo/node_modules/alpha.d.ts' does not exist.",
@ -71,15 +53,9 @@
"File '/node_modules/foo/node_modules/alpha/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'alpha' was successfully resolved to '/node_modules/foo/node_modules/alpha/index.d.ts', primary: false. ========",
"======== Resolving type reference directive 'alpha', containing file '/node_modules/bar/index.d.ts', root directory '/src'. ========",
"Resolving with primary search path '/src/types/'",
"File '/src/types/alpha/package.json' does not exist.",
"File '/src/types/alpha/index.d.ts' does not exist.",
"Resolving with primary search path '/src/node_modules/'",
"File '/src/node_modules/alpha/package.json' does not exist.",
"File '/src/node_modules/alpha/index.d.ts' does not exist.",
"Resolving with primary search path '/src/node_modules/@types/'",
"File '/src/node_modules/@types/alpha/package.json' does not exist.",
"File '/src/node_modules/@types/alpha/index.d.ts' does not exist.",
"Resolving with primary search path '/src'",
"File '/src/alpha/package.json' does not exist.",
"File '/src/alpha/index.d.ts' does not exist.",
"Looking up in 'node_modules' folder, initial location '/node_modules/bar'",
"File '/node_modules/bar/node_modules/alpha.ts' does not exist.",
"File '/node_modules/bar/node_modules/alpha.d.ts' does not exist.",

View File

@ -1,30 +1,50 @@
[
"======== Resolving type reference directive 'foo', containing file '/src/root.ts', root directory '/'. ========",
"Resolving with primary search path '/types/'",
"File '/types/foo/package.json' does not exist.",
"File '/types/foo/index.d.ts' does not exist.",
"Resolving with primary search path '/node_modules/'",
"======== Resolving type reference directive 'foo', containing file '/src/root.ts', root directory 'types'. ========",
"Resolving with primary search path 'types'",
"File 'types/foo/package.json' does not exist.",
"File 'types/foo/index.d.ts' does not exist.",
"Looking up in 'node_modules' folder, initial location '/src'",
"File '/src/node_modules/foo.ts' does not exist.",
"File '/src/node_modules/foo.d.ts' does not exist.",
"File '/src/node_modules/foo/package.json' does not exist.",
"File '/src/node_modules/foo/index.ts' does not exist.",
"File '/src/node_modules/foo/index.d.ts' does not exist.",
"File '/src/node_modules/@types/foo.ts' does not exist.",
"File '/src/node_modules/@types/foo.d.ts' does not exist.",
"File '/src/node_modules/@types/foo/package.json' does not exist.",
"File '/src/node_modules/@types/foo/index.ts' does not exist.",
"File '/src/node_modules/@types/foo/index.d.ts' does not exist.",
"File '/node_modules/foo.ts' does not exist.",
"File '/node_modules/foo.d.ts' does not exist.",
"File '/node_modules/foo/package.json' does not exist.",
"File '/node_modules/foo/index.ts' does not exist.",
"File '/node_modules/foo/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'foo' was successfully resolved to '/node_modules/foo/index.d.ts', primary: true. ========",
"======== Resolving type reference directive 'bar', containing file '/src/root.ts', root directory '/'. ========",
"Resolving with primary search path '/types/'",
"File '/types/bar/package.json' does not exist.",
"File '/types/bar/index.d.ts' does not exist.",
"Resolving with primary search path '/node_modules/'",
"======== Type reference directive 'foo' was successfully resolved to '/node_modules/foo/index.d.ts', primary: false. ========",
"======== Resolving type reference directive 'bar', containing file '/src/root.ts', root directory 'types'. ========",
"Resolving with primary search path 'types'",
"File 'types/bar/package.json' does not exist.",
"File 'types/bar/index.d.ts' does not exist.",
"Looking up in 'node_modules' folder, initial location '/src'",
"File '/src/node_modules/bar.ts' does not exist.",
"File '/src/node_modules/bar.d.ts' does not exist.",
"File '/src/node_modules/bar/package.json' does not exist.",
"File '/src/node_modules/bar/index.ts' does not exist.",
"File '/src/node_modules/bar/index.d.ts' does not exist.",
"File '/src/node_modules/@types/bar.ts' does not exist.",
"File '/src/node_modules/@types/bar.d.ts' does not exist.",
"File '/src/node_modules/@types/bar/package.json' does not exist.",
"File '/src/node_modules/@types/bar/index.ts' does not exist.",
"File '/src/node_modules/@types/bar/index.d.ts' does not exist.",
"File '/node_modules/bar.ts' does not exist.",
"File '/node_modules/bar.d.ts' does not exist.",
"File '/node_modules/bar/package.json' does not exist.",
"File '/node_modules/bar/index.ts' does not exist.",
"File '/node_modules/bar/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'bar' was successfully resolved to '/node_modules/bar/index.d.ts', primary: true. ========",
"======== Resolving type reference directive 'alpha', containing file '/node_modules/foo/index.d.ts', root directory '/'. ========",
"Resolving with primary search path '/types/'",
"File '/types/alpha/package.json' does not exist.",
"File '/types/alpha/index.d.ts' does not exist.",
"Resolving with primary search path '/node_modules/'",
"File '/node_modules/alpha/package.json' does not exist.",
"File '/node_modules/alpha/index.d.ts' does not exist.",
"Resolving with primary search path '/node_modules/@types/'",
"File '/node_modules/@types/alpha/package.json' does not exist.",
"File '/node_modules/@types/alpha/index.d.ts' does not exist.",
"======== Type reference directive 'bar' was successfully resolved to '/node_modules/bar/index.d.ts', primary: false. ========",
"======== Resolving type reference directive 'alpha', containing file '/node_modules/foo/index.d.ts', root directory 'types'. ========",
"Resolving with primary search path 'types'",
"File 'types/alpha/package.json' does not exist.",
"File 'types/alpha/index.d.ts' does not exist.",
"Looking up in 'node_modules' folder, initial location '/node_modules/foo'",
"File '/node_modules/foo/node_modules/alpha.ts' does not exist.",
"File '/node_modules/foo/node_modules/alpha.d.ts' does not exist.",
@ -32,16 +52,10 @@
"File '/node_modules/foo/node_modules/alpha/index.ts' does not exist.",
"File '/node_modules/foo/node_modules/alpha/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'alpha' was successfully resolved to '/node_modules/foo/node_modules/alpha/index.d.ts', primary: false. ========",
"======== Resolving type reference directive 'alpha', containing file '/node_modules/bar/index.d.ts', root directory '/'. ========",
"Resolving with primary search path '/types/'",
"File '/types/alpha/package.json' does not exist.",
"File '/types/alpha/index.d.ts' does not exist.",
"Resolving with primary search path '/node_modules/'",
"File '/node_modules/alpha/package.json' does not exist.",
"File '/node_modules/alpha/index.d.ts' does not exist.",
"Resolving with primary search path '/node_modules/@types/'",
"File '/node_modules/@types/alpha/package.json' does not exist.",
"File '/node_modules/@types/alpha/index.d.ts' does not exist.",
"======== Resolving type reference directive 'alpha', containing file '/node_modules/bar/index.d.ts', root directory 'types'. ========",
"Resolving with primary search path 'types'",
"File 'types/alpha/package.json' does not exist.",
"File 'types/alpha/index.d.ts' does not exist.",
"Looking up in 'node_modules' folder, initial location '/node_modules/bar'",
"File '/node_modules/bar/node_modules/alpha.ts' does not exist.",
"File '/node_modules/bar/node_modules/alpha.d.ts' does not exist.",

View File

@ -6,7 +6,7 @@ var x: string = alpha.a;
>alpha : Symbol(alpha, Decl(index.d.ts, 3, 11))
>a : Symbol(a, Decl(index.d.ts, 3, 20))
=== /types/alpha/index.d.ts ===
=== /node_modules/@types/alpha/index.d.ts ===
// The primary lookup folder is relative to tsconfig.json, if present

View File

@ -1,7 +1,12 @@
[
"======== Resolving type reference directive 'alpha', containing file '/src/foo.ts', root directory '/'. ========",
"Resolving with primary search path '/types/'",
"File '/types/alpha/package.json' does not exist.",
"File '/types/alpha/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'alpha' was successfully resolved to '/types/alpha/index.d.ts', primary: true. ========"
"======== Resolving type reference directive 'alpha', containing file '/src/foo.ts', root directory '/node_modules/@types'. ========",
"Resolving with primary search path '/node_modules/@types'",
"File '/node_modules/@types/alpha/package.json' does not exist.",
"File '/node_modules/@types/alpha/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'alpha' was successfully resolved to '/node_modules/@types/alpha/index.d.ts', primary: true. ========",
"======== Resolving type reference directive 'alpha', containing file '/src/__inferred type names__.ts', root directory '/node_modules/@types'. ========",
"Resolving with primary search path '/node_modules/@types'",
"File '/node_modules/@types/alpha/package.json' does not exist.",
"File '/node_modules/@types/alpha/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'alpha' was successfully resolved to '/node_modules/@types/alpha/index.d.ts', primary: true. ========"
]

View File

@ -6,7 +6,7 @@ var x: string = alpha.a;
>alpha : { a: string; }
>a : string
=== /types/alpha/index.d.ts ===
=== /node_modules/@types/alpha/index.d.ts ===
// The primary lookup folder is relative to tsconfig.json, if present

View File

@ -1,12 +1,6 @@
[
"======== Resolving type reference directive 'jquery', containing file '/src/consumer.ts', root directory '/'. ========",
"Resolving with primary search path '/types/'",
"File '/types/jquery/package.json' does not exist.",
"File '/types/jquery/index.d.ts' does not exist.",
"Resolving with primary search path '/node_modules/'",
"File '/node_modules/jquery/package.json' does not exist.",
"File '/node_modules/jquery/index.d.ts' does not exist.",
"Resolving with primary search path '/node_modules/@types/'",
"======== Resolving type reference directive 'jquery', containing file '/src/consumer.ts', root directory '/node_modules/@types'. ========",
"Resolving with primary search path '/node_modules/@types'",
"File '/node_modules/@types/jquery/package.json' does not exist.",
"File '/node_modules/@types/jquery/index.d.ts' does not exist.",
"Looking up in 'node_modules' folder, initial location '/src'",

View File

@ -1,4 +1,4 @@
=== /foo.ts ===
=== /test/foo.ts ===
/// <reference types="alpha" />
/// <reference types="beta" />
var x: string = alpha.a + beta.b;
@ -11,7 +11,7 @@ var x: string = alpha.a + beta.b;
>b : Symbol(b, Decl(index.d.ts, 1, 19))
=== /types/alpha/index.d.ts ===
=== /test/types/alpha/index.d.ts ===
// Don't crash in circular library reference situations
@ -20,7 +20,7 @@ declare var alpha: { a: string };
>alpha : Symbol(alpha, Decl(index.d.ts, 4, 11))
>a : Symbol(a, Decl(index.d.ts, 4, 20))
=== /types/beta/index.d.ts ===
=== /test/types/beta/index.d.ts ===
/// <reference types="alpha" />
declare var beta: { b: string };
>beta : Symbol(beta, Decl(index.d.ts, 1, 11))

View File

@ -1,22 +1,32 @@
[
"======== Resolving type reference directive 'alpha', containing file '/foo.ts', root directory '/'. ========",
"Resolving with primary search path '/types/'",
"File '/types/alpha/package.json' does not exist.",
"File '/types/alpha/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'alpha' was successfully resolved to '/types/alpha/index.d.ts', primary: true. ========",
"======== Resolving type reference directive 'beta', containing file '/foo.ts', root directory '/'. ========",
"Resolving with primary search path '/types/'",
"File '/types/beta/package.json' does not exist.",
"File '/types/beta/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'beta' was successfully resolved to '/types/beta/index.d.ts', primary: true. ========",
"======== Resolving type reference directive 'beta', containing file '/types/alpha/index.d.ts', root directory '/'. ========",
"Resolving with primary search path '/types/'",
"File '/types/beta/package.json' does not exist.",
"File '/types/beta/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'beta' was successfully resolved to '/types/beta/index.d.ts', primary: true. ========",
"======== Resolving type reference directive 'alpha', containing file '/types/beta/index.d.ts', root directory '/'. ========",
"Resolving with primary search path '/types/'",
"File '/types/alpha/package.json' does not exist.",
"File '/types/alpha/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'alpha' was successfully resolved to '/types/alpha/index.d.ts', primary: true. ========"
"======== Resolving type reference directive 'alpha', containing file '/test/foo.ts', root directory '/test/types'. ========",
"Resolving with primary search path '/test/types'",
"File '/test/types/alpha/package.json' does not exist.",
"File '/test/types/alpha/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'alpha' was successfully resolved to '/test/types/alpha/index.d.ts', primary: true. ========",
"======== Resolving type reference directive 'beta', containing file '/test/foo.ts', root directory '/test/types'. ========",
"Resolving with primary search path '/test/types'",
"File '/test/types/beta/package.json' does not exist.",
"File '/test/types/beta/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'beta' was successfully resolved to '/test/types/beta/index.d.ts', primary: true. ========",
"======== Resolving type reference directive 'beta', containing file '/test/types/alpha/index.d.ts', root directory '/test/types'. ========",
"Resolving with primary search path '/test/types'",
"File '/test/types/beta/package.json' does not exist.",
"File '/test/types/beta/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'beta' was successfully resolved to '/test/types/beta/index.d.ts', primary: true. ========",
"======== Resolving type reference directive 'alpha', containing file '/test/types/beta/index.d.ts', root directory '/test/types'. ========",
"Resolving with primary search path '/test/types'",
"File '/test/types/alpha/package.json' does not exist.",
"File '/test/types/alpha/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'alpha' was successfully resolved to '/test/types/alpha/index.d.ts', primary: true. ========",
"======== Resolving type reference directive 'alpha', containing file '/test/__inferred type names__.ts', root directory '/test/types'. ========",
"Resolving with primary search path '/test/types'",
"File '/test/types/alpha/package.json' does not exist.",
"File '/test/types/alpha/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'alpha' was successfully resolved to '/test/types/alpha/index.d.ts', primary: true. ========",
"======== Resolving type reference directive 'beta', containing file '/test/__inferred type names__.ts', root directory '/test/types'. ========",
"Resolving with primary search path '/test/types'",
"File '/test/types/beta/package.json' does not exist.",
"File '/test/types/beta/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'beta' was successfully resolved to '/test/types/beta/index.d.ts', primary: true. ========"
]

View File

@ -1,4 +1,4 @@
=== /foo.ts ===
=== /test/foo.ts ===
/// <reference types="alpha" />
/// <reference types="beta" />
var x: string = alpha.a + beta.b;
@ -12,7 +12,7 @@ var x: string = alpha.a + beta.b;
>b : string
=== /types/alpha/index.d.ts ===
=== /test/types/alpha/index.d.ts ===
// Don't crash in circular library reference situations
@ -21,7 +21,7 @@ declare var alpha: { a: string };
>alpha : { a: string; }
>a : string
=== /types/beta/index.d.ts ===
=== /test/types/beta/index.d.ts ===
/// <reference types="alpha" />
declare var beta: { b: string };
>beta : { b: string; }

View File

@ -1,16 +0,0 @@
//// [tests/cases/conformance/references/library-reference-9.ts] ////
//// [index.d.ts]
// Use types search path
declare var alpha: { a: string };
//// [foo.ts]
/// <reference types="alpha" />
var x: string = alpha.a;
//// [foo.js]
/// <reference types="alpha" />
var x = alpha.a;

View File

@ -1,16 +0,0 @@
=== /base/src/foo.ts ===
/// <reference types="alpha" />
var x: string = alpha.a;
>x : Symbol(x, Decl(foo.ts, 1, 3))
>alpha.a : Symbol(a, Decl(index.d.ts, 3, 20))
>alpha : Symbol(alpha, Decl(index.d.ts, 3, 11))
>a : Symbol(a, Decl(index.d.ts, 3, 20))
=== /share/typelib/alpha/index.d.ts ===
// Use types search path
declare var alpha: { a: string };
>alpha : Symbol(alpha, Decl(index.d.ts, 3, 11))
>a : Symbol(a, Decl(index.d.ts, 3, 20))

View File

@ -1,7 +0,0 @@
[
"======== Resolving type reference directive 'alpha', containing file '/base/src/foo.ts', root directory '/'. ========",
"Resolving with primary search path '/share/typelib'",
"File '/share/typelib/alpha/package.json' does not exist.",
"File '/share/typelib/alpha/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'alpha' was successfully resolved to '/share/typelib/alpha/index.d.ts', primary: true. ========"
]

View File

@ -1,16 +0,0 @@
=== /base/src/foo.ts ===
/// <reference types="alpha" />
var x: string = alpha.a;
>x : string
>alpha.a : string
>alpha : { a: string; }
>a : string
=== /share/typelib/alpha/index.d.ts ===
// Use types search path
declare var alpha: { a: string };
>alpha : { a: string; }
>a : string

View File

@ -3,11 +3,13 @@
"Module resolution kind is not specified, using 'NodeJs'.",
"Loading module as file / folder, candidate module location '/src/a'.",
"File '/src/a.ts' exist - use it as a name resolution result.",
"Resolving real path for '/src/a.ts', result '/src/a.ts'",
"======== Module name './a' was successfully resolved to '/src/a.ts'. ========",
"======== Resolving module './a.ts' from '/src/c.ts'. ========",
"Module resolution kind is not specified, using 'NodeJs'.",
"Loading module as file / folder, candidate module location '/src/a.ts'.",
"File '/src/a.ts' exist - use it as a name resolution result.",
"Resolving real path for '/src/a.ts', result '/src/a.ts'",
"======== Module name './a.ts' was successfully resolved to '/src/a.ts'. ========",
"======== Resolving module './a.js' from '/src/d.ts'. ========",
"Module resolution kind is not specified, using 'NodeJs'.",
@ -17,6 +19,7 @@
"File '/src/a.js.d.ts' does not exist.",
"File name '/src/a.js' has a '.js' extension - stripping it",
"File '/src/a.ts' exist - use it as a name resolution result.",
"Resolving real path for '/src/a.ts', result '/src/a.ts'",
"======== Module name './a.js' was successfully resolved to '/src/a.ts'. ========",
"======== Resolving module './jquery.js' from '/src/jquery_user_1.ts'. ========",
"Module resolution kind is not specified, using 'NodeJs'.",
@ -28,5 +31,6 @@
"File '/src/jquery.ts' does not exist.",
"File '/src/jquery.tsx' does not exist.",
"File '/src/jquery.d.ts' exist - use it as a name resolution result.",
"Resolving real path for '/src/jquery.d.ts', result '/src/jquery.d.ts'",
"======== Module name './jquery.js' was successfully resolved to '/src/jquery.d.ts'. ========"
]

View File

@ -0,0 +1,21 @@
/src/library-b/index.ts(1,23): error TS2307: Cannot find module 'library-a'.
==== /src/app.ts (0 errors) ====
import { MyClass } from "./library-a";
import { MyClass2 } from "./library-b";
let x: MyClass;
let y: MyClass2;
x = y;
y = x;
==== /src/library-a/index.ts (0 errors) ====
export class MyClass{}
==== /src/library-b/index.ts (1 errors) ====
import {MyClass} from "library-a";
~~~~~~~~~~~
!!! error TS2307: Cannot find module 'library-a'.
export { MyClass as MyClass2 }

View File

@ -1,36 +0,0 @@
=== /src/app.ts ===
import { MyClass } from "./library-a";
>MyClass : Symbol(MyClass, Decl(app.ts, 0, 8))
import { MyClass2 } from "./library-b";
>MyClass2 : Symbol(MyClass2, Decl(app.ts, 1, 8))
let x: MyClass;
>x : Symbol(x, Decl(app.ts, 3, 3))
>MyClass : Symbol(MyClass, Decl(app.ts, 0, 8))
let y: MyClass2;
>y : Symbol(y, Decl(app.ts, 4, 3))
>MyClass2 : Symbol(MyClass2, Decl(app.ts, 1, 8))
x = y;
>x : Symbol(x, Decl(app.ts, 3, 3))
>y : Symbol(y, Decl(app.ts, 4, 3))
y = x;
>y : Symbol(y, Decl(app.ts, 4, 3))
>x : Symbol(x, Decl(app.ts, 3, 3))
=== /src/library-a/index.ts ===
export class MyClass{}
>MyClass : Symbol(MyClass, Decl(index.ts, 0, 0))
=== /src/library-b/index.ts ===
import {MyClass} from "library-a";
>MyClass : Symbol(MyClass, Decl(index.ts, 0, 8))
export { MyClass as MyClass2 }
>MyClass : Symbol(MyClass2, Decl(index.ts, 1, 8))
>MyClass2 : Symbol(MyClass2, Decl(index.ts, 1, 8))

View File

@ -26,7 +26,43 @@
"File '/src/library-b/node_modules/library-a.tsx' does not exist.",
"File '/src/library-b/node_modules/library-a.d.ts' does not exist.",
"File '/src/library-b/node_modules/library-a/package.json' does not exist.",
"File '/src/library-b/node_modules/library-a/index.ts' exist - use it as a name resolution result.",
"Resolving real path for '/src/library-b/node_modules/library-a/index.ts', result '/src/library-a/index.ts'",
"======== Module name 'library-a' was successfully resolved to '/src/library-a/index.ts'. ========"
"File '/src/library-b/node_modules/library-a/index.ts' does not exist.",
"File '/src/library-b/node_modules/library-a/index.tsx' does not exist.",
"File '/src/library-b/node_modules/library-a/index.d.ts' does not exist.",
"File '/src/library-b/node_modules/@types/library-a.ts' does not exist.",
"File '/src/library-b/node_modules/@types/library-a.tsx' does not exist.",
"File '/src/library-b/node_modules/@types/library-a.d.ts' does not exist.",
"File '/src/library-b/node_modules/@types/library-a/package.json' does not exist.",
"File '/src/library-b/node_modules/@types/library-a/index.ts' does not exist.",
"File '/src/library-b/node_modules/@types/library-a/index.tsx' does not exist.",
"File '/src/library-b/node_modules/@types/library-a/index.d.ts' does not exist.",
"File '/src/node_modules/library-a.ts' does not exist.",
"File '/src/node_modules/library-a.tsx' does not exist.",
"File '/src/node_modules/library-a.d.ts' does not exist.",
"File '/src/node_modules/library-a/package.json' does not exist.",
"File '/src/node_modules/library-a/index.ts' does not exist.",
"File '/src/node_modules/library-a/index.tsx' does not exist.",
"File '/src/node_modules/library-a/index.d.ts' does not exist.",
"File '/src/node_modules/@types/library-a.ts' does not exist.",
"File '/src/node_modules/@types/library-a.tsx' does not exist.",
"File '/src/node_modules/@types/library-a.d.ts' does not exist.",
"File '/src/node_modules/@types/library-a/package.json' does not exist.",
"File '/src/node_modules/@types/library-a/index.ts' does not exist.",
"File '/src/node_modules/@types/library-a/index.tsx' does not exist.",
"File '/src/node_modules/@types/library-a/index.d.ts' does not exist.",
"File '/node_modules/library-a.ts' does not exist.",
"File '/node_modules/library-a.tsx' does not exist.",
"File '/node_modules/library-a.d.ts' does not exist.",
"File '/node_modules/library-a/package.json' does not exist.",
"File '/node_modules/library-a/index.ts' does not exist.",
"File '/node_modules/library-a/index.tsx' does not exist.",
"File '/node_modules/library-a/index.d.ts' does not exist.",
"File '/node_modules/@types/library-a.ts' does not exist.",
"File '/node_modules/@types/library-a.tsx' does not exist.",
"File '/node_modules/@types/library-a.d.ts' does not exist.",
"File '/node_modules/@types/library-a/package.json' does not exist.",
"File '/node_modules/@types/library-a/index.ts' does not exist.",
"File '/node_modules/@types/library-a/index.tsx' does not exist.",
"File '/node_modules/@types/library-a/index.d.ts' does not exist.",
"======== Module name 'library-a' was not resolved. ========"
]

View File

@ -1,38 +0,0 @@
=== /src/app.ts ===
import { MyClass } from "./library-a";
>MyClass : typeof MyClass
import { MyClass2 } from "./library-b";
>MyClass2 : typeof MyClass
let x: MyClass;
>x : MyClass
>MyClass : MyClass
let y: MyClass2;
>y : MyClass
>MyClass2 : MyClass
x = y;
>x = y : MyClass
>x : MyClass
>y : MyClass
y = x;
>y = x : MyClass
>y : MyClass
>x : MyClass
=== /src/library-a/index.ts ===
export class MyClass{}
>MyClass : MyClass
=== /src/library-b/index.ts ===
import {MyClass} from "library-a";
>MyClass : typeof MyClass
export { MyClass as MyClass2 }
>MyClass : typeof MyClass
>MyClass2 : typeof MyClass

View File

@ -5,11 +5,13 @@
"Resolving module name 'folder2/file2' relative to base url 'c:/root' - 'c:/root/folder2/file2'.",
"Loading module as file / folder, candidate module location 'c:/root/folder2/file2'.",
"File 'c:/root/folder2/file2.ts' exist - use it as a name resolution result.",
"Resolving real path for 'c:/root/folder2/file2.ts', result 'c:/root/folder2/file2.ts'",
"======== Module name 'folder2/file2' was successfully resolved to 'c:/root/folder2/file2.ts'. ========",
"======== Resolving module './file3' from 'c:/root/folder2/file2.ts'. ========",
"Explicitly specified module resolution kind: 'NodeJs'.",
"Loading module as file / folder, candidate module location 'c:/root/folder2/file3'.",
"File 'c:/root/folder2/file3.ts' exist - use it as a name resolution result.",
"Resolving real path for 'c:/root/folder2/file3.ts', result 'c:/root/folder2/file3.ts'",
"======== Module name './file3' was successfully resolved to 'c:/root/folder2/file3.ts'. ========",
"======== Resolving module 'file4' from 'c:/root/folder2/file2.ts'. ========",
"Explicitly specified module resolution kind: 'NodeJs'.",
@ -59,5 +61,6 @@
"File 'c:/node_modules/file4/index.ts' does not exist.",
"File 'c:/node_modules/file4/index.tsx' does not exist.",
"File 'c:/node_modules/file4/index.d.ts' exist - use it as a name resolution result.",
"Resolving real path for 'c:/node_modules/file4/index.d.ts', result 'c:/node_modules/file4/index.d.ts'",
"======== Module name 'file4' was successfully resolved to 'c:/node_modules/file4/index.d.ts'. ========"
]

View File

@ -5,11 +5,13 @@
"Resolving module name 'folder2/file2' relative to base url 'c:/root' - 'c:/root/folder2/file2'.",
"Loading module as file / folder, candidate module location 'c:/root/folder2/file2'.",
"File 'c:/root/folder2/file2.ts' exist - use it as a name resolution result.",
"Resolving real path for 'c:/root/folder2/file2.ts', result 'c:/root/folder2/file2.ts'",
"======== Module name 'folder2/file2' was successfully resolved to 'c:/root/folder2/file2.ts'. ========",
"======== Resolving module './file3' from 'c:/root/folder2/file2.ts'. ========",
"Explicitly specified module resolution kind: 'NodeJs'.",
"Loading module as file / folder, candidate module location 'c:/root/folder2/file3'.",
"File 'c:/root/folder2/file3.ts' exist - use it as a name resolution result.",
"Resolving real path for 'c:/root/folder2/file3.ts', result 'c:/root/folder2/file3.ts'",
"======== Module name './file3' was successfully resolved to 'c:/root/folder2/file3.ts'. ========",
"======== Resolving module 'file4' from 'c:/root/folder2/file2.ts'. ========",
"Explicitly specified module resolution kind: 'NodeJs'.",
@ -59,5 +61,6 @@
"File 'c:/node_modules/file4/index.ts' does not exist.",
"File 'c:/node_modules/file4/index.tsx' does not exist.",
"File 'c:/node_modules/file4/index.d.ts' exist - use it as a name resolution result.",
"Resolving real path for 'c:/node_modules/file4/index.d.ts', result 'c:/node_modules/file4/index.d.ts'",
"======== Module name 'file4' was successfully resolved to 'c:/node_modules/file4/index.d.ts'. ========"
]

View File

@ -7,6 +7,7 @@
"Trying substitution '*', candidate module location: 'folder2/file1'.",
"Loading module as file / folder, candidate module location 'c:/root/folder2/file1'.",
"File 'c:/root/folder2/file1.ts' exist - use it as a name resolution result.",
"Resolving real path for 'c:/root/folder2/file1.ts', result 'c:/root/folder2/file1.ts'",
"======== Module name 'folder2/file1' was successfully resolved to 'c:/root/folder2/file1.ts'. ========",
"======== Resolving module 'folder3/file2' from 'c:/root/folder1/file1.ts'. ========",
"Module resolution kind is not specified, using 'NodeJs'.",
@ -25,6 +26,7 @@
"Trying substitution 'generated/*', candidate module location: 'generated/folder3/file2'.",
"Loading module as file / folder, candidate module location 'c:/root/generated/folder3/file2'.",
"File 'c:/root/generated/folder3/file2.ts' exist - use it as a name resolution result.",
"Resolving real path for 'c:/root/generated/folder3/file2.ts', result 'c:/root/generated/folder3/file2.ts'",
"======== Module name 'folder3/file2' was successfully resolved to 'c:/root/generated/folder3/file2.ts'. ========",
"======== Resolving module 'components/file3' from 'c:/root/folder1/file1.ts'. ========",
"Module resolution kind is not specified, using 'NodeJs'.",
@ -40,6 +42,7 @@
"File 'c:/root/shared/components/file3/index.ts' does not exist.",
"File 'c:/root/shared/components/file3/index.tsx' does not exist.",
"File 'c:/root/shared/components/file3/index.d.ts' exist - use it as a name resolution result.",
"Resolving real path for 'c:/root/shared/components/file3/index.d.ts', result 'c:/root/shared/components/file3/index.d.ts'",
"======== Module name 'components/file3' was successfully resolved to 'c:/root/shared/components/file3/index.d.ts'. ========",
"======== Resolving module 'file4' from 'c:/root/folder1/file1.ts'. ========",
"Module resolution kind is not specified, using 'NodeJs'.",
@ -94,5 +97,6 @@
"File 'c:/root/node_modules/@types/file4/index.tsx' does not exist.",
"File 'c:/root/node_modules/@types/file4/index.d.ts' does not exist.",
"File 'c:/node_modules/file4.ts' exist - use it as a name resolution result.",
"Resolving real path for 'c:/node_modules/file4.ts', result 'c:/node_modules/file4.ts'",
"======== Module name 'file4' was successfully resolved to 'c:/node_modules/file4.ts'. ========"
]

View File

@ -18,6 +18,7 @@
"Loading 'project/file3' from the root dir 'c:/root/generated/src', candidate location 'c:/root/generated/src/project/file3'",
"Loading module as file / folder, candidate module location 'c:/root/generated/src/project/file3'.",
"File 'c:/root/generated/src/project/file3.ts' exist - use it as a name resolution result.",
"Resolving real path for 'c:/root/generated/src/project/file3.ts', result 'c:/root/generated/src/project/file3.ts'",
"======== Module name './project/file3' was successfully resolved to 'c:/root/generated/src/project/file3.ts'. ========",
"======== Resolving module '../file2' from 'c:/root/generated/src/project/file3.ts'. ========",
"Module resolution kind is not specified, using 'NodeJs'.",
@ -44,5 +45,6 @@
"File 'c:/root/src/file2/index.ts' does not exist.",
"File 'c:/root/src/file2/index.tsx' does not exist.",
"File 'c:/root/src/file2/index.d.ts' exist - use it as a name resolution result.",
"Resolving real path for 'c:/root/src/file2/index.d.ts', result 'c:/root/src/file2/index.d.ts'",
"======== Module name '../file2' was successfully resolved to 'c:/root/src/file2/index.d.ts'. ========"
]

View File

@ -18,6 +18,7 @@
"Loading 'project/file2' from the root dir 'c:/root/generated/src', candidate location 'c:/root/generated/src/project/file2'",
"Loading module as file / folder, candidate module location 'c:/root/generated/src/project/file2'.",
"File 'c:/root/generated/src/project/file2.ts' exist - use it as a name resolution result.",
"Resolving real path for 'c:/root/generated/src/project/file2.ts', result 'c:/root/generated/src/project/file2.ts'",
"======== Module name './project/file2' was successfully resolved to 'c:/root/generated/src/project/file2.ts'. ========",
"======== Resolving module 'module3' from 'c:/root/src/file1.ts'. ========",
"Module resolution kind is not specified, using 'NodeJs'.",
@ -74,6 +75,7 @@
"File 'c:/node_modules/module3.ts' does not exist.",
"File 'c:/node_modules/module3.tsx' does not exist.",
"File 'c:/node_modules/module3.d.ts' exist - use it as a name resolution result.",
"Resolving real path for 'c:/node_modules/module3.d.ts', result 'c:/node_modules/module3.d.ts'",
"======== Module name 'module3' was successfully resolved to 'c:/node_modules/module3.d.ts'. ========",
"======== Resolving module 'module1' from 'c:/root/generated/src/project/file2.ts'. ========",
"Module resolution kind is not specified, using 'NodeJs'.",
@ -98,6 +100,7 @@
"File 'c:/shared/module1/index.ts' does not exist.",
"File 'c:/shared/module1/index.tsx' does not exist.",
"File 'c:/shared/module1/index.d.ts' exist - use it as a name resolution result.",
"Resolving real path for 'c:/shared/module1/index.d.ts', result 'c:/shared/module1/index.d.ts'",
"======== Module name 'module1' was successfully resolved to 'c:/shared/module1/index.d.ts'. ========",
"======== Resolving module 'templates/module2' from 'c:/root/generated/src/project/file2.ts'. ========",
"Module resolution kind is not specified, using 'NodeJs'.",
@ -107,6 +110,7 @@
"Trying substitution 'generated/src/templates/*', candidate module location: 'generated/src/templates/module2'.",
"Loading module as file / folder, candidate module location 'c:/root/generated/src/templates/module2'.",
"File 'c:/root/generated/src/templates/module2.ts' exist - use it as a name resolution result.",
"Resolving real path for 'c:/root/generated/src/templates/module2.ts', result 'c:/root/generated/src/templates/module2.ts'",
"======== Module name 'templates/module2' was successfully resolved to 'c:/root/generated/src/templates/module2.ts'. ========",
"======== Resolving module '../file3' from 'c:/root/generated/src/project/file2.ts'. ========",
"Module resolution kind is not specified, using 'NodeJs'.",
@ -133,5 +137,6 @@
"File 'c:/root/src/file3/index.ts' does not exist.",
"File 'c:/root/src/file3/index.tsx' does not exist.",
"File 'c:/root/src/file3/index.d.ts' exist - use it as a name resolution result.",
"Resolving real path for 'c:/root/src/file3/index.d.ts', result 'c:/root/src/file3/index.d.ts'",
"======== Module name '../file3' was successfully resolved to 'c:/root/src/file3/index.d.ts'. ========"
]

View File

@ -1,6 +1,11 @@
[
"======== Resolving type reference directive 'lib', containing file '/app.ts', root directory '/'. ========",
"Resolving with primary search path '/types/'",
"======== Resolving type reference directive 'lib', containing file '/app.ts', root directory '/types'. ========",
"Resolving with primary search path '/types'",
"File '/types/lib/package.json' does not exist.",
"File '/types/lib/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'lib' was successfully resolved to '/types/lib/index.d.ts', primary: true. ========",
"======== Resolving type reference directive 'lib', containing file '/__inferred type names__.ts', root directory '/types'. ========",
"Resolving with primary search path '/types'",
"File '/types/lib/package.json' does not exist.",
"File '/types/lib/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'lib' was successfully resolved to '/types/lib/index.d.ts', primary: true. ========"

View File

@ -1,6 +1,6 @@
[
"======== Resolving type reference directive 'lib', containing file '/app.ts', root directory '/'. ========",
"Resolving with primary search path '/types/'",
"======== Resolving type reference directive 'lib', containing file '/app.ts', root directory '/types'. ========",
"Resolving with primary search path '/types'",
"File '/types/lib/package.json' does not exist.",
"File '/types/lib/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'lib' was successfully resolved to '/types/lib/index.d.ts', primary: true. ========",
@ -10,5 +10,11 @@
"File '/ref.ts' does not exist.",
"File '/ref.tsx' does not exist.",
"File '/ref.d.ts' exist - use it as a name resolution result.",
"======== Module name './ref' was successfully resolved to '/ref.d.ts'. ========"
"Resolving real path for '/ref.d.ts', result '/ref.d.ts'",
"======== Module name './ref' was successfully resolved to '/ref.d.ts'. ========",
"======== Resolving type reference directive 'lib', containing file '/__inferred type names__.ts', root directory '/types'. ========",
"Resolving with primary search path '/types'",
"File '/types/lib/package.json' does not exist.",
"File '/types/lib/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'lib' was successfully resolved to '/types/lib/index.d.ts', primary: true. ========"
]

View File

@ -3,9 +3,10 @@
"Module resolution kind is not specified, using 'NodeJs'.",
"Loading module as file / folder, candidate module location '/mod1'.",
"File '/mod1.ts' exist - use it as a name resolution result.",
"Resolving real path for '/mod1.ts', result '/mod1.ts'",
"======== Module name './mod1' was successfully resolved to '/mod1.ts'. ========",
"======== Resolving type reference directive 'lib', containing file not set, root directory '/'. ========",
"Resolving with primary search path '/types/'",
"======== Resolving type reference directive 'lib', containing file '/__inferred type names__.ts', root directory '/types'. ========",
"Resolving with primary search path '/types'",
"File '/types/lib/package.json' does not exist.",
"File '/types/lib/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'lib' was successfully resolved to '/types/lib/index.d.ts', primary: true. ========"

View File

@ -3,14 +3,16 @@
"Module resolution kind is not specified, using 'NodeJs'.",
"Loading module as file / folder, candidate module location '/main'.",
"File '/main.ts' exist - use it as a name resolution result.",
"Resolving real path for '/main.ts', result '/main.ts'",
"======== Module name './main' was successfully resolved to '/main.ts'. ========",
"======== Resolving module './mod1' from '/mod2.ts'. ========",
"Module resolution kind is not specified, using 'NodeJs'.",
"Loading module as file / folder, candidate module location '/mod1'.",
"File '/mod1.ts' exist - use it as a name resolution result.",
"Resolving real path for '/mod1.ts', result '/mod1.ts'",
"======== Module name './mod1' was successfully resolved to '/mod1.ts'. ========",
"======== Resolving type reference directive 'lib', containing file '/mod1.ts', root directory '/'. ========",
"Resolving with primary search path '/types/'",
"======== Resolving type reference directive 'lib', containing file '/mod1.ts', root directory '/types'. ========",
"Resolving with primary search path '/types'",
"File '/types/lib/package.json' does not exist.",
"File '/types/lib/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'lib' was successfully resolved to '/types/lib/index.d.ts', primary: true. ========",
@ -18,5 +20,11 @@
"Module resolution kind is not specified, using 'NodeJs'.",
"Loading module as file / folder, candidate module location '/main'.",
"File '/main.ts' exist - use it as a name resolution result.",
"======== Module name './main' was successfully resolved to '/main.ts'. ========"
"Resolving real path for '/main.ts', result '/main.ts'",
"======== Module name './main' was successfully resolved to '/main.ts'. ========",
"======== Resolving type reference directive 'lib', containing file '/__inferred type names__.ts', root directory '/types'. ========",
"Resolving with primary search path '/types'",
"File '/types/lib/package.json' does not exist.",
"File '/types/lib/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'lib' was successfully resolved to '/types/lib/index.d.ts', primary: true. ========"
]

View File

@ -1,6 +1,6 @@
[
"======== Resolving type reference directive 'lib', containing file '/app.ts', root directory '/'. ========",
"Resolving with primary search path '/types/'",
"======== Resolving type reference directive 'lib', containing file '/app.ts', root directory '/types'. ========",
"Resolving with primary search path '/types'",
"File '/types/lib/package.json' does not exist.",
"File '/types/lib/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'lib' was successfully resolved to '/types/lib/index.d.ts', primary: true. ========",
@ -10,5 +10,11 @@
"File '/ref.ts' does not exist.",
"File '/ref.tsx' does not exist.",
"File '/ref.d.ts' exist - use it as a name resolution result.",
"======== Module name './ref' was successfully resolved to '/ref.d.ts'. ========"
"Resolving real path for '/ref.d.ts', result '/ref.d.ts'",
"======== Module name './ref' was successfully resolved to '/ref.d.ts'. ========",
"======== Resolving type reference directive 'lib', containing file '/__inferred type names__.ts', root directory '/types'. ========",
"Resolving with primary search path '/types'",
"File '/types/lib/package.json' does not exist.",
"File '/types/lib/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'lib' was successfully resolved to '/types/lib/index.d.ts', primary: true. ========"
]

View File

@ -1,6 +1,6 @@
[
"======== Resolving type reference directive 'lib', containing file not set, root directory '/'. ========",
"Resolving with primary search path '/types/'",
"======== Resolving type reference directive 'lib', containing file '/__inferred type names__.ts', root directory '/types'. ========",
"Resolving with primary search path '/types'",
"File '/types/lib/package.json' does not exist.",
"File '/types/lib/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'lib' was successfully resolved to '/types/lib/index.d.ts', primary: true. ========"

View File

@ -1,6 +1,11 @@
[
"======== Resolving type reference directive 'lib', containing file '/app.ts', root directory '/'. ========",
"Resolving with primary search path '/types/'",
"======== Resolving type reference directive 'lib', containing file '/app.ts', root directory '/types'. ========",
"Resolving with primary search path '/types'",
"File '/types/lib/package.json' does not exist.",
"File '/types/lib/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'lib' was successfully resolved to '/types/lib/index.d.ts', primary: true. ========",
"======== Resolving type reference directive 'lib', containing file '/__inferred type names__.ts', root directory '/types'. ========",
"Resolving with primary search path '/types'",
"File '/types/lib/package.json' does not exist.",
"File '/types/lib/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'lib' was successfully resolved to '/types/lib/index.d.ts', primary: true. ========"

View File

@ -1,6 +1,11 @@
[
"======== Resolving type reference directive 'lib', containing file '/app.ts', root directory '/'. ========",
"Resolving with primary search path '/types/'",
"======== Resolving type reference directive 'lib', containing file '/app.ts', root directory '/types'. ========",
"Resolving with primary search path '/types'",
"File '/types/lib/package.json' does not exist.",
"File '/types/lib/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'lib' was successfully resolved to '/types/lib/index.d.ts', primary: true. ========",
"======== Resolving type reference directive 'lib', containing file '/__inferred type names__.ts', root directory '/types'. ========",
"Resolving with primary search path '/types'",
"File '/types/lib/package.json' does not exist.",
"File '/types/lib/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'lib' was successfully resolved to '/types/lib/index.d.ts', primary: true. ========"

View File

@ -1,6 +1,6 @@
[
"======== Resolving type reference directive 'lib', containing file '/app.ts', root directory '/'. ========",
"Resolving with primary search path '/types/'",
"======== Resolving type reference directive 'lib', containing file '/app.ts', root directory '/types'. ========",
"Resolving with primary search path '/types'",
"File '/types/lib/package.json' does not exist.",
"File '/types/lib/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'lib' was successfully resolved to '/types/lib/index.d.ts', primary: true. ========",
@ -10,5 +10,11 @@
"File '/ref.ts' does not exist.",
"File '/ref.tsx' does not exist.",
"File '/ref.d.ts' exist - use it as a name resolution result.",
"======== Module name './ref' was successfully resolved to '/ref.d.ts'. ========"
"Resolving real path for '/ref.d.ts', result '/ref.d.ts'",
"======== Module name './ref' was successfully resolved to '/ref.d.ts'. ========",
"======== Resolving type reference directive 'lib', containing file '/__inferred type names__.ts', root directory '/types'. ========",
"Resolving with primary search path '/types'",
"File '/types/lib/package.json' does not exist.",
"File '/types/lib/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'lib' was successfully resolved to '/types/lib/index.d.ts', primary: true. ========"
]

View File

@ -1,6 +1,11 @@
[
"======== Resolving type reference directive 'lib', containing file '/app.ts', root directory '/'. ========",
"Resolving with primary search path '/types/'",
"======== Resolving type reference directive 'lib', containing file '/app.ts', root directory '/types'. ========",
"Resolving with primary search path '/types'",
"File '/types/lib/package.json' does not exist.",
"File '/types/lib/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'lib' was successfully resolved to '/types/lib/index.d.ts', primary: true. ========",
"======== Resolving type reference directive 'lib', containing file '/__inferred type names__.ts', root directory '/types'. ========",
"Resolving with primary search path '/types'",
"File '/types/lib/package.json' does not exist.",
"File '/types/lib/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'lib' was successfully resolved to '/types/lib/index.d.ts', primary: true. ========"

View File

@ -1,6 +1,11 @@
[
"======== Resolving type reference directive 'lib', containing file '/app.ts', root directory '/'. ========",
"Resolving with primary search path '/types/'",
"======== Resolving type reference directive 'lib', containing file '/app.ts', root directory '/types'. ========",
"Resolving with primary search path '/types'",
"File '/types/lib/package.json' does not exist.",
"File '/types/lib/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'lib' was successfully resolved to '/types/lib/index.d.ts', primary: true. ========",
"======== Resolving type reference directive 'lib', containing file '/__inferred type names__.ts', root directory '/types'. ========",
"Resolving with primary search path '/types'",
"File '/types/lib/package.json' does not exist.",
"File '/types/lib/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'lib' was successfully resolved to '/types/lib/index.d.ts', primary: true. ========"

View File

@ -3,9 +3,10 @@
"Module resolution kind is not specified, using 'NodeJs'.",
"Loading module as file / folder, candidate module location '/mod1'.",
"File '/mod1.ts' exist - use it as a name resolution result.",
"Resolving real path for '/mod1.ts', result '/mod1.ts'",
"======== Module name './mod1' was successfully resolved to '/mod1.ts'. ========",
"======== Resolving type reference directive 'lib', containing file not set, root directory '/'. ========",
"Resolving with primary search path '/types/'",
"======== Resolving type reference directive 'lib', containing file '/__inferred type names__.ts', root directory '/types'. ========",
"Resolving with primary search path '/types'",
"File '/types/lib/package.json' does not exist.",
"File '/types/lib/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'lib' was successfully resolved to '/types/lib/index.d.ts', primary: true. ========"

View File

@ -3,14 +3,16 @@
"Module resolution kind is not specified, using 'NodeJs'.",
"Loading module as file / folder, candidate module location '/main'.",
"File '/main.ts' exist - use it as a name resolution result.",
"Resolving real path for '/main.ts', result '/main.ts'",
"======== Module name './main' was successfully resolved to '/main.ts'. ========",
"======== Resolving module './mod1' from '/mod2.ts'. ========",
"Module resolution kind is not specified, using 'NodeJs'.",
"Loading module as file / folder, candidate module location '/mod1'.",
"File '/mod1.ts' exist - use it as a name resolution result.",
"Resolving real path for '/mod1.ts', result '/mod1.ts'",
"======== Module name './mod1' was successfully resolved to '/mod1.ts'. ========",
"======== Resolving type reference directive 'lib', containing file '/mod1.ts', root directory '/'. ========",
"Resolving with primary search path '/types/'",
"======== Resolving type reference directive 'lib', containing file '/mod1.ts', root directory '/types'. ========",
"Resolving with primary search path '/types'",
"File '/types/lib/package.json' does not exist.",
"File '/types/lib/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'lib' was successfully resolved to '/types/lib/index.d.ts', primary: true. ========",
@ -18,5 +20,11 @@
"Module resolution kind is not specified, using 'NodeJs'.",
"Loading module as file / folder, candidate module location '/main'.",
"File '/main.ts' exist - use it as a name resolution result.",
"======== Module name './main' was successfully resolved to '/main.ts'. ========"
"Resolving real path for '/main.ts', result '/main.ts'",
"======== Module name './main' was successfully resolved to '/main.ts'. ========",
"======== Resolving type reference directive 'lib', containing file '/__inferred type names__.ts', root directory '/types'. ========",
"Resolving with primary search path '/types'",
"File '/types/lib/package.json' does not exist.",
"File '/types/lib/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'lib' was successfully resolved to '/types/lib/index.d.ts', primary: true. ========"
]

View File

@ -4,8 +4,10 @@
declare var $: { x: any };
//// [a.ts]
/// <reference types="jquery" />
$.x;
//// [a.js]
/// <reference types="jquery" />
$.x;

View File

@ -1,10 +1,11 @@
=== tests/cases/conformance/typings/a.ts ===
=== /a.ts ===
/// <reference types="jquery" />
$.x;
>$.x : Symbol(x, Decl(index.d.ts, 0, 16))
>$ : Symbol($, Decl(index.d.ts, 0, 11))
>x : Symbol(x, Decl(index.d.ts, 0, 16))
=== tests/cases/conformance/typings/node_modules/@types/jquery/index.d.ts ===
=== /node_modules/@types/jquery/index.d.ts ===
declare var $: { x: any };
>$ : Symbol($, Decl(index.d.ts, 0, 11))
>x : Symbol(x, Decl(index.d.ts, 0, 16))

View File

@ -0,0 +1,12 @@
[
"======== Resolving type reference directive 'jquery', containing file '/a.ts', root directory '/node_modules/@types'. ========",
"Resolving with primary search path '/node_modules/@types'",
"File '/node_modules/@types/jquery/package.json' does not exist.",
"File '/node_modules/@types/jquery/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'jquery' was successfully resolved to '/node_modules/@types/jquery/index.d.ts', primary: true. ========",
"======== Resolving type reference directive 'jquery', containing file '/__inferred type names__.ts', root directory '/node_modules/@types'. ========",
"Resolving with primary search path '/node_modules/@types'",
"File '/node_modules/@types/jquery/package.json' does not exist.",
"File '/node_modules/@types/jquery/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'jquery' was successfully resolved to '/node_modules/@types/jquery/index.d.ts', primary: true. ========"
]

View File

@ -1,10 +1,11 @@
=== tests/cases/conformance/typings/a.ts ===
=== /a.ts ===
/// <reference types="jquery" />
$.x;
>$.x : any
>$ : { x: any; }
>x : any
=== tests/cases/conformance/typings/node_modules/@types/jquery/index.d.ts ===
=== /node_modules/@types/jquery/index.d.ts ===
declare var $: { x: any };
>$ : { x: any; }
>x : any

View File

@ -1,6 +1,7 @@
// @outFile: concat.js
// @module: amd
// @moduleResolution: node
// @Filename: A:/bar.ts
import {z} from "./foo";
export var x = z + z;

View File

@ -1,7 +1,7 @@
// @noImplicitReferences: true
// @traceResolution: true
// @declaration: true
// @typesRoot: /
// @typeRoots: /types
// @filename: /types/lib/index.d.ts

View File

@ -1,6 +1,6 @@
// @noImplicitReferences: true
// @declaration: true
// @typesRoot: /
// @typeRoots: /types
// @traceResolution: true
// @filename: /ref.d.ts

View File

@ -1,6 +1,6 @@
// @noImplicitReferences: true
// @declaration: true
// @typesRoot: /
// @typeRoots: /types
// @traceResolution: true
// @types: lib
// @out: output.js

View File

@ -1,6 +1,6 @@
// @noImplicitReferences: true
// @declaration: true
// @typesRoot: /
// @typeRoots: /types
// @traceResolution: true
// @out: output.js

View File

@ -1,6 +1,6 @@
// @noImplicitReferences: true
// @declaration: true
// @typesRoot: /
// @typeRoots: /types
// @traceResolution: true
// @filename: /ref.d.ts

View File

@ -1,7 +1,7 @@
// @noImplicitReferences: true
// @traceResolution: true
// @declaration: true
// @typesRoot: /
// @typeRoots: /types
// @types: lib
// @filename: /types/lib/index.d.ts

View File

@ -1,6 +1,6 @@
// @noImplicitReferences: true
// @declaration: true
// @typesRoot: /
// @typeRoots: /types
// @traceResolution: true
// $ comes from d.ts file - no need to add type reference directive

View File

@ -1,7 +1,7 @@
// @noImplicitReferences: true
// @traceResolution: true
// @declaration: true
// @typesRoot: /
// @typeRoots: /types
// $ comes from d.ts file - no need to add type reference directive

View File

@ -1,7 +1,7 @@
// @noImplicitReferences: true
// @traceResolution: true
// @declaration: true
// @typesRoot: /
// @typeRoots: /types
// @filename: /ref.d.ts
export interface $ { x }

View File

@ -1,7 +1,7 @@
// @noImplicitReferences: true
// @traceResolution: true
// @declaration: true
// @typesRoot: /
// @typeRoots: /types
// $ comes from type declaration file - type reference directive should be added

View File

@ -1,7 +1,7 @@
// @noImplicitReferences: true
// @traceResolution: true
// @declaration: true
// @typesRoot: /
// @typeRoots: /types
// local value shadows global - no need to add type reference directive

View File

@ -1,6 +1,6 @@
// @noImplicitReferences: true
// @declaration: true
// @typesRoot: /
// @typeRoots: /types
// @traceResolution: true
// @types: lib

View File

@ -1,6 +1,6 @@
// @noImplicitReferences: true
// @declaration: true
// @typesRoot: /
// @typeRoots: /types
// @traceResolution: true
// @filename: /types/lib/index.d.ts

View File

@ -1,13 +1,14 @@
// @noImplicitReferences: true
// @traceResolution: true
// @typesRoot: /
// @currentDirectory: /src
// @typeRoots: types
// We can find typings in the ./types folder
// @filename: /types/jquery/index.d.ts
// @filename: /src/types/jquery/index.d.ts
declare var $: { foo(): void };
// @filename: /consumer.ts
// @filename: /src/consumer.ts
/// <reference types="jquery" />
$.foo();

View File

@ -1,18 +1,19 @@
// @noImplicitReferences: true
// @traceResolution: true
// @typesRoot: /
// @currentDirectory: /foo
// @typeRoots: ./types
// package.json in a primary reference can refer to another file
// @filename: /types/jquery/package.json
// @filename: /foo/types/jquery/package.json
{
"typings": "jquery.d.ts"
}
// @filename: /types/jquery/jquery.d.ts
// @filename: /foo/types/jquery/jquery.d.ts
declare var $: { foo(): void };
// @filename: /consumer.ts
// @filename: /foo/consumer.ts
/// <reference types="jquery" />
$.foo();

View File

@ -6,7 +6,8 @@
// @filename: /a/tsconfig.json
{
"compilerOptions": {
"types": [ "jquery" ]
"types": [ "jquery" ],
"typeRoots": ["/a/types"]
}
}

View File

@ -1,7 +1,8 @@
// @noImplicitReferences: true
// @traceResolution: true
// @types: jquery
// @typesRoot: /a
// @typeRoots: /a/types
// @currentDirectory: /a
// @filename: /a/types/jquery/index.d.ts
declare var $: { foo(): void };

View File

@ -1,11 +1,15 @@
// @noImplicitReferences: true
// @traceResolution: true
// @types: jquery
// @currentDirectory: /
// @currentDirectory: /a
// @typeRoots: types
// @filename: /a/types/jquery/index.d.ts
declare var $: { foo(): void };
// @filename: /a/types/jquery2/index.d.ts
declare var $2: { foo(): void };
// @filename: /a/b/consumer.ts
$.foo();
$.foo(); // should OK
$2.foo(); // should error

View File

@ -1,6 +1,7 @@
// @noImplicitReferences: true
// @traceResolution: true
// @typesRoot: /
// @typeRoots: /types
// @currentDirectory: test
// package.json in a primary reference can refer to another file

View File

@ -1,6 +1,6 @@
// @noImplicitReferences: true
// @traceResolution: true
// @typesRoot: /src
// @currentDirectory: /src
// Secondary references are possible

View File

@ -1,6 +1,7 @@
// @noImplicitReferences: true
// @traceResolution: true
// @typesRoot: /src
// @typeRoots: /src
// @currentDirectory: test
// Secondary references may be duplicated if they agree in content

View File

@ -1,6 +1,7 @@
// @noImplicitReferences: true
// @traceResolution: true
// @currentDirectory: /
// @typeRoots: types
// Secondary references may not be duplicated if they disagree in content

View File

@ -1,9 +1,10 @@
// @noImplicitReferences: true
// @traceResolution: true
// @currentDirectory: /
// The primary lookup folder is relative to tsconfig.json, if present
// @filename: /types/alpha/index.d.ts
// @filename: /node_modules/@types/alpha/index.d.ts
declare var alpha: { a: string };
// @filename: /src/foo.ts

View File

@ -1,18 +1,19 @@
// @noImplicitReferences: true
// @traceResolution: true
// @typesRoot: /
// @typeRoots: /test/types
// @currentDirectory: /test
// Don't crash in circular library reference situations
// @filename: /types/alpha/index.d.ts
// @filename: /test/types/alpha/index.d.ts
/// <reference types="beta" />
declare var alpha: { a: string };
// @filename: /types/beta/index.d.ts
// @filename: /test/types/beta/index.d.ts
/// <reference types="alpha" />
declare var beta: { b: string };
// @filename: /foo.ts
// @filename: /test/foo.ts
/// <reference types="alpha" />
/// <reference types="beta" />
var x: string = alpha.a + beta.b;

View File

@ -1,20 +0,0 @@
// @noImplicitReferences: true
// @traceResolution: true
// Use types search path
// @filename: /share/typelib/alpha/index.d.ts
declare var alpha: { a: string };
// @filename: /base/src/foo.ts
/// <reference types="alpha" />
var x: string = alpha.a;
// @filename: /tsconfig.json
{
"compilerOptions": {
"typesSearchPaths": [
"./share/typelib"
]
}
}

View File

@ -1,10 +1,12 @@
// @traceResolution: true
// @noImplicitReferences: true
// @filename: tsconfig.json
// @filename: /tsconfig.json
{ "files": "a.ts" }
// @filename: node_modules/@types/jquery/index.d.ts
// @filename: /node_modules/@types/jquery/index.d.ts
declare var $: { x: any };
// @filename: a.ts
// @filename: /a.ts
/// <reference types="jquery" />
$.x;

View File

@ -1,6 +1,6 @@
/// <reference path="fourslash.ts"/>
// @typesRoot: src
// @typeRoots: src/types
// @Filename: src/types/lib/index.d.ts
/////*0*/declare let $: {x: number};

View File

@ -1,6 +1,6 @@
/// <reference path="fourslash.ts"/>
// @typesRoot: src
// @typeRoots: src/types
// @Filename: src/types/lib/index.d.ts
/////*0*/declare let $: {x: number};

View File

@ -1,6 +1,6 @@
/// <reference path="fourslash.ts"/>
/// <reference path="../fourslash.ts"/>
// @typesRoot: src
// @typeRoots: src/types
// @Filename: src/types/lib/index.d.ts
/////*0*/declare let $: {x: number};

View File

@ -314,6 +314,7 @@ namespace ts {
getDefaultLibFileName: () => "lib.d.ts",
writeFile: (fileName, content): void => { throw new Error("NotImplemented"); },
getCurrentDirectory: () => currentDirectory,
getDirectories: () => [],
getCanonicalFileName: fileName => fileName.toLowerCase(),
getNewLine: () => "\r\n",
useCaseSensitiveFileNames: () => false,
@ -397,6 +398,7 @@ export = C;
getDefaultLibFileName: () => "lib.d.ts",
writeFile: (fileName, content): void => { throw new Error("NotImplemented"); },
getCurrentDirectory: () => currentDirectory,
getDirectories: () => [],
getCanonicalFileName,
getNewLine: () => "\r\n",
useCaseSensitiveFileNames: () => useCaseSensitiveFileNames,
@ -955,7 +957,7 @@ import b = require("./moduleB.ts");
describe("Type reference directive resolution: ", () => {
function test(typesRoot: string, typeDirective: string, primary: boolean, initialFile: File, targetFile: File, ...otherFiles: File[]) {
const host = createModuleResolutionHost(/*hasDirectoryExists*/ false, ...[initialFile, targetFile].concat(...otherFiles));
const result = resolveTypeReferenceDirective(typeDirective, initialFile.name, {typesRoot}, host);
const result = resolveTypeReferenceDirective(typeDirective, initialFile.name, {typeRoots: [typesRoot]}, host);
assert(result.resolvedTypeReferenceDirective.resolvedFileName !== undefined, "expected type directive to be resolved");
assert.equal(result.resolvedTypeReferenceDirective.resolvedFileName, targetFile.name, "unexpected result of type reference resolution");
assert.equal(result.resolvedTypeReferenceDirective.primary, primary, "unexpected 'primary' value");
@ -965,64 +967,64 @@ import b = require("./moduleB.ts");
{
const f1 = { name: "/root/src/app.ts" };
const f2 = { name: "/root/src/types/lib/index.d.ts" };
test(/*typesRoot*/"/root/src", /* typeDirective */"lib", /*primary*/ true, f1, f2);
test(/*typesRoot*/"/root/src/types", /* typeDirective */"lib", /*primary*/ true, f1, f2);
}
{
const f1 = { name: "/root/src/app.ts" };
const f2 = { name: "/root/src/types/lib/typings/lib.d.ts" };
const package = { name: "/root/src/types/lib/package.json", content: JSON.stringify({types: "typings/lib.d.ts"}) };
test(/*typesRoot*/"/root/src", /* typeDirective */"lib", /*primary*/ true, f1, f2, package);
test(/*typesRoot*/"/root/src/types", /* typeDirective */"lib", /*primary*/ true, f1, f2, package);
}
{
const f1 = { name: "/root/src/app.ts" };
const f2 = { name: "/root/src/node_modules/lib/index.d.ts" };
test(/*typesRoot*/"/root/src", /* typeDirective */"lib", /*primary*/ true, f1, f2);
test(/*typesRoot*/"/root/src/types", /* typeDirective */"lib", /*primary*/ false, f1, f2);
}
{
const f1 = { name: "/root/src/app.ts" };
const f2 = { name: "/root/src/node_modules/lib/typings/lib.d.ts" };
const package = { name: "/root/src/node_modules/lib/package.json", content: JSON.stringify({types: "typings/lib.d.ts"}) };
test(/*typesRoot*/"/root/src", /* typeDirective */"lib", /*primary*/ true, f1, f2, package);
test(/*typesRoot*/"/root/src/types", /* typeDirective */"lib", /*primary*/ false, f1, f2, package);
}
{
const f1 = { name: "/root/src/app.ts" };
const f2 = { name: "/root/src/node_modules/@types/lib/index.d.ts" };
test(/*typesRoot*/"/root/src", /* typeDirective */"lib", /*primary*/ true, f1, f2);
test(/*typesRoot*/"/root/src/types", /* typeDirective */"lib", /*primary*/ false, f1, f2);
}
{
const f1 = { name: "/root/src/app.ts" };
const f2 = { name: "/root/src/node_modules/@types/lib/typings/lib.d.ts" };
const package = { name: "/root/src/node_modules/@types/lib/package.json", content: JSON.stringify({types: "typings/lib.d.ts"}) };
test(/*typesRoot*/"/root/src", /* typeDirective */"lib", /*primary*/ true, f1, f2, package);
test(/*typesRoot*/"/root/src/types", /* typeDirective */"lib", /*primary*/ false, f1, f2, package);
}
});
it("Can be resolved from secondary location", () => {
{
const f1 = { name: "/root/src/app.ts" };
const f2 = { name: "/root/node_modules/lib.d.ts" };
test(/*typesRoot*/"/root/src", /* typeDirective */"lib", /*primary*/ false, f1, f2);
test(/*typesRoot*/"/root/src/types", /* typeDirective */"lib", /*primary*/ false, f1, f2);
}
{
const f1 = { name: "/root/src/app.ts" };
const f2 = { name: "/root/node_modules/lib/index.d.ts" };
test(/*typesRoot*/"/root/src", /* typeDirective */"lib", /*primary*/ false, f1, f2);
test(/*typesRoot*/"/root/src/types", /* typeDirective */"lib", /*primary*/ false, f1, f2);
}
{
const f1 = { name: "/root/src/app.ts" };
const f2 = { name: "/root/node_modules/lib/typings/lib.d.ts" };
const package = { name: "/root/node_modules/lib/package.json", content: JSON.stringify({typings: "typings/lib.d.ts"}) };
test(/*typesRoot*/"/root/src", /* typeDirective */"lib", /*primary*/ false, f1, f2, package);
test(/*typesRoot*/"/root/src/types", /* typeDirective */"lib", /*primary*/ false, f1, f2, package);
}
{
const f1 = { name: "/root/src/app.ts" };
const f2 = { name: "/root/node_modules/@types/lib/index.d.ts" };
test(/*typesRoot*/"/root/src", /* typeDirective */"lib", /*primary*/ false, f1, f2);
test(/*typesRoot*/"/root/src/types", /* typeDirective */"lib", /*primary*/ false, f1, f2);
}
{
const f1 = { name: "/root/src/app.ts" };
const f2 = { name: "/root/node_modules/@types/lib/typings/lib.d.ts" };
const package = { name: "/root/node_modules/@types/lib/package.json", content: JSON.stringify({typings: "typings/lib.d.ts"}) };
test(/*typesRoot*/"/root/src", /* typeDirective */"lib", /*primary*/ false, f1, f2, package);
test(/*typesRoot*/"/root/src/types", /* typeDirective */"lib", /*primary*/ false, f1, f2, package);
}
});
it("Primary resolution overrides secondary resolutions", () => {
@ -1030,7 +1032,7 @@ import b = require("./moduleB.ts");
const f1 = { name: "/root/src/a/b/c/app.ts" };
const f2 = { name: "/root/src/types/lib/index.d.ts" };
const f3 = { name: "/root/src/a/b/node_modules/lib.d.ts" };
test(/*typesRoot*/"/root/src", /* typeDirective */"lib", /*primary*/ true, f1, f2, f3);
test(/*typesRoot*/"/root/src/types", /* typeDirective */"lib", /*primary*/ true, f1, f2, f3);
}
});
it("Reused program keeps errors", () => {
@ -1050,6 +1052,7 @@ import b = require("./moduleB.ts");
throw new Error("NYI");
},
getCurrentDirectory: () => "/",
getDirectories: () => [],
getCanonicalFileName: f => f.toLowerCase(),
getNewLine: () => "\r\n",
useCaseSensitiveFileNames: () => false,

View File

@ -117,6 +117,9 @@ namespace ts {
getCurrentDirectory(): string {
return "";
},
getDirectories(path: string): string[] {
return [];
},
getCanonicalFileName(fileName): string {
return sys && sys.useCaseSensitiveFileNames ? fileName : fileName.toLowerCase();
},
@ -256,6 +259,22 @@ namespace ts {
assert.isTrue(!program_1.structureIsReused);
});
it("fails if change affects type references", () => {
const program_1 = newProgram(files, ["a.ts"], { types: ["a"] });
updateProgram(program_1, ["a.ts"], { types: ["b"] }, files => {
});
assert.isTrue(!program_1.structureIsReused);
});
it("succeeds if change doesn't affect type references", () => {
const program_1 = newProgram(files, ["a.ts"], { types: ["a"] });
updateProgram(program_1, ["a.ts"], { types: ["a"] }, files => {
});
assert.isTrue(program_1.structureIsReused);
});
it("fails if change affects imports", () => {
const program_1 = newProgram(files, ["a.ts"], { target });
updateProgram(program_1, ["a.ts"], { target }, files => {
@ -336,7 +355,7 @@ namespace ts {
{ name: "/a.ts", text: SourceText.New("/// <reference types='typedefs'/>", "", "var x = $") },
{ name: "/types/typedefs/index.d.ts", text: SourceText.New("", "", "declare var $: number") },
];
const options: CompilerOptions = { target, typesRoot: "/" };
const options: CompilerOptions = { target, typeRoots: ["/types"] };
const program_1 = newProgram(files, ["/a.ts"], options);
checkResolvedTypeDirectivesCache(program_1, "/a.ts", { "typedefs": { resolvedFileName: "/types/typedefs/index.d.ts", primary: true } });