diff --git a/Jakefile.js b/Jakefile.js index f1214c62c84dc..55a1852082d6b 100644 --- a/Jakefile.js +++ b/Jakefile.js @@ -794,13 +794,14 @@ function runConsoleTests(defaultReporter, runInParallel) { colors = process.env.colors || process.env.color; colors = colors ? ' --no-colors ' : ' --colors '; reporter = process.env.reporter || process.env.r || defaultReporter; + var bail = (process.env.bail || process.env.b) ? "--bail" : ""; var lintFlag = process.env.lint !== 'false'; // timeout normally isn't necessary but Travis-CI has been timing out on compiler baselines occasionally // default timeout is 2sec which really should be enough, but maybe we just need a small amount longer if(!runInParallel) { tests = tests ? ' -g "' + tests + '"' : ''; - var cmd = "mocha" + (debug ? " --debug-brk" : "") + " -R " + reporter + tests + colors + ' -t ' + testTimeout + ' ' + run; + var cmd = "mocha" + (debug ? " --debug-brk" : "") + " -R " + reporter + tests + colors + bail + ' -t ' + testTimeout + ' ' + run; console.log(cmd); var savedNodeEnv = process.env.NODE_ENV; @@ -865,7 +866,7 @@ task("runtests-parallel", ["build-rules", "tests", builtLocalDirectory], functio runConsoleTests('min', /*runInParallel*/ true); }, {async: true}); -desc("Runs the tests using the built run.js file. Optional arguments are: t[ests]=regex r[eporter]=[list|spec|json|] d[ebug]=true color[s]=false lint=true dirty=false."); +desc("Runs the tests using the built run.js file. Optional arguments are: t[ests]=regex r[eporter]=[list|spec|json|] d[ebug]=true color[s]=false lint=true bail=false dirty=false."); task("runtests", ["build-rules", "tests", builtLocalDirectory], function() { runConsoleTests('mocha-fivemat-progress-reporter', /*runInParallel*/ false); }, {async: true}); diff --git a/scripts/mocha-parallel.js b/scripts/mocha-parallel.js index cc695729cbd43..bf33f68f20474 100644 --- a/scripts/mocha-parallel.js +++ b/scripts/mocha-parallel.js @@ -193,7 +193,6 @@ function runTests(taskConfigsFolder, run, options, cb) { counter--; if (counter <= 0) { - var failed = 0; var reporter = new Base(), stats = reporter.stats, failures = reporter.failures; @@ -224,8 +223,8 @@ function runTests(taskConfigsFolder, run, options, cb) { reporter.epilogue(); } - if (failed) { - return cb(new Error("Test failures reported: " + failed)); + if (stats.failures) { + return cb(new Error("Test failures reported: " + stats.failures)); } else { return cb(); diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index c81e5dcc3453f..0450ec25e77a0 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -1985,7 +1985,7 @@ namespace ts { classPrototype.parent = leftSideOfAssignment; const funcSymbol = container.locals[constructorFunction.text]; - if (!funcSymbol || !(funcSymbol.flags & SymbolFlags.Function)) { + if (!funcSymbol || !(funcSymbol.flags & SymbolFlags.Function || isDeclarationOfFunctionExpression(funcSymbol))) { return; } diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index ad1776bc9a55e..2938aad7bdcf5 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -11497,8 +11497,12 @@ namespace ts { // When resolved signature is a call signature (and not a construct signature) the result type is any, unless // the declaring function had members created through 'x.prototype.y = expr' or 'this.y = expr' psuedodeclarations // in a JS file - const funcSymbol = checkExpression(node.expression).symbol; - if (funcSymbol && funcSymbol.members && (funcSymbol.flags & SymbolFlags.Function)) { + // Note:JS inferred classes might come from a variable declaration instead of a function declaration. + // In this case, using getResolvedSymbol directly is required to avoid losing the members from the declaration. + const funcSymbol = node.expression.kind === SyntaxKind.Identifier ? + getResolvedSymbol(node.expression as Identifier) : + checkExpression(node.expression).symbol; + if (funcSymbol && funcSymbol.members && (funcSymbol.flags & SymbolFlags.Function || isDeclarationOfFunctionExpression(funcSymbol))) { return getInferredClassType(funcSymbol); } else if (compilerOptions.noImplicitAny) { diff --git a/src/compiler/commandLineParser.ts b/src/compiler/commandLineParser.ts index cb04731f538de..b0b11281420f8 100644 --- a/src/compiler/commandLineParser.ts +++ b/src/compiler/commandLineParser.ts @@ -342,8 +342,13 @@ namespace ts { } }, { - name: "typesRoot", - type: "string" + name: "typeRoots", + type: "list", + element: { + name: "typeRoots", + type: "string", + isFilePath: true + } }, { name: "types", @@ -493,13 +498,20 @@ namespace ts { } /* @internal */ - export function parseListTypeOption(opt: CommandLineOptionOfListType, value: string, errors: Diagnostic[]): (string | number)[] { - const values = trimString((value || "")).split(","); + export function parseListTypeOption(opt: CommandLineOptionOfListType, value = "", errors: Diagnostic[]): (string | number)[] | undefined { + value = trimString(value); + if (startsWith(value, "-")) { + return undefined; + } + if (value === "") { + return []; + } + const values = value.split(","); switch (opt.element.type) { case "number": - return ts.map(values, parseInt); + return map(values, parseInt); case "string": - return ts.map(values, v => v || ""); + return map(values, v => v || ""); default: return filter(map(values, v => parseCustomTypeOption(opt.element, v, errors)), v => !!v); } @@ -560,8 +572,11 @@ namespace ts { i++; break; case "list": - options[opt.name] = parseListTypeOption(opt, args[i], errors); - i++; + const result = parseListTypeOption(opt, args[i], errors); + options[opt.name] = result || []; + if (result) { + i++; + } break; // If not a primitive, the possible types are specified in what is effectively a map of options. default: diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 044826c2aa679..b78c342481f86 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -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 diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 420fe058a26a8..faff7a58d2cc9 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -4,16 +4,11 @@ namespace ts { /** 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) { @@ -178,6 +173,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 @@ -192,24 +192,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); } } } @@ -217,14 +215,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); @@ -251,9 +248,6 @@ namespace ts { if (containingFile) { initialLocationForSecondaryLookup = getDirectoryPath(containingFile); } - else { - initialLocationForSecondaryLookup = rootDir; - } if (initialLocationForSecondaryLookup !== undefined) { // check secondary locations @@ -932,19 +926,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())); } @@ -953,7 +934,6 @@ namespace ts { const realpath = sys.realpath && ((path: string) => sys.realpath(path)); return { - getDefaultTypeDirectiveNames, getSourceFile, getDefaultLibLocation, getDefaultLibFileName: options => combinePaths(getDefaultLibLocation(), getDefaultLibFileName(options)), @@ -967,7 +947,8 @@ namespace ts { trace: (s: string) => sys.write(s + newLine), directoryExists: directoryName => sys.directoryExists(directoryName), realpath, - getEnvironmentVariable: name => getEnvironmentVariable(name, /*host*/ undefined) + getEnvironmentVariable: name => getEnvironmentVariable(name, /*host*/ undefined), + getDirectories: (path: string) => sys.getDirectories(path), }; } @@ -1030,21 +1011,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 { @@ -1096,11 +1091,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]); } @@ -1208,10 +1205,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; @@ -1967,7 +1963,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) { diff --git a/src/compiler/types.ts b/src/compiler/types.ts index f24c55d5eb604..6c82fe07a4e9c 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -2630,9 +2630,9 @@ 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 */ useLegacyEmitter?: boolean; /*@internal*/ version?: boolean; /*@internal*/ watch?: boolean; @@ -2940,6 +2940,7 @@ namespace ts { getDefaultTypeDirectiveNames?(rootPath: string): string[]; writeFile: WriteFileCallback; getCurrentDirectory(): string; + getDirectories(path: string): string[]; getCanonicalFileName(fileName: string): string; useCaseSensitiveFileNames(): boolean; getNewLine(): string; diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 12a3f4495a7b5..cd3655f325cc0 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -1362,6 +1362,18 @@ namespace ts { return charCode === CharacterCodes.singleQuote || charCode === CharacterCodes.doubleQuote; } + /** + * Returns true if the node is a variable declaration whose initializer is a function expression. + * This function does not test if the node is in a JavaScript file or not. + */ + export function isDeclarationOfFunctionExpression(s: Symbol) { + if (s.valueDeclaration && s.valueDeclaration.kind === SyntaxKind.VariableDeclaration) { + const declaration = s.valueDeclaration as VariableDeclaration; + return declaration.initializer && declaration.initializer.kind === SyntaxKind.FunctionExpression; + } + return false; + } + /// Given a BinaryExpression, returns SpecialPropertyAssignmentKind for the various kinds of property /// assignments we treat as special in the binder export function getSpecialPropertyAssignmentKind(expression: Node): SpecialPropertyAssignmentKind { diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts index 9af68bb7b5efe..854afb1266579 100644 --- a/src/harness/fourslash.ts +++ b/src/harness/fourslash.ts @@ -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); @@ -717,6 +717,8 @@ namespace FourSlash { public verifyCompletionEntryDetails(entryName: string, expectedText: string, expectedDocumentation?: string, kind?: string) { const details = this.getCompletionEntryDetails(entryName); + assert(details, "no completion entry available"); + assert.equal(ts.displayPartsToString(details.displayParts), expectedText, this.assertionMessageAtLastKnownMarker("completion entry details text")); if (expectedDocumentation !== undefined) { @@ -728,7 +730,7 @@ namespace FourSlash { } } - public verifyReferencesAtPositionListContains(fileName: string, start: number, end: number, isWriteAccess?: boolean) { + public verifyReferencesAtPositionListContains(fileName: string, start: number, end: number, isWriteAccess?: boolean, isDefinition?: boolean) { const references = this.getReferencesAtCaret(); if (!references || references.length === 0) { @@ -741,11 +743,14 @@ namespace FourSlash { if (typeof isWriteAccess !== "undefined" && reference.isWriteAccess !== isWriteAccess) { this.raiseError(`verifyReferencesAtPositionListContains failed - item isWriteAccess value does not match, actual: ${reference.isWriteAccess}, expected: ${isWriteAccess}.`); } + if (typeof isDefinition !== "undefined" && reference.isDefinition !== isDefinition) { + this.raiseError(`verifyReferencesAtPositionListContains failed - item isDefinition value does not match, actual: ${reference.isDefinition}, expected: ${isDefinition}.`); + } return; } } - const missingItem = { fileName: fileName, start: start, end: end, isWriteAccess: isWriteAccess }; + const missingItem = { fileName, start, end, isWriteAccess, isDefinition }; this.raiseError(`verifyReferencesAtPositionListContains failed - could not find the item: ${stringify(missingItem)} in the returned list: (${stringify(references)})`); } @@ -2835,8 +2840,8 @@ namespace FourSlashInterface { this.state.verifyReferencesCountIs(count, /*localFilesOnly*/ false); } - public referencesAtPositionContains(range: FourSlash.Range, isWriteAccess?: boolean) { - this.state.verifyReferencesAtPositionListContains(range.fileName, range.start, range.end, isWriteAccess); + public referencesAtPositionContains(range: FourSlash.Range, isWriteAccess?: boolean, isDefinition?: boolean) { + this.state.verifyReferencesAtPositionListContains(range.fileName, range.start, range.end, isWriteAccess, isDefinition); } public signatureHelpPresent() { diff --git a/src/harness/harness.ts b/src/harness/harness.ts index 84c42214fda97..6bbf1eae04ca2 100644 --- a/src/harness/harness.ts +++ b/src/harness/harness.ts @@ -486,6 +486,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; @@ -533,6 +534,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; @@ -600,6 +602,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); @@ -680,6 +683,7 @@ namespace Harness { export const args = () => []; export const getExecutingFilePath = () => ""; export const exit = (exitCode: number) => { }; + export const getDirectories = () => []; export let log = (s: string) => console.log(s); @@ -936,7 +940,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; + const realPathMap: ts.FileMap = ts.createFileMap(); const fileMap: ts.FileMap<() => ts.SourceFile> = ts.createFileMap<() => ts.SourceFile>(); for (const file of inputFiles) { if (file.content !== undefined) { @@ -945,9 +949,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(); - } realPathMap.set(linkPath, fileName); fileMap.set(path, (): ts.SourceFile => { throw new Error("Symlinks should always be resolved to a realpath first"); }); } @@ -981,20 +982,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, @@ -1012,7 +999,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 = 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; + } }; } @@ -1111,7 +1128,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) { diff --git a/src/harness/harnessLanguageService.ts b/src/harness/harnessLanguageService.ts index 881e879e6e10e..bc0ed0b57c768 100644 --- a/src/harness/harnessLanguageService.ts +++ b/src/harness/harnessLanguageService.ts @@ -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 = {}; - 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 = {}; + 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); }; } } diff --git a/src/harness/projectsRunner.ts b/src/harness/projectsRunner.ts index 3ec58a917466b..5cabbed1ec146 100644 --- a/src/harness/projectsRunner.ts +++ b/src/harness/projectsRunner.ts @@ -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) }; } } diff --git a/src/server/client.ts b/src/server/client.ts index b0a1a8ec9e913..864dac9fdaaa1 100644 --- a/src/server/client.ts +++ b/src/server/client.ts @@ -376,6 +376,7 @@ namespace ts.server { fileName: fileName, textSpan: ts.createTextSpanFromBounds(start, end), isWriteAccess: entry.isWriteAccess, + isDefinition: entry.isDefinition, }; }); } @@ -536,6 +537,7 @@ namespace ts.server { fileName, textSpan: ts.createTextSpanFromBounds(start, end), isWriteAccess: entry.isWriteAccess, + isDefinition: false }; }); } diff --git a/src/server/editorServices.ts b/src/server/editorServices.ts index 628522c7aa61a..b887b5c725668 100644 --- a/src/server/editorServices.ts +++ b/src/server/editorServices.ts @@ -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 */ diff --git a/src/server/protocol.d.ts b/src/server/protocol.d.ts index d2c15b308ec4f..b62d89ae52001 100644 --- a/src/server/protocol.d.ts +++ b/src/server/protocol.d.ts @@ -304,6 +304,11 @@ declare namespace ts.server.protocol { * True if reference is a write location, false otherwise. */ isWriteAccess: boolean; + + /** + * True if reference is a definition, false otherwise. + */ + isDefinition: boolean; } /** diff --git a/src/server/session.ts b/src/server/session.ts index 0ec3d87e58c9a..2964dc66505f3 100644 --- a/src/server/session.ts +++ b/src/server/session.ts @@ -379,7 +379,7 @@ namespace ts.server { start, end, file: fileName, - isWriteAccess + isWriteAccess, }; }); } @@ -555,7 +555,8 @@ namespace ts.server { start: start, lineText: lineText, end: compilerService.host.positionToLineOffset(ref.fileName, ts.textSpanEnd(ref.textSpan)), - isWriteAccess: ref.isWriteAccess + isWriteAccess: ref.isWriteAccess, + isDefinition: ref.isDefinition }; }); }, diff --git a/src/services/services.ts b/src/services/services.ts index 5d234524df5b2..50070d8fa73cb 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -1083,6 +1083,7 @@ namespace ts { resolveModuleNames?(moduleNames: string[], containingFile: string): ResolvedModule[]; resolveTypeReferenceDirectives?(typeDirectiveNames: string[], containingFile: string): ResolvedTypeReferenceDirective[]; directoryExists?(directoryName: string): boolean; + getDirectories?(directoryName: string): string[]; } // @@ -1214,6 +1215,7 @@ namespace ts { textSpan: TextSpan; fileName: string; isWriteAccess: boolean; + isDefinition: boolean; } export interface DocumentHighlights { @@ -2050,7 +2052,8 @@ namespace ts { getNewLine: () => newLine, fileExists: (fileName): boolean => fileName === inputFileName, readFile: (fileName): string => "", - directoryExists: directoryExists => true + directoryExists: directoryExists => true, + getDirectories: (path: string) => [] }; // If there is an error from converting string in compiler-options to its corresponding enum value, @@ -2156,7 +2159,7 @@ namespace ts { const getCanonicalFileName = createGetCanonicalFileName(!!useCaseSensitiveFileNames); function getKeyForCompilationSettings(settings: CompilerOptions): DocumentRegistryBucketKey { - return `_${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 `_${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 { @@ -3016,8 +3019,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) { @@ -4154,7 +4159,7 @@ namespace ts { if (!uniqueNames[name]) { uniqueNames[name] = name; - const displayName = getCompletionEntryDisplayName(name, target, /*performCharacterChecks*/ true); + const displayName = getCompletionEntryDisplayName(unescapeIdentifier(name), target, /*performCharacterChecks*/ true); if (displayName) { const entry = { name: displayName, @@ -5766,7 +5771,8 @@ namespace ts { result.push({ fileName: entry.fileName, textSpan: highlightSpan.textSpan, - isWriteAccess: highlightSpan.kind === HighlightSpanKind.writtenReference + isWriteAccess: highlightSpan.kind === HighlightSpanKind.writtenReference, + isDefinition: false }); } } @@ -6200,7 +6206,8 @@ namespace ts { references: [{ fileName: sourceFile.fileName, textSpan: createTextSpan(position, searchText.length), - isWriteAccess: false + isWriteAccess: false, + isDefinition: false }] }); } @@ -6754,7 +6761,8 @@ namespace ts { return { fileName: node.getSourceFile().fileName, textSpan: createTextSpanFromBounds(start, end), - isWriteAccess: isWriteAccess(node) + isWriteAccess: isWriteAccess(node), + isDefinition: isDeclarationName(node) || isLiteralComputedPropertyDeclarationName(node) }; } diff --git a/src/services/shims.ts b/src/services/shims.ts index 94ff3367e3c68..96392ca42bebd 100644 --- a/src/services/shims.ts +++ b/src/services/shims.ts @@ -164,7 +164,7 @@ namespace ts { /** * Returns a JSON-encoded value of the type: - * { fileName: string; textSpan: { start: number; length: number}; isWriteAccess: boolean }[] + * { fileName: string; textSpan: { start: number; length: number}; isWriteAccess: boolean, isDefinition?: boolean }[] */ getReferencesAtPosition(fileName: string, position: number): string; @@ -1141,4 +1141,4 @@ namespace TypeScript.Services { /* @internal */ const toolsVersion = "1.9"; -/* tslint:enable:no-unused-variable */ \ No newline at end of file +/* tslint:enable:no-unused-variable */ diff --git a/tests/baselines/reference/commonSourceDir5.js b/tests/baselines/reference/commonSourceDir5.js index 7a43aba254e1d..1e404b26e137d 100644 --- a/tests/baselines/reference/commonSourceDir5.js +++ b/tests/baselines/reference/commonSourceDir5.js @@ -1,6 +1,7 @@ //// [tests/cases/compiler/commonSourceDir5.ts] //// //// [bar.ts] + import {z} from "./foo"; export var x = z + z; diff --git a/tests/baselines/reference/commonSourceDir5.symbols b/tests/baselines/reference/commonSourceDir5.symbols index 6426ac39de3c4..67494af40fa53 100644 --- a/tests/baselines/reference/commonSourceDir5.symbols +++ b/tests/baselines/reference/commonSourceDir5.symbols @@ -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"; diff --git a/tests/baselines/reference/commonSourceDir5.types b/tests/baselines/reference/commonSourceDir5.types index ff13bb20215c0..dd72099d54207 100644 --- a/tests/baselines/reference/commonSourceDir5.types +++ b/tests/baselines/reference/commonSourceDir5.types @@ -1,4 +1,5 @@ === A:/bar.ts === + import {z} from "./foo"; >z : number diff --git a/tests/baselines/reference/decoratorMetadataPromise.js b/tests/baselines/reference/decoratorMetadataPromise.js new file mode 100644 index 0000000000000..3ed8942033d60 --- /dev/null +++ b/tests/baselines/reference/decoratorMetadataPromise.js @@ -0,0 +1,59 @@ +//// [decoratorMetadataPromise.ts] + +declare const decorator: MethodDecorator; + +class A { + @decorator + async foo() {} + @decorator + async bar(): Promise { return 0; } + @decorator + baz(n: Promise): Promise { return n; } +} + + +//// [decoratorMetadataPromise.js] +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments)).next()); + }); +}; +class A { + foo() { + return __awaiter(this, void 0, void 0, function* () { }); + } + bar() { + return __awaiter(this, void 0, void 0, function* () { return 0; }); + } + baz(n) { return n; } +} +__decorate([ + decorator, + __metadata('design:type', Function), + __metadata('design:paramtypes', []), + __metadata('design:returntype', Promise) +], A.prototype, "foo", null); +__decorate([ + decorator, + __metadata('design:type', Function), + __metadata('design:paramtypes', []), + __metadata('design:returntype', Promise) +], A.prototype, "bar", null); +__decorate([ + decorator, + __metadata('design:type', Function), + __metadata('design:paramtypes', [Promise]), + __metadata('design:returntype', Promise) +], A.prototype, "baz", null); diff --git a/tests/baselines/reference/decoratorMetadataPromise.symbols b/tests/baselines/reference/decoratorMetadataPromise.symbols new file mode 100644 index 0000000000000..b0ebe05e8c1c4 --- /dev/null +++ b/tests/baselines/reference/decoratorMetadataPromise.symbols @@ -0,0 +1,33 @@ +=== tests/cases/compiler/decoratorMetadataPromise.ts === + +declare const decorator: MethodDecorator; +>decorator : Symbol(decorator, Decl(decoratorMetadataPromise.ts, 1, 13)) +>MethodDecorator : Symbol(MethodDecorator, Decl(lib.es5.d.ts, --, --)) + +class A { +>A : Symbol(A, Decl(decoratorMetadataPromise.ts, 1, 41)) + + @decorator +>decorator : Symbol(decorator, Decl(decoratorMetadataPromise.ts, 1, 13)) + + async foo() {} +>foo : Symbol(A.foo, Decl(decoratorMetadataPromise.ts, 3, 9)) + + @decorator +>decorator : Symbol(decorator, Decl(decoratorMetadataPromise.ts, 1, 13)) + + async bar(): Promise { return 0; } +>bar : Symbol(A.bar, Decl(decoratorMetadataPromise.ts, 5, 18)) +>Promise : Symbol(Promise, Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) + + @decorator +>decorator : Symbol(decorator, Decl(decoratorMetadataPromise.ts, 1, 13)) + + baz(n: Promise): Promise { return n; } +>baz : Symbol(A.baz, Decl(decoratorMetadataPromise.ts, 7, 46)) +>n : Symbol(n, Decl(decoratorMetadataPromise.ts, 9, 8)) +>Promise : Symbol(Promise, Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Promise : Symbol(Promise, Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>n : Symbol(n, Decl(decoratorMetadataPromise.ts, 9, 8)) +} + diff --git a/tests/baselines/reference/decoratorMetadataPromise.types b/tests/baselines/reference/decoratorMetadataPromise.types new file mode 100644 index 0000000000000..900e751e84172 --- /dev/null +++ b/tests/baselines/reference/decoratorMetadataPromise.types @@ -0,0 +1,34 @@ +=== tests/cases/compiler/decoratorMetadataPromise.ts === + +declare const decorator: MethodDecorator; +>decorator : (target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor) => TypedPropertyDescriptor | void +>MethodDecorator : (target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor) => TypedPropertyDescriptor | void + +class A { +>A : A + + @decorator +>decorator : (target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor) => TypedPropertyDescriptor | void + + async foo() {} +>foo : () => Promise + + @decorator +>decorator : (target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor) => TypedPropertyDescriptor | void + + async bar(): Promise { return 0; } +>bar : () => Promise +>Promise : Promise +>0 : number + + @decorator +>decorator : (target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor) => TypedPropertyDescriptor | void + + baz(n: Promise): Promise { return n; } +>baz : (n: Promise) => Promise +>n : Promise +>Promise : Promise +>Promise : Promise +>n : Promise +} + diff --git a/tests/baselines/reference/emitDecoratorMetadata_restArgs.js b/tests/baselines/reference/emitDecoratorMetadata_restArgs.js new file mode 100644 index 0000000000000..35350c54e0a21 --- /dev/null +++ b/tests/baselines/reference/emitDecoratorMetadata_restArgs.js @@ -0,0 +1,80 @@ +//// [emitDecoratorMetadata_restArgs.ts] + +declare const MyClassDecorator: ClassDecorator; +declare const MyMethodDecorator: MethodDecorator; + +@MyClassDecorator +class A { + constructor(...args) {} + @MyMethodDecorator + method(...args) {} +} + +@MyClassDecorator +class B { + constructor(...args: number[]) {} + @MyMethodDecorator + method(...args: string[]) {} +} + + +//// [emitDecoratorMetadata_restArgs.js] +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var A = (function () { + function A() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i - 0] = arguments[_i]; + } + } + A.prototype.method = function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i - 0] = arguments[_i]; + } + }; + __decorate([ + MyMethodDecorator, + __metadata('design:type', Function), + __metadata('design:paramtypes', [Object]), + __metadata('design:returntype', void 0) + ], A.prototype, "method", null); + A = __decorate([ + MyClassDecorator, + __metadata('design:paramtypes', [Object]) + ], A); + return A; +}()); +var B = (function () { + function B() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i - 0] = arguments[_i]; + } + } + B.prototype.method = function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i - 0] = arguments[_i]; + } + }; + __decorate([ + MyMethodDecorator, + __metadata('design:type', Function), + __metadata('design:paramtypes', [String]), + __metadata('design:returntype', void 0) + ], B.prototype, "method", null); + B = __decorate([ + MyClassDecorator, + __metadata('design:paramtypes', [Number]) + ], B); + return B; +}()); diff --git a/tests/baselines/reference/emitDecoratorMetadata_restArgs.symbols b/tests/baselines/reference/emitDecoratorMetadata_restArgs.symbols new file mode 100644 index 0000000000000..b665b778f8615 --- /dev/null +++ b/tests/baselines/reference/emitDecoratorMetadata_restArgs.symbols @@ -0,0 +1,44 @@ +=== tests/cases/compiler/emitDecoratorMetadata_restArgs.ts === + +declare const MyClassDecorator: ClassDecorator; +>MyClassDecorator : Symbol(MyClassDecorator, Decl(emitDecoratorMetadata_restArgs.ts, 1, 13)) +>ClassDecorator : Symbol(ClassDecorator, Decl(lib.d.ts, --, --)) + +declare const MyMethodDecorator: MethodDecorator; +>MyMethodDecorator : Symbol(MyMethodDecorator, Decl(emitDecoratorMetadata_restArgs.ts, 2, 13)) +>MethodDecorator : Symbol(MethodDecorator, Decl(lib.d.ts, --, --)) + +@MyClassDecorator +>MyClassDecorator : Symbol(MyClassDecorator, Decl(emitDecoratorMetadata_restArgs.ts, 1, 13)) + +class A { +>A : Symbol(A, Decl(emitDecoratorMetadata_restArgs.ts, 2, 49)) + + constructor(...args) {} +>args : Symbol(args, Decl(emitDecoratorMetadata_restArgs.ts, 6, 16)) + + @MyMethodDecorator +>MyMethodDecorator : Symbol(MyMethodDecorator, Decl(emitDecoratorMetadata_restArgs.ts, 2, 13)) + + method(...args) {} +>method : Symbol(A.method, Decl(emitDecoratorMetadata_restArgs.ts, 6, 27)) +>args : Symbol(args, Decl(emitDecoratorMetadata_restArgs.ts, 8, 11)) +} + +@MyClassDecorator +>MyClassDecorator : Symbol(MyClassDecorator, Decl(emitDecoratorMetadata_restArgs.ts, 1, 13)) + +class B { +>B : Symbol(B, Decl(emitDecoratorMetadata_restArgs.ts, 9, 1)) + + constructor(...args: number[]) {} +>args : Symbol(args, Decl(emitDecoratorMetadata_restArgs.ts, 13, 16)) + + @MyMethodDecorator +>MyMethodDecorator : Symbol(MyMethodDecorator, Decl(emitDecoratorMetadata_restArgs.ts, 2, 13)) + + method(...args: string[]) {} +>method : Symbol(B.method, Decl(emitDecoratorMetadata_restArgs.ts, 13, 37)) +>args : Symbol(args, Decl(emitDecoratorMetadata_restArgs.ts, 15, 11)) +} + diff --git a/tests/baselines/reference/emitDecoratorMetadata_restArgs.types b/tests/baselines/reference/emitDecoratorMetadata_restArgs.types new file mode 100644 index 0000000000000..4820d3a7d8dc2 --- /dev/null +++ b/tests/baselines/reference/emitDecoratorMetadata_restArgs.types @@ -0,0 +1,44 @@ +=== tests/cases/compiler/emitDecoratorMetadata_restArgs.ts === + +declare const MyClassDecorator: ClassDecorator; +>MyClassDecorator : (target: TFunction) => TFunction | void +>ClassDecorator : (target: TFunction) => TFunction | void + +declare const MyMethodDecorator: MethodDecorator; +>MyMethodDecorator : (target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor) => TypedPropertyDescriptor | void +>MethodDecorator : (target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor) => TypedPropertyDescriptor | void + +@MyClassDecorator +>MyClassDecorator : (target: TFunction) => TFunction | void + +class A { +>A : A + + constructor(...args) {} +>args : any[] + + @MyMethodDecorator +>MyMethodDecorator : (target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor) => TypedPropertyDescriptor | void + + method(...args) {} +>method : (...args: any[]) => void +>args : any[] +} + +@MyClassDecorator +>MyClassDecorator : (target: TFunction) => TFunction | void + +class B { +>B : B + + constructor(...args: number[]) {} +>args : number[] + + @MyMethodDecorator +>MyMethodDecorator : (target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor) => TypedPropertyDescriptor | void + + method(...args: string[]) {} +>method : (...args: string[]) => void +>args : string[] +} + diff --git a/tests/baselines/reference/library-reference-1.symbols b/tests/baselines/reference/library-reference-1.symbols index 0e848c626c541..14a6b115009e4 100644 --- a/tests/baselines/reference/library-reference-1.symbols +++ b/tests/baselines/reference/library-reference-1.symbols @@ -1,11 +1,11 @@ -=== /consumer.ts === +=== /src/consumer.ts === /// $.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 diff --git a/tests/baselines/reference/library-reference-1.trace.json b/tests/baselines/reference/library-reference-1.trace.json index 1b8c237dff15a..715572362407e 100644 --- a/tests/baselines/reference/library-reference-1.trace.json +++ b/tests/baselines/reference/library-reference-1.trace.json @@ -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. ========" ] \ No newline at end of file diff --git a/tests/baselines/reference/library-reference-1.types b/tests/baselines/reference/library-reference-1.types index 99133f2f8df9a..c247e94617e40 100644 --- a/tests/baselines/reference/library-reference-1.types +++ b/tests/baselines/reference/library-reference-1.types @@ -1,4 +1,4 @@ -=== /consumer.ts === +=== /src/consumer.ts === /// $.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 diff --git a/tests/baselines/reference/library-reference-10.symbols b/tests/baselines/reference/library-reference-10.symbols index 9d0f7e4781e35..50159b4bfc329 100644 --- a/tests/baselines/reference/library-reference-10.symbols +++ b/tests/baselines/reference/library-reference-10.symbols @@ -1,11 +1,11 @@ -=== /consumer.ts === +=== /foo/consumer.ts === /// $.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)) diff --git a/tests/baselines/reference/library-reference-10.trace.json b/tests/baselines/reference/library-reference-10.trace.json index e6a1918a44653..f4df00fa52ded 100644 --- a/tests/baselines/reference/library-reference-10.trace.json +++ b/tests/baselines/reference/library-reference-10.trace.json @@ -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. ========" ] \ No newline at end of file diff --git a/tests/baselines/reference/library-reference-10.types b/tests/baselines/reference/library-reference-10.types index 42d78f72865c3..ca588d0bc030e 100644 --- a/tests/baselines/reference/library-reference-10.types +++ b/tests/baselines/reference/library-reference-10.types @@ -1,4 +1,4 @@ -=== /consumer.ts === +=== /foo/consumer.ts === /// $.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 diff --git a/tests/baselines/reference/library-reference-11.trace.json b/tests/baselines/reference/library-reference-11.trace.json index 62d828d57d64f..365fe3ce72d2c 100644 --- a/tests/baselines/reference/library-reference-11.trace.json +++ b/tests/baselines/reference/library-reference-11.trace.json @@ -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'", diff --git a/tests/baselines/reference/library-reference-12.trace.json b/tests/baselines/reference/library-reference-12.trace.json index abe1f6c0f4680..84144f82729c6 100644 --- a/tests/baselines/reference/library-reference-12.trace.json +++ b/tests/baselines/reference/library-reference-12.trace.json @@ -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'", diff --git a/tests/baselines/reference/library-reference-13.trace.json b/tests/baselines/reference/library-reference-13.trace.json index 2133414f41424..d8dfb57c2a66f 100644 --- a/tests/baselines/reference/library-reference-13.trace.json +++ b/tests/baselines/reference/library-reference-13.trace.json @@ -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. ========" diff --git a/tests/baselines/reference/library-reference-14.trace.json b/tests/baselines/reference/library-reference-14.trace.json index 2133414f41424..d8dfb57c2a66f 100644 --- a/tests/baselines/reference/library-reference-14.trace.json +++ b/tests/baselines/reference/library-reference-14.trace.json @@ -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. ========" diff --git a/tests/baselines/reference/library-reference-15.errors.txt b/tests/baselines/reference/library-reference-15.errors.txt index a311633ca76d5..9586ba8bc724a 100644 --- a/tests/baselines/reference/library-reference-15.errors.txt +++ b/tests/baselines/reference/library-reference-15.errors.txt @@ -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 }; \ No newline at end of file diff --git a/tests/baselines/reference/library-reference-15.js b/tests/baselines/reference/library-reference-15.js index f9aa7038d539d..c1caa0c45e75a 100644 --- a/tests/baselines/reference/library-reference-15.js +++ b/tests/baselines/reference/library-reference-15.js @@ -3,11 +3,14 @@ //// [index.d.ts] declare var $: { foo(): void }; - -//// [consumer.ts] -$.foo(); +//// [index.d.ts] +declare var $2: { foo(): void }; +//// [consumer.ts] +$.foo(); // should OK +$2.foo(); // should error //// [consumer.js] -$.foo(); +$.foo(); // should OK +$2.foo(); // should error diff --git a/tests/baselines/reference/library-reference-15.trace.json b/tests/baselines/reference/library-reference-15.trace.json index b8029a0b61fc3..3e9d7dba1d21d 100644 --- a/tests/baselines/reference/library-reference-15.trace.json +++ b/tests/baselines/reference/library-reference-15.trace.json @@ -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. ========" ] \ No newline at end of file diff --git a/tests/baselines/reference/library-reference-2.trace.json b/tests/baselines/reference/library-reference-2.trace.json index b5ef5f3e2089a..c26f7d2763d7f 100644 --- a/tests/baselines/reference/library-reference-2.trace.json +++ b/tests/baselines/reference/library-reference-2.trace.json @@ -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.", diff --git a/tests/baselines/reference/library-reference-3.trace.json b/tests/baselines/reference/library-reference-3.trace.json index 30dbbc3fca4d2..730835c65e9ac 100644 --- a/tests/baselines/reference/library-reference-3.trace.json +++ b/tests/baselines/reference/library-reference-3.trace.json @@ -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. ========" ] \ No newline at end of file diff --git a/tests/baselines/reference/library-reference-4.trace.json b/tests/baselines/reference/library-reference-4.trace.json index 90b6eb7b01d74..5df7320d3223c 100644 --- a/tests/baselines/reference/library-reference-4.trace.json +++ b/tests/baselines/reference/library-reference-4.trace.json @@ -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.", diff --git a/tests/baselines/reference/library-reference-5.trace.json b/tests/baselines/reference/library-reference-5.trace.json index ad34e9e3159f3..9b8705f032311 100644 --- a/tests/baselines/reference/library-reference-5.trace.json +++ b/tests/baselines/reference/library-reference-5.trace.json @@ -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.", diff --git a/tests/baselines/reference/library-reference-6.symbols b/tests/baselines/reference/library-reference-6.symbols index 328842f804c56..595d43df3faec 100644 --- a/tests/baselines/reference/library-reference-6.symbols +++ b/tests/baselines/reference/library-reference-6.symbols @@ -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 diff --git a/tests/baselines/reference/library-reference-6.trace.json b/tests/baselines/reference/library-reference-6.trace.json index 426214fdcfc7f..48fb49e6c7fb9 100644 --- a/tests/baselines/reference/library-reference-6.trace.json +++ b/tests/baselines/reference/library-reference-6.trace.json @@ -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. ========" ] \ No newline at end of file diff --git a/tests/baselines/reference/library-reference-6.types b/tests/baselines/reference/library-reference-6.types index 2f6c1e49b891f..e2762c0943a9b 100644 --- a/tests/baselines/reference/library-reference-6.types +++ b/tests/baselines/reference/library-reference-6.types @@ -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 diff --git a/tests/baselines/reference/library-reference-7.trace.json b/tests/baselines/reference/library-reference-7.trace.json index 9c6b19390d062..b681ea312a8bb 100644 --- a/tests/baselines/reference/library-reference-7.trace.json +++ b/tests/baselines/reference/library-reference-7.trace.json @@ -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'", diff --git a/tests/baselines/reference/library-reference-8.symbols b/tests/baselines/reference/library-reference-8.symbols index 299a60f1b1dcb..a6a24689f3fcd 100644 --- a/tests/baselines/reference/library-reference-8.symbols +++ b/tests/baselines/reference/library-reference-8.symbols @@ -1,4 +1,4 @@ -=== /foo.ts === +=== /test/foo.ts === /// /// 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 === /// declare var beta: { b: string }; >beta : Symbol(beta, Decl(index.d.ts, 1, 11)) diff --git a/tests/baselines/reference/library-reference-8.trace.json b/tests/baselines/reference/library-reference-8.trace.json index b1dc64786880d..d34f206e5816b 100644 --- a/tests/baselines/reference/library-reference-8.trace.json +++ b/tests/baselines/reference/library-reference-8.trace.json @@ -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. ========" ] \ No newline at end of file diff --git a/tests/baselines/reference/library-reference-8.types b/tests/baselines/reference/library-reference-8.types index b0780d90f63ac..d8a2b6e963870 100644 --- a/tests/baselines/reference/library-reference-8.types +++ b/tests/baselines/reference/library-reference-8.types @@ -1,4 +1,4 @@ -=== /foo.ts === +=== /test/foo.ts === /// /// 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 === /// declare var beta: { b: string }; >beta : { b: string; } diff --git a/tests/baselines/reference/library-reference-9.js b/tests/baselines/reference/library-reference-9.js deleted file mode 100644 index ccb3b3213a9f1..0000000000000 --- a/tests/baselines/reference/library-reference-9.js +++ /dev/null @@ -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] -/// -var x: string = alpha.a; - - -//// [foo.js] -/// -var x = alpha.a; diff --git a/tests/baselines/reference/library-reference-9.symbols b/tests/baselines/reference/library-reference-9.symbols deleted file mode 100644 index 62cde2117dff6..0000000000000 --- a/tests/baselines/reference/library-reference-9.symbols +++ /dev/null @@ -1,16 +0,0 @@ -=== /base/src/foo.ts === -/// -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)) - diff --git a/tests/baselines/reference/library-reference-9.trace.json b/tests/baselines/reference/library-reference-9.trace.json deleted file mode 100644 index e2fdfdc05500c..0000000000000 --- a/tests/baselines/reference/library-reference-9.trace.json +++ /dev/null @@ -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. ========" -] \ No newline at end of file diff --git a/tests/baselines/reference/library-reference-9.types b/tests/baselines/reference/library-reference-9.types deleted file mode 100644 index 8df2179e24995..0000000000000 --- a/tests/baselines/reference/library-reference-9.types +++ /dev/null @@ -1,16 +0,0 @@ -=== /base/src/foo.ts === -/// -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 - diff --git a/tests/baselines/reference/moduleResolutionWithExtensions.trace.json b/tests/baselines/reference/moduleResolutionWithExtensions.trace.json index 6e6589d7c1f8a..7dc9e8c104b8c 100644 --- a/tests/baselines/reference/moduleResolutionWithExtensions.trace.json +++ b/tests/baselines/reference/moduleResolutionWithExtensions.trace.json @@ -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'. ========" ] \ No newline at end of file diff --git a/tests/baselines/reference/moduleResolutionWithSymlinks.errors.txt b/tests/baselines/reference/moduleResolutionWithSymlinks.errors.txt new file mode 100644 index 0000000000000..b51933902a469 --- /dev/null +++ b/tests/baselines/reference/moduleResolutionWithSymlinks.errors.txt @@ -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 } + \ No newline at end of file diff --git a/tests/baselines/reference/moduleResolutionWithSymlinks.symbols b/tests/baselines/reference/moduleResolutionWithSymlinks.symbols deleted file mode 100644 index ea73755deefe6..0000000000000 --- a/tests/baselines/reference/moduleResolutionWithSymlinks.symbols +++ /dev/null @@ -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)) - diff --git a/tests/baselines/reference/moduleResolutionWithSymlinks.trace.json b/tests/baselines/reference/moduleResolutionWithSymlinks.trace.json index 7f1c289018096..f3bfae4b17346 100644 --- a/tests/baselines/reference/moduleResolutionWithSymlinks.trace.json +++ b/tests/baselines/reference/moduleResolutionWithSymlinks.trace.json @@ -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. ========" ] \ No newline at end of file diff --git a/tests/baselines/reference/moduleResolutionWithSymlinks.types b/tests/baselines/reference/moduleResolutionWithSymlinks.types deleted file mode 100644 index 8344adbe81781..0000000000000 --- a/tests/baselines/reference/moduleResolutionWithSymlinks.types +++ /dev/null @@ -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 - diff --git a/tests/baselines/reference/pathMappingBasedModuleResolution3_node.trace.json b/tests/baselines/reference/pathMappingBasedModuleResolution3_node.trace.json index af5e20a3cc30c..ab7210d7d020c 100644 --- a/tests/baselines/reference/pathMappingBasedModuleResolution3_node.trace.json +++ b/tests/baselines/reference/pathMappingBasedModuleResolution3_node.trace.json @@ -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'. ========" ] \ No newline at end of file diff --git a/tests/baselines/reference/pathMappingBasedModuleResolution4_node.trace.json b/tests/baselines/reference/pathMappingBasedModuleResolution4_node.trace.json index af5e20a3cc30c..ab7210d7d020c 100644 --- a/tests/baselines/reference/pathMappingBasedModuleResolution4_node.trace.json +++ b/tests/baselines/reference/pathMappingBasedModuleResolution4_node.trace.json @@ -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'. ========" ] \ No newline at end of file diff --git a/tests/baselines/reference/pathMappingBasedModuleResolution5_node.trace.json b/tests/baselines/reference/pathMappingBasedModuleResolution5_node.trace.json index cebd59f01b41a..2efeefa24e5ca 100644 --- a/tests/baselines/reference/pathMappingBasedModuleResolution5_node.trace.json +++ b/tests/baselines/reference/pathMappingBasedModuleResolution5_node.trace.json @@ -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'. ========" ] \ No newline at end of file diff --git a/tests/baselines/reference/pathMappingBasedModuleResolution6_node.trace.json b/tests/baselines/reference/pathMappingBasedModuleResolution6_node.trace.json index 7c5e76a28474e..28e51a119152d 100644 --- a/tests/baselines/reference/pathMappingBasedModuleResolution6_node.trace.json +++ b/tests/baselines/reference/pathMappingBasedModuleResolution6_node.trace.json @@ -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'. ========" ] \ No newline at end of file diff --git a/tests/baselines/reference/pathMappingBasedModuleResolution7_node.trace.json b/tests/baselines/reference/pathMappingBasedModuleResolution7_node.trace.json index 99d4bf244db23..6be7d349fed69 100644 --- a/tests/baselines/reference/pathMappingBasedModuleResolution7_node.trace.json +++ b/tests/baselines/reference/pathMappingBasedModuleResolution7_node.trace.json @@ -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'. ========" ] \ No newline at end of file diff --git a/tests/baselines/reference/shorthandOfExportedEntity01_targetES2015_CommonJS.js b/tests/baselines/reference/shorthandOfExportedEntity01_targetES2015_CommonJS.js new file mode 100644 index 0000000000000..9e057951b3a66 --- /dev/null +++ b/tests/baselines/reference/shorthandOfExportedEntity01_targetES2015_CommonJS.js @@ -0,0 +1,21 @@ +//// [shorthandOfExportedEntity01_targetES2015_CommonJS.ts] + +export const test = "test"; + +export function foo () { + const x = { test }; +} + + +//// [shorthandOfExportedEntity01_targetES2015_CommonJS.js] +"use strict"; +exports.test = "test"; +function foo() { + const x = { test: exports.test }; +} +exports.foo = foo; + + +//// [shorthandOfExportedEntity01_targetES2015_CommonJS.d.ts] +export declare const test: string; +export declare function foo(): void; diff --git a/tests/baselines/reference/shorthandOfExportedEntity01_targetES2015_CommonJS.symbols b/tests/baselines/reference/shorthandOfExportedEntity01_targetES2015_CommonJS.symbols new file mode 100644 index 0000000000000..341d40bc5429e --- /dev/null +++ b/tests/baselines/reference/shorthandOfExportedEntity01_targetES2015_CommonJS.symbols @@ -0,0 +1,13 @@ +=== tests/cases/compiler/shorthandOfExportedEntity01_targetES2015_CommonJS.ts === + +export const test = "test"; +>test : Symbol(test, Decl(shorthandOfExportedEntity01_targetES2015_CommonJS.ts, 1, 12)) + +export function foo () { +>foo : Symbol(foo, Decl(shorthandOfExportedEntity01_targetES2015_CommonJS.ts, 1, 27)) + + const x = { test }; +>x : Symbol(x, Decl(shorthandOfExportedEntity01_targetES2015_CommonJS.ts, 4, 7)) +>test : Symbol(test, Decl(shorthandOfExportedEntity01_targetES2015_CommonJS.ts, 4, 13)) +} + diff --git a/tests/baselines/reference/shorthandOfExportedEntity01_targetES2015_CommonJS.types b/tests/baselines/reference/shorthandOfExportedEntity01_targetES2015_CommonJS.types new file mode 100644 index 0000000000000..dcc04015993d3 --- /dev/null +++ b/tests/baselines/reference/shorthandOfExportedEntity01_targetES2015_CommonJS.types @@ -0,0 +1,15 @@ +=== tests/cases/compiler/shorthandOfExportedEntity01_targetES2015_CommonJS.ts === + +export const test = "test"; +>test : string +>"test" : string + +export function foo () { +>foo : () => void + + const x = { test }; +>x : { test: string; } +>{ test } : { test: string; } +>test : string +} + diff --git a/tests/baselines/reference/shorthandOfExportedEntity02_targetES5_CommonJS.js b/tests/baselines/reference/shorthandOfExportedEntity02_targetES5_CommonJS.js new file mode 100644 index 0000000000000..764739705c4e1 --- /dev/null +++ b/tests/baselines/reference/shorthandOfExportedEntity02_targetES5_CommonJS.js @@ -0,0 +1,21 @@ +//// [shorthandOfExportedEntity02_targetES5_CommonJS.ts] + +export const test = "test"; + +export function foo () { + const x = { test }; +} + + +//// [shorthandOfExportedEntity02_targetES5_CommonJS.js] +"use strict"; +exports.test = "test"; +function foo() { + var x = { test: exports.test }; +} +exports.foo = foo; + + +//// [shorthandOfExportedEntity02_targetES5_CommonJS.d.ts] +export declare const test: string; +export declare function foo(): void; diff --git a/tests/baselines/reference/shorthandOfExportedEntity02_targetES5_CommonJS.symbols b/tests/baselines/reference/shorthandOfExportedEntity02_targetES5_CommonJS.symbols new file mode 100644 index 0000000000000..3b0b40922c9a8 --- /dev/null +++ b/tests/baselines/reference/shorthandOfExportedEntity02_targetES5_CommonJS.symbols @@ -0,0 +1,13 @@ +=== tests/cases/compiler/shorthandOfExportedEntity02_targetES5_CommonJS.ts === + +export const test = "test"; +>test : Symbol(test, Decl(shorthandOfExportedEntity02_targetES5_CommonJS.ts, 1, 12)) + +export function foo () { +>foo : Symbol(foo, Decl(shorthandOfExportedEntity02_targetES5_CommonJS.ts, 1, 27)) + + const x = { test }; +>x : Symbol(x, Decl(shorthandOfExportedEntity02_targetES5_CommonJS.ts, 4, 7)) +>test : Symbol(test, Decl(shorthandOfExportedEntity02_targetES5_CommonJS.ts, 4, 13)) +} + diff --git a/tests/baselines/reference/shorthandOfExportedEntity02_targetES5_CommonJS.types b/tests/baselines/reference/shorthandOfExportedEntity02_targetES5_CommonJS.types new file mode 100644 index 0000000000000..27d16e2166f6e --- /dev/null +++ b/tests/baselines/reference/shorthandOfExportedEntity02_targetES5_CommonJS.types @@ -0,0 +1,15 @@ +=== tests/cases/compiler/shorthandOfExportedEntity02_targetES5_CommonJS.ts === + +export const test = "test"; +>test : string +>"test" : string + +export function foo () { +>foo : () => void + + const x = { test }; +>x : { test: string; } +>{ test } : { test: string; } +>test : string +} + diff --git a/tests/baselines/reference/typeReferenceDirectives1.trace.json b/tests/baselines/reference/typeReferenceDirectives1.trace.json index c936a84dcc09a..58b23783b0b9d 100644 --- a/tests/baselines/reference/typeReferenceDirectives1.trace.json +++ b/tests/baselines/reference/typeReferenceDirectives1.trace.json @@ -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. ========" diff --git a/tests/baselines/reference/typeReferenceDirectives10.trace.json b/tests/baselines/reference/typeReferenceDirectives10.trace.json index b6adaf1f513f8..61341afdab3a3 100644 --- a/tests/baselines/reference/typeReferenceDirectives10.trace.json +++ b/tests/baselines/reference/typeReferenceDirectives10.trace.json @@ -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. ========" ] \ No newline at end of file diff --git a/tests/baselines/reference/typeReferenceDirectives11.trace.json b/tests/baselines/reference/typeReferenceDirectives11.trace.json index 758858c3a9812..77f0980ffd646 100644 --- a/tests/baselines/reference/typeReferenceDirectives11.trace.json +++ b/tests/baselines/reference/typeReferenceDirectives11.trace.json @@ -2,9 +2,10 @@ "======== Resolving module './mod1' from '/mod2.ts'. ========", "Module resolution kind is not specified, using 'Classic'.", "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. ========" diff --git a/tests/baselines/reference/typeReferenceDirectives12.trace.json b/tests/baselines/reference/typeReferenceDirectives12.trace.json index ff27d63ef50a2..6794ce17deb3c 100644 --- a/tests/baselines/reference/typeReferenceDirectives12.trace.json +++ b/tests/baselines/reference/typeReferenceDirectives12.trace.json @@ -2,18 +2,26 @@ "======== Resolving module './main' from '/mod2.ts'. ========", "Module resolution kind is not specified, using 'Classic'.", "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 'Classic'.", "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. ========", "======== Resolving module './main' from '/mod1.ts'. ========", "Module resolution kind is not specified, using 'Classic'.", "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. ========" ] \ No newline at end of file diff --git a/tests/baselines/reference/typeReferenceDirectives13.trace.json b/tests/baselines/reference/typeReferenceDirectives13.trace.json index b6adaf1f513f8..61341afdab3a3 100644 --- a/tests/baselines/reference/typeReferenceDirectives13.trace.json +++ b/tests/baselines/reference/typeReferenceDirectives13.trace.json @@ -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. ========" ] \ No newline at end of file diff --git a/tests/baselines/reference/typeReferenceDirectives2.trace.json b/tests/baselines/reference/typeReferenceDirectives2.trace.json index 826abe5d51af2..93d3658447dd3 100644 --- a/tests/baselines/reference/typeReferenceDirectives2.trace.json +++ b/tests/baselines/reference/typeReferenceDirectives2.trace.json @@ -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. ========" diff --git a/tests/baselines/reference/typeReferenceDirectives3.trace.json b/tests/baselines/reference/typeReferenceDirectives3.trace.json index c936a84dcc09a..58b23783b0b9d 100644 --- a/tests/baselines/reference/typeReferenceDirectives3.trace.json +++ b/tests/baselines/reference/typeReferenceDirectives3.trace.json @@ -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. ========" diff --git a/tests/baselines/reference/typeReferenceDirectives4.trace.json b/tests/baselines/reference/typeReferenceDirectives4.trace.json index c936a84dcc09a..58b23783b0b9d 100644 --- a/tests/baselines/reference/typeReferenceDirectives4.trace.json +++ b/tests/baselines/reference/typeReferenceDirectives4.trace.json @@ -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. ========" diff --git a/tests/baselines/reference/typeReferenceDirectives5.trace.json b/tests/baselines/reference/typeReferenceDirectives5.trace.json index b6adaf1f513f8..61341afdab3a3 100644 --- a/tests/baselines/reference/typeReferenceDirectives5.trace.json +++ b/tests/baselines/reference/typeReferenceDirectives5.trace.json @@ -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. ========" ] \ No newline at end of file diff --git a/tests/baselines/reference/typeReferenceDirectives6.trace.json b/tests/baselines/reference/typeReferenceDirectives6.trace.json index c936a84dcc09a..58b23783b0b9d 100644 --- a/tests/baselines/reference/typeReferenceDirectives6.trace.json +++ b/tests/baselines/reference/typeReferenceDirectives6.trace.json @@ -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. ========" diff --git a/tests/baselines/reference/typeReferenceDirectives7.trace.json b/tests/baselines/reference/typeReferenceDirectives7.trace.json index c936a84dcc09a..58b23783b0b9d 100644 --- a/tests/baselines/reference/typeReferenceDirectives7.trace.json +++ b/tests/baselines/reference/typeReferenceDirectives7.trace.json @@ -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. ========" diff --git a/tests/baselines/reference/typeReferenceDirectives8.trace.json b/tests/baselines/reference/typeReferenceDirectives8.trace.json index bfaae056c9ee2..37fa7900a7c69 100644 --- a/tests/baselines/reference/typeReferenceDirectives8.trace.json +++ b/tests/baselines/reference/typeReferenceDirectives8.trace.json @@ -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. ========" diff --git a/tests/baselines/reference/typeReferenceDirectives9.trace.json b/tests/baselines/reference/typeReferenceDirectives9.trace.json index f4fc0937325b9..1024b0cdef3db 100644 --- a/tests/baselines/reference/typeReferenceDirectives9.trace.json +++ b/tests/baselines/reference/typeReferenceDirectives9.trace.json @@ -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. ========" ] \ No newline at end of file diff --git a/tests/baselines/reference/typingsLookup1.js b/tests/baselines/reference/typingsLookup1.js index 1f89a2277aade..3927c3db0778d 100644 --- a/tests/baselines/reference/typingsLookup1.js +++ b/tests/baselines/reference/typingsLookup1.js @@ -4,8 +4,10 @@ declare var $: { x: any }; //// [a.ts] +/// $.x; //// [a.js] +/// $.x; diff --git a/tests/baselines/reference/typingsLookup1.symbols b/tests/baselines/reference/typingsLookup1.symbols index 8a21252d1237d..73d01df511e91 100644 --- a/tests/baselines/reference/typingsLookup1.symbols +++ b/tests/baselines/reference/typingsLookup1.symbols @@ -1,10 +1,11 @@ -=== tests/cases/conformance/typings/a.ts === +=== /a.ts === +/// $.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)) diff --git a/tests/baselines/reference/typingsLookup1.trace.json b/tests/baselines/reference/typingsLookup1.trace.json new file mode 100644 index 0000000000000..83b0e91d6c7c1 --- /dev/null +++ b/tests/baselines/reference/typingsLookup1.trace.json @@ -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. ========" +] \ No newline at end of file diff --git a/tests/baselines/reference/typingsLookup1.types b/tests/baselines/reference/typingsLookup1.types index ca79a8248d5db..e1b696bf343c7 100644 --- a/tests/baselines/reference/typingsLookup1.types +++ b/tests/baselines/reference/typingsLookup1.types @@ -1,10 +1,11 @@ -=== tests/cases/conformance/typings/a.ts === +=== /a.ts === +/// $.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 diff --git a/tests/cases/compiler/commonSourceDir5.ts b/tests/cases/compiler/commonSourceDir5.ts index d181bef68fe01..7f5239976e879 100644 --- a/tests/cases/compiler/commonSourceDir5.ts +++ b/tests/cases/compiler/commonSourceDir5.ts @@ -1,6 +1,7 @@ // @outFile: concat.js // @module: amd // @moduleResolution: node + // @Filename: A:/bar.ts import {z} from "./foo"; export var x = z + z; diff --git a/tests/cases/compiler/decoratorMetadataPromise.ts b/tests/cases/compiler/decoratorMetadataPromise.ts new file mode 100644 index 0000000000000..ef55e1946ded3 --- /dev/null +++ b/tests/cases/compiler/decoratorMetadataPromise.ts @@ -0,0 +1,14 @@ +// @experimentaldecorators: true +// @emitdecoratormetadata: true +// @target: es6 + +declare const decorator: MethodDecorator; + +class A { + @decorator + async foo() {} + @decorator + async bar(): Promise { return 0; } + @decorator + baz(n: Promise): Promise { return n; } +} diff --git a/tests/cases/compiler/emitDecoratorMetadata_restArgs.ts b/tests/cases/compiler/emitDecoratorMetadata_restArgs.ts new file mode 100644 index 0000000000000..6b0741e22058a --- /dev/null +++ b/tests/cases/compiler/emitDecoratorMetadata_restArgs.ts @@ -0,0 +1,20 @@ +// @experimentaldecorators: true +// @emitdecoratormetadata: true +// @target: ES5 + +declare const MyClassDecorator: ClassDecorator; +declare const MyMethodDecorator: MethodDecorator; + +@MyClassDecorator +class A { + constructor(...args) {} + @MyMethodDecorator + method(...args) {} +} + +@MyClassDecorator +class B { + constructor(...args: number[]) {} + @MyMethodDecorator + method(...args: string[]) {} +} diff --git a/tests/cases/compiler/shorthandOfExportedEntity01_targetES2015_CommonJS.ts b/tests/cases/compiler/shorthandOfExportedEntity01_targetES2015_CommonJS.ts new file mode 100644 index 0000000000000..25328afd6ce2f --- /dev/null +++ b/tests/cases/compiler/shorthandOfExportedEntity01_targetES2015_CommonJS.ts @@ -0,0 +1,9 @@ +// @target: ES2015 +// @module: commonjs +// @declaration: true + +export const test = "test"; + +export function foo () { + const x = { test }; +} diff --git a/tests/cases/compiler/shorthandOfExportedEntity02_targetES5_CommonJS.ts b/tests/cases/compiler/shorthandOfExportedEntity02_targetES5_CommonJS.ts new file mode 100644 index 0000000000000..c7b3a2b37ecfe --- /dev/null +++ b/tests/cases/compiler/shorthandOfExportedEntity02_targetES5_CommonJS.ts @@ -0,0 +1,9 @@ +// @target: ES5 +// @module: commonjs +// @declaration: true + +export const test = "test"; + +export function foo () { + const x = { test }; +} diff --git a/tests/cases/compiler/typeReferenceDirectives1.ts b/tests/cases/compiler/typeReferenceDirectives1.ts index 2127bd13f7b0d..e17e498b9784d 100644 --- a/tests/cases/compiler/typeReferenceDirectives1.ts +++ b/tests/cases/compiler/typeReferenceDirectives1.ts @@ -1,7 +1,7 @@ // @noImplicitReferences: true // @traceResolution: true // @declaration: true -// @typesRoot: / +// @typeRoots: /types // @filename: /types/lib/index.d.ts diff --git a/tests/cases/compiler/typeReferenceDirectives10.ts b/tests/cases/compiler/typeReferenceDirectives10.ts index bf0768993c9e5..61971ba44b2ad 100644 --- a/tests/cases/compiler/typeReferenceDirectives10.ts +++ b/tests/cases/compiler/typeReferenceDirectives10.ts @@ -1,6 +1,6 @@ // @noImplicitReferences: true // @declaration: true -// @typesRoot: / +// @typeRoots: /types // @traceResolution: true // @filename: /ref.d.ts diff --git a/tests/cases/compiler/typeReferenceDirectives11.ts b/tests/cases/compiler/typeReferenceDirectives11.ts index d199277ac6229..3bbb771a6c7e9 100644 --- a/tests/cases/compiler/typeReferenceDirectives11.ts +++ b/tests/cases/compiler/typeReferenceDirectives11.ts @@ -1,6 +1,6 @@ // @noImplicitReferences: true // @declaration: true -// @typesRoot: / +// @typeRoots: /types // @traceResolution: true // @types: lib // @out: output.js diff --git a/tests/cases/compiler/typeReferenceDirectives12.ts b/tests/cases/compiler/typeReferenceDirectives12.ts index df449dc0ef9d1..7601668e8f1dd 100644 --- a/tests/cases/compiler/typeReferenceDirectives12.ts +++ b/tests/cases/compiler/typeReferenceDirectives12.ts @@ -1,6 +1,6 @@ // @noImplicitReferences: true // @declaration: true -// @typesRoot: / +// @typeRoots: /types // @traceResolution: true // @out: output.js // @module: amd diff --git a/tests/cases/compiler/typeReferenceDirectives13.ts b/tests/cases/compiler/typeReferenceDirectives13.ts index 816d419e9d540..124c31274ace4 100644 --- a/tests/cases/compiler/typeReferenceDirectives13.ts +++ b/tests/cases/compiler/typeReferenceDirectives13.ts @@ -1,6 +1,6 @@ // @noImplicitReferences: true // @declaration: true -// @typesRoot: / +// @typeRoots: /types // @traceResolution: true // @filename: /ref.d.ts diff --git a/tests/cases/compiler/typeReferenceDirectives2.ts b/tests/cases/compiler/typeReferenceDirectives2.ts index eb651728cea81..31a01a0b8e4bc 100644 --- a/tests/cases/compiler/typeReferenceDirectives2.ts +++ b/tests/cases/compiler/typeReferenceDirectives2.ts @@ -1,7 +1,7 @@ // @noImplicitReferences: true // @traceResolution: true // @declaration: true -// @typesRoot: / +// @typeRoots: /types // @types: lib // @filename: /types/lib/index.d.ts diff --git a/tests/cases/compiler/typeReferenceDirectives3.ts b/tests/cases/compiler/typeReferenceDirectives3.ts index bf81268d141c4..4c2729ab389b3 100644 --- a/tests/cases/compiler/typeReferenceDirectives3.ts +++ b/tests/cases/compiler/typeReferenceDirectives3.ts @@ -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 diff --git a/tests/cases/compiler/typeReferenceDirectives4.ts b/tests/cases/compiler/typeReferenceDirectives4.ts index 48eb8a5324a11..ac7346895ef7d 100644 --- a/tests/cases/compiler/typeReferenceDirectives4.ts +++ b/tests/cases/compiler/typeReferenceDirectives4.ts @@ -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 diff --git a/tests/cases/compiler/typeReferenceDirectives5.ts b/tests/cases/compiler/typeReferenceDirectives5.ts index 675f932da68b9..bb24b82b32466 100644 --- a/tests/cases/compiler/typeReferenceDirectives5.ts +++ b/tests/cases/compiler/typeReferenceDirectives5.ts @@ -1,7 +1,7 @@ // @noImplicitReferences: true // @traceResolution: true // @declaration: true -// @typesRoot: / +// @typeRoots: /types // @filename: /ref.d.ts export interface $ { x } diff --git a/tests/cases/compiler/typeReferenceDirectives6.ts b/tests/cases/compiler/typeReferenceDirectives6.ts index 120a743009ce2..7154963f1efa3 100644 --- a/tests/cases/compiler/typeReferenceDirectives6.ts +++ b/tests/cases/compiler/typeReferenceDirectives6.ts @@ -1,7 +1,7 @@ // @noImplicitReferences: true // @traceResolution: true // @declaration: true -// @typesRoot: / +// @typeRoots: /types // $ comes from type declaration file - type reference directive should be added diff --git a/tests/cases/compiler/typeReferenceDirectives7.ts b/tests/cases/compiler/typeReferenceDirectives7.ts index f18fed37741d7..79d42fa701853 100644 --- a/tests/cases/compiler/typeReferenceDirectives7.ts +++ b/tests/cases/compiler/typeReferenceDirectives7.ts @@ -1,7 +1,7 @@ // @noImplicitReferences: true // @traceResolution: true // @declaration: true -// @typesRoot: / +// @typeRoots: /types // local value shadows global - no need to add type reference directive diff --git a/tests/cases/compiler/typeReferenceDirectives8.ts b/tests/cases/compiler/typeReferenceDirectives8.ts index 2465d2afb10db..c7725a3aab1ab 100644 --- a/tests/cases/compiler/typeReferenceDirectives8.ts +++ b/tests/cases/compiler/typeReferenceDirectives8.ts @@ -1,6 +1,6 @@ // @noImplicitReferences: true // @declaration: true -// @typesRoot: / +// @typeRoots: /types // @traceResolution: true // @types: lib diff --git a/tests/cases/compiler/typeReferenceDirectives9.ts b/tests/cases/compiler/typeReferenceDirectives9.ts index eb8d6abaef1c0..610c7173c898b 100644 --- a/tests/cases/compiler/typeReferenceDirectives9.ts +++ b/tests/cases/compiler/typeReferenceDirectives9.ts @@ -1,6 +1,6 @@ // @noImplicitReferences: true // @declaration: true -// @typesRoot: / +// @typeRoots: /types // @traceResolution: true // @filename: /types/lib/index.d.ts diff --git a/tests/cases/conformance/references/library-reference-1.ts b/tests/cases/conformance/references/library-reference-1.ts index ca25441521fcc..c6b6cea36efab 100644 --- a/tests/cases/conformance/references/library-reference-1.ts +++ b/tests/cases/conformance/references/library-reference-1.ts @@ -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 /// $.foo(); diff --git a/tests/cases/conformance/references/library-reference-10.ts b/tests/cases/conformance/references/library-reference-10.ts index 11e065b0a7db9..bc9ec99edcf56 100644 --- a/tests/cases/conformance/references/library-reference-10.ts +++ b/tests/cases/conformance/references/library-reference-10.ts @@ -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 /// $.foo(); diff --git a/tests/cases/conformance/references/library-reference-13.ts b/tests/cases/conformance/references/library-reference-13.ts index a96437f9b2c3b..92b4b259ba4a9 100644 --- a/tests/cases/conformance/references/library-reference-13.ts +++ b/tests/cases/conformance/references/library-reference-13.ts @@ -6,7 +6,8 @@ // @filename: /a/tsconfig.json { "compilerOptions": { - "types": [ "jquery" ] + "types": [ "jquery" ], + "typeRoots": ["/a/types"] } } diff --git a/tests/cases/conformance/references/library-reference-14.ts b/tests/cases/conformance/references/library-reference-14.ts index 53bca2ab40d16..fa4a63cfcc034 100644 --- a/tests/cases/conformance/references/library-reference-14.ts +++ b/tests/cases/conformance/references/library-reference-14.ts @@ -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 }; diff --git a/tests/cases/conformance/references/library-reference-15.ts b/tests/cases/conformance/references/library-reference-15.ts index dd2179d1af660..417012a4539c9 100644 --- a/tests/cases/conformance/references/library-reference-15.ts +++ b/tests/cases/conformance/references/library-reference-15.ts @@ -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 \ No newline at end of file diff --git a/tests/cases/conformance/references/library-reference-2.ts b/tests/cases/conformance/references/library-reference-2.ts index d8975664428cb..9ac7cd4f4d321 100644 --- a/tests/cases/conformance/references/library-reference-2.ts +++ b/tests/cases/conformance/references/library-reference-2.ts @@ -1,6 +1,7 @@ // @noImplicitReferences: true // @traceResolution: true -// @typesRoot: / +// @typeRoots: /types +// @currentDirectory: test // package.json in a primary reference can refer to another file diff --git a/tests/cases/conformance/references/library-reference-3.ts b/tests/cases/conformance/references/library-reference-3.ts index 1af6df89d19d6..88ef916eaaeba 100644 --- a/tests/cases/conformance/references/library-reference-3.ts +++ b/tests/cases/conformance/references/library-reference-3.ts @@ -1,6 +1,6 @@ // @noImplicitReferences: true // @traceResolution: true -// @typesRoot: /src +// @currentDirectory: /src // Secondary references are possible diff --git a/tests/cases/conformance/references/library-reference-4.ts b/tests/cases/conformance/references/library-reference-4.ts index 92f1b4008beb6..9a615f470efff 100644 --- a/tests/cases/conformance/references/library-reference-4.ts +++ b/tests/cases/conformance/references/library-reference-4.ts @@ -1,6 +1,7 @@ // @noImplicitReferences: true // @traceResolution: true -// @typesRoot: /src +// @typeRoots: /src +// @currentDirectory: test // Secondary references may be duplicated if they agree in content diff --git a/tests/cases/conformance/references/library-reference-5.ts b/tests/cases/conformance/references/library-reference-5.ts index 1fe327a1c693a..dd72da36dd0a3 100644 --- a/tests/cases/conformance/references/library-reference-5.ts +++ b/tests/cases/conformance/references/library-reference-5.ts @@ -1,6 +1,7 @@ // @noImplicitReferences: true // @traceResolution: true // @currentDirectory: / +// @typeRoots: types // Secondary references may not be duplicated if they disagree in content diff --git a/tests/cases/conformance/references/library-reference-6.ts b/tests/cases/conformance/references/library-reference-6.ts index a746262dd73b1..13ad382e63654 100644 --- a/tests/cases/conformance/references/library-reference-6.ts +++ b/tests/cases/conformance/references/library-reference-6.ts @@ -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 diff --git a/tests/cases/conformance/references/library-reference-8.ts b/tests/cases/conformance/references/library-reference-8.ts index 9de93776989b5..1c4ab76f8a10e 100644 --- a/tests/cases/conformance/references/library-reference-8.ts +++ b/tests/cases/conformance/references/library-reference-8.ts @@ -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 /// declare var alpha: { a: string }; -// @filename: /types/beta/index.d.ts +// @filename: /test/types/beta/index.d.ts /// declare var beta: { b: string }; -// @filename: /foo.ts +// @filename: /test/foo.ts /// /// var x: string = alpha.a + beta.b; diff --git a/tests/cases/conformance/references/library-reference-9.ts b/tests/cases/conformance/references/library-reference-9.ts deleted file mode 100644 index a187d3c23b91f..0000000000000 --- a/tests/cases/conformance/references/library-reference-9.ts +++ /dev/null @@ -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 -/// -var x: string = alpha.a; - -// @filename: /tsconfig.json -{ - "compilerOptions": { - "typesSearchPaths": [ - "./share/typelib" - ] - } -} diff --git a/tests/cases/conformance/typings/typingsLookup1.ts b/tests/cases/conformance/typings/typingsLookup1.ts index 702bd4bc21cff..555d4569af34d 100644 --- a/tests/cases/conformance/typings/typingsLookup1.ts +++ b/tests/cases/conformance/typings/typingsLookup1.ts @@ -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 +/// $.x; diff --git a/tests/cases/fourslash/codeCompletionEscaping.ts b/tests/cases/fourslash/codeCompletionEscaping.ts new file mode 100644 index 0000000000000..5061a87e5b636 --- /dev/null +++ b/tests/cases/fourslash/codeCompletionEscaping.ts @@ -0,0 +1,9 @@ +/// + +// @Filename: a.js +// @allowJs: true +////___foo; __foo;/**/ + +goTo.marker(); +verify.completionListContains("__foo", undefined, undefined, "warning"); +verify.completionListContains("___foo", undefined, undefined, "warning"); diff --git a/tests/cases/fourslash/fourslash.ts b/tests/cases/fourslash/fourslash.ts index 540a650313845..78de5b02358b4 100644 --- a/tests/cases/fourslash/fourslash.ts +++ b/tests/cases/fourslash/fourslash.ts @@ -125,7 +125,7 @@ declare namespace FourSlashInterface { completionListAllowsNewIdentifier(): void; memberListIsEmpty(): void; referencesCountIs(count: number): void; - referencesAtPositionContains(range: Range, isWriteAccess?: boolean): void; + referencesAtPositionContains(range: Range, isWriteAccess?: boolean, isDefinition?: boolean): void; signatureHelpPresent(): void; errorExistsBetweenMarkers(startMarker: string, endMarker: string): void; errorExistsAfterMarker(markerName?: string): void; diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfArrowFunction.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfArrowFunction.ts new file mode 100644 index 0000000000000..eb9980c946d30 --- /dev/null +++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfArrowFunction.ts @@ -0,0 +1,8 @@ +/// +////var [|{| "isDefinition": true |}f|] = x => x + 1; +////[|{| "isDefinition": false |}f|](12); +var firstRange = test.ranges()[0]; +goTo.position(firstRange.start, firstRange.fileName); +test.ranges().forEach(range => { + verify.referencesAtPositionContains(range, undefined, range.marker.data.isDefinition); +}); diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfBindingPattern.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfBindingPattern.ts new file mode 100644 index 0000000000000..9a30687c59e45 --- /dev/null +++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfBindingPattern.ts @@ -0,0 +1,8 @@ +/// +////const { [|{| "isDefinition": true |}x|], y } = { x: 1, y: 2 }; +////const z = [|{| "isDefinition": false |}x|]; +var firstRange = test.ranges()[0]; +goTo.position(firstRange.start, firstRange.fileName); +test.ranges().forEach(range => { + verify.referencesAtPositionContains(range, undefined, range.marker.data.isDefinition); +}); diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfClass.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfClass.ts new file mode 100644 index 0000000000000..04b1f90681a24 --- /dev/null +++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfClass.ts @@ -0,0 +1,13 @@ +/// +////class [|{| "isDefinition": true |}C|] { +//// n: number; +//// constructor() { +//// this.n = 12; +//// } +////} +////let c = new [|{| "isDefinition": false |}C|](); +var firstRange = test.ranges()[0]; +goTo.position(firstRange.start, firstRange.fileName); +test.ranges().forEach(range => { + verify.referencesAtPositionContains(range, undefined, range.marker.data.isDefinition); +}); diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfComputedProperty.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfComputedProperty.ts new file mode 100644 index 0000000000000..8896694db50b4 --- /dev/null +++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfComputedProperty.ts @@ -0,0 +1,9 @@ +/// +////let o = { ["[|{| "isDefinition": true |}foo|]"]: 12 }; +////let y = o.[|{| "isDefinition": false |}foo|]; +////let z = o['[|{| "isDefinition": false |}foo|]']; +var firstRange = test.ranges()[0]; +goTo.position(firstRange.start, firstRange.fileName); +test.ranges().forEach(range => { + verify.referencesAtPositionContains(range, undefined, range.marker.data.isDefinition); +}); diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfEnum.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfEnum.ts new file mode 100644 index 0000000000000..a5764206bce23 --- /dev/null +++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfEnum.ts @@ -0,0 +1,11 @@ +/// +////enum [|{| "isDefinition": true |}E|] { +//// First, +//// Second +////} +////let first = [|{| "isDefinition": false |}E|].First; +var firstRange = test.ranges()[0]; +goTo.position(firstRange.start, firstRange.fileName); +test.ranges().forEach(range => { + verify.referencesAtPositionContains(range, undefined, range.marker.data.isDefinition); +}); diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfExport.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfExport.ts new file mode 100644 index 0000000000000..f863af9184fc1 --- /dev/null +++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfExport.ts @@ -0,0 +1,11 @@ +/// +// @Filename: m.ts +////export var [|{| "isDefinition": true |}x|] = 12; +// @Filename: main.ts +////import { [|{| "isDefinition": true |}x|] } from "./m"; +////const y = [|{| "isDefinition": false |}x|]; +var firstRange = test.ranges()[0]; +goTo.position(firstRange.start, firstRange.fileName); +test.ranges().forEach(range => { + verify.referencesAtPositionContains(range, undefined, range.marker.data.isDefinition); +}); diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfFunction.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfFunction.ts new file mode 100644 index 0000000000000..456d953092dca --- /dev/null +++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfFunction.ts @@ -0,0 +1,9 @@ +/// +////function [|{| "isDefinition": true |}func|](x: number) { +////} +////[|{| "isDefinition": false |}func|](x) +var firstRange = test.ranges()[0]; +goTo.position(firstRange.start, firstRange.fileName); +test.ranges().forEach(range => { + verify.referencesAtPositionContains(range, undefined, range.marker.data.isDefinition); +}); diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfInterface.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfInterface.ts new file mode 100644 index 0000000000000..51d1e858185be --- /dev/null +++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfInterface.ts @@ -0,0 +1,10 @@ +/// +////interface [|{| "isDefinition": true |}I|] { +//// p: number; +////} +////let i: [|{| "isDefinition": false |}I|] = { p: 12 }; +var firstRange = test.ranges()[0]; +goTo.position(firstRange.start, firstRange.fileName); +test.ranges().forEach(range => { + verify.referencesAtPositionContains(range, undefined, range.marker.data.isDefinition); +}); diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfInterfaceClassMerge.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfInterfaceClassMerge.ts new file mode 100644 index 0000000000000..7efefa17a4b02 --- /dev/null +++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfInterfaceClassMerge.ts @@ -0,0 +1,19 @@ +/// +////interface [|{| "isDefinition": true |}Numbers|] { +//// p: number; +////} +////interface [|{| "isDefinition": true |}Numbers|] { +//// m: number; +////} +////class [|{| "isDefinition": true |}Numbers|] { +//// f(n: number) { +//// return this.p + this.m + n; +//// } +////} +////let i: [|{| "isDefinition": false |}Numbers|] = new [|{| "isDefinition": false |}Numbers|](); +////let x = i.f(i.p + i.m); +var firstRange = test.ranges()[0]; +goTo.position(firstRange.start, firstRange.fileName); +test.ranges().forEach(range => { + verify.referencesAtPositionContains(range, undefined, range.marker.data.isDefinition); +}); diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfNamespace.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfNamespace.ts new file mode 100644 index 0000000000000..86b92ec9ce729 --- /dev/null +++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfNamespace.ts @@ -0,0 +1,10 @@ +/// +////namespace [|{| "isDefinition": true |}Numbers|] { +//// export var n = 12; +////} +////let x = [|{| "isDefinition": false |}Numbers|].n + 1; +var firstRange = test.ranges()[0]; +goTo.position(firstRange.start, firstRange.fileName); +test.ranges().forEach(range => { + verify.referencesAtPositionContains(range, undefined, range.marker.data.isDefinition); +}); diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfNumberNamedProperty.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfNumberNamedProperty.ts new file mode 100644 index 0000000000000..7e3e084948f4c --- /dev/null +++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfNumberNamedProperty.ts @@ -0,0 +1,8 @@ +/// +////let o = { [|{| "isDefinition": true |}1|]: 12 }; +////let y = o[[|{| "isDefinition": false |}1|]]; +var firstRange = test.ranges()[0]; +goTo.position(firstRange.start, firstRange.fileName); +test.ranges().forEach(range => { + verify.referencesAtPositionContains(range, undefined, range.marker.data.isDefinition); +}); diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfParameter.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfParameter.ts new file mode 100644 index 0000000000000..cdb0e281d53fe --- /dev/null +++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfParameter.ts @@ -0,0 +1,9 @@ +/// +////function f([|{| "isDefinition": true |}x|]: number) { +//// return [|{| "isDefinition": false |}x|] + 1 +////} +var firstRange = test.ranges()[0]; +goTo.position(firstRange.start, firstRange.fileName); +test.ranges().forEach(range => { + verify.referencesAtPositionContains(range, undefined, range.marker.data.isDefinition); +}); diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfStringNamedProperty.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfStringNamedProperty.ts new file mode 100644 index 0000000000000..291aec90dda1c --- /dev/null +++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfStringNamedProperty.ts @@ -0,0 +1,8 @@ +/// +////let o = { "[|{| "isDefinition": true |}x|]": 12 }; +////let y = o.[|{| "isDefinition": false |}x|]; +var firstRange = test.ranges()[0]; +goTo.position(firstRange.start, firstRange.fileName); +test.ranges().forEach(range => { + verify.referencesAtPositionContains(range, undefined, range.marker.data.isDefinition); +}); diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfTypeAlias.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfTypeAlias.ts new file mode 100644 index 0000000000000..44a7c64a93a2e --- /dev/null +++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfTypeAlias.ts @@ -0,0 +1,8 @@ +/// +////type [|{| "isDefinition": true |}Alias|]= number; +////let n: [|{| "isDefinition": false |}Alias|] = 12; +var firstRange = test.ranges()[0]; +goTo.position(firstRange.start, firstRange.fileName); +test.ranges().forEach(range => { + verify.referencesAtPositionContains(range, undefined, range.marker.data.isDefinition); +}); diff --git a/tests/cases/fourslash/getOccurrencesIsDefinitionOfVariable.ts b/tests/cases/fourslash/getOccurrencesIsDefinitionOfVariable.ts new file mode 100644 index 0000000000000..8d046c67e3a89 --- /dev/null +++ b/tests/cases/fourslash/getOccurrencesIsDefinitionOfVariable.ts @@ -0,0 +1,23 @@ +/// +////var [|{| "isDefinition": true |}x|] = 0; +////var assignmentRightHandSide = [|{| "isDefinition": false |}x|]; +////var assignmentRightHandSide2 = 1 + [|{| "isDefinition": false |}x|]; +//// +////[|{| "isDefinition": false |}x|] = 1; +////[|{| "isDefinition": false |}x|] = [|{| "isDefinition": false |}x|] + [|{| "isDefinition": false |}x|]; +//// +////[|{| "isDefinition": false |}x|] == 1; +////[|{| "isDefinition": false |}x|] <= 1; +//// +////var preIncrement = ++[|{| "isDefinition": false |}x|]; +////var postIncrement = [|{| "isDefinition": false |}x|]++; +////var preDecrement = --[|{| "isDefinition": false |}x|]; +////var postDecrement = [|{| "isDefinition": false |}x|]--; +//// +////[|{| "isDefinition": false |}x|] += 1; +////[|{| "isDefinition": false |}x|] <<= 1; +var firstRange = test.ranges()[0]; +goTo.position(firstRange.start, firstRange.fileName); +test.ranges().forEach(range => { + verify.referencesAtPositionContains(range, undefined, range.marker.data.isDefinition); +}); diff --git a/tests/cases/fourslash/goToDefinitionTypeReferenceDirective.ts b/tests/cases/fourslash/goToDefinitionTypeReferenceDirective.ts index 3aaa3ab980f08..78dfa94c5e44a 100644 --- a/tests/cases/fourslash/goToDefinitionTypeReferenceDirective.ts +++ b/tests/cases/fourslash/goToDefinitionTypeReferenceDirective.ts @@ -1,6 +1,6 @@ /// -// @typesRoot: src +// @typeRoots: src/types // @Filename: src/types/lib/index.d.ts /////*0*/declare let $: {x: number}; diff --git a/tests/cases/fourslash/navigationBarJsDoc.ts b/tests/cases/fourslash/navigationBarJsDoc.ts new file mode 100644 index 0000000000000..20a235bce9505 --- /dev/null +++ b/tests/cases/fourslash/navigationBarJsDoc.ts @@ -0,0 +1,21 @@ +/// + +// @Filename: foo.js +/////** @typedef {(number|string)} NumberLike */ +/////** @typedef {(string|number)} */ +////const x = 0; + +verify.navigationBar([ + { + "text": "NumberLike", + "kind": "type" + }, + { + "text": "x", + "kind": "type" + }, + { + "text": "x", + "kind": "var" + } +]); diff --git a/tests/cases/fourslash/salsaMethodsOnAssignedFunctionExpressions.ts b/tests/cases/fourslash/salsaMethodsOnAssignedFunctionExpressions.ts new file mode 100644 index 0000000000000..a73207c01d22e --- /dev/null +++ b/tests/cases/fourslash/salsaMethodsOnAssignedFunctionExpressions.ts @@ -0,0 +1,17 @@ +/// +// @allowJs: true +// @Filename: something.js +////var C = function () { } +/////** +//// * The prototype method. +//// * @param {string} a Parameter definition. +//// */ +////function f(a) {} +////C.prototype.m = f; +//// +////var x = new C(); +////x/*1*/./*2*/m(); +goTo.marker('1'); +verify.quickInfoIs('var x: {\n m: (a: string) => void;\n}'); +goTo.marker('2'); +verify.completionListContains('m', '(property) C.m: (a: string) => void', 'The prototype method.'); diff --git a/tests/cases/fourslash/shims-pp/goToDefinitionTypeReferenceDirective.ts b/tests/cases/fourslash/shims-pp/goToDefinitionTypeReferenceDirective.ts index 3aaa3ab980f08..78dfa94c5e44a 100644 --- a/tests/cases/fourslash/shims-pp/goToDefinitionTypeReferenceDirective.ts +++ b/tests/cases/fourslash/shims-pp/goToDefinitionTypeReferenceDirective.ts @@ -1,6 +1,6 @@ /// -// @typesRoot: src +// @typeRoots: src/types // @Filename: src/types/lib/index.d.ts /////*0*/declare let $: {x: number}; diff --git a/tests/cases/fourslash/shims/goToDefinitionTypeReferenceDirective.ts b/tests/cases/fourslash/shims/goToDefinitionTypeReferenceDirective.ts index 3aaa3ab980f08..dc2fc356c57aa 100644 --- a/tests/cases/fourslash/shims/goToDefinitionTypeReferenceDirective.ts +++ b/tests/cases/fourslash/shims/goToDefinitionTypeReferenceDirective.ts @@ -1,6 +1,6 @@ -/// +/// -// @typesRoot: src +// @typeRoots: src/types // @Filename: src/types/lib/index.d.ts /////*0*/declare let $: {x: number}; diff --git a/tests/cases/unittests/commandLineParsing.ts b/tests/cases/unittests/commandLineParsing.ts index 8212ff03da48c..095f912ac1c95 100644 --- a/tests/cases/unittests/commandLineParsing.ts +++ b/tests/cases/unittests/commandLineParsing.ts @@ -216,10 +216,23 @@ namespace ts { file: undefined, start: undefined, length: undefined, - }, { - messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'dom', 'webworker', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory'", - category: ts.Diagnostics.Argument_for_0_option_must_be_Colon_1.category, - code: ts.Diagnostics.Argument_for_0_option_must_be_Colon_1.code, + }], + fileNames: ["0.ts"], + options: { + lib: [] + } + }); + }); + + it("Parse empty string of --lib ", () => { + // 0.ts --lib + // This test is an error because the empty string is falsey + assertParseResult(["0.ts", "--lib", ""], + { + errors: [{ + messageText: "Compiler option 'lib' expects an argument.", + category: ts.Diagnostics.Compiler_option_0_expects_an_argument.category, + code: ts.Diagnostics.Compiler_option_0_expects_an_argument.code, file: undefined, start: undefined, @@ -232,6 +245,19 @@ namespace ts { }); }); + it("Parse immediately following command line argument of --lib ", () => { + // 0.ts --lib + assertParseResult(["0.ts", "--lib", "--sourcemap"], + { + errors: [], + fileNames: ["0.ts"], + options: { + lib: [], + sourceMap: true + } + }); + }); + it("Parse --lib option with extra comma ", () => { // --lib es5, es7 0.ts assertParseResult(["--lib", "es5,", "es7", "0.ts"], diff --git a/tests/cases/unittests/moduleResolution.ts b/tests/cases/unittests/moduleResolution.ts index ab5eddc0997c9..16fc7df8d70da 100644 --- a/tests/cases/unittests/moduleResolution.ts +++ b/tests/cases/unittests/moduleResolution.ts @@ -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, diff --git a/tests/cases/unittests/reuseProgramStructure.ts b/tests/cases/unittests/reuseProgramStructure.ts index 6ab90595f9f70..b8a36baf824ad 100644 --- a/tests/cases/unittests/reuseProgramStructure.ts +++ b/tests/cases/unittests/reuseProgramStructure.ts @@ -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("/// ", "", "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 } });